-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathA股三维度数据自动化分析报告.html
145 lines (113 loc) · 669 KB
/
A股三维度数据自动化分析报告.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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="author" content="纵横资本" />
<meta name="date" content="2021-07-18" />
<title>A股资本市场数据与投资策略支持</title>
<script src="data:application/javascript;base64,Ly8gUGFuZG9jIDIuOSBhZGRzIGF0dHJpYnV0ZXMgb24gYm90aCBoZWFkZXIgYW5kIGRpdi4gV2UgcmVtb3ZlIHRoZSBmb3JtZXIgKHRvCi8vIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgUGFuZG9jIDwgMi44KS4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKGUpIHsKICB2YXIgaHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkaXYuc2VjdGlvbltjbGFzcyo9J2xldmVsJ10gPiA6Zmlyc3QtY2hpbGQiKTsKICB2YXIgaSwgaCwgYTsKICBmb3IgKGkgPSAwOyBpIDwgaHMubGVuZ3RoOyBpKyspIHsKICAgIGggPSBoc1tpXTsKICAgIGlmICghL15oWzEtNl0kL2kudGVzdChoLnRhZ05hbWUpKSBjb250aW51ZTsgIC8vIGl0IHNob3VsZCBiZSBhIGhlYWRlciBoMS1oNgogICAgYSA9IGguYXR0cmlidXRlczsKICAgIHdoaWxlIChhLmxlbmd0aCA+IDApIGgucmVtb3ZlQXR0cmlidXRlKGFbMF0ubmFtZSk7CiAgfQp9KTsK"></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCFlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQgPSBldmFsKGNvZGUpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBpbml0U2l6aW5nKGVsKSB7CiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsKICAgIGlmICghc2l6aW5nKQogICAgICByZXR1cm47CgogICAgdmFyIGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sd2lkZ2V0X2NvbnRhaW5lciIpOwogICAgaWYgKCFjZWwpCiAgICAgIHJldHVybjsKCiAgICBpZiAodHlwZW9mKHNpemluZy5wYWRkaW5nKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZyA9IHBhZGRpbmdUb0Nzcyh1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKSk7CiAgICB9CgogICAgaWYgKHNpemluZy5maWxsKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgaWYgKGNlbCkgewogICAgICAgIGNlbC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOwogICAgICAgIGNlbC5zdHlsZS50b3AgPSBwYWQudG9wICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUucmlnaHQgPSBwYWQucmlnaHQgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUubGVmdCA9IHBhZC5sZWZ0ICsgInB4IjsKICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CgogICAgfSBlbHNlIHsKICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOwogICAgICBlbC5zdHlsZS5oZWlnaHQgPSBweChzaXppbmcuaGVpZ2h0KTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwogICAgfQogIH0KCiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIG1ldGhvZHMKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgewogICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbChzY29wZSwgIi4iICsgdGhpcy5uYW1lKTsKICAgIH0sCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgewogICAgICB2YXIgJGVsID0gJChlbCk7CgogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOwoKICAgICAgLy8gQWRkIGFsbCB0aGVzZSBlcnJvciBjbGFzc2VzLCBhcyBTaGlueSBkb2VzCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOwogICAgICBpZiAoZXJyLnR5cGUgIT09IG51bGwpIHsKICAgICAgICAvLyB1c2UgdGhlIGNsYXNzZXMgb2YgdGhlIGVycm9yIGNvbmRpdGlvbiBhcyBDU1MgY2xhc3MgbmFtZXMKICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgIHJldHVybiBlcnJDbGFzcyArICItIiArIHR5cGU7CiAgICAgICAgfSkuam9pbigiICIpOwogICAgICB9CiAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiIGh0bWx3aWRnZXRzLWVycm9yIjsKCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQKICAgICAgLy8gYW5kIGFkZCBhbiBpbmxpbmUgZXJyb3IuCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmNzcygiZGlzcGxheSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgICRlbC5oaWRlKCk7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yU3BhbiA9ICQoIjxzcGFuPiIpLmFkZENsYXNzKGVyckNsYXNzKTsKICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvclNwYW4pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7CiAgICAgICAgLy8gSWYgYmxvY2ssIGFkZCBhbiBlcnJvciBqdXN0IGFmdGVyIHRoZSBlbCwgc2V0IHZpc2liaWxpdHk6bm9uZSBvbiB0aGUKICAgICAgICAvLyBlbCwgYW5kIHBvc2l0aW9uIHRoZSBlcnJvciB0byBiZSBvbiB0b3Agb2YgdGhlIGVsLgogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuCiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikKICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UKICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgc2Nyb2xsYmFycyB0byBhcHBlYXIgYW5kIG1ha2luZyBpdCBpbXBvc3NpYmxlIGZvcgogICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB0byBzaHJpbms7IHNvIHVzZSBtYXgtd2lkdGggaW5zdGVhZAogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgZXJyb3JEaXYudGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOwoKICAgICAgICAgIC8vIFJlYWxseSBkdW1iIHdheSB0byBrZWVwIHRoZSBzaXplL3Bvc2l0aW9uIG9mIHRoZSBlcnJvciBpbiBzeW5jIHdpdGgKICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuCiAgICAgICAgICB2YXIgaW50SWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFlcnJvckRpdlswXS5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yRGl2CiAgICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwogICAgICB2YXIgZGlzcGxheSA9ICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgIGlmIChkaXNwbGF5KQogICAgICAgICAgJGVsLmNzcygiZGlzcGxheSIsIGRpc3BsYXkpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7CiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJpbmhlcml0Iik7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfQogICAgfSwKICAgIHNpemluZzoge30KICB9OwoKICAvLyBDYWxsZWQgYnkgd2lkZ2V0IGJpbmRpbmdzIHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUgb2Ygd2lkZ2V0LiBUaGUgZGVmaW5pdGlvbgogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgLy8gLSBuYW1lIChyZXF1aXJlZCkgLSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBiaW5kaW5nIG5hbWUsIHdoaWNoIHdpbGwgYmUKICAvLyAgIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGUgQ1NTIGNsYXNzbmFtZSB0byBsb29rIGZvci4KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIHdpZGdldCBlbGVtZW50OyBpZiBhIHZhbHVlIGlzIHJldHVybmVkLCBpdCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgdGhpcmQKICAvLyAgIHZhbHVlIHRvIHJlbmRlclZhbHVlLgogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlCiAgLy8gICBjYWxsZWQgd2l0aCBkYXRhLiBTdGF0aWMgY29udGV4dHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgZWxlbWVudDsgU2hpbnkgYXBwcyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlcgogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4KICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0ID0gZnVuY3Rpb24oZGVmaW5pdGlvbikgewogICAgaWYgKCFkZWZpbml0aW9uLm5hbWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgfQogICAgaWYgKCFkZWZpbml0aW9uLnR5cGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBvdXRwdXQgd2lkZ2V0cwogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgd2lkZ2V0IHR5cGUgJyIgKyBkZWZpbml0aW9uLnR5cGUgKyAiJyIpOwogICAgfQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lCgogICAgLy8gU3VwcG9ydCBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMuIE9sZC1zdHlsZSBjbGFzcy1ib3VuZAogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YKICAgIC8vIHdpZGdldDsgdGhlIHJlbmRlclZhbHVlIGFuZCByZXNpemUgbWV0aG9kcyBvbiBzdWNoIHdpZGdldCBvYmplY3RzCiAgICAvLyB0YWtlIGVsIGFuZCBpbnN0YW5jZSBhcmd1bWVudHMsIGJlY2F1c2UgdGhlIHdpZGdldCBvYmplY3QgY2FuJ3QKICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQKICAgIC8vIG9iamVjdCBwZXIgd2lkZ2V0IGluc3RhbmNlOyB0aGUgZGVmaW5pdGlvbiB0aGF0J3MgcGFzc2VkIGluIGRvZXNuJ3QKICAgIC8vIHByb3ZpZGUgcmVuZGVyVmFsdWUgb3IgcmVzaXplIG1ldGhvZHMgYXQgYWxsLCBqdXN0IHRoZSBzaW5nbGUgbWV0aG9kCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpCiAgICAvLyB3aGljaCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhhcyByZW5kZXJWYWx1ZSh4KSBhbmQgcmVzaXplKHcsIGgpLgogICAgLy8gVGhpcyBlbmFibGVzIGEgZmFyIG1vcmUgbmF0dXJhbCBwcm9ncmFtbWluZyBzdHlsZSBmb3IgdGhlIHdpZGdldAogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUKICAgIC8vIGluc3RhbmNlIGZpZWxkcyBvciBmdW5jdGlvbmFsLXN0eWxlIGNsb3N1cmUgdmFyaWFibGVzIChJIGd1ZXNzIHRoaXMKICAgIC8vIGlzIGluIGNvbnRyYXN0IHRvIHdoYXQgY2FuIG9ubHkgYmUgY2FsbGVkIEMtc3R5bGUgcHNldWRvLU9PIHdoaWNoIGlzCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuCiAgICBpZiAoZGVmaW5pdGlvbi5mYWN0b3J5KSB7CiAgICAgIGRlZmluaXRpb24gPSBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZpbml0aW9uKTsKICAgIH0KCiAgICBpZiAoIWRlZmluaXRpb24ucmVuZGVyVmFsdWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsKICAgIH0KCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24KICAgIC8vIHNjaGVtZS4gV2UgYWxzbyB1c2UgdGhpcyBzY2hlbWUgZm9yIFNoaW55IGFwcHMvZG9jdW1lbnRzIHRoYXQgYWxzbwogICAgLy8gY29udGFpbiBzdGF0aWMgd2lkZ2V0cy4KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICB2YXIgc3RhdGljQmluZGluZyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBzdXBlcmZ1bmMoc2NvcGUpOwogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZAogICAgICAgIHJldHVybiBmaWx0ZXJCeUNsYXNzKHJlc3VsdHMsICJodG1sLXdpZGdldC1vdXRwdXQiLCBmYWxzZSk7CiAgICAgIH07CiAgICB9KTsKICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzLnB1c2goc3RhdGljQmluZGluZyk7CgogICAgaWYgKHNoaW55TW9kZSkgewogICAgICAvLyBTaGlueSBpcyBydW5uaW5nLiBSZWdpc3RlciB0aGUgZGVmaW5pdGlvbiB3aXRoIGFuIG91dHB1dCBiaW5kaW5nLgogICAgICAvLyBUaGUgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBub3QgYmUgdGhlIG91dHB1dCBiaW5kaW5nLCBpbnN0ZWFkCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlCiAgICAgIC8vIGRlZmluaXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBmb29saXNobHkgdXNlZCB0aGUgc2FtZSBtZXRob2QKICAgICAgLy8gbmFtZSAocmVuZGVyVmFsdWUpIGZvciBodG1sd2lkZ2V0cyBkZWZpbml0aW9uIGFuZCBTaGlueSBiaW5kaW5ncwogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQogICAgICAvLyBiaW5kaW5ncyByZWNlaXZlIGRhdGEgdGhhdCBpbmNsdWRlcyBsb3RzIG9mIG1ldGFkYXRhIHRoYXQgaXQKICAgICAgLy8gc3RyaXBzIG9mZiBiZWZvcmUgY2FsbGluZyBodG1sd2lkZ2V0cyByZW5kZXJWYWx1ZSkuIFdlIGNhbid0CiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bAogICAgICAvLyB0byBjYWxsIHRoaXMucmVuZGVyVmFsdWUoKSBmcm9tIGluc2lkZSBvZiByZXNpemUoKSwgYW5kIGlmCiAgICAgIC8vIHdlJ3JlIG5vdCBkZWxlZ2F0aW5nLCB0aGVuIHRoYXQgY2FsbCB3aWxsIGdvIHRvIHRoZSBTaGlueQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyB3aXRoIGRlZmluaXRpb24sIHdpdGhvdXQgbXV0YXRpbmcgZWl0aGVyLgogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwoKICAgICAgLy8gVGhpcyBvYmplY3Qgd2lsbCBiZSBvdXIgYWN0dWFsIFNoaW55IGJpbmRpbmcuCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOwoKICAgICAgLy8gV2l0aCBhIGZldyBleGNlcHRpb25zLCB3ZSdsbCB3YW50IHRvIHNpbXBseSB1c2UgdGhlIGJpbmRpbmdEZWYncwogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCiAgICAgIC8vIFNoaW55J3MgZGVmYXVsdHMuIE5PVEU6IElmIFNoaW55J3Mgb3V0cHV0IGJpbmRpbmdzIGdhaW4gYWRkaXRpb25hbAogICAgICAvLyBtZXRob2RzIGluIHRoZSBmdXR1cmUsIGFuZCB3ZSB3YW50IHRoZW0gdG8gYmUgb3ZlcnJpZGVhYmxlIGJ5CiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMKICAgICAgLy8gbGlzdC4KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiZ2V0SWQiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAicmVuZGVyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJzaG93UHJvZ3Jlc3MiKTsKCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQogICAgICAvLyB3YW50IHRvIGFjdHVhbGx5IGRlY29yYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgYmluZGluZ0RlZiBtZXRob2RzLgoKICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gYmluZGluZ0RlZi5maW5kKHNjb3BlKTsKCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgdmFyIGR5bmFtaWNSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoIi5odG1sLXdpZGdldC1vdXRwdXQiKTsKCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQogICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAvLyBTaW5jZSB0aGVyZSBtaWdodCBiZSBsb3RzIG9mIGRpZmZlcmVudCBodG1sd2lkZ2V0cyBiaW5kaW5ncywgd2UKICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQogICAgICAgIC8vIHRpbWVzLgogICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gZHluYW1pY1Jlc3VsdHMubGVuZ3RoKQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsKCiAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICB9OwoKICAgICAgLy8gV3JhcCByZW5kZXJWYWx1ZSB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXNuJ3QKICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KCiAgICAgIHNoaW55QmluZGluZy5yZW5kZXJWYWx1ZSA9IGZ1bmN0aW9uKGVsLCBkYXRhKSB7CiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmV2YWxzICYmIGkgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFiaW5kaW5nRGVmLnJlbmRlck9uTnVsbFZhbHVlKSB7CiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgIGluaXRTaXppbmcoZWwpOwoKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiLCB0cnVlKTsKICAgICAgICAgIGlmIChiaW5kaW5nRGVmLmluaXRpYWxpemUpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSwgW2VsLCBkYXRhLnhdKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHsKICAgICAgICAgICAgdzogc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgfTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCgogIGZ1bmN0aW9uIGhhc19qUXVlcnkzKCkgewogICAgaWYgKCF3aW5kb3cualF1ZXJ5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciAkdmVyc2lvbiA9IHdpbmRvdy5qUXVlcnkuZm4uanF1ZXJ5OwogICAgdmFyICRtYWpvcl92ZXJzaW9uID0gcGFyc2VJbnQoJHZlcnNpb24uc3BsaXQoIi4iKVswXSk7CiAgICByZXR1cm4gJG1ham9yX3ZlcnNpb24gPj0gMzsKICB9CgogIC8qCiAgLyBTaGlueSAxLjQgYnVtcGVkIGpRdWVyeSBmcm9tIDEueCB0byAzLnggd2hpY2ggbWVhbnMgalF1ZXJ5J3MKICAvIG9uLXJlYWR5IGhhbmRsZXIgKGkuZS4sICQoZm4pKSBpcyBub3cgYXN5bmNyb25vdXMgKGkuZS4sIGl0IG5vdwogIC8gcmVhbGx5IG1lYW5zICQoc2V0VGltZW91dChmbikpLgogIC8gaHR0cHM6Ly9qcXVlcnkuY29tL3VwZ3JhZGUtZ3VpZGUvMy4wLyNicmVha2luZy1jaGFuZ2UtZG9jdW1lbnQtcmVhZHktaGFuZGxlcnMtYXJlLW5vdy1hc3luY2hyb25vdXMKICAvCiAgLyBTaW5jZSBTaGlueSB1c2VzICQoKSB0byBzY2hlZHVsZSBpbml0U2hpbnksIHNoaW55Pj0xLjQgY2FsbHMgaW5pdFNoaW55CiAgLyBvbmUgdGljayBsYXRlciB0aGFuIGl0IGRpZCBiZWZvcmUsIHdoaWNoIG1lYW5zIHN0YXRpY1JlbmRlcigpIGlzCiAgLyBjYWxsZWQgcmVuZGVyVmFsdWUoKSBlYXJsaWVyIHRoYW4gKGFkdmFuY2VkKSB3aWRnZXQgYXV0aG9ycyBtaWdodCBiZSBleHBlY3RpbmcuCiAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9zaGlueS9pc3N1ZXMvMjYzMAogIC8KICAvIEZvciBhIGNvbmNyZXRlIGV4YW1wbGUsIGxlYWZsZXQgaGFzIHNvbWUgbWV0aG9kcyAoZS5nLiwgdXBkYXRlQm91bmRzKQogIC8gd2hpY2ggcmVmZXJlbmNlIFNoaW55IG1ldGhvZHMgcmVnaXN0ZXJlZCBpbiBpbml0U2hpbnkgKGUuZy4sIHNldElucHV0VmFsdWUpLgogIC8gU2luY2UgbGVhZmxldCBpcyBwcml2eSB0byB0aGlzIGxpZmUtY3ljbGUsIGl0IGtub3dzIHRvIHVzZSBzZXRUaW1lb3V0KCkgdG8KICAvIGRlbGF5IGV4ZWN1dGlvbiBvZiB0aG9zZSBtZXRob2RzICh1bnRpbCBTaGlueSBtZXRob2RzIGFyZSByZWFkeSkKICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvYmxvYi8xOGVjOTgxL2phdmFzY3JpcHQvc3JjL2luZGV4LmpzI0wyNjYtTDI2OAogIC8KICAvIElkZWFsbHkgd2lkZ2V0IGF1dGhvcnMgd291bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzZXRUaW1lb3V0KCkgaGFjayB0aGF0CiAgLyBsZWFmbGV0IHVzZXMgdG8gY2FsbCBTaGlueSBtZXRob2RzIG9uIGEgc3RhdGljUmVuZGVyKCkuIEluIHRoZSBsb25nIHJ1biwKICAvIHRoZSBsb2dpYyBpbml0U2hpbnkgc2hvdWxkIGJlIGJyb2tlbiB1cCBzbyB0aGF0IG1ldGhvZCByZWdpc3RyYXRpb24gaGFwcGVucwogIC8gcmlnaHQgYXdheSwgYnV0IGJpbmRpbmcgaGFwcGVucyBsYXRlci4KICAqLwogIGZ1bmN0aW9uIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKSB7CiAgICBpZiAoc2hpbnlNb2RlICYmIGhhc19qUXVlcnkzKCkpIHsKICAgICAgd2luZG93LmpRdWVyeSh3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0KICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IHRyeUV2YWwob1twYXJ0XSk7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo="></script>
<script src="data:application/javascript;base64,LyohIGpRdWVyeSB2My41LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mLHM9dC5zbGljZSxnPXQuZmxhdD9mdW5jdGlvbihlKXtyZXR1cm4gdC5mbGF0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbmNhdC5hcHBseShbXSxlKX0sdT10LnB1c2gsaT10LmluZGV4T2Ysbj17fSxvPW4udG9TdHJpbmcsdj1uLmhhc093blByb3BlcnR5LGE9di50b1N0cmluZyxsPWEuY2FsbChPYmplY3QpLHk9e30sbT1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlLm5vZGVUeXBlfSx4PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LEU9Qy5kb2N1bWVudCxjPXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH07ZnVuY3Rpb24gYihlLHQsbil7dmFyIHIsaSxvPShuPW58fEUpLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKG8udGV4dD1lLHQpZm9yKHIgaW4gYykoaT10W3JdfHx0LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUocikpJiZvLnNldEF0dHJpYnV0ZShyLGkpO24uaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP25bby5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9dmFyIGY9IjMuNS4xIixTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBTLmZuLmluaXQoZSx0KX07ZnVuY3Rpb24gcChlKXt2YXIgdD0hIWUmJiJsZW5ndGgiaW4gZSYmZS5sZW5ndGgsbj13KGUpO3JldHVybiFtKGUpJiYheChlKSYmKCJhcnJheSI9PT1ufHwwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiYwPHQmJnQtMSBpbiBlKX1TLmZuPVMucHJvdG90eXBlPXtqcXVlcnk6Zixjb25zdHJ1Y3RvcjpTLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/cy5jYWxsKHRoaXMpOmU8MD90aGlzW2UrdGhpcy5sZW5ndGhdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD1TLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdH0sZWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gUy5lYWNoKHRoaXMsZSl9LG1hcDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5tYXAodGhpcyxmdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0LGUpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGV2ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsxKSUyfSkpfSxvZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCUyfSkpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0sUy5leHRlbmQ9Uy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKFMuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxTLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09Uy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LFMuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0LG4pe2IoZSx7bm9uY2U6dCYmdC5ub25jZX0sbil9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYocChlKSl7Zm9yKG49ZS5sZW5ndGg7cjxuO3IrKylpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWt9ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihwKE9iamVjdChlKSk/Uy5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6dS5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmkuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSt0Lmxlbmd0aCxyPTAsaT1lLmxlbmd0aDtyPG47cisrKWVbaSsrXT10W3JdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTAsbz1lLmxlbmd0aCxhPSFuO2k8bztpKyspIXQoZVtpXSxpKSE9PWEmJnIucHVzaChlW2ldKTtyZXR1cm4gcn0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89MCxhPVtdO2lmKHAoZSkpZm9yKHI9ZS5sZW5ndGg7bzxyO28rKyludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtlbHNlIGZvcihvIGluIGUpbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7cmV0dXJuIGcoYSl9LGd1aWQ6MSxzdXBwb3J0Onl9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUy5mbltTeW1ib2wuaXRlcmF0b3JdPXRbU3ltYm9sLml0ZXJhdG9yXSksUy5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe25bIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIGQ9ZnVuY3Rpb24obil7dmFyIGUsZCxiLG8saSxoLGYsZyx3LHUsbCxULEMsYSxFLHYscyxjLHksUz0ic2l6emxlIisxKm5ldyBEYXRlLHA9bi5kb2N1bWVudCxrPTAscj0wLG09dWUoKSx4PXVlKCksQT11ZSgpLE49dWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYobD0hMCksMH0saj17fS5oYXNPd25Qcm9wZXJ0eSx0PVtdLHE9dC5wb3AsTD10LnB1c2gsSD10LnB1c2gsTz10LnNsaWNlLFA9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFI9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixJPSIoPzpcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcW15cXHJcXG5cXGZdfFtcXHctXXxbXlwwLVxceDdmXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsRj0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsQj1uZXcgUmVnRXhwKE0rIisiLCJnIiksJD1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKEYpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0YpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcKFteXFxyXFxuXFxmXSkiLCJnIiksbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iMHgiK2Uuc2xpY2UoMSktNjU1MzY7cmV0dXJuIHR8fChuPDA/U3RyaW5nLmZyb21DaGFyQ29kZShuKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKG4+PjEwfDU1Mjk2LDEwMjMmbnw1NjMyMCkpfSxyZT0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxpZT1mdW5jdGlvbihlLHQpe3JldHVybiB0PyJcMCI9PT1lPyJcdWZmZmQiOmUuc2xpY2UoMCwtMSkrIlxcIitlLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkudG9TdHJpbmcoMTYpKyIgIjoiXFwiK2V9LG9lPWZ1bmN0aW9uKCl7VCgpfSxhZT1iZShmdW5jdGlvbihlKXtyZXR1cm4hMD09PWUuZGlzYWJsZWQmJiJmaWVsZHNldCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9LHtkaXI6InBhcmVudE5vZGUiLG5leHQ6ImxlZ2VuZCJ9KTt0cnl7SC5hcHBseSh0PU8uY2FsbChwLmNoaWxkTm9kZXMpLHAuY2hpbGROb2RlcyksdFtwLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlKXtIPXthcHBseTp0Lmxlbmd0aD9mdW5jdGlvbihlLHQpe0wuYXBwbHkoZSxPLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBzZSh0LGUsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmPWUmJmUub3duZXJEb2N1bWVudCxwPWU/ZS5ub2RlVHlwZTo5O2lmKG49bnx8W10sInN0cmluZyIhPXR5cGVvZiB0fHwhdHx8MSE9PXAmJjkhPT1wJiYxMSE9PXApcmV0dXJuIG47aWYoIXImJihUKGUpLGU9ZXx8QyxFKSl7aWYoMTEhPT1wJiYodT1aLmV4ZWModCkpKWlmKGk9dVsxXSl7aWYoOT09PXApe2lmKCEoYT1lLmdldEVsZW1lbnRCeUlkKGkpKSlyZXR1cm4gbjtpZihhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZSBpZihmJiYoYT1mLmdldEVsZW1lbnRCeUlkKGkpKSYmeShlLGEpJiZhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZXtpZih1WzJdKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KSksbjtpZigoaT11WzNdKSYmZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkobixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaSkpLG59aWYoZC5xc2EmJiFOW3QrIiAiXSYmKCF2fHwhdi50ZXN0KHQpKSYmKDEhPT1wfHwib2JqZWN0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2lmKGM9dCxmPWUsMT09PXAmJihVLnRlc3QodCl8fHoudGVzdCh0KSkpeyhmPWVlLnRlc3QodCkmJnllKGUucGFyZW50Tm9kZSl8fGUpPT09ZSYmZC5zY29wZXx8KChzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPVMpKSxvPShsPWgodCkpLmxlbmd0aDt3aGlsZShvLS0pbFtvXT0ocz8iIyIrczoiOnNjb3BlIikrIiAiK3hlKGxbb10pO2M9bC5qb2luKCIsIil9dHJ5e3JldHVybiBILmFwcGx5KG4sZi5xdWVyeVNlbGVjdG9yQWxsKGMpKSxufWNhdGNoKGUpe04odCwhMCl9ZmluYWxseXtzPT09UyYmZS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gZyh0LnJlcGxhY2UoJCwiJDEiKSxlLG4scil9ZnVuY3Rpb24gdWUoKXt2YXIgcj1bXTtyZXR1cm4gZnVuY3Rpb24gZSh0LG4pe3JldHVybiByLnB1c2godCsiICIpPmIuY2FjaGVMZW5ndGgmJmRlbGV0ZSBlW3Iuc2hpZnQoKV0sZVt0KyIgIl09bn19ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIGVbU109ITAsZX1mdW5jdGlvbiBjZShlKXt2YXIgdD1DLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChlKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gZmUoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1uLmxlbmd0aDt3aGlsZShyLS0pYi5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gcGUoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIGRlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlLnR5cGU9PT10fX1mdW5jdGlvbiBoZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09dHx8ImJ1dHRvbiI9PT10KSYmZS50eXBlPT09bn19ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJmb3JtImluIGU/ZS5wYXJlbnROb2RlJiYhMT09PWUuZGlzYWJsZWQ/ImxhYmVsImluIGU/ImxhYmVsImluIGUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUuZGlzYWJsZWQ9PT10OmUuZGlzYWJsZWQ9PT10OmUuaXNEaXNhYmxlZD09PXR8fGUuaXNEaXNhYmxlZCE9PSF0JiZhZShlKT09PXQ6ZS5kaXNhYmxlZD09PXQ6ImxhYmVsImluIGUmJmUuZGlzYWJsZWQ9PT10fX1mdW5jdGlvbiB2ZShhKXtyZXR1cm4gbGUoZnVuY3Rpb24obyl7cmV0dXJuIG89K28sbGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoW10sZS5sZW5ndGgsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPXJbaV1dJiYoZVtuXT0hKHRbbl09ZVtuXSkpfSl9KX1mdW5jdGlvbiB5ZShlKXtyZXR1cm4gZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZlfWZvcihlIGluIGQ9c2Uuc3VwcG9ydD17fSxpPXNlLmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZXNwYWNlVVJJLG49KGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiFZLnRlc3QodHx8biYmbi5ub2RlTmFtZXx8IkhUTUwiKX0sVD1zZS5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZT9lLm93bmVyRG9jdW1lbnR8fGU6cDtyZXR1cm4gciE9QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxwIT1DJiYobj1DLmRlZmF1bHRWaWV3KSYmbi50b3AhPT1uJiYobi5hZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixvZSwhMSk6bi5hdHRhY2hFdmVudCYmbi5hdHRhY2hFdmVudCgib251bmxvYWQiLG9lKSksZC5zY29wZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChDLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbCYmIWUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlIGZpZWxkc2V0IGRpdiIpLmxlbmd0aH0pLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1TLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShTKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe3ZhciB0O2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitTKyInPjwvYT48c2VsZWN0IGlkPSciK1MrIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitTKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLCh0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJuYW1lIiwiIiksZS5hcHBlbmRDaGlsZCh0KSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPScnXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIipuYW1lIitNKyIqPSIrTSsiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8di5wdXNoKCI6Y2hlY2tlZCIpLGUucXVlcnlTZWxlY3RvckFsbCgiYSMiK1MrIisqIikubGVuZ3RofHx2LnB1c2goIi4jLitbK35dIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJcXFxmIiksdi5wdXNoKCJbXFxyXFxuXFxmXSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLEYpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09KHQub3duZXJEb2N1bWVudHx8dCk/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KToxKXx8IWQuc29ydERldGFjaGVkJiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09bj9lPT1DfHxlLm93bmVyRG9jdW1lbnQ9PXAmJnkocCxlKT8tMTp0PT1DfHx0Lm93bmVyRG9jdW1lbnQ9PXAmJnkocCx0KT8xOnU/UCh1LGUpLVAodSx0KTowOjQmbj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxhPVtlXSxzPVt0XTtpZighaXx8IW8pcmV0dXJuIGU9PUM/LTE6dD09Qz8xOmk/LTE6bz8xOnU/UCh1LGUpLVAodSx0KTowO2lmKGk9PT1vKXJldHVybiBwZShlLHQpO249ZTt3aGlsZShuPW4ucGFyZW50Tm9kZSlhLnVuc2hpZnQobik7bj10O3doaWxlKG49bi5wYXJlbnROb2RlKXMudW5zaGlmdChuKTt3aGlsZShhW3JdPT09c1tyXSlyKys7cmV0dXJuIHI/cGUoYVtyXSxzW3JdKTphW3JdPT1wPy0xOnNbcl09PXA/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoVChlKSxkLm1hdGNoZXNTZWxlY3RvciYmRSYmIU5bdCsiICJdJiYoIXN8fCFzLnRlc3QodCkpJiYoIXZ8fCF2LnRlc3QodCkpKXRyeXt2YXIgbj1jLmNhbGwoZSx0KTtpZihufHxkLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2goZSl7Tih0LCEwKX1yZXR1cm4gMDxzZSh0LEMsbnVsbCxbZV0pLmxlbmd0aH0sc2UuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKTt2YXIgbj1iLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxyPW4mJmouY2FsbChiLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9uKGUsdCwhRSk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1yP3I6ZC5hdHRyaWJ1dGVzfHwhRT9lLmdldEF0dHJpYnV0ZSh0KToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9LHNlLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZShyZSxpZSl9LHNlLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sc2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTA7aWYobD0hZC5kZXRlY3REdXBsaWNhdGVzLHU9IWQuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoRCksbCl7d2hpbGUodD1lW2krK10pdD09PWVbaV0mJihyPW4ucHVzaChpKSk7d2hpbGUoci0tKWUuc3BsaWNlKG5bcl0sMSl9cmV0dXJuIHU9bnVsbCxlfSxvPXNlLmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2Ugd2hpbGUodD1lW3IrK10pbis9byh0KTtyZXR1cm4gbn0sKGI9c2Uuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86bGUsbWF0Y2g6RyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKHRlLG5lKSxlWzNdPShlWzNdfHxlWzRdfHxlWzVdfHwiIikucmVwbGFjZSh0ZSxuZSksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHNlLmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJnNlLmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzZdJiZlWzJdO3JldHVybiBHLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXT9lWzJdPWVbNF18fGVbNV18fCIiOm4mJlgudGVzdChuKSYmKHQ9aChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PW1bZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2UrIigiK00rInwkKSIpKSYmbShlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXNlLmF0dHIoZSxuKTtyZXR1cm4gbnVsbD09dD8iIT0iPT09cjohcnx8KHQrPSIiLCI9Ij09PXI/dD09PWk6IiE9Ij09PXI/dCE9PWk6Il49Ij09PXI/aSYmMD09PXQuaW5kZXhPZihpKToiKj0iPT09cj9pJiYtMTx0LmluZGV4T2YoaSk6IiQ9Ij09PXI/aSYmdC5zbGljZSgtaS5sZW5ndGgpPT09aToifj0iPT09cj8tMTwoIiAiK3QucmVwbGFjZShCLCIgIikrIiAiKS5pbmRleE9mKGkpOiJ8PSI9PT1yJiYodD09PWl8fHQuc2xpY2UoMCxpLmxlbmd0aCsxKT09PWkrIi0iKSl9fSxDSElMRDpmdW5jdGlvbihoLGUsdCxnLHYpe3ZhciB5PSJudGgiIT09aC5zbGljZSgwLDMpLG09Imxhc3QiIT09aC5zbGljZSgtNCkseD0ib2YtdHlwZSI9PT1lO3JldHVybiAxPT09ZyYmMD09PXY/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD15IT09bT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLGM9ZS5wYXJlbnROb2RlLGY9eCYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHA9IW4mJiF4LGQ9ITE7aWYoYyl7aWYoeSl7d2hpbGUobCl7YT1lO3doaWxlKGE9YVtsXSlpZih4P2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWY6MT09PWEubm9kZVR5cGUpcmV0dXJuITE7dT1sPSJvbmx5Ij09PWgmJiF1JiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKHU9W20/Yy5maXJzdENoaWxkOmMubGFzdENoaWxkXSxtJiZwKXtkPShzPShyPShpPShvPShhPWMpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSYmclsyXSxhPXMmJmMuY2hpbGROb2Rlc1tzXTt3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigxPT09YS5ub2RlVHlwZSYmKytkJiZhPT09ZSl7aVtoXT1bayxzLGRdO2JyZWFrfX1lbHNlIGlmKHAmJihkPXM9KHI9KGk9KG89KGE9ZSlbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF18fFtdKVswXT09PWsmJnJbMV0pLCExPT09ZCl3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKSYmKytkJiYocCYmKChpPShvPWFbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF09W2ssZF0pLGE9PT1lKSlicmVhaztyZXR1cm4oZC09dik9PT1nfHxkJWc9PTAmJjA8PWQvZ319fSxQU0VVRE86ZnVuY3Rpb24oZSxvKXt2YXIgdCxhPWIucHNldWRvc1tlXXx8Yi5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIGFbU10/YShvKToxPGEubGVuZ3RoPyh0PVtlLGUsIiIsb10sYi5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/bGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoZSxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249UChlLHJbaV0pXT0hKHRbbl09cltpXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gYShlLDAsdCl9KTphfX0scHNldWRvczp7bm90OmxlKGZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9W10scz1mKGUucmVwbGFjZSgkLCIkMSIpKTtyZXR1cm4gc1tTXT9sZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPXMoZSxudWxsLHIsW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShpPW9bYV0pJiYoZVthXT0hKHRbYV09aSkpfSk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByWzBdPWUscyhyLG51bGwsbixpKSxyWzBdPW51bGwsIWkucG9wKCl9fSksaGFzOmxlKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMDxzZSh0LGUpLmxlbmd0aH19KSxjb250YWluczpsZShmdW5jdGlvbih0KXtyZXR1cm4gdD10LnJlcGxhY2UodGUsbmUpLGZ1bmN0aW9uKGUpe3JldHVybi0xPChlLnRleHRDb250ZW50fHxvKGUpKS5pbmRleE9mKHQpfX0pLGxhbmc6bGUoZnVuY3Rpb24obil7cmV0dXJuIFYudGVzdChufHwiIil8fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK24pLG49bi5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGUpe3ZhciB0O2Rve2lmKHQ9RT9lLmxhbmc6ZS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGUuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuKHQ9dC50b0xvd2VyQ2FzZSgpKT09PW58fDA9PT10LmluZGV4T2YobisiLSIpfXdoaWxlKChlPWUucGFyZW50Tm9kZSkmJjE9PT1lLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5sb2NhdGlvbiYmbi5sb2NhdGlvbi5oYXNoO3JldHVybiB0JiZ0LnNsaWNlKDEpPT09ZS5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWF9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Qy5hY3RpdmVFbGVtZW50JiYoIUMuaGFzRm9jdXN8fEMuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6Z2UoITEpLGRpc2FibGVkOmdlKCEwKSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hYi5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEoudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFEudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09dC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6dmUoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnZlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp2ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0OnQ8bj90Om47MDw9LS1yOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDp2ZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjsrK3I8dDspZS5wdXNoKHIpO3JldHVybiBlfSl9fSkucHNldWRvcy5udGg9Yi5wc2V1ZG9zLmVxLHtyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSliLnBzZXVkb3NbZV09ZGUoZSk7Zm9yKGUgaW57c3VibWl0OiEwLHJlc2V0OiEwfSliLnBzZXVkb3NbZV09aGUoZSk7ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24geGUoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBiZShzLGUsdCl7dmFyIHU9ZS5kaXIsbD1lLm5leHQsYz1sfHx1LGY9dCYmInBhcmVudE5vZGUiPT09YyxwPXIrKztyZXR1cm4gZS5maXJzdD9mdW5jdGlvbihlLHQsbil7d2hpbGUoZT1lW3VdKWlmKDE9PT1lLm5vZGVUeXBlfHxmKXJldHVybiBzKGUsdCxuKTtyZXR1cm4hMX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPVtrLHBdO2lmKG4pe3doaWxlKGU9ZVt1XSlpZigoMT09PWUubm9kZVR5cGV8fGYpJiZzKGUsdCxuKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilpZihpPShvPWVbU118fChlW1NdPXt9KSlbZS51bmlxdWVJRF18fChvW2UudW5pcXVlSURdPXt9KSxsJiZsPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKWU9ZVt1XXx8ZTtlbHNle2lmKChyPWlbY10pJiZyWzBdPT09ayYmclsxXT09PXApcmV0dXJuIGFbMl09clsyXTtpZigoaVtjXT1hKVsyXT1zKGUsdCxuKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gd2UoaSl7cmV0dXJuIDE8aS5sZW5ndGg/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkubGVuZ3RoO3doaWxlKHItLSlpZighaVtyXShlLHQsbikpcmV0dXJuITE7cmV0dXJuITB9OmlbMF19ZnVuY3Rpb24gVGUoZSx0LG4scixpKXtmb3IodmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7czx1O3MrKykobz1lW3NdKSYmKG4mJiFuKG8scixpKXx8KGEucHVzaChvKSxsJiZ0LnB1c2gocykpKTtyZXR1cm4gYX1mdW5jdGlvbiBDZShkLGgsZyx2LHksZSl7cmV0dXJuIHYmJiF2W1NdJiYodj1DZSh2KSkseSYmIXlbU10mJih5PUNlKHksZSkpLGxlKGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVtdLHU9W10sbD10Lmxlbmd0aCxjPWV8fGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspc2UoZSx0W3JdLG4pO3JldHVybiBufShofHwiKiIsbi5ub2RlVHlwZT9bbl06bixbXSksZj0hZHx8IWUmJmg/YzpUZShjLHMsZCxuLHIpLHA9Zz95fHwoZT9kOmx8fHYpP1tdOnQ6ZjtpZihnJiZnKGYscCxuLHIpLHYpe2k9VGUocCx1KSx2KGksW10sbixyKSxvPWkubGVuZ3RoO3doaWxlKG8tLSkoYT1pW29dKSYmKHBbdVtvXV09IShmW3Vbb11dPWEpKX1pZihlKXtpZih5fHxkKXtpZih5KXtpPVtdLG89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiZpLnB1c2goZltvXT1hKTt5KG51bGwscD1bXSxpLHIpfW89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiYtMTwoaT15P1AoZSxhKTpzW29dKSYmKGVbaV09ISh0W2ldPWEpKX19ZWxzZSBwPVRlKHA9PT10P3Auc3BsaWNlKGwscC5sZW5ndGgpOnApLHk/eShudWxsLHQscCxyKTpILmFwcGx5KHQscCl9KX1mdW5jdGlvbiBFZShlKXtmb3IodmFyIGksdCxuLHI9ZS5sZW5ndGgsbz1iLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1vfHxiLnJlbGF0aXZlWyIgIl0scz1vPzE6MCx1PWJlKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09aX0sYSwhMCksbD1iZShmdW5jdGlvbihlKXtyZXR1cm4tMTxQKGksZSl9LGEsITApLGM9W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0hbyYmKG58fHQhPT13KXx8KChpPXQpLm5vZGVUeXBlP3UoZSx0LG4pOmwoZSx0LG4pKTtyZXR1cm4gaT1udWxsLHJ9XTtzPHI7cysrKWlmKHQ9Yi5yZWxhdGl2ZVtlW3NdLnR5cGVdKWM9W2JlKHdlKGMpLHQpXTtlbHNle2lmKCh0PWIuZmlsdGVyW2Vbc10udHlwZV0uYXBwbHkobnVsbCxlW3NdLm1hdGNoZXMpKVtTXSl7Zm9yKG49KytzO248cjtuKyspaWYoYi5yZWxhdGl2ZVtlW25dLnR5cGVdKWJyZWFrO3JldHVybiBDZSgxPHMmJndlKGMpLDE8cyYmeGUoZS5zbGljZSgwLHMtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3MtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSgkLCIkMSIpLHQsczxuJiZFZShlLnNsaWNlKHMsbikpLG48ciYmRWUoZT1lLnNsaWNlKG4pKSxuPHImJnhlKGUpKX1jLnB1c2godCl9cmV0dXJuIHdlKGMpfXJldHVybiBtZS5wcm90b3R5cGU9Yi5maWx0ZXJzPWIucHNldWRvcyxiLnNldEZpbHRlcnM9bmV3IG1lLGg9c2UudG9rZW5pemU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsdSxsPXhbZSsiICJdO2lmKGwpcmV0dXJuIHQ/MDpsLnNsaWNlKDApO2E9ZSxzPVtdLHU9Yi5wcmVGaWx0ZXI7d2hpbGUoYSl7Zm9yKG8gaW4gbiYmIShyPV8uZXhlYyhhKSl8fChyJiYoYT1hLnNsaWNlKHJbMF0ubGVuZ3RoKXx8YSkscy5wdXNoKGk9W10pKSxuPSExLChyPXouZXhlYyhhKSkmJihuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoJCwiICIpfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSksYi5maWx0ZXIpIShyPUdbb10uZXhlYyhhKSl8fHVbb10mJiEocj11W29dKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOm8sbWF0Y2hlczpyfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/YS5sZW5ndGg6YT9zZS5lcnJvcihlKTp4KGUscykuc2xpY2UoMCl9LGY9c2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHYseSxtLHgscixpPVtdLG89W10sYT1BW2UrIiAiXTtpZighYSl7dHx8KHQ9aChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pKGE9RWUodFtuXSkpW1NdP2kucHVzaChhKTpvLnB1c2goYSk7KGE9QShlLCh2PW8sbT0wPCh5PWkpLmxlbmd0aCx4PTA8di5sZW5ndGgscj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1PTAsbD0iMCIsYz1lJiZbXSxmPVtdLHA9dyxkPWV8fHgmJmIuZmluZC5UQUcoIioiLGkpLGg9ays9bnVsbD09cD8xOk1hdGgucmFuZG9tKCl8fC4xLGc9ZC5sZW5ndGg7Zm9yKGkmJih3PXQ9PUN8fHR8fGkpO2whPT1nJiZudWxsIT0obz1kW2xdKTtsKyspe2lmKHgmJm8pe2E9MCx0fHxvLm93bmVyRG9jdW1lbnQ9PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKGs9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihrPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPVMuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1TLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtTLmZpbmQ9ZCxTLmV4cHI9ZC5zZWxlY3RvcnMsUy5leHByWyI6Il09Uy5leHByLnBzZXVkb3MsUy51bmlxdWVTb3J0PVMudW5pcXVlPWQudW5pcXVlU29ydCxTLnRleHQ9ZC5nZXRUZXh0LFMuaXNYTUxEb2M9ZC5pc1hNTCxTLmNvbnRhaW5zPWQuY29udGFpbnMsUy5lc2NhcGVTZWxlY3Rvcj1kLmVzY2FwZTt2YXIgaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmUyhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LGs9Uy5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgTj0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBEKGUsbixyKXtyZXR1cm4gbShuKT9TLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/Uy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6Uy5maWx0ZXIobixlLHIpfVMuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP1MuZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106Uy5maW5kLm1hdGNoZXMoZSxTLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LFMuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhTKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihTLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKVMuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9TLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFEKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZrLnRlc3QoZSk/UyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBqLHE9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoUy5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8aiwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOnEuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgUz90WzBdOnQsUy5tZXJnZSh0aGlzLFMucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLE4udGVzdChyWzFdKSYmUy5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoUyk6Uy5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1TLmZuLGo9UyhFKTt2YXIgTD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxIPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIE8oZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9UyhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihTLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJlMoZSk7aWYoIWsudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZTLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/Uy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKFMoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhTLnVuaXF1ZVNvcnQoUy5tZXJnZSh0aGlzLmdldCgpLFMoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksUy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBPKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBUKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gVChlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5jb250ZW50RG9jdW1lbnQmJnIoZS5jb250ZW50RG9jdW1lbnQpP2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksUy5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7Uy5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPVMubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49Uy5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKEhbcl18fFMudW5pcXVlU29ydChuKSxMLnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUD0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIFIoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gTShlKXt0aHJvdyBlfWZ1bmN0aW9uIEkoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fVMuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LFMuZWFjaChlLm1hdGNoKFApfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTpTLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7Uy5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gUy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPVMuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPFMuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0sUy5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixTLkNhbGxiYWNrcygibWVtb3J5IiksUy5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKHIpe1MuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLFIscyksbCh1LG8sTSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scyksbCh1LG8sUixvLm5vdGlmeVdpdGgpKSk6KGEhPT1SJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJlMuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PU0mJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KFMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPVMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpSLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpSKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOk0pKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9TLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1TLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoSShlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlJKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciBXPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1MuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJlcudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0sUy5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPVMuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLFMucmVhZHkoKX1TLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7Uy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LFMuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1TLnJlYWR5V2FpdDpTLmlzUmVhZHkpfHwoUy5pc1JlYWR5PSEwKSE9PWUmJjA8LS1TLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtTXSl9fSksUy5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoUy5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyICQ9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKSQoZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChTKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LF89L14tbXMtLyx6PS8tKFthLXpdKS9nO2Z1bmN0aW9uIFUoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGUucmVwbGFjZShfLCJtcy0iKS5yZXBsYWNlKHosVSl9dmFyIFY9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBHKCl7dGhpcy5leHBhbmRvPVMuZXhwYW5kbytHLnVpZCsrfUcudWlkPTEsRy5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sVihlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbWCh0KV09bjtlbHNlIGZvcihyIGluIHQpaVtYKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1godCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFgpOih0PVgodCkpaW4gcj9bdF06dC5tYXRjaChQKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fFMuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIVMuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBZPW5ldyBHLFE9bmV3IEcsSj0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLEs9L1tBLVpdL2c7ZnVuY3Rpb24gWihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uJiYxPT09ZS5ub2RlVHlwZSlpZihyPSJkYXRhLSIrdC5yZXBsYWNlKEssIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249InRydWUiPT09KGk9bil8fCJmYWxzZSIhPT1pJiYoIm51bGwiPT09aT9udWxsOmk9PT0raSsiIj8raTpKLnRlc3QoaSk/SlNPTi5wYXJzZShpKTppKX1jYXRjaChlKXt9US5zZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDA7cmV0dXJuIG59Uy5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIFEuaGFzRGF0YShlKXx8WS5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7US5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBZLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7WS5yZW1vdmUoZSx0KX19KSxTLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihuLGUpe3ZhciB0LHIsaSxvPXRoaXNbMF0sYT1vJiZvLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09bil7aWYodGhpcy5sZW5ndGgmJihpPVEuZ2V0KG8pLDE9PT1vLm5vZGVUeXBlJiYhWS5nZXQobywiaGFzRGF0YUF0dHJzIikpKXt0PWEubGVuZ3RoO3doaWxlKHQtLSlhW3RdJiYwPT09KHI9YVt0XS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpJiYocj1YKHIuc2xpY2UoNSkpLFoobyxyLGlbcl0pKTtZLnNldChvLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gaX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuKX0pOiQodGhpcyxmdW5jdGlvbihlKXt2YXIgdDtpZihvJiZ2b2lkIDA9PT1lKXJldHVybiB2b2lkIDAhPT0odD1RLmdldChvLG4pKT90OnZvaWQgMCE9PSh0PVoobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1EucmVtb3ZlKHRoaXMsZSl9KX19KSxTLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1ZLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVkuYWNjZXNzKGUsdCxTLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1TLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPVMuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtTLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gWS5nZXQoZSxuKXx8WS5hY2Nlc3MoZSxuLHtlbXB0eTpTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtZLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxTLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/Uy5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TLnF1ZXVlKHRoaXMsdCxuKTtTLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJlMuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1TLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1ZLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciBlZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSx0ZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrZWUrIikoW2EteiVdKikkIiwiaSIpLG5lPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0scmU9RS5kb2N1bWVudEVsZW1lbnQsaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxvZT17Y29tcG9zZWQ6ITB9O3JlLmdldFJvb3ROb2RlJiYoaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKG9lKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBhZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZpZShlKSYmIm5vbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIpfTtmdW5jdGlvbiBzZShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIFMuY3NzKGUsdCwiIil9LHU9cygpLGw9biYmblszXXx8KFMuY3NzTnVtYmVyW3RdPyIiOiJweCIpLGM9ZS5ub2RlVHlwZSYmKFMuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZ0ZS5leGVjKFMuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXt1Lz0yLGw9bHx8Y1szXSxjPSt1fHwxO3doaWxlKGEtLSlTLnN0eWxlKGUsdCxjK2wpLCgxLW8pKigxLShvPXMoKS91fHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsUy5zdHlsZShlLHQsYytsKSxuPW58fFtdfXJldHVybiBuJiYoYz0rY3x8K3V8fDAsaT1uWzFdP2MrKG5bMV0rMSkqblsyXTorblsyXSxyJiYoci51bml0PWwsci5zdGFydD1jLHIuZW5kPWkpKSxpfXZhciB1ZT17fTtmdW5jdGlvbiBsZShlLHQpe2Zvcih2YXIgbixyLGksbyxhLHMsdSxsPVtdLGM9MCxmPWUubGVuZ3RoO2M8ZjtjKyspKHI9ZVtjXSkuc3R5bGUmJihuPXIuc3R5bGUuZGlzcGxheSx0Pygibm9uZSI9PT1uJiYobFtjXT1ZLmdldChyLCJkaXNwbGF5Iil8fG51bGwsbFtjXXx8KHIuc3R5bGUuZGlzcGxheT0iIikpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGxbY109KHU9YT1vPXZvaWQgMCxhPShpPXIpLm93bmVyRG9jdW1lbnQscz1pLm5vZGVOYW1lLCh1PXVlW3NdKXx8KG89YS5ib2R5LmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudChzKSksdT1TLmNzcyhvLCJkaXNwbGF5Iiksby5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pLCJub25lIj09PXUmJih1PSJibG9jayIpLHVlW3NdPXUpKSkpOiJub25lIiE9PW4mJihsW2NdPSJub25lIixZLnNldChyLCJkaXNwbGF5IixuKSkpO2ZvcihjPTA7YzxmO2MrKyludWxsIT1sW2NdJiYoZVtjXS5zdHlsZS5kaXNwbGF5PWxbY10pO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP1ModGhpcykuc2hvdygpOlModGhpcykuaGlkZSgpfSl9fSk7dmFyIGNlLGZlLHBlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGRlPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKS9pLGhlPS9eJHxebW9kdWxlJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaTtjZT1FLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwoZmU9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGZlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxmZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksY2UuYXBwZW5kQ2hpbGQoZmUpLHkuY2hlY2tDbG9uZT1jZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsY2UuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+Iix5Lm5vQ2xvbmVDaGVja2VkPSEhY2UuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlLGNlLmlubmVySFRNTD0iPG9wdGlvbj48L29wdGlvbj4iLHkub3B0aW9uPSEhY2UubGFzdENoaWxkO3ZhciBnZT17dGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2Z1bmN0aW9uIHZlKGUsdCl7dmFyIG47cmV0dXJuIG49InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JBbGwodHx8IioiKTpbXSx2b2lkIDA9PT10fHx0JiZBKGUsdCk/Uy5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiB5ZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylZLnNldChlW25dLCJnbG9iYWxFdmFsIiwhdHx8WS5nZXQodFtuXSwiZ2xvYmFsRXZhbCIpKX1nZS50Ym9keT1nZS50Zm9vdD1nZS5jb2xncm91cD1nZS5jYXB0aW9uPWdlLnRoZWFkLGdlLnRoPWdlLnRkLHkub3B0aW9ufHwoZ2Uub3B0Z3JvdXA9Z2Uub3B0aW9uPVsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0pO3ZhciBtZT0vPHwmIz9cdys7LztmdW5jdGlvbiB4ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsdSxsLGMsZj10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwPVtdLGQ9MCxoPWUubGVuZ3RoO2Q8aDtkKyspaWYoKG89ZVtkXSl8fDA9PT1vKWlmKCJvYmplY3QiPT09dyhvKSlTLm1lcmdlKHAsby5ub2RlVHlwZT9bb106byk7ZWxzZSBpZihtZS50ZXN0KG8pKXthPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0oZGUuZXhlYyhvKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSx1PWdlW3NdfHxnZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK1MuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTt3aGlsZShjLS0pYT1hLmxhc3RDaGlsZDtTLm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PSIifWVsc2UgcC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO2YudGV4dENvbnRlbnQ9IiIsZD0wO3doaWxlKG89cFtkKytdKWlmKHImJi0xPFMuaW5BcnJheShvLHIpKWkmJmkucHVzaChvKTtlbHNlIGlmKGw9aWUobyksYT12ZShmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxsJiZ5ZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10paGUudGVzdChvLnR5cGV8fCIiKSYmbi5wdXNoKG8pfXJldHVybiBmfXZhciBiZT0vXmtleS8sd2U9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFRlPS9eKFteLl0qKSg/OlwuKC4rKXwpLztmdW5jdGlvbiBDZSgpe3JldHVybiEwfWZ1bmN0aW9uIEVlKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoZSx0KXtyZXR1cm4gZT09PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBFLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX0oKT09KCJmb2N1cyI9PT10KX1mdW5jdGlvbiBrZShlLHQsbixyLGksbyl7dmFyIGEscztpZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihzIGluInN0cmluZyIhPXR5cGVvZiBuJiYocj1yfHxuLG49dm9pZCAwKSx0KWtlKGUscyxuLHIsdFtzXSxvKTtyZXR1cm4gZX1pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXZvaWQgMCk6bnVsbD09aSYmKCJzdHJpbmciPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPUVlO2Vsc2UgaWYoIWkpcmV0dXJuIGU7cmV0dXJuIDE9PT1vJiYoYT1pLChpPWZ1bmN0aW9uKGUpe3JldHVybiBTKCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9Uy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9ZnVuY3Rpb24gQWUoZSxpLG8pe28/KFkuc2V0KGUsaSwhMSksUy5ldmVudC5hZGQoZSxpLHtuYW1lc3BhY2U6ITEsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdCxuLHI9WS5nZXQodGhpcyxpKTtpZigxJmUuaXNUcmlnZ2VyJiZ0aGlzW2ldKXtpZihyLmxlbmd0aCkoUy5ldmVudC5zcGVjaWFsW2ldfHx7fSkuZGVsZWdhdGVUeXBlJiZlLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYocj1zLmNhbGwoYXJndW1lbnRzKSxZLnNldCh0aGlzLGksciksdD1vKHRoaXMsaSksdGhpc1tpXSgpLHIhPT0obj1ZLmdldCh0aGlzLGkpKXx8dD9ZLnNldCh0aGlzLGksITEpOm49e30sciE9PW4pcmV0dXJuIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLG4udmFsdWV9ZWxzZSByLmxlbmd0aCYmKFkuc2V0KHRoaXMsaSx7dmFsdWU6Uy5ldmVudC50cmlnZ2VyKFMuZXh0ZW5kKHJbMF0sUy5FdmVudC5wcm90b3R5cGUpLHIuc2xpY2UoMSksdGhpcyl9KSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19KSk6dm9pZCAwPT09WS5nZXQoZSxpKSYmUy5ldmVudC5hZGQoZSxpLENlKX1TLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuZ2V0KHQpO2lmKFYodCkpe24uaGFuZGxlciYmKG49KG89bikuaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJlMuZmluZC5tYXRjaGVzU2VsZWN0b3IocmUsaSksbi5ndWlkfHwobi5ndWlkPVMuZ3VpZCsrKSwodT12LmV2ZW50cyl8fCh1PXYuZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCkpLChhPXYuaGFuZGxlKXx8KGE9di5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBTJiZTLmV2ZW50LnRyaWdnZXJlZCE9PWUudHlwZT9TLmV2ZW50LmRpc3BhdGNoLmFwcGx5KHQsYXJndW1lbnRzKTp2b2lkIDB9KSxsPShlPShlfHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0pZD1nPShzPVRlLmV4ZWMoZVtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxjPVMuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJlMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKCIuIil9LG8pLChwPXVbZF0pfHwoKHA9dVtkXT1bXSkuZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJiExIT09Zi5zZXR1cC5jYWxsKHQscixoLGEpfHx0LmFkZEV2ZW50TGlzdGVuZXImJnQuYWRkRXZlbnRMaXN0ZW5lcihkLGEpKSxmLmFkZCYmKGYuYWRkLmNhbGwodCxjKSxjLmhhbmRsZXIuZ3VpZHx8KGMuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLGk/cC5zcGxpY2UocC5kZWxlZ2F0ZUNvdW50KyssMCxjKTpwLnB1c2goYyksUy5ldmVudC5nbG9iYWxbZF09ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuaGFzRGF0YShlKSYmWS5nZXQoZSk7aWYodiYmKHU9di5ldmVudHMpKXtsPSh0PSh0fHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0paWYoZD1nPShzPVRlLmV4ZWModFtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCl7Zj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9dVtkPShyP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkXXx8W10scz1zWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwocC5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxmLnJlbW92ZSYmZi5yZW1vdmUuY2FsbChlLGMpKTthJiYhcC5sZW5ndGgmJihmLnRlYXJkb3duJiYhMSE9PWYudGVhcmRvd24uY2FsbChlLGgsdi5oYW5kbGUpfHxTLnJlbW92ZUV2ZW50KGUsZCx2LmhhbmRsZSksZGVsZXRlIHVbZF0pfWVsc2UgZm9yKGQgaW4gdSlTLmV2ZW50LnJlbW92ZShlLGQrdFtsXSxuLHIsITApO1MuaXNFbXB0eU9iamVjdCh1KSYmWS5yZW1vdmUoZSwiaGFuZGxlIGV2ZW50cyIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHU9Uy5ldmVudC5maXgoZSksbD0oWS5nZXQodGhpcywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW3UudHlwZV18fFtdLGM9Uy5ldmVudC5zcGVjaWFsW3UudHlwZV18fHt9O2ZvcihzWzBdPXUsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspc1t0XT1hcmd1bWVudHNbdF07aWYodS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHUpKXthPVMuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHUsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiF1LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3UuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiF1LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpdS5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhdS5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwodS5oYW5kbGVPYmo9byx1LmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoUy5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxzKSkmJiExPT09KHUucmVzdWx0PXIpJiYodS5wcmV2ZW50RGVmYXVsdCgpLHUuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyx1KSx1LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPFMoaSx0aGlzKS5pbmRleChsKTpTLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUy5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW1MuZXhwYW5kb10/ZTpuZXcgUy5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siLENlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZZLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxTLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxTLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUy5FdmVudCkpcmV0dXJuIG5ldyBTLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/Q2U6RWUsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmUy5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW1MuZXhwYW5kb109ITB9LFMuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpFZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Q2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LFMuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmYmUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJndlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIEFlKHRoaXMsZSxTZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gQWUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxTLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxTLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGtlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4ga2UodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosUyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49RWUpLHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIE5lPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLERlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGplPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBxZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIExlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gSGUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIE9lKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gUGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYheS5jaGVja0Nsb25lJiZEZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksUGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAodmUoZSwic2NyaXB0IiksTGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHZlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLEhlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShqZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gUmUoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHZlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmeWUodmUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEoeS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9dmUoYykscj0wLGk9KG89dmUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHZlKGUpLGE9YXx8dmUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylPZShvW3JdLGFbcl0pO2Vsc2UgT2UoZSxjKTtyZXR1cm4gMDwoYT12ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ5ZShhLCFmJiZ2ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBSZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIFJlKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fHFlKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cWUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEodmUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIU5lLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEodmUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgTWU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksSWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxXZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sRmU9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBCZShlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybihuPW58fEllKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8aWUoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmTWUudGVzdChhKSYmRmUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gJGUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIscmUuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIGU9Qy5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxyZS5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIG4scixpLG8sYSxzLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPUUuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIseS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsUy5leHRlbmQoeSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHJ9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGl9LHJlbGlhYmxlVHJEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7cmV0dXJuIG51bGw9PWEmJihlPUUuY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PUUuY3JlYXRlRWxlbWVudCgidHIiKSxuPUUuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4Iix0LnN0eWxlLmhlaWdodD0iMXB4IixuLnN0eWxlLmhlaWdodD0iOXB4IixyZS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPUMuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxhPTM8cGFyc2VJbnQoci5oZWlnaHQpLHJlLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgX2U9WyJXZWJraXQiLCJNb3oiLCJtcyJdLHplPUUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsVWU9e307ZnVuY3Rpb24gWGUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8VWVbZV07cmV0dXJuIHR8fChlIGluIHplP2U6VWVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1fZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPV9lW25dK3QpaW4gemUpcmV0dXJuIGV9KGUpfHxlKX12YXIgVmU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLEdlPS9eLS0vLFllPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxRZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn07ZnVuY3Rpb24gSmUoZSx0LG4pe3ZhciByPXRlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gS2UoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpIm1hcmdpbiI9PT1uJiYodSs9Uy5jc3MoZSxuK25lW2FdLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYodS09Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSkpLCJtYXJnaW4iIT09biYmKHUtPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSkpOih1Kz1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSwicGFkZGluZyIhPT1uP3UrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKTpzKz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpO3JldHVybiFyJiYwPD1vJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVsib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKXx8MCksdX1mdW5jdGlvbiBaZShlLHQsbil7dmFyIHI9SWUoZSksaT0oIXkuYm94U2l6aW5nUmVsaWFibGUoKXx8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksbz1pLGE9QmUoZSx0LHIpLHM9Im9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7aWYoTWUudGVzdChhKSl7aWYoIW4pcmV0dXJuIGE7YT0iYXV0byJ9cmV0dXJuKCF5LmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCF5LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkmJkEoZSwidHIiKXx8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChvPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStLZShlLHQsbnx8KGk/ImJvcmRlciI6ImNvbnRlbnQiKSxvLHIsYSkrInB4In1mdW5jdGlvbiBldChlLHQsbixyLGkpe3JldHVybiBuZXcgZXQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUJlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9WCh0KSx1PUdlLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PVhlKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07InN0cmluZyI9PT0obz10eXBlb2YgbikmJihpPXRlLmV4ZWMobikpJiZpWzFdJiYobj1zZShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09b3x8dXx8KG4rPWkmJmlbM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVgodCk7cmV0dXJuIEdlLnRlc3QodCl8fCh0PVhlKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1CZShlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBRZSYmKGk9UWVbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtTLmNzc0hvb2tzW3VdPXtnZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpcmV0dXJuIVZlLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9aZShlLHUsbik6V2UoZSxZZSxmdW5jdGlvbigpe3JldHVybiBaZShlLHUsbil9KX0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPUllKGUpLG89IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxzPW4/S2UoZSx1LG4sYSxpKTowO3JldHVybiBhJiZvJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdVswXS50b1VwcGVyQ2FzZSgpK3Uuc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt1XSktS2UoZSx1LCJib3JkZXIiLCExLGkpLS41KSkscyYmKHI9dGUuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1TLmNzcyhlLHUpKSxKZSgwLHQscyl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD0kZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoQmUoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LVdlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihpLG8pe1MuY3NzSG9va3NbaStvXT17ZXhwYW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49e30scj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiICIpOltlXTt0PDQ7dCsrKW5baStuZVt0XStvXT1yW3RdfHxyW3QtMl18fHJbMF07cmV0dXJuIG59fSwibWFyZ2luIiE9PWkmJihTLmNzc0hvb2tzW2krb10uc2V0PUplKX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPUllKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKFMuVHdlZW49ZXQpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZXQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9ZXQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOmV0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPWV0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6ZXQucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0pLmluaXQucHJvdG90eXBlPWV0LnByb3RvdHlwZSwoZXQucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9Uy5jc3MoZS5lbGVtLGUucHJvcCwiIikpJiYiYXV0byIhPT10P3Q6MH0sc2V0OmZ1bmN0aW9uKGUpe1MuZnguc3RlcFtlLnByb3BdP1MuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fCFTLmNzc0hvb2tzW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtYZShlLnByb3ApXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpTLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPWV0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LFMuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sUy5meD1ldC5wcm90b3R5cGUuaW5pdCxTLmZ4LnN0ZXA9e307dmFyIHR0LG50LHJ0LGl0LG90PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxhdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIHN0KCl7bnQmJighMT09PUUuaGlkZGVuJiZDLnJlcXVlc3RBbmltYXRpb25GcmFtZT9DLnJlcXVlc3RBbmltYXRpb25GcmFtZShzdCk6Qy5zZXRUaW1lb3V0KHN0LFMuZnguaW50ZXJ2YWwpLFMuZngudGljaygpKX1mdW5jdGlvbiB1dCgpe3JldHVybiBDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0dD12b2lkIDB9KSx0dD1EYXRlLm5vdygpfWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49bmVbcl0pXT1pWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBjdChlLHQsbil7Zm9yKHZhciByLGk9KGZ0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KGZ0LnR3ZWVuZXJzWyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGZ0KG8sZSx0KXt2YXIgbixhLHI9MCxpPWZ0LnByZWZpbHRlcnMubGVuZ3RoLHM9Uy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9dHR8fHV0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpTLmV4dGVuZCh7fSxlKSxvcHRzOlMuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpTLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOnR0fHx1dCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Uy5Ud2VlbihvLGwub3B0cyxlLHQsbC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWU/bC50d2VlbnMubGVuZ3RoOjA7aWYoYSlyZXR1cm4gdGhpcztmb3IoYT0hMDt0PG47dCsrKWwudHdlZW5zW3RdLnJ1bigxKTtyZXR1cm4gZT8ocy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsLGVdKSk6cy5yZWplY3RXaXRoKG8sW2wsZV0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcighZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYoaT10W3I9WChuKV0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT1TLmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKWZvcihuIGluIG89YS5leHBhbmQobyksZGVsZXRlIGVbcl0sbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKTtlbHNlIHRbcl09aX0oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cjxpO3IrKylpZihuPWZ0LnByZWZpbHRlcnNbcl0uY2FsbChsLG8sYyxsLm9wdHMpKXJldHVybiBtKG4uc3RvcCkmJihTLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIFMubWFwKGMsY3QsbCksbShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChvLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLFMuZngudGltZXIoUy5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1TLkFuaW1hdGlvbj1TLmV4dGVuZChmdCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHNlKG4uZWxlbSxlLHRlLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bShlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChQKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sZnQudHdlZW5lcnNbbl09ZnQudHdlZW5lcnNbbl18fFtdLGZ0LnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx2PVkuZ2V0KGUsImZ4c2hvdyIpO2ZvcihyIGluIG4ucXVldWV8fChudWxsPT0oYT1TLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLFMucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0sb3QudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Uy5zdHlsZShlLHIpfWlmKCh1PSFTLmlzRW1wdHlPYmplY3QodCkpfHwhUy5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9WS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1TLmNzcyhlLCJkaXNwbGF5IikpJiYobD9jPWw6KGxlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1TLmNzcyhlLCJkaXNwbGF5IiksbGUoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PVMuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9WS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZsZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fGxlKFtlXSksWS5yZW1vdmUoZSwiZnhzaG93IiksZClTLnN0eWxlKGUscixkW3JdKX0pKSx1PWN0KGc/dltyXTowLHIscCksciBpbiB2fHwodltyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9mdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6ZnQucHJlZmlsdGVycy5wdXNoKGUpfX0pLFMuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9TLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBTLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiBTLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPVMuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Uy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmUy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LFMuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TLmlzRW1wdHlPYmplY3QodCksbz1TLnNwZWVkKGUsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIGU9ZnQodGhpcyxTLmV4dGVuZCh7fSx0KSxvKTsoaXx8WS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Uy50aW1lcnMscj1ZLmdldCh0aGlzKTtpZih0KXJbdF0mJnJbdF0uc3RvcCYmYShyW3RdKTtlbHNlIGZvcih0IGluIHIpclt0XSYmclt0XS5zdG9wJiZhdC50ZXN0KHQpJiZhKHJbdF0pO2Zvcih0PW4ubGVuZ3RoO3QtLTspblt0XS5lbGVtIT09dGhpc3x8bnVsbCE9aSYmblt0XS5xdWV1ZSE9PWl8fChuW3RdLmFuaW0uc3RvcChvKSxlPSExLG4uc3BsaWNlKHQsMSkpOyFlJiZvfHxTLmRlcXVldWUodGhpcyxpKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuITEhPT1hJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PVkuZ2V0KHRoaXMpLG49dFthKyJxdWV1ZSJdLHI9dFthKyJxdWV1ZUhvb2tzIl0saT1TLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsUy5xdWV1ZSh0aGlzLGEsW10pLHImJnIuc3RvcCYmci5zdG9wLmNhbGwodGhpcywhMCksZT1pLmxlbmd0aDtlLS07KWlbZV0uZWxlbT09PXRoaXMmJmlbZV0ucXVldWU9PT1hJiYoaVtlXS5hbmltLnN0b3AoITApLGkuc3BsaWNlKGUsMSkpO2ZvcihlPTA7ZTxvO2UrKyluW2VdJiZuW2VdLmZpbmlzaCYmbltlXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgdC5maW5pc2h9KX19KSxTLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUscil7dmFyIGk9Uy5mbltyXTtTLmZuW3JdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobHQociwhMCksZSx0LG4pfX0pLFMuZWFjaCh7c2xpZGVEb3duOmx0KCJzaG93Iiksc2xpZGVVcDpsdCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmx0KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUscil7Uy5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxTLnRpbWVycz1bXSxTLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1TLnRpbWVycztmb3IodHQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxTLmZ4LnN0b3AoKSx0dD12b2lkIDB9LFMuZngudGltZXI9ZnVuY3Rpb24oZSl7Uy50aW1lcnMucHVzaChlKSxTLmZ4LnN0YXJ0KCl9LFMuZnguaW50ZXJ2YWw9MTMsUy5meC5zdGFydD1mdW5jdGlvbigpe250fHwobnQ9ITAsc3QoKSl9LFMuZnguc3RvcD1mdW5jdGlvbigpe250PW51bGx9LFMuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LFMuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1TLmZ4JiZTLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Qy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Qy5jbGVhclRpbWVvdXQobil9fSl9LHJ0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpdD1FLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKEUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHJ0LnR5cGU9ImNoZWNrYm94Iix5LmNoZWNrT249IiIhPT1ydC52YWx1ZSx5Lm9wdFNlbGVjdGVkPWl0LnNlbGVjdGVkLChydD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixydC50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PXJ0LnZhbHVlO3ZhciBwdCxkdD1TLmV4cHIuYXR0ckhhbmRsZTtTLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsUy5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Uy5wcm9wKGUsdCxuKTooMT09PW8mJlMuaXNYTUxEb2MoZSl8fChpPVMuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChTLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP3B0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBTLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPVMuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmQShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goUCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSkscHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P1MucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LFMuZWFjaChTLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPWR0W3RdfHxTLmZpbmQuYXR0cjtkdFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9ZHRbb10sZHRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxkdFtvXT1pKSxyfX0pO3ZhciBodD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGd0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiB2dChlKXtyZXR1cm4oZS5tYXRjaChQKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiB5dChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChQKXx8W119Uy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbUy5wcm9wRml4W2VdfHxlXX0pfX0pLFMuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmUy5pc1hNTERvYyhlKXx8KHQ9Uy5wcm9wRml4W3RdfHx0LGk9Uy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6aHQudGVzdChlLm5vZGVOYW1lKXx8Z3QudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUseXQodGhpcykpKX0pO2lmKChlPW10KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT15dChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrdnQoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9dnQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSx5dCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT1tdCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK3Z0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTptKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUseXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1TKHRoaXMpLHI9bXQoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9eXQodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK3Z0KHl0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHh0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh4dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDp2dChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBidD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sd3Q9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFidC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLGJ0LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHd0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx3dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgVHQ9Qy5sb2NhdGlvbixDdD17Z3VpZDpEYXRlLm5vdygpfSxFdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dD0obmV3IEMuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChlKXt0PXZvaWQgMH1yZXR1cm4gdCYmIXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fTt2YXIgU3Q9L1xbXF0kLyxrdD0vXHI/XG4vZyxBdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksTnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIER0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxTdC50ZXN0KG4pP2kobix0KTpEdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKUR0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpRHQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmTnQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUF0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShrdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uoa3QsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIganQ9LyUyMC9nLHF0PS8jLiokLyxMdD0vKFs/Jl0pXz1bXiZdKi8sSHQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxPdD0vXig/OkdFVHxIRUFEKSQvLFB0PS9eXC9cLy8sUnQ9e30sTXQ9e30sSXQ9IiovIi5jb25jYXQoIioiKSxXdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBGdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIEJ0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PU10O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gJHQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfVd0LmhyZWY9VHQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VHQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChUdC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpJdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/JHQoJHQoZSxTLmFqYXhTZXR0aW5ncyksdCk6JHQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6RnQoUnQpLGFqYXhUcmFuc3BvcnQ6RnQoTXQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8sdj1TLmFqYXhTZXR1cCh7fSx0KSx5PXYuY29udGV4dHx8dixtPXYuY29udGV4dCYmKHkubm9kZVR5cGV8fHkuanF1ZXJ5KT9TKHkpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1IdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxUdC5ocmVmKSsiIikucmVwbGFjZShQdCxUdC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49V3QucHJvdG9jb2wrIi8vIitXdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Uy5wYXJhbSh2LmRhdGEsdi50cmFkaXRpb25hbCkpLEJ0KFJ0LHYsdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmdi5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHYudHlwZT12LnR5cGUudG9VcHBlckNhc2UoKSx2Lmhhc0NvbnRlbnQ9IU90LnRlc3Qodi50eXBlKSxmPXYudXJsLnJlcGxhY2UocXQsIiIpLHYuaGFzQ29udGVudD92LmRhdGEmJnYucHJvY2Vzc0RhdGEmJjA9PT0odi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYodi5kYXRhPXYuZGF0YS5yZXBsYWNlKGp0LCIrIikpOihvPXYudXJsLnNsaWNlKGYubGVuZ3RoKSx2LmRhdGEmJih2LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHYuZGF0YSkmJihmKz0oRXQudGVzdChmKT8iJiI6Ij8iKSt2LmRhdGEsZGVsZXRlIHYuZGF0YSksITE9PT12LmNhY2hlJiYoZj1mLnJlcGxhY2UoTHQsIiQxIiksbz0oRXQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0N0Lmd1aWQrKytvKSx2LnVybD1mK28pLHYuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh2LmRhdGEmJnYuaGFzQ29udGVudCYmITEhPT12LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHYuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix2LmRhdGFUeXBlc1swXSYmdi5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXT92LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dKygiKiIhPT12LmRhdGFUeXBlc1swXT8iLCAiK0l0KyI7IHE9MC4wMSI6IiIpOnYuYWNjZXB0c1siKiJdKSx2LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGksdi5oZWFkZXJzW2ldKTtpZih2LmJlZm9yZVNlbmQmJighMT09PXYuYmVmb3JlU2VuZC5jYWxsKHksVCx2KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQodi5jb21wbGV0ZSksVC5kb25lKHYuc3VjY2VzcyksVC5mYWlsKHYuZXJyb3IpLGM9QnQoTXQsdix0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx2XSksaClyZXR1cm4gVDt2LmFzeW5jJiYwPHYudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh2LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIsdi5kYXRhVHlwZXMpJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIF90PXswOjIwMCwxMjIzOjIwNH0senQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhenQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4genQseS5hamF4PXp0PSEhenQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHx6dCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChfdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVXQsWHQ9W10sVnQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WHQucG9wKCl8fFMuZXhwYW5kbysiXyIrQ3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVnQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZWdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVnQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KEV0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayxYdC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoVXQ9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1VdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPXZ0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOigibnVtYmVyIj09dHlwZW9mIGYudG9wJiYoZi50b3ArPSJweCIpLCJudW1iZXIiPT10eXBlb2YgZi5sZWZ0JiYoZi5sZWZ0Kz0icHgiKSxjLmNzcyhmKSl9fSxTLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oZSl7Uy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsdCxlKX0pO3ZhciBlLG4scj10aGlzWzBdO3JldHVybiByP3IuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KGU9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOmUudG9wK24ucGFnZVlPZmZzZXQsbGVmdDplLmxlZnQrbi5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9OnZvaWQgMH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoImZpeGVkIj09PVMuY3NzKHIsInBvc2l0aW9uIikpdD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Vsc2V7dD10aGlzLm9mZnNldCgpLG49ci5vd25lckRvY3VtZW50LGU9ci5vZmZzZXRQYXJlbnR8fG4uZG9jdW1lbnRFbGVtZW50O3doaWxlKGUmJihlPT09bi5ib2R5fHxlPT09bi5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLnBhcmVudE5vZGU7ZSYmZSE9PXImJjE9PT1lLm5vZGVUeXBlJiYoKGk9UyhlKS5vZmZzZXQoKSkudG9wKz1TLmNzcyhlLCJib3JkZXJUb3BXaWR0aCIsITApLGkubGVmdCs9Uy5jc3MoZSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3AtUy5jc3MociwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtaS5sZWZ0LVMuY3NzKHIsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShlJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8cmV9KX19KSxTLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxpKXt2YXIgbz0icGFnZVlPZmZzZXQiPT09aTtTLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKHgoZSk/cj1lOjk9PT1lLm5vZGVUeXBlJiYocj1lLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1uKXJldHVybiByP3JbaV06ZVt0XTtyP3Iuc2Nyb2xsVG8obz9yLnBhZ2VYT2Zmc2V0Om4sbz9uOnIucGFnZVlPZmZzZXQpOmVbdF09bn0sdCxlLGFyZ3VtZW50cy5sZW5ndGgpfX0pLFMuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLG4pe1MuY3NzSG9va3Nbbl09JGUoeS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4gdD1CZShlLG4pLE1lLnRlc3QodCk/UyhlKS5wb3NpdGlvbigpW25dKyJweCI6dH0pfSksUy5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxzKXtTLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6cywiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKHIsbyl7Uy5mbltvXT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBlKSxpPXJ8fCghMD09PWV8fCEwPT09dD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHgoZSk/MD09PW8uaW5kZXhPZigib3V0ZXIiKT9lWyJpbm5lciIrYV06ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWUubm9kZVR5cGU/KHI9ZS5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoZS5ib2R5WyJzY3JvbGwiK2FdLHJbInNjcm9sbCIrYV0sZS5ib2R5WyJvZmZzZXQiK2FdLHJbIm9mZnNldCIrYV0sclsiY2xpZW50IithXSkpOnZvaWQgMD09PW4/Uy5jc3MoZSx0LGkpOlMuc3R5bGUoZSx0LG4saSl9LHMsbj9lOnZvaWQgMCxuKX19KX0pLFMuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLFMuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX0saG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9fSksUy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7Uy5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSk7dmFyIEd0PS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZztTLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fFMuZ3VpZCsrLGl9LFMuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/Uy5yZWFkeVdhaXQrKzpTLnJlYWR5KCEwKX0sUy5pc0FycmF5PUFycmF5LmlzQXJyYXksUy5wYXJzZUpTT049SlNPTi5wYXJzZSxTLm5vZGVOYW1lPUEsUy5pc0Z1bmN0aW9uPW0sUy5pc1dpbmRvdz14LFMuY2FtZWxDYXNlPVgsUy50eXBlPXcsUy5ub3c9RGF0ZS5ub3csUy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9Uy50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSxTLnRyaW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UoR3QsIiIpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gU30pO3ZhciBZdD1DLmpRdWVyeSxRdD1DLiQ7cmV0dXJuIFMubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09UyYmKEMuJD1RdCksZSYmQy5qUXVlcnk9PT1TJiYoQy5qUXVlcnk9WXQpLFN9LCJ1bmRlZmluZWQiPT10eXBlb2YgZSYmKEMualF1ZXJ5PUMuJD1TKSxTfSk7Cg=="></script>
<link href="data:text/css,%2Edt%2Dcrosstalk%2Dfade%20%7B%0Aopacity%3A%200%2E2%3B%0A%7D%0Ahtml%20body%20div%2EDTS%20div%2EdataTables%5FscrollBody%20%7B%0Abackground%3A%20none%3B%0A%7D%0A%0Atable%2EdataTable%20%7B%0Adisplay%3A%20table%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewoKLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zOiB1c2luZyBhIGdsb2JhbCBvYmplY3QgRFRXaWRnZXQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZAovLyBpbiBKUygpIGNvZGUsIGUuZy4gZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KGZvbyA9IEpTKCdjb2RlJykpKTsgdW5saWtlIFIncwovLyBkeW5hbWljIHNjb3BpbmcsIHdoZW4gJ2NvZGUnIGlzIGV2YWwoKSdlZCwgSmF2YVNjcmlwdCBkb2VzIG5vdCBrbm93IG9iamVjdHMKLy8gZnJvbSB0aGUgInBhcmVudCBmcmFtZSIsIGUuZy4gSlMoJ0RUV2lkZ2V0Jykgd2lsbCBub3Qgd29yayB1bmxlc3MgaXQgd2FzIG1hZGUKLy8gYSBnbG9iYWwgb2JqZWN0CnZhciBEVFdpZGdldCA9IHt9OwoKLy8gMTIzNDU2NjY2Ljc4OTAgLT4gMTIzLDQ1Niw2NjYuNzg5MAp2YXIgbWFya0ludGVydmFsID0gZnVuY3Rpb24oZCwgZGlnaXRzLCBpbnRlcnZhbCwgbWFyaywgZGVjTWFyaywgcHJlY2lzaW9uKSB7CiAgeCA9IHByZWNpc2lvbiA/IGQudG9QcmVjaXNpb24oZGlnaXRzKSA6IGQudG9GaXhlZChkaWdpdHMpOwogIGlmICghL14tP1tcZC5dKyQvLnRlc3QoeCkpIHJldHVybiB4OwogIHZhciB4diA9IHguc3BsaXQoJy4nKTsKICBpZiAoeHYubGVuZ3RoID4gMikgcmV0dXJuIHg7ICAvLyBzaG91bGQgaGF2ZSBhdCBtb3N0IG9uZSBkZWNpbWFsIHBvaW50CiAgeHZbMF0gPSB4dlswXS5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcQig/PShcXGR7JyArIGludGVydmFsICsgJ30pKyg/IVxcZCkpJywgJ2cnKSwgbWFyayk7CiAgcmV0dXJuIHh2LmpvaW4oZGVjTWFyayk7Cn07CgpEVFdpZGdldC5mb3JtYXRDdXJyZW5jeSA9IGZ1bmN0aW9uKGRhdGEsIGN1cnJlbmN5LCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrLCBiZWZvcmUpIHsKICB2YXIgZCA9IHBhcnNlRmxvYXQoZGF0YSk7CiAgaWYgKGlzTmFOKGQpKSByZXR1cm4gJyc7CiAgdmFyIHJlcyA9IG1hcmtJbnRlcnZhbChkLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrKTsKICByZXMgPSBiZWZvcmUgPyAoL14tLy50ZXN0KHJlcykgPyAnLScgKyBjdXJyZW5jeSArIHJlcy5yZXBsYWNlKC9eLS8sICcnKSA6IGN1cnJlbmN5ICsgcmVzKSA6CiAgICByZXMgKyBjdXJyZW5jeTsKICByZXR1cm4gcmVzOwp9OwoKRFRXaWRnZXQuZm9ybWF0U3RyaW5nID0gZnVuY3Rpb24oZGF0YSwgcHJlZml4LCBzdWZmaXgpIHsKICB2YXIgZCA9IGRhdGE7CiAgaWYgKGQgPT09IG51bGwpIHJldHVybiAnJzsKICByZXR1cm4gcHJlZml4ICsgZCArIHN1ZmZpeDsKfTsKCkRUV2lkZ2V0LmZvcm1hdFBlcmNlbnRhZ2UgPSBmdW5jdGlvbihkYXRhLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrKSB7CiAgdmFyIGQgPSBwYXJzZUZsb2F0KGRhdGEpOwogIGlmIChpc05hTihkKSkgcmV0dXJuICcnOwogIHJldHVybiBtYXJrSW50ZXJ2YWwoZCAqIDEwMCwgZGlnaXRzLCBpbnRlcnZhbCwgbWFyaywgZGVjTWFyaykgKyAnJSc7Cn07CgpEVFdpZGdldC5mb3JtYXRSb3VuZCA9IGZ1bmN0aW9uKGRhdGEsIGRpZ2l0cywgaW50ZXJ2YWwsIG1hcmssIGRlY01hcmspIHsKICB2YXIgZCA9IHBhcnNlRmxvYXQoZGF0YSk7CiAgaWYgKGlzTmFOKGQpKSByZXR1cm4gJyc7CiAgcmV0dXJuIG1hcmtJbnRlcnZhbChkLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrKTsKfTsKCkRUV2lkZ2V0LmZvcm1hdFNpZ25pZiA9IGZ1bmN0aW9uKGRhdGEsIGRpZ2l0cywgaW50ZXJ2YWwsIG1hcmssIGRlY01hcmspIHsKICB2YXIgZCA9IHBhcnNlRmxvYXQoZGF0YSk7CiAgaWYgKGlzTmFOKGQpKSByZXR1cm4gJyc7CiAgcmV0dXJuIG1hcmtJbnRlcnZhbChkLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrLCB0cnVlKTsKfTsKCkRUV2lkZ2V0LmZvcm1hdERhdGUgPSBmdW5jdGlvbihkYXRhLCBtZXRob2QsIHBhcmFtcykgewogIHZhciBkID0gZGF0YTsKICBpZiAoZCA9PT0gbnVsbCkgcmV0dXJuICcnOwogIC8vIChuZXcgRGF0ZSgnMjAxNS0xMC0yOCcpKS50b0RhdGVTdHJpbmcoKSBtYXkgcmV0dXJuIDIwMTUtMTAtMjcgYmVjYXVzZSB0aGUKICAvLyBhY3R1YWwgdGltZSBjcmVhdGVkIGNvdWxkIGJlIGxpa2UgJ1R1ZSBPY3QgMjcgMjAxNSAxOTowMDowMCBHTVQtMDUwMCAoQ0RUKScsCiAgLy8gaS5lLiB0aGUgZGF0ZS1vbmx5IHN0cmluZyBpcyB0cmVhdGVkIGFzIFVUQyB0aW1lIGluc3RlYWQgb2YgbG9jYWwgdGltZQogIGlmICgobWV0aG9kID09PSAndG9EYXRlU3RyaW5nJyB8fCBtZXRob2QgPT09ICd0b0xvY2FsZURhdGVTdHJpbmcnKSAmJiAvXlxkezQsfVxEXGR7Mn1cRFxkezJ9JC8udGVzdChkKSkgewogICAgZCA9IGQuc3BsaXQoL1xELyk7CiAgICBkID0gbmV3IERhdGUoZFswXSwgZFsxXSAtIDEsIGRbMl0pOwogIH0gZWxzZSB7CiAgICBkID0gbmV3IERhdGUoZCk7CiAgfQogIHJldHVybiBkW21ldGhvZF0uYXBwbHkoZCwgcGFyYW1zKTsKfTsKCndpbmRvdy5EVFdpZGdldCA9IERUV2lkZ2V0OwoKdmFyIHRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhKSB7CiAgcmV0dXJuIGEubGVuZ3RoID09PSAwID8gYSA6IEhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQoYSk7Cn07Cgp2YXIgY3Jvc3N0YWxrUGx1Z2luc0luc3RhbGxlZCA9IGZhbHNlOwoKZnVuY3Rpb24gbWF5YmVJbnN0YWxsQ3Jvc3N0YWxrUGx1Z2lucygpIHsKICBpZiAoY3Jvc3N0YWxrUGx1Z2luc0luc3RhbGxlZCkKICAgIHJldHVybjsKICBjcm9zc3RhbGtQbHVnaW5zSW5zdGFsbGVkID0gdHJ1ZTsKCiAgJC5mbi5kYXRhVGFibGUuZXh0LmFmbkZpbHRlcmluZy5wdXNoKAogICAgZnVuY3Rpb24ob1NldHRpbmdzLCBhRGF0YSwgaURhdGFJbmRleCkgewogICAgICB2YXIgY3RmaWx0ZXIgPSBvU2V0dGluZ3MublRhYmxlLmN0ZmlsdGVyOwogICAgICBpZiAoY3RmaWx0ZXIgJiYgIWN0ZmlsdGVyW2lEYXRhSW5kZXhdKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIHZhciBjdHNlbGVjdCA9IG9TZXR0aW5ncy5uVGFibGUuY3RzZWxlY3Q7CiAgICAgIGlmIChjdHNlbGVjdCAmJiAhY3RzZWxlY3RbaURhdGFJbmRleF0pCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgKTsKfQoKSFRNTFdpZGdldHMud2lkZ2V0KHsKICBuYW1lOiAiZGF0YXRhYmxlcyIsCiAgdHlwZTogIm91dHB1dCIsCiAgcmVuZGVyT25OdWxsVmFsdWU6IHRydWUsCiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICQoZWwpLmh0bWwoJyZuYnNwOycpOwogICAgcmV0dXJuIHsKICAgICAgZGF0YTogbnVsbCwKICAgICAgY3RmaWx0ZXJIYW5kbGU6IG5ldyBjcm9zc3RhbGsuRmlsdGVySGFuZGxlKCksCiAgICAgIGN0ZmlsdGVyU3Vic2NyaXB0aW9uOiBudWxsLAogICAgICBjdHNlbGVjdEhhbmRsZTogbmV3IGNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoKSwKICAgICAgY3RzZWxlY3RTdWJzY3JpcHRpb246IG51bGwKICAgIH07CiAgfSwKICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oZWwsIGRhdGEsIGluc3RhbmNlKSB7CiAgICBpZiAoZWwub2Zmc2V0V2lkdGggPT09IDAgfHwgZWwub2Zmc2V0SGVpZ2h0ID09PSAwKSB7CiAgICAgIGluc3RhbmNlLmRhdGEgPSBkYXRhOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnN0YW5jZS5kYXRhID0gbnVsbDsKICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICRlbC5lbXB0eSgpOwoKICAgIGlmIChkYXRhID09PSBudWxsKSB7CiAgICAgICRlbC5hcHBlbmQoJyZuYnNwOycpOwogICAgICAvLyBjbGVhciBwcmV2aW91cyBTaGlueSBpbnB1dHMgKGlmIGFueSkKICAgICAgZm9yICh2YXIgaSBpbiBpbnN0YW5jZS5jbGVhcklucHV0cykgaW5zdGFuY2UuY2xlYXJJbnB1dHNbaV0oKTsKICAgICAgaW5zdGFuY2UuY2xlYXJJbnB1dHMgPSB7fTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBjcm9zc3RhbGtPcHRpb25zID0gZGF0YS5jcm9zc3RhbGtPcHRpb25zOwogICAgaWYgKCFjcm9zc3RhbGtPcHRpb25zKSBjcm9zc3RhbGtPcHRpb25zID0gewogICAgICAna2V5JzogbnVsbCwgJ2dyb3VwJzogbnVsbAogICAgfTsKICAgIGlmIChjcm9zc3RhbGtPcHRpb25zLmdyb3VwKSB7CiAgICAgIG1heWJlSW5zdGFsbENyb3NzdGFsa1BsdWdpbnMoKTsKICAgICAgaW5zdGFuY2UuY3RmaWx0ZXJIYW5kbGUuc2V0R3JvdXAoY3Jvc3N0YWxrT3B0aW9ucy5ncm91cCk7CiAgICAgIGluc3RhbmNlLmN0c2VsZWN0SGFuZGxlLnNldEdyb3VwKGNyb3NzdGFsa09wdGlvbnMuZ3JvdXApOwogICAgfQoKICAgIC8vIGlmIHdlIGFyZSBpbiB0aGUgdmlld2VyIHRoZW4gd2UgYWx3YXlzIHdhbnQgdG8gZmlsbENvbnRhaW5lciBhbmQKICAgIC8vIGFuZCBhdXRvSGlkZU5hdmlnYXRpb24gKHVubGVzcyB0aGUgdXNlciBoYXMgZXhwbGljaXRseSBzZXQgdGhlc2UpCiAgICBpZiAod2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUpIHsKICAgICAgaWYgKCFkYXRhLmhhc093blByb3BlcnR5KCJmaWxsQ29udGFpbmVyIikpCiAgICAgICAgZGF0YS5maWxsQ29udGFpbmVyID0gdHJ1ZTsKICAgICAgaWYgKCFkYXRhLmhhc093blByb3BlcnR5KCJhdXRvSGlkZU5hdmlnYXRpb24iKSkKICAgICAgICBkYXRhLmF1dG9IaWRlTmF2aWdhdGlvbiA9IHRydWU7CiAgICB9CgogICAgLy8gcHJvcGFnYXRlIGZpbGxDb250YWluZXIgdG8gaW5zdGFuY2UgKHNvIHdlIGhhdmUgaXQgaW4gcmVzaXplKQogICAgaW5zdGFuY2UuZmlsbENvbnRhaW5lciA9IGRhdGEuZmlsbENvbnRhaW5lcjsKCiAgICB2YXIgY2VsbHMgPSBkYXRhLmRhdGE7CgogICAgaWYgKGNlbGxzIGluc3RhbmNlb2YgQXJyYXkpIGNlbGxzID0gdHJhbnNwb3NlQXJyYXkyRChjZWxscyk7CgogICAgJGVsLmFwcGVuZChkYXRhLmNvbnRhaW5lcik7CiAgICB2YXIgJHRhYmxlID0gJGVsLmZpbmQoJ3RhYmxlJyk7CiAgICBpZiAoZGF0YS5jbGFzcykgJHRhYmxlLmFkZENsYXNzKGRhdGEuY2xhc3MpOwogICAgaWYgKGRhdGEuY2FwdGlvbikgJHRhYmxlLnByZXBlbmQoZGF0YS5jYXB0aW9uKTsKCiAgICBpZiAoIWRhdGEuc2VsZWN0aW9uKSBkYXRhLnNlbGVjdGlvbiA9IHsKICAgICAgbW9kZTogJ25vbmUnLCBzZWxlY3RlZDogbnVsbCwgdGFyZ2V0OiAncm93Jywgc2VsZWN0YWJsZTogbnVsbAogICAgfTsKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgZGF0YS5zZWxlY3Rpb24ubW9kZSAhPT0gJ25vbmUnICYmCiAgICAgICAgZGF0YS5zZWxlY3Rpb24udGFyZ2V0ID09PSAncm93K2NvbHVtbicpIHsKICAgICAgaWYgKCR0YWJsZS5jaGlsZHJlbigndGZvb3QnKS5sZW5ndGggPT09IDApIHsKICAgICAgICAkdGFibGUuYXBwZW5kKCQoJzx0Zm9vdD4nKSk7CiAgICAgICAgJHRhYmxlLmZpbmQoJ3RoZWFkIHRyJykuY2xvbmUoKS5hcHBlbmRUbygkdGFibGUuZmluZCgndGZvb3QnKSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBjb2x1bW4gZmlsdGVycwogICAgdmFyIGZpbHRlclJvdzsKICAgIHN3aXRjaCAoZGF0YS5maWx0ZXIpIHsKICAgICAgY2FzZSAndG9wJzoKICAgICAgICAkdGFibGUuY2hpbGRyZW4oJ3RoZWFkJykuYXBwZW5kKGRhdGEuZmlsdGVySFRNTCk7CiAgICAgICAgZmlsdGVyUm93ID0gJHRhYmxlLmZpbmQoJ3RoZWFkIHRyOmxhc3QgdGQnKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnYm90dG9tJzoKICAgICAgICBpZiAoJHRhYmxlLmNoaWxkcmVuKCd0Zm9vdCcpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgJHRhYmxlLmFwcGVuZCgkKCc8dGZvb3Q+JykpOwogICAgICAgIH0KICAgICAgICAkdGFibGUuY2hpbGRyZW4oJ3Rmb290JykucHJlcGVuZChkYXRhLmZpbHRlckhUTUwpOwogICAgICAgIGZpbHRlclJvdyA9ICR0YWJsZS5maW5kKCd0Zm9vdCB0cjpmaXJzdCB0ZCcpOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHZhciBvcHRpb25zID0geyBzZWFyY2hEZWxheTogMTAwMCB9OwogICAgaWYgKGNlbGxzICE9PSBudWxsKSAkLmV4dGVuZChvcHRpb25zLCB7CiAgICAgIGRhdGE6IGNlbGxzCiAgICB9KTsKCiAgICAvLyBvcHRpb25zIGZvciBmaWxsQ29udGFpbmVyCiAgICB2YXIgYm9vdHN0cmFwQWN0aXZlID0gdHlwZW9mKCQuZm4ucG9wb3ZlcikgIT0gJ3VuZGVmaW5lZCc7CiAgICBpZiAoaW5zdGFuY2UuZmlsbENvbnRhaW5lcikgewoKICAgICAgLy8gZm9yY2Ugc2Nyb2xsWC9zY3JvbGxZIGFuZCB0dXJuIG9mZiBhdXRvV2lkdGgKICAgICAgb3B0aW9ucy5zY3JvbGxYID0gdHJ1ZTsKICAgICAgb3B0aW9ucy5zY3JvbGxZID0gIjEwMHB4IjsgLy8gY2FuIGJlIGFueSB2YWx1ZSwgd2UnbGwgYWRqdXN0IGJlbG93CgogICAgICAvLyBpZiB3ZSBhcmVuJ3QgcGFnaW5hdGluZyB0aGVuIG1vdmUgYXJvdW5kIHRoZSBpbmZvL2ZpbHRlciBjb250cm9scwogICAgICAvLyB0byBzYXZlIHNwYWNlIGF0IHRoZSBib3R0b20gYW5kIHJlcGhyYXNlIHRoZSBpbmZvIGNhbGxiYWNrCiAgICAgIGlmIChkYXRhLm9wdGlvbnMucGFnaW5nID09PSBmYWxzZSkgewoKICAgICAgICAvLyB3ZSBrbm93IGhvdyB0byBkbyB0aGlzIGNsZWFubHkgZm9yIGJvb3RzdHJhcCwgbm90IHNvIG11Y2gKICAgICAgICAvLyBmb3Igb3RoZXIgdGhlbWVzL2xheW91dHMKICAgICAgICBpZiAoYm9vdHN0cmFwQWN0aXZlKSB7CiAgICAgICAgICBvcHRpb25zLmRvbSA9ICI8J3Jvdyc8J2NvbC1zbS00J2k+PCdjb2wtc20tOCdmPj4iICsKICAgICAgICAgICAgICAgICAgICAgICAgIjwncm93JzwnY29sLXNtLTEyJ3RyPj4iOwogICAgICAgIH0KCiAgICAgICAgb3B0aW9ucy5mbkluZm9DYWxsYmFjayA9IGZ1bmN0aW9uKG9TZXR0aW5ncywgaVN0YXJ0LCBpRW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaU1heCwgaVRvdGFsLCBzUHJlKSB7CiAgICAgICAgICByZXR1cm4gTnVtYmVyKGlUb3RhbCkudG9Mb2NhbGVTdHJpbmcoKSArICIgcmVjb3JkcyI7CiAgICAgICAgfTsKICAgICAgfQogICAgfQoKICAgIC8vIGF1dG8gaGlkZSBuYXZpZ2F0aW9uIGlmIHJlcXVlc3RlZAogICAgLy8gTm90ZSwgdGhpcyBvbmx5IHdvcmtzIG9uIGNsaWVudC1zaWRlIHByb2Nlc3NpbmcgbW9kZSBhcyBvbiBzZXJ2ZXItc2lkZSwKICAgIC8vIGNlbGxzIChkYXRhLmRhdGEpIGlzIG51bGw7IEluIGFkZGl0aW9uLCB3ZSByZXF1aXJlIHRoZSBwYWdlTGVuZ3RoIG9wdGlvbgogICAgLy8gYmVpbmcgcHJvdmlkZWQgZXhwbGljaXRseSB0byBlbmFibGUgdGhpcy4gRGVzcGl0ZSB3ZSBtYXkgYmUgYWJsZSB0byBkZWR1Y2UKICAgIC8vIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHBhZ2VMZW5ndGgsIGl0IG1heSBjb21wbGljYXRlIHRoaW5ncyBzbyB3ZSdkIHJhdGhlcgogICAgLy8gcHV0IHRoaXMgcmVzcG9uc2libGl0eSB0byB1c2VycyBhbmQgd2FybiB0aGVtIG9uIHRoZSBSIHNpZGUuCiAgICBpZiAoZGF0YS5hdXRvSGlkZU5hdmlnYXRpb24gPT09IHRydWUgJiYgZGF0YS5vcHRpb25zLnBhZ2luZyAhPT0gZmFsc2UpIHsKICAgICAgLy8gc3RyaXAgYWxsIG5hdiBpZiBsZW5ndGggPj0gY2VsbHMKICAgICAgaWYgKChjZWxscyBpbnN0YW5jZW9mIEFycmF5KSAmJiBkYXRhLm9wdGlvbnMucGFnZUxlbmd0aCA+PSBjZWxscy5sZW5ndGgpCiAgICAgICAgb3B0aW9ucy5kb20gPSBib290c3RyYXBBY3RpdmUgPyAiPCdyb3cnPCdjb2wtc20tMTIndHI+PiIgOiAidCI7CiAgICAgIC8vIGFsdGVybmF0aXZlbHkgbGVhbiB0aGluZ3Mgb3V0IGZvciBmbGV4ZGFzaGJvYXJkIG1vYmlsZSBwb3J0cmFpdAogICAgICBlbHNlIGlmIChib290c3RyYXBBY3RpdmUgJiYgd2luZG93LkZsZXhEYXNoYm9hcmQgJiYgd2luZG93LkZsZXhEYXNoYm9hcmQuaXNNb2JpbGVQaG9uZSgpKQogICAgICAgIG9wdGlvbnMuZG9tID0gIjwncm93JzwnY29sLXNtLTEyJ2Y+PiIgKwogICAgICAgICAgICAgICAgICAgICAgIjwncm93JzwnY29sLXNtLTEyJ3RyPj4iICArCiAgICAgICAgICAgICAgICAgICAgICAiPCdyb3cnPCdjb2wtc20tMTIncD4+IjsKICAgIH0KCiAgICAkLmV4dGVuZCh0cnVlLCBvcHRpb25zLCBkYXRhLm9wdGlvbnMgfHwge30pOwoKICAgIHZhciBzZWFyY2hDb2xzID0gb3B0aW9ucy5zZWFyY2hDb2xzOwogICAgaWYgKHNlYXJjaENvbHMpIHsKICAgICAgc2VhcmNoQ29scyA9IHNlYXJjaENvbHMubWFwKGZ1bmN0aW9uKHgpIHsKICAgICAgICByZXR1cm4geCA9PT0gbnVsbCA/ICcnIDogeC5zZWFyY2g7CiAgICAgIH0pOwogICAgICAvLyBGSVhNRTogdGhpcyBtZWFucyBJIGRvbid0IHJlc3BlY3QgdGhlIGVzY2FwZVJlZ2V4IHNldHRpbmcKICAgICAgZGVsZXRlIG9wdGlvbnMuc2VhcmNoQ29sczsKICAgIH0KCiAgICAvLyBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nPwogICAgdmFyIHNlcnZlciA9IG9wdGlvbnMuc2VydmVyU2lkZSA9PT0gdHJ1ZTsKCiAgICAvLyB1c2UgdGhlIGRhdGFTcmMgZnVuY3Rpb24gdG8gcHJlLXByb2Nlc3MgSlNPTiBkYXRhIHJldHVybmVkIGZyb20gUgogICAgdmFyIERUX3Jvd3NfYWxsID0gW10sIERUX3Jvd3NfY3VycmVudCA9IFtdOwogICAgaWYgKHNlcnZlciAmJiBIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgdHlwZW9mIG9wdGlvbnMuYWpheCA9PT0gJ29iamVjdCcgJiYKICAgICAgICAvXnNlc3Npb25cL1tcZGEtel0rXC9kYXRhb2JqLy50ZXN0KG9wdGlvbnMuYWpheC51cmwpICYmICFvcHRpb25zLmFqYXguZGF0YVNyYykgewogICAgICBvcHRpb25zLmFqYXguZGF0YVNyYyA9IGZ1bmN0aW9uKGpzb24pIHsKICAgICAgICBEVF9yb3dzX2FsbCA9ICQubWFrZUFycmF5KGpzb24uRFRfcm93c19hbGwpOwogICAgICAgIERUX3Jvd3NfY3VycmVudCA9ICQubWFrZUFycmF5KGpzb24uRFRfcm93c19jdXJyZW50KTsKICAgICAgICB2YXIgZGF0YSA9IGpzb24uZGF0YTsKICAgICAgICBpZiAoIWNvbFJlb3JkZXJFbmFibGVkKCkpIHJldHVybiBkYXRhOwogICAgICAgIHZhciB0YWJsZSA9ICR0YWJsZS5EYXRhVGFibGUoKSwgb3JkZXIgPSB0YWJsZS5jb2xSZW9yZGVyLm9yZGVyKCksIGZsYWcgPSB0cnVlLCBpLCBqLCByb3c7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSBpZiAob3JkZXJbaV0gIT09IGkpIGZsYWcgPSBmYWxzZTsKICAgICAgICBpZiAoZmxhZykgcmV0dXJuIGRhdGE7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHJvdyA9IGRhdGFbaV0uc2xpY2UoKTsKICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvcmRlci5sZW5ndGg7ICsraikgZGF0YVtpXVtqXSA9IHJvd1tvcmRlcltqXV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRhOwogICAgICB9OwogICAgfQoKICAgIHZhciB0aGl6ID0gdGhpczsKICAgIGlmIChpbnN0YW5jZS5maWxsQ29udGFpbmVyKSAkdGFibGUub24oJ2luaXQuZHQnLCBmdW5jdGlvbihlKSB7CiAgICAgIHRoaXouZmlsbEF2YWlsYWJsZUhlaWdodChlbCwgJChlbCkuaW5uZXJIZWlnaHQoKSk7CiAgICB9KTsKICAgIC8vIElmIHRoZSBwYWdlIGNvbnRhaW5zIHNlcnZlcmFsIGRhdGF0YWJsZXMgYW5kIG9uZSBvZiB3aGljaCBlbmFibGVzIGNvbFJlb3JkZXIsCiAgICAvLyB0aGUgdGFibGUuY29sUmVvcmRlci5vcmRlcigpIGZ1bmN0aW9uIHdpbGwgZXhpc3QgYnV0IHRocm93cyBlcnJvciB3aGVuIGNhbGxlZC4KICAgIC8vIFNvIGl0IHNlZW1zIGxpa2UgdGhlIG9ubHkgd2F5IHRvIGtub3cgaWYgY29sUmVvcmRlciBpcyBlbmFibGVkIG9yIG5vdCBpcyB0bwogICAgLy8gY2hlY2sgdGhlIG9wdGlvbnMuCiAgICB2YXIgY29sUmVvcmRlckVuYWJsZWQgPSBmdW5jdGlvbigpIHsgcmV0dXJuICJjb2xSZW9yZGVyIiBpbiBvcHRpb25zOyB9OwogICAgdmFyIHRhYmxlID0gJHRhYmxlLkRhdGFUYWJsZShvcHRpb25zKTsKICAgICRlbC5kYXRhKCdkYXRhdGFibGUnLCB0YWJsZSk7CgogICAgLy8gVW5yZWdpc3RlciBwcmV2aW91cyBDcm9zc3RhbGsgZXZlbnQgc3Vic2NyaXB0aW9ucywgaWYgdGhleSBleGlzdAogICAgaWYgKGluc3RhbmNlLmN0ZmlsdGVyU3Vic2NyaXB0aW9uKSB7CiAgICAgIGluc3RhbmNlLmN0ZmlsdGVySGFuZGxlLm9mZigiY2hhbmdlIiwgaW5zdGFuY2UuY3RmaWx0ZXJTdWJzY3JpcHRpb24pOwogICAgICBpbnN0YW5jZS5jdGZpbHRlclN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICB9CiAgICBpZiAoaW5zdGFuY2UuY3RzZWxlY3RTdWJzY3JpcHRpb24pIHsKICAgICAgaW5zdGFuY2UuY3RzZWxlY3RIYW5kbGUub2ZmKCJjaGFuZ2UiLCBpbnN0YW5jZS5jdHNlbGVjdFN1YnNjcmlwdGlvbik7CiAgICAgIGluc3RhbmNlLmN0c2VsZWN0U3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIH0KCiAgICBpZiAoIWNyb3NzdGFsa09wdGlvbnMuZ3JvdXApIHsKICAgICAgJHRhYmxlWzBdLmN0ZmlsdGVyID0gbnVsbDsKICAgICAgJHRhYmxlWzBdLmN0c2VsZWN0ID0gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBrZXkgPSBjcm9zc3RhbGtPcHRpb25zLmtleTsKICAgICAgZnVuY3Rpb24ga2V5c1RvTWF0Y2hlcyhrZXlzKSB7CiAgICAgICAgaWYgKCFrZXlzKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHNlbGVjdGVkS2V5cyA9IHt9OwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHNlbGVjdGVkS2V5c1trZXlzW2ldXSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHt9OwogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXkubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1trZXlbal1dKQogICAgICAgICAgICAgIG1hdGNoZXNbal0gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG1hdGNoZXM7CiAgICAgICAgfQogICAgICB9CgogICAgICBmdW5jdGlvbiBhcHBseUNyb3NzdGFsa0ZpbHRlcihlKSB7CiAgICAgICAgJHRhYmxlWzBdLmN0ZmlsdGVyID0ga2V5c1RvTWF0Y2hlcyhlLnZhbHVlKTsKICAgICAgICB0YWJsZS5kcmF3KCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UuY3RmaWx0ZXJTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS5jdGZpbHRlckhhbmRsZS5vbigiY2hhbmdlIiwgYXBwbHlDcm9zc3RhbGtGaWx0ZXIpOwogICAgICBhcHBseUNyb3NzdGFsa0ZpbHRlcih7dmFsdWU6IGluc3RhbmNlLmN0ZmlsdGVySGFuZGxlLmZpbHRlcmVkS2V5c30pOwoKICAgICAgZnVuY3Rpb24gYXBwbHlDcm9zc3RhbGtTZWxlY3Rpb24oZSkgewogICAgICAgIGlmIChlLnNlbmRlciAhPT0gaW5zdGFuY2UuY3RzZWxlY3RIYW5kbGUpIHsKICAgICAgICAgIHRhYmxlCiAgICAgICAgICAgIC5yb3dzKCcuJyArIHNlbENsYXNzLCB7c2VhcmNoOiAnYXBwbGllZCd9KQogICAgICAgICAgICAubm9kZXMoKQogICAgICAgICAgICAudG8kKCkKICAgICAgICAgICAgLnJlbW92ZUNsYXNzKHNlbENsYXNzKTsKICAgICAgICAgIGlmIChzZWxlY3RlZFJvd3MpCiAgICAgICAgICAgIGNoYW5nZUlucHV0KCdyb3dzX3NlbGVjdGVkJywgc2VsZWN0ZWRSb3dzKCksIHZvaWQgMCwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZS5zZW5kZXIgIT09IGluc3RhbmNlLmN0c2VsZWN0SGFuZGxlICYmIGUudmFsdWUgJiYgZS52YWx1ZS5sZW5ndGgpIHsKICAgICAgICAgIHZhciBtYXRjaGVzID0ga2V5c1RvTWF0Y2hlcyhlLnZhbHVlKTsKCiAgICAgICAgICAvLyBwZXJzaXN0ZW50IHNlbGVjdGlvbiB3aXRoIHBsb3RseSAoJiBsZWFmbGV0KQogICAgICAgICAgdmFyIGN0T3B0cyA9IGNyb3NzdGFsay52YXIoInBsb3RseUNyb3NzdGFsa09wdHMiKS5nZXQoKSB8fCB7fTsKICAgICAgICAgIGlmIChjdE9wdHMucGVyc2lzdGVudCA9PT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9ICQuZXh0ZW5kKG1hdGNoZXMsICR0YWJsZVswXS5jdHNlbGVjdCk7CiAgICAgICAgICB9CgogICAgICAgICAgJHRhYmxlWzBdLmN0c2VsZWN0ID0gbWF0Y2hlczsKICAgICAgICAgIHRhYmxlLmRyYXcoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCR0YWJsZVswXS5jdHNlbGVjdCkgewogICAgICAgICAgICAkdGFibGVbMF0uY3RzZWxlY3QgPSBudWxsOwogICAgICAgICAgICB0YWJsZS5kcmF3KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGluc3RhbmNlLmN0c2VsZWN0U3Vic2NyaXB0aW9uID0gaW5zdGFuY2UuY3RzZWxlY3RIYW5kbGUub24oImNoYW5nZSIsIGFwcGx5Q3Jvc3N0YWxrU2VsZWN0aW9uKTsKICAgICAgLy8gVE9ETzogVGhpcyBuZXh0IGxpbmUgZG9lc24ndCBzZWVtIHRvIHdvcmsgd2hlbiByZW5kZXJEYXRhVGFibGUgaXMgdXNlZAogICAgICBhcHBseUNyb3NzdGFsa1NlbGVjdGlvbih7dmFsdWU6IGluc3RhbmNlLmN0c2VsZWN0SGFuZGxlLnZhbHVlfSk7CiAgICB9CgogICAgdmFyIGluQXJyYXkgPSBmdW5jdGlvbih2YWwsIGFycmF5KSB7CiAgICAgIHJldHVybiAkLmluQXJyYXkodmFsLCAkLm1ha2VBcnJheShhcnJheSkpID4gLTE7CiAgICB9OwoKICAgIC8vIGVuY29kZSArIHRvICUyQiB3aGVuIHNlYXJjaGluZyBpbiB0aGUgdGFibGUgb24gc2VydmVyIHNpZGUsIGJlY2F1c2UKICAgIC8vIHNoaW55OjpwYXJzZVF1ZXJ5U3RyaW5nKCkgdHJlYXRzICsgYXMgc3BhY2VzLCBhbmQgRGF0YVRhYmxlcyBkb2VzIG5vdAogICAgLy8gZW5jb2RlICsgdG8gJTJCIChvciAlIHRvICUyNSkgd2hlbiBzZW5kaW5nIHRoZSByZXF1ZXN0CiAgICB2YXIgZW5jb2RlX3BsdXMgPSBmdW5jdGlvbih4KSB7CiAgICAgIHJldHVybiBzZXJ2ZXIgPyB4LnJlcGxhY2UoLyUvZywgJyUyNScpLnJlcGxhY2UoL1wrL2csICclMkInKSA6IHg7CiAgICB9OwoKICAgIC8vIHNlYXJjaCB0aGUgaS10aCBjb2x1bW4KICAgIHZhciBzZWFyY2hDb2x1bW4gPSBmdW5jdGlvbihpLCB2YWx1ZSkgewogICAgICB2YXIgcmVnZXggPSBmYWxzZSwgY2kgPSB0cnVlOwogICAgICBpZiAob3B0aW9ucy5zZWFyY2gpIHsKICAgICAgICByZWdleCA9IG9wdGlvbnMuc2VhcmNoLnJlZ2V4LAogICAgICAgIGNpID0gb3B0aW9ucy5zZWFyY2guY2FzZUluc2Vuc2l0aXZlICE9PSBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdGFibGUuY29sdW1uKGkpLnNlYXJjaChlbmNvZGVfcGx1cyh2YWx1ZSksIHJlZ2V4LCAhcmVnZXgsIGNpKTsKICAgIH07CgogICAgaWYgKGRhdGEuZmlsdGVyICE9PSAnbm9uZScpIHsKCiAgICAgIGZpbHRlclJvdy5lYWNoKGZ1bmN0aW9uKGksIHRkKSB7CgogICAgICAgIHZhciAkdGQgPSAkKHRkKSwgdHlwZSA9ICR0ZC5kYXRhKCd0eXBlJyksIGZpbHRlcjsKICAgICAgICB2YXIgJGlucHV0ID0gJHRkLmNoaWxkcmVuKCdkaXYnKS5maXJzdCgpLmNoaWxkcmVuKCdpbnB1dCcpOwogICAgICAgICRpbnB1dC5wcm9wKCdkaXNhYmxlZCcsICF0YWJsZS5zZXR0aW5ncygpWzBdLmFvQ29sdW1uc1tpXS5iU2VhcmNoYWJsZSB8fCB0eXBlID09PSAnZGlzYWJsZWQnKTsKICAgICAgICAkaW5wdXQub24oJ2lucHV0IGJsdXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICRpbnB1dC5uZXh0KCdzcGFuJykudG9nZ2xlKEJvb2xlYW4oJGlucHV0LnZhbCgpKSk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gQm9vdHN0cmFwIHNldHMgcG9pbnRlci1ldmVudHMgdG8gbm9uZSBhbmQgd2Ugd29uJ3QgYmUgYWJsZSB0byBjbGljawogICAgICAgIC8vIHRoZSBjbGVhciBidXR0b24KICAgICAgICAkaW5wdXQubmV4dCgnc3BhbicpLmNzcygncG9pbnRlci1ldmVudHMnLCAnYXV0bycpLmhpZGUoKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICQodGhpcykuaGlkZSgpLnByZXYoJ2lucHV0JykudmFsKCcnKS50cmlnZ2VyKCdpbnB1dCcpLmZvY3VzKCk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHNlYXJjaENvbDsgIC8vIHNlYXJjaCBzdHJpbmcgZm9yIHRoaXMgY29sdW1uCiAgICAgICAgaWYgKHNlYXJjaENvbHMgJiYgc2VhcmNoQ29sc1tpXSkgewogICAgICAgICAgc2VhcmNoQ29sID0gc2VhcmNoQ29sc1tpXTsKICAgICAgICAgICRpbnB1dC52YWwoc2VhcmNoQ29sKS50cmlnZ2VyKCdpbnB1dCcpOwogICAgICAgIH0KICAgICAgICB2YXIgJHggPSAkdGQuY2hpbGRyZW4oJ2RpdicpLmxhc3QoKTsKCiAgICAgICAgLy8gcmVtb3ZlIHRoZSBvdmVyZmxvdzogaGlkZGVuIGF0dHJpYnV0ZSBvZiB0aGUgc2Nyb2xsSGVhZAogICAgICAgIC8vIChvdGhlcndpc2UgdGhlIHNjcm9sbGluZyB0YWJsZSBib2R5IG9ic2N1cmVzIHRoZSBmaWx0ZXJzKQogICAgICAgIC8vIFRoZSB3b3JrYXJvdW5kIGFuZCB0aGUgZGlzY3Vzc2lvbiBmcm9tCiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzU1NCNpc3N1ZWNvbW1lbnQtNTE4MDA3MzQ3CiAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBmaWx0ZXIgc2VsZWN0aW9uIHdpbGwgbm90IGJlIGFuY2hvcmVkIHRvIHRoZSB2YWx1ZXMKICAgICAgICAvLyB3aGVuIHRoZSBjb2x1bW5zIG51bWJlciBpcyBtYW55IGFuZCBzY3JvbGxYIGlzIGVuYWJsZWQuCiAgICAgICAgdmFyIHNjcm9sbEhlYWQgPSAkKGVsKS5maW5kKCcuZGF0YVRhYmxlc19zY3JvbGxIZWFkLC5kYXRhVGFibGVzX3Njcm9sbEZvb3QnKTsKICAgICAgICB2YXIgY3NzT3ZlcmZsb3dIZWFkID0gc2Nyb2xsSGVhZC5jc3MoJ292ZXJmbG93Jyk7CiAgICAgICAgdmFyIHNjcm9sbEJvZHkgPSAkKGVsKS5maW5kKCcuZGF0YVRhYmxlc19zY3JvbGxCb2R5Jyk7CiAgICAgICAgdmFyIGNzc092ZXJmbG93Qm9keSA9IHNjcm9sbEJvZHkuY3NzKCdvdmVyZmxvdycpOwogICAgICAgIHZhciBzY3JvbGxUYWJsZSA9ICQoZWwpLmZpbmQoJy5kYXRhVGFibGVzX3Njcm9sbCcpOwogICAgICAgIHZhciBjc3NPdmVyZmxvd1RhYmxlID0gc2Nyb2xsVGFibGUuY3NzKCdvdmVyZmxvdycpOwogICAgICAgIGlmIChjc3NPdmVyZmxvd0hlYWQgPT09ICdoaWRkZW4nKSB7CiAgICAgICAgICAkeC5vbignc2hvdyBoaWRlJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoZS50eXBlID09PSAnc2hvdycpIHsKICAgICAgICAgICAgICBzY3JvbGxIZWFkLmNzcygnb3ZlcmZsb3cnLCAndmlzaWJsZScpOwogICAgICAgICAgICAgIHNjcm9sbEJvZHkuY3NzKCdvdmVyZmxvdycsICd2aXNpYmxlJyk7CiAgICAgICAgICAgICAgc2Nyb2xsVGFibGUuY3NzKCdvdmVyZmxvdy14JywgJ3Njcm9sbCcpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHNjcm9sbEhlYWQuY3NzKCdvdmVyZmxvdycsIGNzc092ZXJmbG93SGVhZCk7CiAgICAgICAgICAgICAgc2Nyb2xsQm9keS5jc3MoJ292ZXJmbG93JywgY3NzT3ZlcmZsb3dCb2R5KTsKICAgICAgICAgICAgICBzY3JvbGxUYWJsZS5jc3MoJ292ZXJmbG93LXgnLCBjc3NPdmVyZmxvd1RhYmxlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICAkeC5jc3MoJ3otaW5kZXgnLCAyNSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaW5BcnJheSh0eXBlLCBbJ2ZhY3RvcicsICdsb2dpY2FsJ10pKSB7CiAgICAgICAgICAkaW5wdXQub24oewogICAgICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgJGlucHV0LnBhcmVudCgpLmhpZGUoKTsgJHguc2hvdygpLnRyaWdnZXIoJ3Nob3cnKTsgZmlsdGVyWzBdLnNlbGVjdGl6ZS5mb2N1cygpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKCRpbnB1dC52YWwoKSA9PT0gJycpIGZpbHRlclswXS5zZWxlY3RpemUuc2V0VmFsdWUoW10pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciAkaW5wdXQyID0gJHguY2hpbGRyZW4oJ3NlbGVjdCcpOwogICAgICAgICAgZmlsdGVyID0gJGlucHV0Mi5zZWxlY3RpemUoewogICAgICAgICAgICBvcHRpb25zOiAkaW5wdXQyLmRhdGEoJ29wdGlvbnMnKS5tYXAoZnVuY3Rpb24odiwgaSkgewogICAgICAgICAgICAgIHJldHVybiAoe3RleHQ6IHYsIHZhbHVlOiB2fSk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBwbHVnaW5zOiBbJ3JlbW92ZV9idXR0b24nXSwKICAgICAgICAgICAgaGlkZVNlbGVjdGVkOiB0cnVlLAogICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHZhbHVlID0gW107IC8vIGNvbXBhdGliaWxpdHkgd2l0aCBqUXVlcnkgMy4wCiAgICAgICAgICAgICAgJGlucHV0LnZhbCh2YWx1ZS5sZW5ndGggPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiAnJyk7CiAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCkgJGlucHV0LnRyaWdnZXIoJ2lucHV0Jyk7CiAgICAgICAgICAgICAgJGlucHV0LmF0dHIoJ3RpdGxlJywgJGlucHV0LnZhbCgpKTsKICAgICAgICAgICAgICBpZiAoc2VydmVyKSB7CiAgICAgICAgICAgICAgICB0YWJsZS5jb2x1bW4oaSkuc2VhcmNoKHZhbHVlLmxlbmd0aCA/IGVuY29kZV9wbHVzKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgOiAnJykuZHJhdygpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyB0dXJuIG9mZiBmaWx0ZXIgaWYgbm90aGluZyBzZWxlY3RlZAogICAgICAgICAgICAgICR0ZC5kYXRhKCdmaWx0ZXInLCB2YWx1ZS5sZW5ndGggPiAwKTsKICAgICAgICAgICAgICB0YWJsZS5kcmF3KCk7ICAvLyByZWRyYXcgdGFibGUsIGFuZCBmaWx0ZXJzIHdpbGwgYmUgYXBwbGllZAogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChzZWFyY2hDb2wpIGZpbHRlclswXS5zZWxlY3RpemUuc2V0VmFsdWUoSlNPTi5wYXJzZShzZWFyY2hDb2wpKTsKICAgICAgICAgIGZpbHRlclswXS5zZWxlY3RpemUub24oJ2JsdXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgJHguaGlkZSgpLnRyaWdnZXIoJ2hpZGUnKTsgJGlucHV0LnBhcmVudCgpLnNob3coKTsgJGlucHV0LnRyaWdnZXIoJ2JsdXInKTsKICAgICAgICAgIH0pOwogICAgICAgICAgZmlsdGVyLm5leHQoJ2RpdicpLmNzcygnbWFyZ2luLWJvdHRvbScsICdhdXRvJyk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2hhcmFjdGVyJykgewogICAgICAgICAgdmFyIGZ1biA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZWFyY2hDb2x1bW4oaSwgJGlucHV0LnZhbCgpKS5kcmF3KCk7CiAgICAgICAgICB9OwogICAgICAgICAgaWYgKHNlcnZlcikgewogICAgICAgICAgICBmdW4gPSAkLmZuLmRhdGFUYWJsZS51dGlsLnRocm90dGxlKGZ1biwgb3B0aW9ucy5zZWFyY2hEZWxheSk7CiAgICAgICAgICB9CiAgICAgICAgICAkaW5wdXQub24oJ2lucHV0JywgZnVuKTsKICAgICAgICB9IGVsc2UgaWYgKGluQXJyYXkodHlwZSwgWydudW1iZXInLCAnaW50ZWdlcicsICdkYXRlJywgJ3RpbWUnXSkpIHsKICAgICAgICAgIHZhciAkeDAgPSAkeDsKICAgICAgICAgICR4ID0gJHgwLmNoaWxkcmVuKCdkaXYnKS5maXJzdCgpOwogICAgICAgICAgJHgwLmNzcyh7CiAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNmZmYnLAogICAgICAgICAgICAnYm9yZGVyJzogJzFweCAjZGRkIHNvbGlkJywKICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnNHB4JywKICAgICAgICAgICAgJ3BhZGRpbmcnOiAnMjBweCAyMHB4IDEwcHggMjBweCcKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyICRzcGFucyA9ICR4MC5jaGlsZHJlbignc3BhbicpLmNzcyh7CiAgICAgICAgICAgICdtYXJnaW4tdG9wJzogJzEwcHgnLAogICAgICAgICAgICAnd2hpdGUtc3BhY2UnOiAnbm93cmFwJwogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgJHNwYW4xID0gJHNwYW5zLmZpcnN0KCksICRzcGFuMiA9ICRzcGFucy5sYXN0KCk7CiAgICAgICAgICB2YXIgcjEgPSArJHguZGF0YSgnbWluJyksIHIyID0gKyR4LmRhdGEoJ21heCcpOwogICAgICAgICAgLy8gd2hlbiB0aGUgbnVtYmVycyBhcmUgdG9vIHNtYWxsIG9yIGhhdmUgbWFueSBkZWNpbWFsIHBsYWNlcywgdGhlCiAgICAgICAgICAvLyBzbGlkZXIgbWF5IGhhdmUgbnVtZXJpYyBwcmVjaXNpb24gcHJvYmxlbXMgKCMxNTApCiAgICAgICAgICB2YXIgc2NhbGUgPSBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgKyR4LmRhdGEoJ3NjYWxlJykgfHwgMCkpOwogICAgICAgICAgcjEgPSBNYXRoLnJvdW5kKHIxICogc2NhbGUpOyByMiA9IE1hdGgucm91bmQocjIgKiBzY2FsZSk7CiAgICAgICAgICB2YXIgc2NhbGVCYWNrID0gZnVuY3Rpb24oeCwgc2NhbGUpIHsKICAgICAgICAgICAgaWYgKHNjYWxlID09PSAxKSByZXR1cm4geDsKICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnJvdW5kKE1hdGgubG9nKHNjYWxlKSAvIE1hdGgubG9nKDEwKSk7CiAgICAgICAgICAgIC8vIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgMy40MjMvMTAwIC0+IDAuMDM0MjMwMDAwMDAwMDAwMDAzCiAgICAgICAgICAgIHJldHVybiAoeCAvIHNjYWxlKS50b0ZpeGVkKGQpOwogICAgICAgICAgfTsKICAgICAgICAgIHZhciBzbGlkZXJfbWluID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBmaWx0ZXIubm9VaVNsaWRlcignb3B0aW9ucycpLnJhbmdlLm1pbjsKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgc2xpZGVyX21heCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gZmlsdGVyLm5vVWlTbGlkZXIoJ29wdGlvbnMnKS5yYW5nZS5tYXg7CiAgICAgICAgICB9OwogICAgICAgICAgJGlucHV0Lm9uKHsKICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICR4MC5zaG93KCkudHJpZ2dlcignc2hvdycpOwogICAgICAgICAgICAgIC8vIGZpcnN0LCBtYWtlIHN1cmUgdGhlIHNsaWRlciBkaXYgbGVhdmVzIGF0IGxlYXN0IDIwcHggYmV0d2VlbgogICAgICAgICAgICAgIC8vIHRoZSB0d28gKHNsaWRlciB2YWx1ZSkgc3BhbidzCiAgICAgICAgICAgICAgJHgwLndpZHRoKE1hdGgubWF4KDE2MCwgJHNwYW4xLm91dGVyV2lkdGgoKSArICRzcGFuMi5vdXRlcldpZHRoKCkgKyAyMCkpOwogICAgICAgICAgICAgIC8vIHRoZW4sIGlmIHRoZSBpbnB1dCBpcyByZWFsbHkgd2lkZSwgbWFrZSB0aGUgc2xpZGVyIHRoZSBzYW1lCiAgICAgICAgICAgICAgLy8gd2lkdGggYXMgdGhlIGlucHV0CiAgICAgICAgICAgICAgaWYgKCR4MC5vdXRlcldpZHRoKCkgPCAkaW5wdXQub3V0ZXJXaWR0aCgpKSB7CiAgICAgICAgICAgICAgICAkeDAub3V0ZXJXaWR0aCgkaW5wdXQub3V0ZXJXaWR0aCgpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBzbGlkZXIgZGl2IGRvZXMgbm90IHJlYWNoIGJleW9uZCB0aGUgcmlnaHQgbWFyZ2luCiAgICAgICAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpIDwgJHgwLm9mZnNldCgpLmxlZnQgKyAkeDAud2lkdGgoKSkgewogICAgICAgICAgICAgICAgJHgwLm9mZnNldCh7CiAgICAgICAgICAgICAgICAgICdsZWZ0JzogJGlucHV0Lm9mZnNldCgpLmxlZnQgKyAkaW5wdXQub3V0ZXJXaWR0aCgpIC0gJHgwLm91dGVyV2lkdGgoKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBibHVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAkeDAuaGlkZSgpLnRyaWdnZXIoJ2hpZGUnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGlmICgkaW5wdXQudmFsKCkgPT09ICcnKSBmaWx0ZXIudmFsKFtzbGlkZXJfbWluKCksIHNsaWRlcl9tYXgoKV0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhciB2ID0gJGlucHV0LnZhbCgpLnJlcGxhY2UoL1xzL2csICcnKTsKICAgICAgICAgICAgICBpZiAodiA9PT0gJycpIHJldHVybjsKICAgICAgICAgICAgICB2ID0gdi5zcGxpdCgnLi4uJyk7CiAgICAgICAgICAgICAgaWYgKHYubGVuZ3RoICE9PSAyKSB7CiAgICAgICAgICAgICAgICAkaW5wdXQucGFyZW50KCkuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodlswXSA9PT0gJycpIHZbMF0gPSBzbGlkZXJfbWluKCk7CiAgICAgICAgICAgICAgaWYgKHZbMV0gPT09ICcnKSB2WzFdID0gc2xpZGVyX21heCgpOwogICAgICAgICAgICAgICRpbnB1dC5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJyk7CiAgICAgICAgICAgICAgLy8gdHJlYXQgZGF0ZSBhcyBVVEMgdGltZSBhdCBtaWRuaWdodAogICAgICAgICAgICAgIHZhciBzdHJUaW1lID0gZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgdmFyIHMgPSB0eXBlID09PSAnZGF0ZScgPyAnVDAwOjAwOjAwWicgOiAnJzsKICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IERhdGUoeCArIHMpLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgIC8vIGFkZCAxMCBtaW51dGVzIHRvIGRhdGUgc2luY2UgaXQgZG9lcyBub3QgaHVydCB0aGUgZGF0ZSwgYW5kCiAgICAgICAgICAgICAgICAvLyBpdCBoZWxwcyBhdm9pZCB0aGUgdHJpY2t5IGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgcHJvYmxlbXMsCiAgICAgICAgICAgICAgICAvLyBlLmcuIHNvbWV0aW1lcyB0aGUgZGF0ZSBtYXkgYmUgYSBmZXcgbWlsbGlzZWNvbmRzIGVhcmxpZXIKICAgICAgICAgICAgICAgIC8vIHRoYW4gdGhlIG1pZG5pZ2h0IGR1ZSB0byBwcmVjaXNpb24gcHJvYmxlbXMgaW4gbm9VaVNsaWRlcgogICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkYXRlJyA/IHQgKyAzNjAwMDAwIDogdDsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIGlmIChpbkFycmF5KHR5cGUsIFsnZGF0ZScsICd0aW1lJ10pKSB7CiAgICAgICAgICAgICAgICB2WzBdID0gc3RyVGltZSh2WzBdKTsKICAgICAgICAgICAgICAgIHZbMV0gPSBzdHJUaW1lKHZbMV0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodlswXSAhPSBzbGlkZXJfbWluKCkpIHZbMF0gKj0gc2NhbGU7CiAgICAgICAgICAgICAgaWYgKHZbMV0gIT0gc2xpZGVyX21heCgpKSB2WzFdICo9IHNjYWxlOwogICAgICAgICAgICAgIGZpbHRlci52YWwodik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIGZvcm1hdERhdGUgPSBmdW5jdGlvbihkLCBpc29GbXQpIHsKICAgICAgICAgICAgZCA9IHNjYWxlQmFjayhkLCBzY2FsZSk7CiAgICAgICAgICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykgcmV0dXJuIGQ7CiAgICAgICAgICAgIGlmICh0eXBlID09PSAnaW50ZWdlcicpIHJldHVybiBwYXJzZUludChkKTsKICAgICAgICAgICAgdmFyIHggPSBuZXcgRGF0ZSgrZCk7CiAgICAgICAgICAgIHZhciBmbXQgPSAoJ2ZpbHRlckRhdGVGbXQnIGluIGRhdGEpID8gZGF0YS5maWx0ZXJEYXRlRm10W2ldIDogdW5kZWZpbmVkOwogICAgICAgICAgICBpZiAoZm10ICE9PSB1bmRlZmluZWQgJiYgaXNvRm10ID09PSBmYWxzZSkgcmV0dXJuIHhbZm10Lm1ldGhvZF0uYXBwbHkoeCwgZm10LnBhcmFtcyk7CiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHsKICAgICAgICAgICAgICB2YXIgcGFkMCA9IGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoJzAnICsgeCkuc3Vic3RyKC0yLCAyKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIHJldHVybiB4LmdldFVUQ0Z1bGxZZWFyKCkgKyAnLScgKyBwYWQwKDEgKyB4LmdldFVUQ01vbnRoKCkpCiAgICAgICAgICAgICAgICAgICAgICArICctJyArIHBhZDAoeC5nZXRVVENEYXRlKCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiB4LnRvSVNPU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICB2YXIgb3B0cyA9IHR5cGUgPT09ICdkYXRlJyA/IHsgc3RlcDogNjAgKiA2MCAqIDEwMDAgfSA6CiAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICdpbnRlZ2VyJyA/IHsgc3RlcDogMSB9IDoge307CiAgICAgICAgICBmaWx0ZXIgPSAkeC5ub1VpU2xpZGVyKCQuZXh0ZW5kKHsKICAgICAgICAgICAgc3RhcnQ6IFtyMSwgcjJdLAogICAgICAgICAgICByYW5nZToge21pbjogcjEsIG1heDogcjJ9LAogICAgICAgICAgICBjb25uZWN0OiB0cnVlCiAgICAgICAgICB9LCBvcHRzKSk7CiAgICAgICAgICBpZiAoc2NhbGUgPiAxKSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciB0MSA9IHIxLCB0MiA9IHIyOwogICAgICAgICAgICB2YXIgdmFsID0gZmlsdGVyLnZhbCgpOwogICAgICAgICAgICB3aGlsZSAodmFsWzBdID4gcjEgfHwgdmFsWzFdIDwgcjIpIHsKICAgICAgICAgICAgICBpZiAodmFsWzBdID4gcjEpIHsKICAgICAgICAgICAgICAgIHQxIC09IHZhbFswXSAtIHIxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodmFsWzFdIDwgcjIpIHsKICAgICAgICAgICAgICAgIHQyICs9IHIyIC0gdmFsWzFdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmaWx0ZXIgPSAkeC5ub1VpU2xpZGVyKCQuZXh0ZW5kKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiBbdDEsIHQyXSwKICAgICAgICAgICAgICAgIHJhbmdlOiB7bWluOiB0MSwgbWF4OiB0Mn0sCiAgICAgICAgICAgICAgICBjb25uZWN0OiB0cnVlCiAgICAgICAgICAgICAgfSwgb3B0cyksIHRydWUpOwogICAgICAgICAgICAgIHZhbCA9IGZpbHRlci52YWwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByMSAgPSB0MTsgcjIgPSB0MjsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICB2YXIgdXBkYXRlU2xpZGVyVGV4dCA9IGZ1bmN0aW9uKHYxLCB2MikgewogICAgICAgICAgICAkc3BhbjEudGV4dChmb3JtYXREYXRlKHYxLCBmYWxzZSkpOyAkc3BhbjIudGV4dChmb3JtYXREYXRlKHYyLCBmYWxzZSkpOwogICAgICAgICAgfTsKICAgICAgICAgIHVwZGF0ZVNsaWRlclRleHQocjEsIHIyKTsKICAgICAgICAgIHZhciB1cGRhdGVTbGlkZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciB2YWwgPSBmaWx0ZXIudmFsKCk7CiAgICAgICAgICAgIC8vIHR1cm4gb2ZmIGZpbHRlciBpZiBpbiBmdWxsIHJhbmdlCiAgICAgICAgICAgICR0ZC5kYXRhKCdmaWx0ZXInLCB2YWxbMF0gPiBzbGlkZXJfbWluKCkgfHwgdmFsWzFdIDwgc2xpZGVyX21heCgpKTsKICAgICAgICAgICAgdmFyIHYxID0gZm9ybWF0RGF0ZSh2YWxbMF0pLCB2MiA9IGZvcm1hdERhdGUodmFsWzFdKSwgaXZhbDsKICAgICAgICAgICAgaWYgKCR0ZC5kYXRhKCdmaWx0ZXInKSkgewogICAgICAgICAgICAgIGl2YWwgPSB2MSArICcgLi4uICcgKyB2MjsKICAgICAgICAgICAgICAkaW5wdXQuYXR0cigndGl0bGUnLCBpdmFsKS52YWwoaXZhbCkudHJpZ2dlcignaW5wdXQnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAkaW5wdXQuYXR0cigndGl0bGUnLCAnJykudmFsKCcnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1cGRhdGVTbGlkZXJUZXh0KHZhbFswXSwgdmFsWzFdKTsKICAgICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ3NsaWRlJykgcmV0dXJuOyAgLy8gbm8gc2VhcmNoaW5nIHdoZW4gc2xpZGluZyBvbmx5CiAgICAgICAgICAgIGlmIChzZXJ2ZXIpIHsKICAgICAgICAgICAgICB0YWJsZS5jb2x1bW4oaSkuc2VhcmNoKCR0ZC5kYXRhKCdmaWx0ZXInKSA/IGl2YWwgOiAnJykuZHJhdygpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0YWJsZS5kcmF3KCk7CiAgICAgICAgICB9OwogICAgICAgICAgZmlsdGVyLm9uKHsKICAgICAgICAgICAgc2V0OiB1cGRhdGVTbGlkZXIsCiAgICAgICAgICAgIHNsaWRlOiB1cGRhdGVTbGlkZXIKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gc2VydmVyLXNpZGUgcHJvY2Vzc2luZyB3aWxsIGJlIGhhbmRsZWQgYnkgUiAob3Igd2hhdGV2ZXIgc2VydmVyCiAgICAgICAgLy8gbGFuZ3VhZ2UgeW91IHVzZSk7IHRoZSBmb2xsb3dpbmcgY29kZSBpcyBvbmx5IG5lZWRlZCBmb3IgY2xpZW50LXNpZGUKICAgICAgICAvLyBwcm9jZXNzaW5nCiAgICAgICAgaWYgKHNlcnZlcikgewogICAgICAgICAgLy8gaWYgYSBzZWFyY2ggc3RyaW5nIGhhcyBiZWVuIHByZS1zZXQsIHNlYXJjaCBub3cKICAgICAgICAgIGlmIChzZWFyY2hDb2wpIHNlYXJjaENvbHVtbihpLCBzZWFyY2hDb2wpLmRyYXcoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBjdXN0b21GaWx0ZXIgPSBmdW5jdGlvbihzZXR0aW5ncywgZGF0YSwgZGF0YUluZGV4KSB7CiAgICAgICAgICAvLyB0aGVyZSBpcyBubyB3YXkgdG8gYXR0YWNoIGEgc2VhcmNoIGZ1bmN0aW9uIHRvIGEgc3BlY2lmaWMgdGFibGUsCiAgICAgICAgICAvLyBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgYSBnbG9iYWwgc2VhcmNoIGZ1bmN0aW9uIGlzIG5vdCBhcHBsaWVkIHRvCiAgICAgICAgICAvLyBhbGwgdGFibGVzIChpLmUuIGEgcmFuZ2UgZmlsdGVyIGluIGEgcHJldmlvdXMgdGFibGUgc2hvdWxkIG5vdCBiZQogICAgICAgICAgLy8gYXBwbGllZCB0byB0aGUgY3VycmVudCB0YWJsZSk7IHdlIHVzZSB0aGUgc2V0dGluZ3Mgb2JqZWN0IHRvCiAgICAgICAgICAvLyBkZXRlcm1pbmUgaWYgd2Ugd2FudCB0byBwZXJmb3JtIHNlYXJjaGluZyBvbiB0aGUgY3VycmVudCB0YWJsZSwKICAgICAgICAgIC8vIHNpbmNlIHNldHRpbmdzLnNUYWJsZUlkIHdpbGwgYmUgZGlmZmVyZW50IHRvIGRpZmZlcmVudCB0YWJsZXMKICAgICAgICAgIGlmICh0YWJsZS5zZXR0aW5ncygpWzBdICE9PSBzZXR0aW5ncykgcmV0dXJuIHRydWU7CiAgICAgICAgICAvLyBubyBmaWx0ZXIgb24gdGhpcyBjb2x1bW4gb3Igbm8gbmVlZCB0byBmaWx0ZXIgdGhpcyBjb2x1bW4KICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAndW5kZWZpbmVkJyB8fCAhJHRkLmRhdGEoJ2ZpbHRlcicpKSByZXR1cm4gdHJ1ZTsKCiAgICAgICAgICB2YXIgciA9IGZpbHRlci52YWwoKSwgdiwgcjAsIHIxOwogICAgICAgICAgdmFyIGlfZGF0YSA9IGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgaWYgKCFjb2xSZW9yZGVyRW5hYmxlZCgpKSByZXR1cm4gaTsKICAgICAgICAgICAgdmFyIG9yZGVyID0gdGFibGUuY29sUmVvcmRlci5vcmRlcigpLCBrOwogICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgb3JkZXIubGVuZ3RoOyArK2spIGlmIChvcmRlcltrXSA9PT0gaSkgcmV0dXJuIGs7CiAgICAgICAgICAgIHJldHVybiBpOyAvLyBpbiB0aGVvcnkgaXQgd2lsbCBuZXZlciBiZSBoZXJlLi4uCiAgICAgICAgICB9CiAgICAgICAgICB2ID0gZGF0YVtpX2RhdGEoaSldOwogICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdpbnRlZ2VyJykgewogICAgICAgICAgICB2ID0gcGFyc2VGbG9hdCh2KTsKICAgICAgICAgICAgLy8gaG93IHRvIGhhbmRsZSBOYU4/IGN1cnJlbnRseSBleGNsdWRlIHRoZXNlIHJvd3MKICAgICAgICAgICAgaWYgKGlzTmFOKHYpKSByZXR1cm4oZmFsc2UpOwogICAgICAgICAgICByMCA9IHBhcnNlRmxvYXQoc2NhbGVCYWNrKHJbMF0sIHNjYWxlKSkKICAgICAgICAgICAgcjEgPSBwYXJzZUZsb2F0KHNjYWxlQmFjayhyWzFdLCBzY2FsZSkpOwogICAgICAgICAgICBpZiAodiA+PSByMCAmJiB2IDw9IHIxKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2RhdGUnIHx8IHR5cGUgPT09ICd0aW1lJykgewogICAgICAgICAgICB2ID0gbmV3IERhdGUodik7CiAgICAgICAgICAgIHIwID0gbmV3IERhdGUoclswXSAvIHNjYWxlKTsgcjEgPSBuZXcgRGF0ZShyWzFdIC8gc2NhbGUpOwogICAgICAgICAgICBpZiAodiA+PSByMCAmJiB2IDw9IHIxKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2ZhY3RvcicpIHsKICAgICAgICAgICAgaWYgKHIubGVuZ3RoID09PSAwIHx8IGluQXJyYXkodiwgcikpIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbG9naWNhbCcpIHsKICAgICAgICAgICAgaWYgKHIubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgaWYgKGluQXJyYXkodiA9PT0gJycgPyAnbmEnIDogdiwgcikpIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH07CgogICAgICAgICQuZm4uZGF0YVRhYmxlLmV4dC5zZWFyY2gucHVzaChjdXN0b21GaWx0ZXIpOwoKICAgICAgICAvLyBzZWFyY2ggZm9yIHRoZSBwcmVzZXQgc2VhcmNoIHN0cmluZ3MgaWYgaXQgaXMgbm9uLWVtcHR5CiAgICAgICAgaWYgKHNlYXJjaENvbCkgewogICAgICAgICAgaWYgKGluQXJyYXkodHlwZSwgWydmYWN0b3InLCAnbG9naWNhbCddKSkgewogICAgICAgICAgICBmaWx0ZXJbMF0uc2VsZWN0aXplLnNldFZhbHVlKEpTT04ucGFyc2Uoc2VhcmNoQ29sKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjaGFyYWN0ZXInKSB7CiAgICAgICAgICAgICRpbnB1dC50cmlnZ2VyKCdpbnB1dCcpOwogICAgICAgICAgfSBlbHNlIGlmIChpbkFycmF5KHR5cGUsIFsnbnVtYmVyJywgJ2ludGVnZXInLCAnZGF0ZScsICd0aW1lJ10pKSB7CiAgICAgICAgICAgICRpbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICB9KTsKCiAgICB9CgogICAgLy8gaGlnaGxpZ2h0IHNlYXJjaCBrZXl3b3JkcwogICAgdmFyIGhpZ2hsaWdodCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYm9keSA9ICQodGFibGUudGFibGUoKS5ib2R5KCkpOwogICAgICAvLyByZW1vdmluZyB0aGUgb2xkIGhpZ2hsaWdodGluZyBmaXJzdAogICAgICBib2R5LnVuaGlnaGxpZ2h0KCk7CgogICAgICAvLyBkb24ndCBoaWdobGlnaHQgdGhlICJub3QgZm91bmQiIHJvdywgc28gd2UgZ2V0IHRoZSByb3dzIHVzaW5nIHRoZSBhcGkKICAgICAgaWYgKHRhYmxlLnJvd3MoeyBmaWx0ZXI6ICdhcHBsaWVkJyB9KS5kYXRhKCkubGVuZ3RoID09PSAwKSByZXR1cm47CiAgICAgIC8vIGhpZ2hsaWdodCBnbG9iYWwgc2VhcmNoIGtleXdvcmRzCiAgICAgIGJvZHkuaGlnaGxpZ2h0KCQudHJpbSh0YWJsZS5zZWFyY2goKSkuc3BsaXQoL1xzKy8pKTsKICAgICAgLy8gdGhlbiBoaWdobGlnaHQga2V5d29yZHMgZnJvbSBpbmRpdmlkdWFsIGNvbHVtbiBmaWx0ZXJzCiAgICAgIGlmIChmaWx0ZXJSb3cpIGZpbHRlclJvdy5lYWNoKGZ1bmN0aW9uKGksIHRkKSB7CiAgICAgICAgdmFyICR0ZCA9ICQodGQpLCB0eXBlID0gJHRkLmRhdGEoJ3R5cGUnKTsKICAgICAgICBpZiAodHlwZSAhPT0gJ2NoYXJhY3RlcicpIHJldHVybjsKICAgICAgICB2YXIgJGlucHV0ID0gJHRkLmNoaWxkcmVuKCdkaXYnKS5maXJzdCgpLmNoaWxkcmVuKCdpbnB1dCcpOwogICAgICAgIHZhciBjb2x1bW4gPSB0YWJsZS5jb2x1bW4oaSkubm9kZXMoKS50byQoKSwKICAgICAgICAgICAgdmFsID0gJC50cmltKCRpbnB1dC52YWwoKSk7CiAgICAgICAgaWYgKHR5cGUgIT09ICdjaGFyYWN0ZXInIHx8IHZhbCA9PT0gJycpIHJldHVybjsKICAgICAgICBjb2x1bW4uaGlnaGxpZ2h0KHZhbC5zcGxpdCgvXHMrLykpOwogICAgICB9KTsKICAgIH07CgogICAgaWYgKG9wdGlvbnMuc2VhcmNoSGlnaGxpZ2h0KSB7CiAgICAgIHRhYmxlCiAgICAgIC5vbignZHJhdy5kdC5kdGggY29sdW1uLXZpc2liaWxpdHkuZHQuZHRoIGNvbHVtbi1yZW9yZGVyLmR0LmR0aCcsIGhpZ2hsaWdodCkKICAgICAgLm9uKCdkZXN0cm95JywgZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gcmVtb3ZlIGV2ZW50IGhhbmRsZXIKICAgICAgICB0YWJsZS5vZmYoJ2RyYXcuZHQuZHRoIGNvbHVtbi12aXNpYmlsaXR5LmR0LmR0aCBjb2x1bW4tcmVvcmRlci5kdC5kdGgnKTsKICAgICAgfSk7CgogICAgICAvLyBTZXQgdGhlIG9wdGlvbiBmb3IgZXNjYXBpbmcgcmVnZXggY2hhcmFjdGVycyBpbiBvdXIgc2VhcmNoIHN0cmluZy4gIFRoaXMgd2lsbCBiZSB1c2VkCiAgICAgIC8vIGZvciBhbGwgZnV0dXJlIG1hdGNoaW5nLgogICAgICBqUXVlcnkuZm4uaGlnaGxpZ2h0Lm9wdGlvbnMuZXNjYXBlUmVnZXggPSAoIW9wdGlvbnMuc2VhcmNoIHx8ICFvcHRpb25zLnNlYXJjaC5yZWdleCk7CgogICAgICAvLyBpbml0aWFsIGhpZ2hsaWdodCBmb3Igc3RhdGUgc2F2ZWQgY29uZGl0aW9ucyBhbmQgaW5pdGlhbCBzdGF0ZXMKICAgICAgaGlnaGxpZ2h0KCk7CiAgICB9CgogICAgLy8gcnVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvbiB0aGUgdGFibGUgaW5zdGFuY2UKICAgIGlmICh0eXBlb2YgZGF0YS5jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgZGF0YS5jYWxsYmFjayh0YWJsZSk7CgogICAgLy8gZG91YmxlIGNsaWNrIHRvIGVkaXQgdGhlIGNlbGwsIHJvdywgY29sdW1uLCBvciBhbGwgY2VsbHMKICAgIGlmIChkYXRhLmVkaXRhYmxlKSB0YWJsZS5vbignZGJsY2xpY2suZHQnLCAndGJvZHkgdGQnLCBmdW5jdGlvbihlKSB7CiAgICAgIC8vIG9ubHkgYnJpbmcgdXAgdGhlIGVkaXRvciB3aGVuIHRoZSBjZWxsIGl0c2VsZiBpcyBkYmNsaWNrZWQsIGFuZCBpZ25vcmUKICAgICAgLy8gb3RoZXIgZGJjbGljayBldmVudHMgYnViYmxlZCB1cCAoZS5nLiBmcm9tIHRoZSA8aW5wdXQ+KQogICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjsKICAgICAgdmFyIHRhcmdldCA9IFtdLCBpbW1lZGlhdGUgPSBmYWxzZTsKICAgICAgc3dpdGNoIChkYXRhLmVkaXRhYmxlLnRhcmdldCkgewogICAgICAgIGNhc2UgJ2NlbGwnOgogICAgICAgICAgdGFyZ2V0ID0gW3RoaXNdOwogICAgICAgICAgaW1tZWRpYXRlID0gdHJ1ZTsgIC8vIGVkaXQgd2lsbCB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncm93JzoKICAgICAgICAgIHRhcmdldCA9IHRhYmxlLmNlbGxzKHRhYmxlLmNlbGwodGhpcykuaW5kZXgoKS5yb3csICcqJykubm9kZXMoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NvbHVtbic6CiAgICAgICAgICB0YXJnZXQgPSB0YWJsZS5jZWxscygnKicsIHRhYmxlLmNlbGwodGhpcykuaW5kZXgoKS5jb2x1bW4pLm5vZGVzKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdhbGwnOgogICAgICAgICAgdGFyZ2V0ID0gdGFibGUuY2VsbHMoKS5ub2RlcygpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93ICdUaGUgZWRpdGFibGUgcGFyYW1ldGVyIG11c3QgYmUgImNlbGwiLCAicm93IiwgImNvbHVtbiIsIG9yICJhbGwiJzsKICAgICAgfQogICAgICB2YXIgZGlzYWJsZUNvbHMgPSBkYXRhLmVkaXRhYmxlLmRpc2FibGUgPyBkYXRhLmVkaXRhYmxlLmRpc2FibGUuY29sdW1ucyA6IG51bGw7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgKGZ1bmN0aW9uKGNlbGwsIGN1cnJlbnQpIHsKICAgICAgICAgIHZhciAkY2VsbCA9ICQoY2VsbCksIGh0bWwgPSAkY2VsbC5odG1sKCk7CiAgICAgICAgICB2YXIgX2NlbGwgPSB0YWJsZS5jZWxsKGNlbGwpLCB2YWx1ZSA9IF9jZWxsLmRhdGEoKTsKICAgICAgICAgIHZhciAkaW5wdXQgPSAkKCc8aW5wdXQgdHlwZT0idGV4dCI+JyksIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7CiAgICAgICAgICAgICRjZWxsLmRhdGEoJ2lucHV0JywgJGlucHV0KS5kYXRhKCdodG1sJywgaHRtbCk7CiAgICAgICAgICAgICRpbnB1dC5hdHRyKCd0aXRsZScsICdIaXQgQ3RybCtFbnRlciB0byBmaW5pc2ggZWRpdGluZywgb3IgRXNjIHRvIGNhbmNlbCcpOwogICAgICAgICAgfQogICAgICAgICAgJGlucHV0LnZhbCh2YWx1ZSk7CiAgICAgICAgICBpZiAoaW5BcnJheShfY2VsbC5pbmRleCgpLmNvbHVtbiwgZGlzYWJsZUNvbHMpKSB7CiAgICAgICAgICAgICRpbnB1dC5hdHRyKCdyZWFkb25seScsICcnKS5jc3MoJ2ZpbHRlcicsICdpbnZlcnQoMjUlKScpOwogICAgICAgICAgfQogICAgICAgICAgJGNlbGwuZW1wdHkoKS5hcHBlbmQoJGlucHV0KTsKICAgICAgICAgIGlmIChjZWxsID09PSBjdXJyZW50KSAkaW5wdXQuZm9jdXMoKTsKICAgICAgICAgICRpbnB1dC5jc3MoJ3dpZHRoJywgJzEwMCUnKTsKCiAgICAgICAgICBpZiAoaW1tZWRpYXRlKSAkaW5wdXQub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIHZhbHVlTmV3ID0gJGlucHV0LnZhbCgpOwogICAgICAgICAgICBpZiAodmFsdWVOZXcgIT0gdmFsdWUpIHsKICAgICAgICAgICAgICBfY2VsbC5kYXRhKHZhbHVlTmV3KTsKICAgICAgICAgICAgICBpZiAoSFRNTFdpZGdldHMuc2hpbnlNb2RlKSB7CiAgICAgICAgICAgICAgICBjaGFuZ2VJbnB1dCgnY2VsbF9lZGl0JywgW2NlbGxJbmZvKGNlbGwpXSwgJ0RULmNlbGxJbmZvJywgbnVsbCwge3ByaW9yaXR5OiAiZXZlbnQifSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIGZvciBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nLCB1c2VycyBoYXZlIHRvIGNhbGwgcmVwbGFjZURhdGEoKSB0byB1cGRhdGUgdGhlIHRhYmxlCiAgICAgICAgICAgICAgaWYgKCFzZXJ2ZXIpIHRhYmxlLmRyYXcoZmFsc2UpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICRjZWxsLmh0bWwoaHRtbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGlucHV0LnJlbW92ZSgpOwogICAgICAgICAgfSkub24oJ2JsdXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFjaGFuZ2VkKSAkaW5wdXQudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICB9KS5vbigna2V5dXAnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIC8vIGhpdCBFc2NhcGUgdG8gY2FuY2VsIGVkaXRpbmcKICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpICRpbnB1dC50cmlnZ2VyKCdibHVyJyk7CiAgICAgICAgICB9KTsKCiAgICAgICAgICAvLyBidWxrIGVkaXQgKHJvdywgY29sdW1uLCBvciBhbGwpCiAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkgJGlucHV0Lm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIHJlbW92ZUlucHV0ID0gZnVuY3Rpb24oJGNlbGwsIHJlc3RvcmUpIHsKICAgICAgICAgICAgICAkY2VsbC5kYXRhKCdpbnB1dCcpLnJlbW92ZSgpOwogICAgICAgICAgICAgIGlmIChyZXN0b3JlKSAkY2VsbC5odG1sKCRjZWxsLmRhdGEoJ2h0bWwnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcmVtb3ZlSW5wdXQoJCh0YXJnZXRbaV0pLCB0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiBlLmN0cmxLZXkpIHsKICAgICAgICAgICAgICAvLyBDdHJsICsgRW50ZXIKICAgICAgICAgICAgICB2YXIgY2VsbCwgJGNlbGwsIF9jZWxsLCBjZWxsRGF0YSA9IFtdOwogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjZWxsID0gdGFyZ2V0W2ldOyAkY2VsbCA9ICQoY2VsbCk7IF9jZWxsID0gdGFibGUuY2VsbChjZWxsKTsKICAgICAgICAgICAgICAgIF9jZWxsLmRhdGEoJGNlbGwuZGF0YSgnaW5wdXQnKS52YWwoKSk7CiAgICAgICAgICAgICAgICBIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgY2VsbERhdGEucHVzaChjZWxsSW5mbyhjZWxsKSk7CiAgICAgICAgICAgICAgICByZW1vdmVJbnB1dCgkY2VsbCwgZmFsc2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoSFRNTFdpZGdldHMuc2hpbnlNb2RlKSB7CiAgICAgICAgICAgICAgICBjaGFuZ2VJbnB1dCgnY2VsbF9lZGl0JywgY2VsbERhdGEsICdEVC5jZWxsSW5mbycsIG51bGwsIHtwcmlvcml0eTogImV2ZW50In0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIXNlcnZlcikgdGFibGUuZHJhdyhmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pKHRhcmdldFtpXSwgdGhpcyk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIGludGVyYWN0aW9uIHdpdGggc2hpbnkKICAgIGlmICghSFRNTFdpZGdldHMuc2hpbnlNb2RlICYmICFjcm9zc3RhbGtPcHRpb25zLmdyb3VwKSByZXR1cm47CgogICAgdmFyIG1ldGhvZHMgPSB7fTsKICAgIHZhciBzaGlueURhdGEgPSB7fTsKCiAgICBtZXRob2RzLnVwZGF0ZUNhcHRpb24gPSBmdW5jdGlvbihjYXB0aW9uKSB7CiAgICAgIGlmICghY2FwdGlvbikgcmV0dXJuOwogICAgICAkdGFibGUuY2hpbGRyZW4oJ2NhcHRpb24nKS5yZXBsYWNlV2l0aChjYXB0aW9uKTsKICAgIH0KCiAgICAvLyByZWdpc3RlciBjbGVhciBmdW5jdGlvbnMgdG8gcmVtb3ZlIGlucHV0IHZhbHVlcyB3aGVuIHRoZSB0YWJsZSBpcyByZW1vdmVkCiAgICBpbnN0YW5jZS5jbGVhcklucHV0cyA9IHt9OwoKICAgIHZhciBjaGFuZ2VJbnB1dCA9IGZ1bmN0aW9uKGlkLCB2YWx1ZSwgdHlwZSwgbm9Dcm9zc3RhbGssIG9wdHMpIHsKICAgICAgdmFyIGV2ZW50ID0gaWQ7CiAgICAgIGlkID0gZWwuaWQgKyAnXycgKyBpZDsKICAgICAgaWYgKHR5cGUpIGlkID0gaWQgKyAnOicgKyB0eXBlOwogICAgICAvLyBkbyBub3QgdXBkYXRlIGlmIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUgYXMgb2xkIHZhbHVlCiAgICAgIGlmIChldmVudCAhPT0gJ2NlbGxfZWRpdCcgJiYgIS9fY2xpY2tlZCQvLnRlc3QoZXZlbnQpICYmIHNoaW55RGF0YS5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgc2hpbnlEYXRhW2lkXSA9PT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKQogICAgICAgIHJldHVybjsKICAgICAgc2hpbnlEYXRhW2lkXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTsKICAgICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSAmJiBTaGlueS5zZXRJbnB1dFZhbHVlKSB7CiAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpZCwgdmFsdWUsIG9wdHMpOwogICAgICAgIGlmICghaW5zdGFuY2UuY2xlYXJJbnB1dHNbaWRdKSBpbnN0YW5jZS5jbGVhcklucHV0c1tpZF0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoaWQsIG51bGwpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gSEFDSwogICAgICBpZiAoZXZlbnQgPT09ICJyb3dzX3NlbGVjdGVkIiAmJiAhbm9Dcm9zc3RhbGspIHsKICAgICAgICBpZiAoY3Jvc3N0YWxrT3B0aW9ucy5ncm91cCkgewogICAgICAgICAgdmFyIGtleXMgPSBjcm9zc3RhbGtPcHRpb25zLmtleTsKICAgICAgICAgIHZhciBzZWxlY3RlZEtleXMgPSBudWxsOwogICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgIHNlbGVjdGVkS2V5cyA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGFycmF5J3MgY29udGVudHMgdXNlIDEtYmFzZWQgcm93IG51bWJlcnMsIHNvIHdlIG11c3QKICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRvIDAtYmFzZWQgYmVmb3JlIGluZGV4aW5nIGludG8gdGhlIGtleXMgYXJyYXkuCiAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzLnB1c2goa2V5c1t2YWx1ZVtpXSAtIDFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaW5zdGFuY2UuY3RzZWxlY3RIYW5kbGUuc2V0KHNlbGVjdGVkS2V5cyk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwoKICAgIHZhciBhZGRPbmUgPSBmdW5jdGlvbih4KSB7CiAgICAgIHJldHVybiB4Lm1hcChmdW5jdGlvbihpKSB7IHJldHVybiAxICsgaTsgfSk7CiAgICB9OwoKICAgIHZhciB1bmlxdWUgPSBmdW5jdGlvbih4KSB7CiAgICAgIHZhciB1eCA9IFtdOwogICAgICAkLmVhY2goeCwgZnVuY3Rpb24oaSwgZWwpewogICAgICAgIGlmICgkLmluQXJyYXkoZWwsIHV4KSA9PT0gLTEpIHV4LnB1c2goZWwpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHV4OwogICAgfQoKICAgIC8vIGNoYW5nZSB0aGUgcm93IGluZGV4IG9mIGEgY2VsbAogICAgdmFyIHR3ZWFrQ2VsbEluZGV4ID0gZnVuY3Rpb24oY2VsbCkgewogICAgICB2YXIgaW5mbyA9IGNlbGwuaW5kZXgoKTsKICAgICAgLy8gc29tZSBjZWxsIG1heSBub3QgYmUgdmFsaWQuIGUuZywgIzc1OQogICAgICAvLyB3aGVuIHVzaW5nIHRoZSBSb3dHcm91cCBleHRlbnNpb24sIGRhdGF0YWJsZXMgd2lsbAogICAgICAvLyBnZW5lcmF0ZSB0aGUgcm93IGxhYmVsIGFuZCB0aGUgY2VsbHMgYXJlIG5vdCBwYXJ0IG9mCiAgICAgIC8vIHRoZSBkYXRhIHRodXMgY29udGFpbiBubyByb3cvY29sIGluZm8KICAgICAgaWYgKGluZm8gPT09IHVuZGVmaW5lZCkKICAgICAgICByZXR1cm4ge3JvdzogbnVsbCwgY29sOiBudWxsfTsKICAgICAgaWYgKHNlcnZlcikgewogICAgICAgIGluZm8ucm93ID0gRFRfcm93c19jdXJyZW50W2luZm8ucm93XTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmZvLnJvdyArPSAxOwogICAgICB9CiAgICAgIHJldHVybiB7cm93OiBpbmZvLnJvdywgY29sOiBpbmZvLmNvbHVtbn07CiAgICB9CgogICAgdmFyIGNsZWFuU2VsZWN0ZWRWYWx1ZXMgPSBmdW5jdGlvbigpIHsKICAgICAgY2hhbmdlSW5wdXQoJ3Jvd3Nfc2VsZWN0ZWQnLCBbXSk7CiAgICAgIGNoYW5nZUlucHV0KCdjb2x1bW5zX3NlbGVjdGVkJywgW10pOwogICAgICBjaGFuZ2VJbnB1dCgnY2VsbHNfc2VsZWN0ZWQnLCB0cmFuc3Bvc2VBcnJheTJEKFtdKSwgJ3NoaW55Lm1hdHJpeCcpOwogICAgfQogICAgLy8gIzgyOCB3ZSBzaG91bGQgY2xlYW4gdGhlIHNlbGVjdGlvbiBvbiB0aGUgc2VydmVyLXNpZGUgd2hlbiB0aGUgdGFibGUgcmVsb2FkcwogICAgY2xlYW5TZWxlY3RlZFZhbHVlcygpOwoKICAgIC8vIGEgZmxhZyB0byBpbmRpY2F0ZXMgaWYgc2VsZWN0IGV4dGVuc2lvbiBpcyBpbml0aWFsaXplZCBvciBub3QKICAgIHZhciBmbGFnU2VsZWN0RXh0ID0gdGFibGUuc2V0dGluZ3MoKVswXS5fc2VsZWN0ICE9PSB1bmRlZmluZWQ7CiAgICAvLyB0aGUgU2VsZWN0IGV4dGVuc2lvbiBzaG91bGQgb25seSBiZSB1c2VkIGluIHRoZSBjbGllbnQgbW9kZSBhbmQKICAgIC8vIHdoZW4gdGhlIHNlbGVjdGlvbi5tb2RlIGlzIHNldCB0byBub25lCiAgICBpZiAoZGF0YS5zZWxlY3Rpb24ubW9kZSA9PT0gJ25vbmUnICYmICFzZXJ2ZXIgJiYgZmxhZ1NlbGVjdEV4dCkgewogICAgICB2YXIgdXBkYXRlUm93c1NlbGVjdGVkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzKHtzZWxlY3RlZDogdHJ1ZX0pOwogICAgICAgIHZhciBzZWxlY3RlZCA9IFtdOwogICAgICAgICQuZWFjaChyb3dzLmluZGV4ZXMoKS50b0FycmF5KCksIGZ1bmN0aW9uKGksIHYpIHsKICAgICAgICAgIHNlbGVjdGVkLnB1c2godiArIDEpOwogICAgICAgIH0pOwogICAgICAgIGNoYW5nZUlucHV0KCdyb3dzX3NlbGVjdGVkJywgc2VsZWN0ZWQpOwogICAgICB9CiAgICAgIHZhciB1cGRhdGVDb2xzU2VsZWN0ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgY29sdW1ucyA9IHRhYmxlLmNvbHVtbnMoe3NlbGVjdGVkOiB0cnVlfSk7CiAgICAgICAgY2hhbmdlSW5wdXQoJ2NvbHVtbnNfc2VsZWN0ZWQnLCBjb2x1bW5zLmluZGV4ZXMoKS50b0FycmF5KCkpOwogICAgICB9CiAgICAgIHZhciB1cGRhdGVDZWxsc1NlbGVjdGVkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGNlbGxzID0gdGFibGUuY2VsbHMoe3NlbGVjdGVkOiB0cnVlfSk7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gW107CiAgICAgICAgY2VsbHMuZXZlcnkoZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgcm93ID0gdGhpcy5pbmRleCgpLnJvdzsKICAgICAgICAgIHZhciBjb2wgPSB0aGlzLmluZGV4KCkuY29sdW1uOwogICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZC5jb25jYXQoW1tyb3cgKyAxLCBjb2xdXSk7CiAgICAgICAgfSk7CiAgICAgICAgY2hhbmdlSW5wdXQoJ2NlbGxzX3NlbGVjdGVkJywgdHJhbnNwb3NlQXJyYXkyRChzZWxlY3RlZCksICdzaGlueS5tYXRyaXgnKTsKICAgICAgfQogICAgICB0YWJsZS5vbignc2VsZWN0IGRlc2VsZWN0JywgZnVuY3Rpb24oZSwgZHQsIHR5cGUsIGluZGV4ZXMpIHsKICAgICAgICB1cGRhdGVSb3dzU2VsZWN0ZWQoKTsKICAgICAgICB1cGRhdGVDb2xzU2VsZWN0ZWQoKTsKICAgICAgICB1cGRhdGVDZWxsc1NlbGVjdGVkKCk7CiAgICAgIH0pCiAgICB9CgogICAgdmFyIHNlbE1vZGUgPSBkYXRhLnNlbGVjdGlvbi5tb2RlLCBzZWxUYXJnZXQgPSBkYXRhLnNlbGVjdGlvbi50YXJnZXQ7CiAgICB2YXIgc2VsRGlzYWJsZSA9IGRhdGEuc2VsZWN0aW9uLnNlbGVjdGFibGUgPT09IGZhbHNlOwogICAgaWYgKGluQXJyYXkoc2VsTW9kZSwgWydzaW5nbGUnLCAnbXVsdGlwbGUnXSkpIHsKICAgICAgdmFyIHNlbENsYXNzID0gaW5BcnJheShkYXRhLnN0eWxlLCBbJ2Jvb3RzdHJhcCcsICdib290c3RyYXA0J10pID8gJ2FjdGl2ZScgOiAnc2VsZWN0ZWQnOwogICAgICAvLyBzZWxlY3RlZDE6IHJvdyBpbmRpY2VzOyBzZWxlY3RlZDI6IGNvbHVtbiBpbmRpY2VzCiAgICAgIHZhciBpbml0U2VsID0gZnVuY3Rpb24oeCkgewogICAgICAgIGlmICh4ID09PSBudWxsIHx8IHR5cGVvZiB4ID09PSAnYm9vbGVhbicgfHwgc2VsVGFyZ2V0ID09PSAnY2VsbCcpIHsKICAgICAgICAgIHJldHVybiB7cm93czogW10sIGNvbHM6IFtdfTsKICAgICAgICB9IGVsc2UgaWYgKHNlbFRhcmdldCA9PT0gJ3JvdycpIHsKICAgICAgICAgIHJldHVybiB7cm93czogJC5tYWtlQXJyYXkoeCksIGNvbHM6IFtdfTsKICAgICAgICB9IGVsc2UgaWYgKHNlbFRhcmdldCA9PT0gJ2NvbHVtbicpIHsKICAgICAgICAgIHJldHVybiB7cm93czogW10sIGNvbHM6ICQubWFrZUFycmF5KHgpfTsKICAgICAgICB9IGVsc2UgaWYgKHNlbFRhcmdldCA9PT0gJ3Jvdytjb2x1bW4nKSB7CiAgICAgICAgICByZXR1cm4ge3Jvd3M6ICQubWFrZUFycmF5KHgucm93cyksIGNvbHM6ICQubWFrZUFycmF5KHguY29scyl9OwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgc2VsZWN0ZWQgPSBkYXRhLnNlbGVjdGlvbi5zZWxlY3RlZDsKICAgICAgdmFyIHNlbGVjdGVkMSA9IGluaXRTZWwoc2VsZWN0ZWQpLnJvd3MsIHNlbGVjdGVkMiA9IGluaXRTZWwoc2VsZWN0ZWQpLmNvbHM7CiAgICAgIC8vIHNlbGVjdGFibGUgc2hvdWxkIGNvbnRhaW4gZWl0aGVyIGFsbCBwb3NpdGl2ZSBvciBhbGwgbm9uLXBvc2l0aXZlIHZhbHVlcywgbm90IGJvdGgKICAgICAgLy8gcG9zaXRpdmUgdmFsdWVzIGluZGljYXRlICJzZWxlY3RhYmxlIiB3aGlsZSBub24tcG9zaXRpdmUgdmFsdWVzIG1lYW5zICJub25zZWxlY3RhYmxlIgogICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIHBlcmZvcm1lZCBvbiBSIHNpZGUuIChvbmx5IGNvbHVtbiBpbmRpY2lkZXMgY291bGQgYmUgemVybyB3aGljaCBpbmRpY2F0ZXMKICAgICAgLy8gdGhlIHJvdyBuYW1lKQogICAgICB2YXIgc2VsZWN0YWJsZSA9IGRhdGEuc2VsZWN0aW9uLnNlbGVjdGFibGU7CiAgICAgIHZhciBzZWxlY3RhYmxlMSA9IGluaXRTZWwoc2VsZWN0YWJsZSkucm93cywgc2VsZWN0YWJsZTIgPSBpbml0U2VsKHNlbGVjdGFibGUpLmNvbHM7CgogICAgICAvLyBBZnRlciB1c2VycyByZW9yZGVyIHRoZSByb3dzIG9yIGZpbHRlciB0aGUgdGFibGUsIHdlIGNhbm5vdCB1c2UgdGhlIHRhYmxlIGluZGV4CiAgICAgIC8vIGRpcmVjdGx5LiBJbnN0ZWFkLCB3ZSBuZWVkIHRoaXMgZnVuY3Rpb24gdG8gZmluZCBvdXQgdGhlIHJvd3MgYmV0d2VlbiB0aGUgdHdvIGNsaWNrcy4KICAgICAgLy8gSWYgdXNlciBmaWx0ZXIgdGhlIHRhYmxlIGFnYWluIGJldHdlZW4gdGhlIHN0YXJ0IGNsaWNrIGFuZCB0aGUgZW5kIGNsaWNrLCB0aGUgYmVoYXZpb3IKICAgICAgLy8gd291bGQgYmUgdW5kZWZpbmVkLCBidXQgaXQgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0uCiAgICAgIHZhciBzaGlmdFNlbFJvd3NJbmRleCA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgICAgICB2YXIgaW5kZXhlcyA9IHNlcnZlciA/IERUX3Jvd3NfYWxsIDogdGFibGUucm93cyh7IHNlYXJjaDogJ2FwcGxpZWQnIH0pLmluZGV4ZXMoKS50b0FycmF5KCk7CiAgICAgICAgc3RhcnQgPSBpbmRleGVzLmluZGV4T2Yoc3RhcnQpOyBlbmQgPSBpbmRleGVzLmluZGV4T2YoZW5kKTsKICAgICAgICAvLyBpZiBzdGFydCBpcyBsYXJnZXIgdGhhbiBlbmQsIHdlIG5lZWQgdG8gc3dhcAogICAgICAgIGlmIChzdGFydCA+IGVuZCkgewogICAgICAgICAgdmFyIHRtcCA9IGVuZDsgZW5kID0gc3RhcnQ7IHN0YXJ0ID0gdG1wOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaW5kZXhlcy5zbGljZShzdGFydCwgZW5kICsgMSk7CiAgICAgIH0KCiAgICAgIHZhciBzZXJ2ZXJSb3dJbmRleCA9IGZ1bmN0aW9uKGNsaWVudFJvd0luZGV4KSB7CiAgICAgICAgcmV0dXJuIHNlcnZlciA/IERUX3Jvd3NfY3VycmVudFtjbGllbnRSb3dJbmRleF0gOiBjbGllbnRSb3dJbmRleCArIDE7CiAgICAgIH0KCiAgICAgIC8vIHJvdywgY29sdW1uLCBvciBjZWxsIHNlbGVjdGlvbgogICAgICB2YXIgbGFzdENsaWNrZWRSb3c7CiAgICAgIGlmIChpbkFycmF5KHNlbFRhcmdldCwgWydyb3cnLCAncm93K2NvbHVtbiddKSkgewogICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBzZWxlY3RlZCByb3dzLiBJdCB3aWxsIGFsc28KICAgICAgICAvLyB1cGRhdGUgdGhlIHNlbGVjdGVkMSdzIHZhbHVlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJvdyBzZWxlY3Rpb24gc3RhdGUKICAgICAgICAvLyBOb3RlIHdlIGNhbid0IHB1dCB0aGlzIGZ1bmN0aW9uIGluc2lkZSBzZWxlY3RSb3dzKCkgZGlyZWN0bHksCiAgICAgICAgLy8gdGhlIHJlYXNvbiBpcyBtZXRob2Quc2VsZWN0Um93cygpIHdpbGwgb3ZlcnJpZGUgc2VsZWN0ZWQxJ3MgdmFsdWUgYnV0IHRoaXMKICAgICAgICAvLyBmdW5jdGlvbiB3aWxsIGFkZCByb3dzIHRvIHNlbGVjdGVkMSAoa2VlcCB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uKSwgd2hpY2ggaXMKICAgICAgICAvLyBpbmNvbnNpc3RlbnQgd2l0aCBjb2x1bW4gYW5kIGNlbGwgc2VsZWN0aW9uLgogICAgICAgIHZhciBzZWxlY3RlZFJvd3MgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciByb3dzID0gdGFibGUucm93cygnLicgKyBzZWxDbGFzcyk7CiAgICAgICAgICB2YXIgaWR4ID0gcm93cy5pbmRleGVzKCkudG9BcnJheSgpOwogICAgICAgICAgaWYgKCFzZXJ2ZXIpIHsKICAgICAgICAgICAgc2VsZWN0ZWQxID0gYWRkT25lKGlkeCk7CiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZDE7CiAgICAgICAgICB9CiAgICAgICAgICBpZHggPSBpZHgubWFwKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgcmV0dXJuIERUX3Jvd3NfY3VycmVudFtpXTsKICAgICAgICAgIH0pOwogICAgICAgICAgc2VsZWN0ZWQxID0gc2VsTW9kZSA9PT0gJ211bHRpcGxlJyA/IHVuaXF1ZShzZWxlY3RlZDEuY29uY2F0KGlkeCkpIDogaWR4OwogICAgICAgICAgcmV0dXJuIHNlbGVjdGVkMTsKICAgICAgICB9CiAgICAgICAgLy8gQ2hhbmdlIHNlbGVjdGVkMSdzIHZhbHVlIGJhc2VkIG9uIHNlbGVjdGFibGUxLCB0aGVuIHJlZnJlc2ggdGhlIHJvdyBzdGF0ZQogICAgICAgIHZhciBvbmx5S2VlcFNlbGVjdGFibGVSb3dzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoc2VsRGlzYWJsZSkgeyAvLyB1c2VycyBjYW4ndCBzZWxlY3Q7IHVzZWZ1bCB3aGVuIG9ubHkgd2FudCBiYWNrZW5kIHNlbGVjdAogICAgICAgICAgICBzZWxlY3RlZDEgPSBbXTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHNlbGVjdGFibGUxLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwogICAgICAgICAgdmFyIG5vbnNlbGVjdGFibGUgPSBzZWxlY3RhYmxlMVswXSA8PSAwOwogICAgICAgICAgaWYgKG5vbnNlbGVjdGFibGUpIHsKICAgICAgICAgICAgLy8gc2hvdWxkIG1ha2Ugc2VsZWN0YWJsZTEgcG9zaXRpdmUKICAgICAgICAgICAgc2VsZWN0ZWQxID0gJChzZWxlY3RlZDEpLm5vdChzZWxlY3RhYmxlMS5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gLWk7IH0pKS5nZXQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGVjdGVkMSA9ICQoc2VsZWN0ZWQxKS5maWx0ZXIoc2VsZWN0YWJsZTEpLmdldCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBDaGFuZ2Ugc2VsZWN0ZWQxJ3MgdmFsdWUgYmFzZWQgb24gc2VsZWN0YWJsZTEsIHRoZW4KICAgICAgICAvLyByZWZyZXNoIHRoZSByb3cgc2VsZWN0aW9uIHN0YXRlIGFjY29yZGluZyB0byB2YWx1ZXMgaW4gc2VsZWN0ZWQxCiAgICAgICAgdmFyIHNlbGVjdFJvd3MgPSBmdW5jdGlvbihpZ25vcmVTZWxlY3RhYmxlKSB7CiAgICAgICAgICBpZiAoIWlnbm9yZVNlbGVjdGFibGUpIG9ubHlLZWVwU2VsZWN0YWJsZVJvd3MoKTsKICAgICAgICAgIHRhYmxlLiQoJ3RyLicgKyBzZWxDbGFzcykucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgaWYgKHNlbGVjdGVkMS5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICAgIGlmIChzZXJ2ZXIpIHsKICAgICAgICAgICAgdGFibGUucm93cyh7cGFnZTogJ2N1cnJlbnQnfSkuZXZlcnkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKGluQXJyYXkoRFRfcm93c19jdXJyZW50W3RoaXMuaW5kZXgoKV0sIHNlbGVjdGVkMSkpIHsKICAgICAgICAgICAgICAgICQodGhpcy5ub2RlKCkpLmFkZENsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkMCA9IHNlbGVjdGVkMS5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gaSAtIDE7IH0pOwogICAgICAgICAgICAkKHRhYmxlLnJvd3Moc2VsZWN0ZWQwKS5ub2RlcygpKS5hZGRDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRhYmxlLm9uKCdtb3VzZWRvd24uZHQnLCAndGJvZHkgdHInLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLCB0aGlzUm93ID0gdGFibGUucm93KHRoaXMpOwogICAgICAgICAgaWYgKHNlbE1vZGUgPT09ICdtdWx0aXBsZScpIHsKICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkgJiYgbGFzdENsaWNrZWRSb3cgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgIC8vIHNlbGVjdCBvciBkZS1zZWxlY3QgZGVwZW5kcyBvbiB0aGUgbGFzdCBjbGlja2VkIHJvdydzIHN0YXR1cwogICAgICAgICAgICAgIHZhciBmbGFnU2VsID0gISR0aGlzLmhhc0NsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgICB2YXIgY3J0Q2xpY2tlZFJvdyA9IHNlcnZlclJvd0luZGV4KHRoaXNSb3cuaW5kZXgoKSk7CiAgICAgICAgICAgICAgaWYgKHNlcnZlcikgewogICAgICAgICAgICAgICAgdmFyIHJvd3NJbmRleCA9IHNoaWZ0U2VsUm93c0luZGV4KGxhc3RDbGlja2VkUm93LCBjcnRDbGlja2VkUm93KTsKICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBjdXJyZW50IHBhZ2UncyBzZWxDbGFzcwogICAgICAgICAgICAgICAgcm93c0luZGV4Lm1hcChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICAgIHZhciByb3dJbmRleCA9IERUX3Jvd3NfY3VycmVudC5pbmRleE9mKGkpOwogICAgICAgICAgICAgICAgICBpZiAocm93SW5kZXggPj0gMCkgewogICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSB0YWJsZS5yb3cocm93SW5kZXgpLm5vZGVzKCkudG8kKCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdSb3dTZWwgPSAhcm93Lmhhc0NsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ1NlbCA9PT0gZmxhZ1Jvd1NlbCkgcm93LnRvZ2dsZUNsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgc2VsZWN0ZWQxCiAgICAgICAgICAgICAgICBpZiAoZmxhZ1NlbCkgewogICAgICAgICAgICAgICAgICBzZWxlY3RlZDEgPSB1bmlxdWUoc2VsZWN0ZWQxLmNvbmNhdChyb3dzSW5kZXgpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkMSA9IHNlbGVjdGVkMS5maWx0ZXIoZnVuY3Rpb24oaW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWluQXJyYXkoaW5kZXgsIHJvd3NJbmRleCk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBqcyBzdGFydHMgZnJvbSAwCiAgICAgICAgICAgICAgICBzaGlmdFNlbFJvd3NJbmRleChsYXN0Q2xpY2tlZFJvdyAtIDEsIGNydENsaWNrZWRSb3cgLSAxKS5tYXAoZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHRhYmxlLnJvdyh2YWx1ZSkubm9kZXMoKS50byQoKTsKICAgICAgICAgICAgICAgICAgdmFyIGZsYWdSb3dTZWwgPSAhcm93Lmhhc0NsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgICAgICAgaWYgKGZsYWdTZWwgPT09IGZsYWdSb3dTZWwpIHJvdy50b2dnbGVDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICR0aGlzLnRvZ2dsZUNsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKHNlbENsYXNzKSkgewogICAgICAgICAgICAgICR0aGlzLnJlbW92ZUNsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0YWJsZS4kKCd0ci4nICsgc2VsQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgICAkdGhpcy5hZGRDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzZXJ2ZXIgJiYgISR0aGlzLmhhc0NsYXNzKHNlbENsYXNzKSkgewogICAgICAgICAgICB2YXIgaWQgPSBEVF9yb3dzX2N1cnJlbnRbdGhpc1Jvdy5pbmRleCgpXTsKICAgICAgICAgICAgLy8gcmVtb3ZlIGlkIGZyb20gc2VsZWN0ZWQxIHNpbmNlIGl0cyBjbGFzcyAuc2VsZWN0ZWQgaGFzIGJlZW4gcmVtb3ZlZAogICAgICAgICAgICBpZiAoaW5BcnJheShpZCwgc2VsZWN0ZWQxKSkgc2VsZWN0ZWQxLnNwbGljZSgkLmluQXJyYXkoaWQsIHNlbGVjdGVkMSksIDEpOwogICAgICAgICAgfQogICAgICAgICAgc2VsZWN0ZWRSb3dzKCk7IC8vIHVwZGF0ZSBzZWxlY3RlZDEncyB2YWx1ZSBiYXNlZCBvbiBzZWxDbGFzcwogICAgICAgICAgc2VsZWN0Um93cyhmYWxzZSk7IC8vIG9ubHkga2VlcCB0aGUgc2VsZWN0YWJsZSByb3dzCiAgICAgICAgICBjaGFuZ2VJbnB1dCgncm93c19zZWxlY3RlZCcsIHNlbGVjdGVkMSk7CiAgICAgICAgICBjaGFuZ2VJbnB1dCgncm93X2xhc3RfY2xpY2tlZCcsIHNlcnZlclJvd0luZGV4KHRoaXNSb3cuaW5kZXgoKSksIG51bGwsIG51bGwsIHtwcmlvcml0eTogJ2V2ZW50J30pOwogICAgICAgICAgbGFzdENsaWNrZWRSb3cgPSBzZXJ2ZXJSb3dJbmRleCh0aGlzUm93LmluZGV4KCkpOwogICAgICAgIH0pOwogICAgICAgIHNlbGVjdFJvd3MoZmFsc2UpOyAgLy8gaW4gY2FzZSB1c2VycyBoYXZlIHNwZWNpZmllZCBwcmUtc2VsZWN0ZWQgcm93cwogICAgICAgIC8vIHJlc3RvcmUgc2VsZWN0ZWQgcm93cyBhZnRlciB0aGUgdGFibGUgaXMgcmVkcmF3biAoZS5nLiBzb3J0L3NlYXJjaC9wYWdlKTsKICAgICAgICAvLyBjbGllbnQtc2lkZSB0YWJsZXMgd2lsbCBwcmVzZXJ2ZSB0aGUgc2VsZWN0aW9ucyBhdXRvbWF0aWNhbGx5OyBmb3IKICAgICAgICAvLyBzZXJ2ZXItc2lkZSB0YWJsZXMsIHdlIGhhdmUgdG8gKnJlYWwqIHJvdyBpbmRpY2VzIGFyZSBpbiBgc2VsZWN0ZWQxYAogICAgICAgIGNoYW5nZUlucHV0KCdyb3dzX3NlbGVjdGVkJywgc2VsZWN0ZWQxKTsKICAgICAgICBpZiAoc2VydmVyKSB0YWJsZS5vbignZHJhdy5kdCcsIGZ1bmN0aW9uKGUpIHsgc2VsZWN0Um93cyhmYWxzZSk7IH0pOwogICAgICAgIG1ldGhvZHMuc2VsZWN0Um93cyA9IGZ1bmN0aW9uKHNlbGVjdGVkLCBpZ25vcmVTZWxlY3RhYmxlKSB7CiAgICAgICAgICBzZWxlY3RlZDEgPSAkLm1ha2VBcnJheShzZWxlY3RlZCk7CiAgICAgICAgICBzZWxlY3RSb3dzKGlnbm9yZVNlbGVjdGFibGUpOwogICAgICAgICAgY2hhbmdlSW5wdXQoJ3Jvd3Nfc2VsZWN0ZWQnLCBzZWxlY3RlZDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGluQXJyYXkoc2VsVGFyZ2V0LCBbJ2NvbHVtbicsICdyb3crY29sdW1uJ10pKSB7CiAgICAgICAgaWYgKHNlbFRhcmdldCA9PT0gJ3Jvdytjb2x1bW4nKSB7CiAgICAgICAgICAkKHRhYmxlLmNvbHVtbnMoKS5mb290ZXIoKSkuY3NzKCdjdXJzb3InLCAncG9pbnRlcicpOwogICAgICAgIH0KICAgICAgICAvLyB1cGRhdGUgc2VsZWN0ZWQyJ3MgdmFsdWUgYmFzZWQgb24gc2VsZWN0YWJsZTIKICAgICAgICB2YXIgb25seUtlZXBTZWxlY3RhYmxlQ29scyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKHNlbERpc2FibGUpIHsgLy8gdXNlcnMgY2FuJ3Qgc2VsZWN0OyB1c2VmdWwgd2hlbiBvbmx5IHdhbnQgYmFja2VuZCBzZWxlY3QKICAgICAgICAgICAgc2VsZWN0ZWQyID0gW107CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzZWxlY3RhYmxlMi5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICAgIHZhciBub25zZWxlY3RhYmxlID0gc2VsZWN0YWJsZTJbMF0gPD0gMDsKICAgICAgICAgIGlmIChub25zZWxlY3RhYmxlKSB7CiAgICAgICAgICAgIC8vIG5lZWQgdG8gbWFrZSBzZWxlY3RhYmxlMiBwb3NpdGl2ZQogICAgICAgICAgICBzZWxlY3RlZDIgPSAkKHNlbGVjdGVkMikubm90KHNlbGVjdGFibGUyLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiAtaTsgfSkpLmdldCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZWN0ZWQyID0gJChzZWxlY3RlZDIpLmZpbHRlcihzZWxlY3RhYmxlMikuZ2V0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZDIgYW5kIHRoZW4KICAgICAgICAvLyByZWZyZXNoIHRoZSBjb2wgc2VsZWN0aW9uIHN0YXRlIGFjY29yZGluZyB0byB2YWx1ZXMgaW4gc2VsZWN0ZWQyCiAgICAgICAgdmFyIHNlbGVjdENvbHMgPSBmdW5jdGlvbihpZ25vcmVTZWxlY3RhYmxlKSB7CiAgICAgICAgICBpZiAoIWlnbm9yZVNlbGVjdGFibGUpIG9ubHlLZWVwU2VsZWN0YWJsZUNvbHMoKTsKICAgICAgICAgIC8vIGlmIHNlbGVjdGVkMiBpcyBub3QgYSB2YWxpZGUgaW5kZXggKGUuZy4sIGxhcmdlciB0aGFuIHRoZSBjb2x1bW4gbnVtYmVyKQogICAgICAgICAgLy8gdGFibGUuY29sdW1ucyhzZWxlY3RlZDIpIHdpbGwgZmFpbCBhbmQgcmVzdWx0IGluIGEgYmxhbmsgdGFibGUKICAgICAgICAgIC8vIHRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHRhYmxlLnJvd3MoKSwgd2hlcmUgdGhlIG91dC1vZi1yYW5nZSBpbmRleGVzCiAgICAgICAgICAvLyBkb2Vzbid0IGFmZmVjdCBhdCBhbGwKICAgICAgICAgIHNlbGVjdGVkMiA9ICQoc2VsZWN0ZWQyKS5maWx0ZXIodGFibGUuY29sdW1ucygpLmluZGV4ZXMoKSkuZ2V0KCk7CiAgICAgICAgICB0YWJsZS5jb2x1bW5zKCkubm9kZXMoKS5mbGF0dGVuKCkudG8kKCkucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgaWYgKHNlbGVjdGVkMi5sZW5ndGggPiAwKQogICAgICAgICAgICB0YWJsZS5jb2x1bW5zKHNlbGVjdGVkMikubm9kZXMoKS5mbGF0dGVuKCkudG8kKCkuYWRkQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgIH0KICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBjb2xJZHggPSBzZWxUYXJnZXQgPT09ICdjb2x1bW4nID8gdGFibGUuY2VsbCh0aGlzKS5pbmRleCgpLmNvbHVtbiA6CiAgICAgICAgICAgICAgJC5pbkFycmF5KHRoaXMsIHRhYmxlLmNvbHVtbnMoKS5mb290ZXIoKSksCiAgICAgICAgICAgICAgdGhpc0NvbCA9ICQodGFibGUuY29sdW1uKGNvbElkeCkubm9kZXMoKSk7CiAgICAgICAgICBpZiAoY29sSWR4ID09PSAtMSkgcmV0dXJuOwogICAgICAgICAgaWYgKHRoaXNDb2wuaGFzQ2xhc3Moc2VsQ2xhc3MpKSB7CiAgICAgICAgICAgIHRoaXNDb2wucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICBzZWxlY3RlZDIuc3BsaWNlKCQuaW5BcnJheShjb2xJZHgsIHNlbGVjdGVkMiksIDEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHNlbE1vZGUgPT09ICdzaW5nbGUnKSAkKHRhYmxlLmNlbGxzKCkubm9kZXMoKSkucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICB0aGlzQ29sLmFkZENsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgc2VsZWN0ZWQyID0gc2VsTW9kZSA9PT0gJ3NpbmdsZScgPyBbY29sSWR4XSA6IHVuaXF1ZShzZWxlY3RlZDIuY29uY2F0KFtjb2xJZHhdKSk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxlY3RDb2xzKGZhbHNlKTsgLy8gdXBkYXRlIHNlbGVjdGVkMiBiYXNlZCBvbiBzZWxlY3RhYmxlCiAgICAgICAgICBjaGFuZ2VJbnB1dCgnY29sdW1uc19zZWxlY3RlZCcsIHNlbGVjdGVkMik7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxUYXJnZXQgPT09ICdjb2x1bW4nKSB7CiAgICAgICAgICAkKHRhYmxlLnRhYmxlKCkuYm9keSgpKS5vbignY2xpY2suZHQnLCAndGQnLCBjYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICQodGFibGUudGFibGUoKS5mb290ZXIoKSkub24oJ2NsaWNrLmR0JywgJ3RyIHRoJywgY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgICBzZWxlY3RDb2xzKGZhbHNlKTsgIC8vIGluIGNhc2UgdXNlcnMgaGF2ZSBzcGVjaWZpZWQgcHJlLXNlbGVjdGVkIGNvbHVtbnMKICAgICAgICBjaGFuZ2VJbnB1dCgnY29sdW1uc19zZWxlY3RlZCcsIHNlbGVjdGVkMik7CiAgICAgICAgaWYgKHNlcnZlcikgdGFibGUub24oJ2RyYXcuZHQnLCBmdW5jdGlvbihlKSB7IHNlbGVjdENvbHMoZmFsc2UpOyB9KTsKICAgICAgICBtZXRob2RzLnNlbGVjdENvbHVtbnMgPSBmdW5jdGlvbihzZWxlY3RlZCwgaWdub3JlU2VsZWN0YWJsZSkgewogICAgICAgICAgc2VsZWN0ZWQyID0gJC5tYWtlQXJyYXkoc2VsZWN0ZWQpOwogICAgICAgICAgc2VsZWN0Q29scyhpZ25vcmVTZWxlY3RhYmxlKTsKICAgICAgICAgIGNoYW5nZUlucHV0KCdjb2x1bW5zX3NlbGVjdGVkJywgc2VsZWN0ZWQyKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChzZWxUYXJnZXQgPT09ICdjZWxsJykgewogICAgICAgIHZhciBzZWxlY3RlZDMgPSBbXSwgc2VsZWN0YWJsZTMgPSBbXTsKICAgICAgICBpZiAoc2VsZWN0ZWQgIT09IG51bGwpIHNlbGVjdGVkMyA9IHNlbGVjdGVkOwogICAgICAgIGlmIChzZWxlY3RhYmxlICE9PSBudWxsICYmIHR5cGVvZiBzZWxlY3RhYmxlICE9PSAnYm9vbGVhbicpIHNlbGVjdGFibGUzID0gc2VsZWN0YWJsZTsKICAgICAgICB2YXIgZmluZEluZGV4ID0gZnVuY3Rpb24oaWosIHNlbCkgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGlqWzBdID09PSBzZWxbaV1bMF0gJiYgaWpbMV0gPT09IHNlbFtpXVsxXSkgcmV0dXJuIGk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgICAvLyBDaGFuZ2Ugc2VsZWN0ZWQzJ3MgdmFsdWUgYmFzZWQgb24gc2VsZWN0YWJsZTMsIHRoZW4gcmVmcmVzaCB0aGUgY2VsbCBzdGF0ZQogICAgICAgIHZhciBvbmx5S2VlcFNlbGVjdGFibGVDZWxscyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKHNlbERpc2FibGUpIHsgLy8gdXNlcnMgY2FuJ3Qgc2VsZWN0OyB1c2VmdWwgd2hlbiBvbmx5IHdhbnQgYmFja2VuZCBzZWxlY3QKICAgICAgICAgICAgc2VsZWN0ZWQzID0gW107CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzZWxlY3RhYmxlMy5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICAgIHZhciBub25zZWxlY3RhYmxlID0gc2VsZWN0YWJsZTNbMF1bMF0gPD0gMDsKICAgICAgICAgIHZhciBvdXQgPSBbXTsKICAgICAgICAgIGlmIChub25zZWxlY3RhYmxlKSB7CiAgICAgICAgICAgIHNlbGVjdGVkMy5tYXAoZnVuY3Rpb24oaWopIHsKICAgICAgICAgICAgICAvLyBzaG91bGQgbWFrZSBzZWxlY3RhYmxlMyBwb3NpdGl2ZQogICAgICAgICAgICAgIGlmIChmaW5kSW5kZXgoWy1palswXSwgLWlqWzFdXSwgc2VsZWN0YWJsZTMpID09PSAtMSkgeyBvdXQucHVzaChpaik7IH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxlY3RlZDMubWFwKGZ1bmN0aW9uKGlqKSB7CiAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleChpaiwgc2VsZWN0YWJsZTMpID4gLTEpIHsgb3V0LnB1c2goaWopOyB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgc2VsZWN0ZWQzID0gb3V0OwogICAgICAgIH0KICAgICAgICAvLyBDaGFuZ2Ugc2VsZWN0ZWQzJ3MgdmFsdWUgYmFzZWQgb24gc2VsZWN0YWJsZTMsIHRoZW4KICAgICAgICAvLyByZWZyZXNoIHRoZSBjZWxsIHNlbGVjdGlvbiBzdGF0ZSBhY2NvcmRpbmcgdG8gdmFsdWVzIGluIHNlbGVjdGVkMwogICAgICAgIHZhciBzZWxlY3RDZWxscyA9IGZ1bmN0aW9uKGlnbm9yZVNlbGVjdGFibGUpIHsKICAgICAgICAgIGlmICghaWdub3JlU2VsZWN0YWJsZSkgb25seUtlZXBTZWxlY3RhYmxlQ2VsbHMoKTsKICAgICAgICAgIHRhYmxlLiQoJ3RkLicgKyBzZWxDbGFzcykucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgaWYgKHNlbGVjdGVkMy5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICAgIGlmIChzZXJ2ZXIpIHsKICAgICAgICAgICAgdGFibGUuY2VsbHMoe3BhZ2U6ICdjdXJyZW50J30pLmV2ZXJ5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhciBpbmZvID0gdHdlYWtDZWxsSW5kZXgodGhpcyk7CiAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleChbaW5mby5yb3csIGluZm8uY29sXSwgc2VsZWN0ZWQzKSA+IC0xKQogICAgICAgICAgICAgICAgJCh0aGlzLm5vZGUoKSkuYWRkQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGVjdGVkMy5tYXAoZnVuY3Rpb24oaWopIHsKICAgICAgICAgICAgICAkKHRhYmxlLmNlbGwoaWpbMF0gLSAxLCBpalsxXSkubm9kZSgpKS5hZGRDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGFibGUub24oJ2NsaWNrLmR0JywgJ3Rib2R5IHRkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLCBpbmZvID0gdHdlYWtDZWxsSW5kZXgodGFibGUuY2VsbCh0aGlzKSk7CiAgICAgICAgICBpZiAoJHRoaXMuaGFzQ2xhc3Moc2VsQ2xhc3MpKSB7CiAgICAgICAgICAgICR0aGlzLnJlbW92ZUNsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgc2VsZWN0ZWQzLnNwbGljZShmaW5kSW5kZXgoW2luZm8ucm93LCBpbmZvLmNvbF0sIHNlbGVjdGVkMyksIDEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHNlbE1vZGUgPT09ICdzaW5nbGUnKSAkKHRhYmxlLmNlbGxzKCkubm9kZXMoKSkucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICAkdGhpcy5hZGRDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgIHNlbGVjdGVkMyA9IHNlbE1vZGUgPT09ICdzaW5nbGUnID8gW1tpbmZvLnJvdywgaW5mby5jb2xdXSA6CiAgICAgICAgICAgICAgdW5pcXVlKHNlbGVjdGVkMy5jb25jYXQoW1tpbmZvLnJvdywgaW5mby5jb2xdXSkpOwogICAgICAgICAgfQogICAgICAgICAgc2VsZWN0Q2VsbHMoZmFsc2UpOyAvLyBtdXN0IGNhbGwgdGhpcyB0byB1cGRhdGUgc2VsZWN0ZWQzIGJhc2VkIG9uIHNlbGVjdGFibGUzCiAgICAgICAgICBjaGFuZ2VJbnB1dCgnY2VsbHNfc2VsZWN0ZWQnLCB0cmFuc3Bvc2VBcnJheTJEKHNlbGVjdGVkMyksICdzaGlueS5tYXRyaXgnKTsKICAgICAgICB9KTsKICAgICAgICBzZWxlY3RDZWxscyhmYWxzZSk7ICAvLyBpbiBjYXNlIHVzZXJzIGhhdmUgc3BlY2lmaWVkIHByZS1zZWxlY3RlZCBjb2x1bW5zCiAgICAgICAgY2hhbmdlSW5wdXQoJ2NlbGxzX3NlbGVjdGVkJywgdHJhbnNwb3NlQXJyYXkyRChzZWxlY3RlZDMpLCAnc2hpbnkubWF0cml4Jyk7CgogICAgICAgIGlmIChzZXJ2ZXIpIHRhYmxlLm9uKCdkcmF3LmR0JywgZnVuY3Rpb24oZSkgeyBzZWxlY3RDZWxscyhmYWxzZSk7IH0pOwogICAgICAgIG1ldGhvZHMuc2VsZWN0Q2VsbHMgPSBmdW5jdGlvbihzZWxlY3RlZCwgaWdub3JlU2VsZWN0YWJsZSkgewogICAgICAgICAgc2VsZWN0ZWQzID0gc2VsZWN0ZWQgPyBzZWxlY3RlZCA6IFtdOwogICAgICAgICAgc2VsZWN0Q2VsbHMoaWdub3JlU2VsZWN0YWJsZSk7CiAgICAgICAgICBjaGFuZ2VJbnB1dCgnY2VsbHNfc2VsZWN0ZWQnLCB0cmFuc3Bvc2VBcnJheTJEKHNlbGVjdGVkMyksICdzaGlueS5tYXRyaXgnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBleHBvc2Ugc29tZSB0YWJsZSBpbmZvIHRvIFNoaW55CiAgICB2YXIgdXBkYXRlVGFibGVJbmZvID0gZnVuY3Rpb24oZSwgc2V0dGluZ3MpIHsKICAgICAgLy8gVE9ETzogaXMgYW55b25lIGludGVyZXN0ZWQgaW4gdGhlIHBhZ2UgaW5mbz8KICAgICAgLy8gY2hhbmdlSW5wdXQoJ3BhZ2VfaW5mbycsIHRhYmxlLnBhZ2UuaW5mbygpKTsKICAgICAgdmFyIHVwZGF0ZVJvd0luZm8gPSBmdW5jdGlvbihpZCwgbW9kaWZpZXIpIHsKICAgICAgICB2YXIgaWR4OwogICAgICAgIGlmIChzZXJ2ZXIpIHsKICAgICAgICAgIGlkeCA9IG1vZGlmaWVyLnBhZ2UgPT09ICdjdXJyZW50JyA/IERUX3Jvd3NfY3VycmVudCA6IERUX3Jvd3NfYWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgcm93cyA9IHRhYmxlLnJvd3MoJC5leHRlbmQoewogICAgICAgICAgICBzZWFyY2g6ICdhcHBsaWVkJywKICAgICAgICAgICAgcGFnZTogJ2FsbCcKICAgICAgICAgIH0sIG1vZGlmaWVyKSk7CiAgICAgICAgICBpZHggPSBhZGRPbmUocm93cy5pbmRleGVzKCkudG9BcnJheSgpKTsKICAgICAgICB9CiAgICAgICAgY2hhbmdlSW5wdXQoJ3Jvd3MnICsgJ18nICsgaWQsIGlkeCk7CiAgICAgIH07CiAgICAgIHVwZGF0ZVJvd0luZm8oJ2N1cnJlbnQnLCB7cGFnZTogJ2N1cnJlbnQnfSk7CiAgICAgIHVwZGF0ZVJvd0luZm8oJ2FsbCcsIHt9KTsKICAgIH0KICAgIHRhYmxlLm9uKCdkcmF3LmR0JywgdXBkYXRlVGFibGVJbmZvKTsKICAgIHVwZGF0ZVRhYmxlSW5mbygpOwoKICAgIC8vIHN0YXRlIGluZm8KICAgIHRhYmxlLm9uKCdkcmF3LmR0IGNvbHVtbi12aXNpYmlsaXR5LmR0JywgZnVuY3Rpb24oKSB7CiAgICAgIGNoYW5nZUlucHV0KCdzdGF0ZScsIHRhYmxlLnN0YXRlKCkpOwogICAgfSk7CiAgICBjaGFuZ2VJbnB1dCgnc3RhdGUnLCB0YWJsZS5zdGF0ZSgpKTsKCiAgICAvLyBzZWFyY2ggaW5mbwogICAgdmFyIHVwZGF0ZVNlYXJjaEluZm8gPSBmdW5jdGlvbigpIHsKICAgICAgY2hhbmdlSW5wdXQoJ3NlYXJjaCcsIHRhYmxlLnNlYXJjaCgpKTsKICAgICAgaWYgKGZpbHRlclJvdykgY2hhbmdlSW5wdXQoJ3NlYXJjaF9jb2x1bW5zJywgZmlsdGVyUm93LnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24odGQpIHsKICAgICAgICByZXR1cm4gJCh0ZCkuZmluZCgnaW5wdXQnKS5maXJzdCgpLnZhbCgpOwogICAgICB9KSk7CiAgICB9CiAgICB0YWJsZS5vbignZHJhdy5kdCcsIHVwZGF0ZVNlYXJjaEluZm8pOwogICAgdXBkYXRlU2VhcmNoSW5mbygpOwoKICAgIHZhciBjZWxsSW5mbyA9IGZ1bmN0aW9uKHRoaXopIHsKICAgICAgdmFyIGluZm8gPSB0d2Vha0NlbGxJbmRleCh0YWJsZS5jZWxsKHRoaXopKTsKICAgICAgaW5mby52YWx1ZSA9IHRhYmxlLmNlbGwodGhpeikuZGF0YSgpOwogICAgICByZXR1cm4gaW5mbzsKICAgIH0KICAgIC8vIHRoZSBjdXJyZW50IGNlbGwgY2xpY2tlZCBvbgogICAgdGFibGUub24oJ2NsaWNrLmR0JywgJ3Rib2R5IHRkJywgZnVuY3Rpb24oKSB7CiAgICAgIGNoYW5nZUlucHV0KCdjZWxsX2NsaWNrZWQnLCBjZWxsSW5mbyh0aGlzKSwgbnVsbCwgbnVsbCwge3ByaW9yaXR5OiAnZXZlbnQnfSk7CiAgICB9KQogICAgY2hhbmdlSW5wdXQoJ2NlbGxfY2xpY2tlZCcsIHt9KTsKCiAgICAvLyBkbyBub3QgdHJpZ2dlciB0YWJsZSBzZWxlY3Rpb24gd2hlbiBjbGlja2luZyBvbiBsaW5rcyB1bmxlc3MgdGhleSBoYXZlIGNsYXNzZXMKICAgIHRhYmxlLm9uKCdjbGljay5kdCcsICd0Ym9keSB0ZCBhJywgZnVuY3Rpb24oZSkgewogICAgICBpZiAodGhpcy5jbGFzc05hbWUgPT09ICcnKSBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfSk7CgogICAgbWV0aG9kcy5hZGRSb3cgPSBmdW5jdGlvbihkYXRhLCByb3duYW1lLCByZXNldFBhZ2luZykgewogICAgICB2YXIgbiA9IHRhYmxlLmNvbHVtbnMoKS5pbmRleGVzKCkubGVuZ3RoLCBkID0gbiAtIGRhdGEubGVuZ3RoOwogICAgICBpZiAoZCA9PT0gMSkgewogICAgICAgIGRhdGEgPSByb3duYW1lLmNvbmNhdChkYXRhKQogICAgICB9IGVsc2UgaWYgKGQgIT09IDApIHsKICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgICBjb25zb2xlLmxvZyh0YWJsZS5jb2x1bW5zKCkuaW5kZXhlcygpKTsKICAgICAgICB0aHJvdyAnTmV3IGRhdGEgbXVzdCBiZSBvZiB0aGUgc2FtZSBsZW5ndGggYXMgY3VycmVudCBkYXRhICgnICsgbiArICcpJzsKICAgICAgfTsKICAgICAgdGFibGUucm93LmFkZChkYXRhKS5kcmF3KHJlc2V0UGFnaW5nKTsKICAgIH0KCiAgICBtZXRob2RzLnVwZGF0ZVNlYXJjaCA9IGZ1bmN0aW9uKGtleXdvcmRzKSB7CiAgICAgIGlmIChrZXl3b3Jkcy5nbG9iYWwgIT09IG51bGwpCiAgICAgICAgJCh0YWJsZS50YWJsZSgpLmNvbnRhaW5lcigpKS5maW5kKCdpbnB1dFt0eXBlPXNlYXJjaF0nKS5maXJzdCgpCiAgICAgICAgICAgICAudmFsKGtleXdvcmRzLmdsb2JhbCkudHJpZ2dlcignaW5wdXQnKTsKICAgICAgdmFyIGNvbHVtbnMgPSBrZXl3b3Jkcy5jb2x1bW5zOwogICAgICBpZiAoIWZpbHRlclJvdyB8fCBjb2x1bW5zID09PSBudWxsKSByZXR1cm47CiAgICAgIGZpbHRlclJvdy50b0FycmF5KCkubWFwKGZ1bmN0aW9uKHRkLCBpKSB7CiAgICAgICAgdmFyIHYgPSB0eXBlb2YgY29sdW1ucyA9PT0gJ3N0cmluZycgPyBjb2x1bW5zIDogY29sdW1uc1tpXTsKICAgICAgICBpZiAodHlwZW9mIHYgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIHNlYXJjaCBrZXl3b3JkIGZvciBjb2x1bW4gJyArIGkgKyAnIGlzIHVuZGVmaW5lZCcpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICQodGQpLmZpbmQoJ2lucHV0JykuZmlyc3QoKS52YWwodik7CiAgICAgICAgc2VhcmNoQ29sdW1uKGksIHYpOwogICAgICB9KTsKICAgICAgdGFibGUuZHJhdygpOwogICAgfQoKICAgIG1ldGhvZHMuaGlkZUNvbHMgPSBmdW5jdGlvbihoaWRlLCByZXNldCkgewogICAgICBpZiAocmVzZXQpIHRhYmxlLmNvbHVtbnMoKS52aXNpYmxlKHRydWUsIGZhbHNlKTsKICAgICAgdGFibGUuY29sdW1ucyhoaWRlKS52aXNpYmxlKGZhbHNlKTsKICAgIH0KCiAgICBtZXRob2RzLnNob3dDb2xzID0gZnVuY3Rpb24oc2hvdywgcmVzZXQpIHsKICAgICAgaWYgKHJlc2V0KSB0YWJsZS5jb2x1bW5zKCkudmlzaWJsZShmYWxzZSwgZmFsc2UpOwogICAgICB0YWJsZS5jb2x1bW5zKHNob3cpLnZpc2libGUodHJ1ZSk7CiAgICB9CgogICAgbWV0aG9kcy5jb2xSZW9yZGVyID0gZnVuY3Rpb24ob3JkZXIsIG9yaWdPcmRlcikgewogICAgICB0YWJsZS5jb2xSZW9yZGVyLm9yZGVyKG9yZGVyLCBvcmlnT3JkZXIpOwogICAgfQoKICAgIG1ldGhvZHMuc2VsZWN0UGFnZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKICAgICAgaWYgKHRhYmxlLnBhZ2UuaW5mbygpLnBhZ2VzIDwgcGFnZSB8fCBwYWdlIDwgMSkgewogICAgICAgIHRocm93ICdTZWxlY3RlZCBwYWdlIGlzIG91dCBvZiByYW5nZSc7CiAgICAgIH07CiAgICAgIHRhYmxlLnBhZ2UocGFnZSAtIDEpLmRyYXcoZmFsc2UpOwogICAgfQoKICAgIG1ldGhvZHMucmVsb2FkRGF0YSA9IGZ1bmN0aW9uKHJlc2V0UGFnaW5nLCBjbGVhclNlbGVjdGlvbikgewogICAgICAvLyBlbXB0eSBzZWxlY3Rpb25zIGZpcnN0IGlmIG5lY2Vzc2FyeQogICAgICBpZiAobWV0aG9kcy5zZWxlY3RSb3dzICYmIGluQXJyYXkoJ3JvdycsIGNsZWFyU2VsZWN0aW9uKSkgbWV0aG9kcy5zZWxlY3RSb3dzKFtdKTsKICAgICAgaWYgKG1ldGhvZHMuc2VsZWN0Q29sdW1ucyAmJiBpbkFycmF5KCdjb2x1bW4nLCBjbGVhclNlbGVjdGlvbikpIG1ldGhvZHMuc2VsZWN0Q29sdW1ucyhbXSk7CiAgICAgIGlmIChtZXRob2RzLnNlbGVjdENlbGxzICYmIGluQXJyYXkoJ2NlbGwnLCBjbGVhclNlbGVjdGlvbikpIG1ldGhvZHMuc2VsZWN0Q2VsbHMoW10pOwogICAgICB0YWJsZS5hamF4LnJlbG9hZChudWxsLCByZXNldFBhZ2luZyk7CiAgICB9CgogICAgdGFibGUuc2hpbnlNZXRob2RzID0gbWV0aG9kczsKICB9LAogIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICBpZiAoaW5zdGFuY2UuZGF0YSkgdGhpcy5yZW5kZXJWYWx1ZShlbCwgaW5zdGFuY2UuZGF0YSwgaW5zdGFuY2UpOwoKICAgIC8vIGR5bmFtaWNhbGx5IGFkanVzdCBoZWlnaHQgaWYgZmlsbENvbnRhaW5lciA9IFRSVUUKICAgIGlmIChpbnN0YW5jZS5maWxsQ29udGFpbmVyKQogICAgICB0aGlzLmZpbGxBdmFpbGFibGVIZWlnaHQoZWwsIGhlaWdodCk7CgogICAgdGhpcy5hZGp1c3RXaWR0aChlbCk7CiAgfSwKCiAgLy8gZHluYW1pY2FsbHkgc2V0IHRoZSBzY3JvbGwgYm9keSB0byBmaWxsIGF2YWlsYWJsZSBoZWlnaHQKICAvLyAodXNlZCB3aXRoIGZpbGxDb250YWluZXIgPSBUUlVFKQogIGZpbGxBdmFpbGFibGVIZWlnaHQ6IGZ1bmN0aW9uKGVsLCBhdmFpbGFibGVIZWlnaHQpIHsKCiAgICAvLyBzZWUgaG93IG11Y2ggb2YgdGhlIHRhYmxlIGlzIG9jY3VwaWVkIGJ5IGhlYWRlci9mb290ZXIgZWxlbWVudHMKICAgIC8vIGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIGEgdGFyZ2V0IHNjcm9sbCBib2R5IGhlaWdodAogICAgdmFyIGR0V3JhcHBlciA9ICQoZWwpLmZpbmQoJ2Rpdi5kYXRhVGFibGVzX3dyYXBwZXInKTsKICAgIHZhciBkdFNjcm9sbEJvZHkgPSAkKGVsKS5maW5kKCQoJ2Rpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHknKSk7CiAgICB2YXIgZnJhbWluZ0hlaWdodCA9IGR0V3JhcHBlci5pbm5lckhlaWdodCgpIC0gZHRTY3JvbGxCb2R5LmlubmVySGVpZ2h0KCk7CiAgICB2YXIgc2Nyb2xsQm9keUhlaWdodCA9IGF2YWlsYWJsZUhlaWdodCAtIGZyYW1pbmdIZWlnaHQ7CgogICAgLy8gc2V0IHRoZSBoZWlnaHQKICAgIGR0U2Nyb2xsQm9keS5oZWlnaHQoc2Nyb2xsQm9keUhlaWdodCArICdweCcpOwogIH0sCgogIC8vIGFkanVzdCB0aGUgd2lkdGggb2YgY29sdW1uczsgcmVtb3ZlIHRoZSBoYXJkLWNvZGVkIHdpZHRocyBvbiB0YWJsZSBhbmQgdGhlCiAgLy8gc2Nyb2xsIGhlYWRlciB3aGVuIHNjcm9sbFgvWSBhcmUgZW5hYmxlZAogIGFkanVzdFdpZHRoOiBmdW5jdGlvbihlbCkgewogICAgdmFyICRlbCA9ICQoZWwpLCB0YWJsZSA9ICRlbC5kYXRhKCdkYXRhdGFibGUnKTsKICAgIGlmICh0YWJsZSkgdGFibGUuY29sdW1ucy5hZGp1c3QoKTsKICAgICRlbC5maW5kKCcuZGF0YVRhYmxlc19zY3JvbGxIZWFkSW5uZXInKS5jc3MoJ3dpZHRoJywgJycpCiAgICAgICAgLmNoaWxkcmVuKCd0YWJsZScpLmNzcygnbWFyZ2luLWxlZnQnLCAnJyk7CiAgfQp9KTsKCiAgaWYgKCFIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHJldHVybjsKCiAgU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoJ2RhdGF0YWJsZS1jYWxscycsIGZ1bmN0aW9uKGRhdGEpIHsKICAgIHZhciBpZCA9IGRhdGEuaWQ7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICB2YXIgdGFibGUgPSBlbCA/ICQoZWwpLmRhdGEoJ2RhdGF0YWJsZScpIDogbnVsbDsKICAgIGlmICghdGFibGUpIHsKICAgICAgY29uc29sZS5sb2coIkNvdWxkbid0IGZpbmQgdGFibGUgd2l0aCBpZCAiICsgaWQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIG1ldGhvZHMgPSB0YWJsZS5zaGlueU1ldGhvZHMsIGNhbGwgPSBkYXRhLmNhbGw7CiAgICBpZiAobWV0aG9kc1tjYWxsLm1ldGhvZF0pIHsKICAgICAgbWV0aG9kc1tjYWxsLm1ldGhvZF0uYXBwbHkodGFibGUsIGNhbGwuYXJncyk7CiAgICB9IGVsc2UgewogICAgICBjb25zb2xlLmxvZygiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgIH0KICB9KTsKCn0pKCk7Cg=="></script>
<link href="data:text/css,table%2EdataTable%7Bwidth%3A100%25%3Bmargin%3A0%20auto%3Bclear%3Aboth%3Bborder%2Dcollapse%3Aseparate%3Bborder%2Dspacing%3A0%7Dtable%2EdataTable%20thead%20th%2Ctable%2EdataTable%20tfoot%20th%7Bfont%2Dweight%3Abold%7Dtable%2EdataTable%20thead%20th%2Ctable%2EdataTable%20thead%20td%7Bpadding%3A10px%2018px%3Bborder%2Dbottom%3A1px%20solid%20%23111%7Dtable%2EdataTable%20thead%20th%3Aactive%2Ctable%2EdataTable%20thead%20td%3Aactive%7Boutline%3Anone%7Dtable%2EdataTable%20tfoot%20th%2Ctable%2EdataTable%20tfoot%20td%7Bpadding%3A10px%2018px%206px%2018px%3Bborder%2Dtop%3A1px%20solid%20%23111%7Dtable%2EdataTable%20thead%20%2Esorting%2Ctable%2EdataTable%20thead%20%2Esorting%5Fasc%2Ctable%2EdataTable%20thead%20%2Esorting%5Fdesc%2Ctable%2EdataTable%20thead%20%2Esorting%5Fasc%5Fdisabled%2Ctable%2EdataTable%20thead%20%2Esorting%5Fdesc%5Fdisabled%7Bcursor%3Apointer%3B%2Acursor%3Ahand%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bbackground%2Dposition%3Acenter%20right%7Dtable%2EdataTable%20thead%20%2Esorting%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL%2BTq%2FQCM1oNiJidwox0355mXnG%2FDrEtIQ6azioNZQxI0ykPhTQIwhCR%2BBmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P%2BGtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fasc%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS%2FgDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM%2BwTENuQahAvEO9DMwiGdwAxOymGJQLxTyD%2BjgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg%3D%3D%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fdesc%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA%2FBOIv2PBIPFEUgxjB%2BIdQPwfC94HxLykus4GiD%2BhGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL%2BAuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII%3D%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fasc%5Fdisabled%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAW0lEQVQoz2NgoCm4w3Vnwh02wspK7%2Fy6k01Ikdadx3f%2B37l9RxmfIsY7c4GKQHDiHUbcyhzvvIMq%2B3THBpci3jv7oIpAcMcdduzKEu%2F8vPMdDn%2FeiWQYBYMKAAC3ykIEuYQJUgAAAABJRU5ErkJggg%3D%3D%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fdesc%5Fdisabled%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAWUlEQVQoz2NgGAWDCtyJvPPzznc4%2FHknEbsy9js77vyHw313eHGZZ3PnE1TRuzuOuK1lvDMRqmzuHUZ87lO%2Bcxuo6PEdLUIeyb7z604pYf%2By3Zlwh4u2YQoAc7ZCBHH4jigAAAAASUVORK5CYII%3D%29%7Dtable%2EdataTable%20tbody%20tr%7Bbackground%2Dcolor%3A%23ffffff%7Dtable%2EdataTable%20tbody%20tr%2Eselected%7Bbackground%2Dcolor%3A%23B0BED9%7Dtable%2EdataTable%20tbody%20th%2Ctable%2EdataTable%20tbody%20td%7Bpadding%3A8px%2010px%7Dtable%2EdataTable%2Erow%2Dborder%20tbody%20th%2Ctable%2EdataTable%2Erow%2Dborder%20tbody%20td%2Ctable%2EdataTable%2Edisplay%20tbody%20th%2Ctable%2EdataTable%2Edisplay%20tbody%20td%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7Dtable%2EdataTable%2Erow%2Dborder%20tbody%20tr%3Afirst%2Dchild%20th%2Ctable%2EdataTable%2Erow%2Dborder%20tbody%20tr%3Afirst%2Dchild%20td%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Afirst%2Dchild%20th%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Afirst%2Dchild%20td%7Bborder%2Dtop%3Anone%7Dtable%2EdataTable%2Ecell%2Dborder%20tbody%20th%2Ctable%2EdataTable%2Ecell%2Dborder%20tbody%20td%7Bborder%2Dtop%3A1px%20solid%20%23ddd%3Bborder%2Dright%3A1px%20solid%20%23ddd%7Dtable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%20th%3Afirst%2Dchild%2Ctable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%20td%3Afirst%2Dchild%7Bborder%2Dleft%3A1px%20solid%20%23ddd%7Dtable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%3Afirst%2Dchild%20th%2Ctable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%3Afirst%2Dchild%20td%7Bborder%2Dtop%3Anone%7Dtable%2EdataTable%2Estripe%20tbody%20tr%2Eodd%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%7Bbackground%2Dcolor%3A%23f9f9f9%7Dtable%2EdataTable%2Estripe%20tbody%20tr%2Eodd%2Eselected%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%7Bbackground%2Dcolor%3A%23acbad4%7Dtable%2EdataTable%2Ehover%20tbody%20tr%3Ahover%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%7Bbackground%2Dcolor%3A%23f6f6f6%7Dtable%2EdataTable%2Ehover%20tbody%20tr%3Ahover%2Eselected%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%7Bbackground%2Dcolor%3A%23aab7d1%7Dtable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%3E%2Esorting%5F3%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3E%2Esorting%5F1%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3E%2Esorting%5F2%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23fafafa%7Dtable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23acbad5%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23f1f1f1%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23f3f3f3%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%3E%2Esorting%5F3%7Bbackground%2Dcolor%3Awhitesmoke%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23a6b4cd%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23a8b5cf%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23a9b7d1%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23fafafa%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23fcfcfc%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23fefefe%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23acbad5%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23aebcd6%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23afbdd8%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23eaeaea%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23ececec%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23efefef%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23a2aec7%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23a3b0c9%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23a5b2cb%7Dtable%2EdataTable%2Eno%2Dfooter%7Bborder%2Dbottom%3A1px%20solid%20%23111%7Dtable%2EdataTable%2Enowrap%20th%2Ctable%2EdataTable%2Enowrap%20td%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%2Ecompact%20thead%20th%2Ctable%2EdataTable%2Ecompact%20thead%20td%7Bpadding%3A4px%2017px%204px%204px%7Dtable%2EdataTable%2Ecompact%20tfoot%20th%2Ctable%2EdataTable%2Ecompact%20tfoot%20td%7Bpadding%3A4px%7Dtable%2EdataTable%2Ecompact%20tbody%20th%2Ctable%2EdataTable%2Ecompact%20tbody%20td%7Bpadding%3A4px%7Dtable%2EdataTable%20th%2Edt%2Dleft%2Ctable%2EdataTable%20td%2Edt%2Dleft%7Btext%2Dalign%3Aleft%7Dtable%2EdataTable%20th%2Edt%2Dcenter%2Ctable%2EdataTable%20td%2Edt%2Dcenter%2Ctable%2EdataTable%20td%2EdataTables%5Fempty%7Btext%2Dalign%3Acenter%7Dtable%2EdataTable%20th%2Edt%2Dright%2Ctable%2EdataTable%20td%2Edt%2Dright%7Btext%2Dalign%3Aright%7Dtable%2EdataTable%20th%2Edt%2Djustify%2Ctable%2EdataTable%20td%2Edt%2Djustify%7Btext%2Dalign%3Ajustify%7Dtable%2EdataTable%20th%2Edt%2Dnowrap%2Ctable%2EdataTable%20td%2Edt%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dleft%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dleft%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dleft%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dleft%7Btext%2Dalign%3Aleft%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dcenter%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dcenter%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dcenter%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dcenter%7Btext%2Dalign%3Acenter%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dright%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dright%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dright%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dright%7Btext%2Dalign%3Aright%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Djustify%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Djustify%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Djustify%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Djustify%7Btext%2Dalign%3Ajustify%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dnowrap%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dnowrap%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dnowrap%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dleft%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dleft%7Btext%2Dalign%3Aleft%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dcenter%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dcenter%7Btext%2Dalign%3Acenter%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dright%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dright%7Btext%2Dalign%3Aright%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Djustify%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Djustify%7Btext%2Dalign%3Ajustify%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dnowrap%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%2Ctable%2EdataTable%20th%2Ctable%2EdataTable%20td%7Bbox%2Dsizing%3Acontent%2Dbox%7D%2EdataTables%5Fwrapper%7Bposition%3Arelative%3Bclear%3Aboth%3B%2Azoom%3A1%3Bzoom%3A1%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Flength%7Bfloat%3Aleft%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%7Bfloat%3Aright%3Btext%2Dalign%3Aright%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%20input%7Bmargin%2Dleft%3A0%2E5em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Finfo%7Bclear%3Aboth%3Bfloat%3Aleft%3Bpadding%2Dtop%3A0%2E755em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bfloat%3Aright%3Btext%2Dalign%3Aright%3Bpadding%2Dtop%3A0%2E25em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%7Bbox%2Dsizing%3Aborder%2Dbox%3Bdisplay%3Ainline%2Dblock%3Bmin%2Dwidth%3A1%2E5em%3Bpadding%3A0%2E5em%201em%3Bmargin%2Dleft%3A2px%3Btext%2Dalign%3Acenter%3Btext%2Ddecoration%3Anone%20%21important%3Bcursor%3Apointer%3B%2Acursor%3Ahand%3Bcolor%3A%23333%20%21important%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A2px%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Ecurrent%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Ecurrent%3Ahover%7Bcolor%3A%23333%20%21important%3Bborder%3A1px%20solid%20%23979797%3Bbackground%2Dcolor%3Awhite%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%20%23fff%29%2C%20color%2Dstop%28100%25%2C%20%23dcdcdc%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Edisabled%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Edisabled%3Ahover%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Edisabled%3Aactive%7Bcursor%3Adefault%3Bcolor%3A%23666%20%21important%3Bborder%3A1px%20solid%20transparent%3Bbackground%3Atransparent%3Bbox%2Dshadow%3Anone%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%3Ahover%7Bcolor%3Awhite%20%21important%3Bborder%3A1px%20solid%20%23111%3Bbackground%2Dcolor%3A%23585858%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%20%23585858%29%2C%20color%2Dstop%28100%25%2C%20%23111%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%20%23585858%200%25%2C%20%23111%20100%25%29%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%3Aactive%7Boutline%3Anone%3Bbackground%2Dcolor%3A%232b2b2b%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%20%232b2b2b%29%2C%20color%2Dstop%28100%25%2C%20%230c0c0c%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbox%2Dshadow%3Ainset%200%200%203px%20%23111%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Eellipsis%7Bpadding%3A0%201em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fprocessing%7Bposition%3Aabsolute%3Btop%3A50%25%3Bleft%3A50%25%3Bwidth%3A100%25%3Bheight%3A40px%3Bmargin%2Dleft%3A%2D50%25%3Bmargin%2Dtop%3A%2D25px%3Bpadding%2Dtop%3A20px%3Btext%2Dalign%3Acenter%3Bfont%2Dsize%3A1%2E2em%3Bbackground%2Dcolor%3Awhite%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20right%20top%2C%20color%2Dstop%280%25%2C%20rgba%28255%2C255%2C255%2C0%29%29%2C%20color%2Dstop%2825%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%29%2C%20color%2Dstop%2875%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%29%2C%20color%2Dstop%28100%25%2C%20rgba%28255%2C255%2C255%2C0%29%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20right%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Flength%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Finfo%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fprocessing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bcolor%3A%23333%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%7Bclear%3Aboth%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%7B%2Amargin%2Dtop%3A%2D1px%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Eth%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Etd%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Eth%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Etd%7Bvertical%2Dalign%3Amiddle%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Eth%3Ediv%2EdataTables%5Fsizing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Etd%3Ediv%2EdataTables%5Fsizing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Eth%3Ediv%2EdataTables%5Fsizing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Etd%3Ediv%2EdataTables%5Fsizing%7Bheight%3A0%3Boverflow%3Ahidden%3Bmargin%3A0%20%21important%3Bpadding%3A0%20%21important%7D%2EdataTables%5Fwrapper%2Eno%2Dfooter%20%2EdataTables%5FscrollBody%7Bborder%2Dbottom%3A1px%20solid%20%23111%7D%2EdataTables%5Fwrapper%2Eno%2Dfooter%20div%2EdataTables%5FscrollHead%20table%2EdataTable%2C%2EdataTables%5Fwrapper%2Eno%2Dfooter%20div%2EdataTables%5FscrollBody%3Etable%7Bborder%2Dbottom%3Anone%7D%2EdataTables%5Fwrapper%3Aafter%7Bvisibility%3Ahidden%3Bdisplay%3Ablock%3Bcontent%3A%22%22%3Bclear%3Aboth%3Bheight%3A0%7D%40media%20screen%20and%20%28max%2Dwidth%3A%20767px%29%7B%2EdataTables%5Fwrapper%20%2EdataTables%5Finfo%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bfloat%3Anone%3Btext%2Dalign%3Acenter%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bmargin%2Dtop%3A0%2E5em%7D%7D%40media%20screen%20and%20%28max%2Dwidth%3A%20640px%29%7B%2EdataTables%5Fwrapper%20%2EdataTables%5Flength%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%7Bfloat%3Anone%3Btext%2Dalign%3Acenter%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%7Bmargin%2Dtop%3A0%2E5em%7D%7D%0A" rel="stylesheet" />
<link href="data:text/css,%0Atable%2EdataTable%20tr%2Eselected%20td%2C%20table%2EdataTable%20td%2Eselected%20%7B%0Abackground%2Dcolor%3A%20%23b0bed9%20%21important%3B%0A%7D%0A%0A%2EdataTables%5FscrollBody%20%2EdataTables%5Fsizing%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0Adiv%2Edatatables%20%7B%0Acolor%3A%20%23333%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyohCiAgIENvcHlyaWdodCAyMDA4LTIwMTkgU3ByeU1lZGlhIEx0ZC4KCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAgIE1JVCBsaWNlbnNlIC0gaHR0cDovL2RhdGF0YWJsZXMubmV0L2xpY2Vuc2UKCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCgogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiBEYXRhVGFibGVzIDEuMTAuMjAKIMKpMjAwOC0yMDE5IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiovCnZhciAkanNjb21wPSRqc2NvbXB8fHt9OyRqc2NvbXAuc2NvcGU9e307JGpzY29tcC5maW5kSW50ZXJuYWw9ZnVuY3Rpb24oZix6LHkpe2YgaW5zdGFuY2VvZiBTdHJpbmcmJihmPVN0cmluZyhmKSk7Zm9yKHZhciBwPWYubGVuZ3RoLEg9MDtIPHA7SCsrKXt2YXIgTD1mW0hdO2lmKHouY2FsbCh5LEwsSCxmKSlyZXR1cm57aTpILHY6TH19cmV0dXJue2k6LTEsdjp2b2lkIDB9fTskanNjb21wLkFTU1VNRV9FUzU9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX01BUD0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfU0VUPSExOyRqc2NvbXAuU0lNUExFX0ZST1VORF9QT0xZRklMTD0hMTsKJGpzY29tcC5kZWZpbmVQcm9wZXJ0eT0kanNjb21wLkFTU1VNRV9FUzV8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZix6LHkpe2YhPUFycmF5LnByb3RvdHlwZSYmZiE9T2JqZWN0LnByb3RvdHlwZSYmKGZbel09eS52YWx1ZSl9OyRqc2NvbXAuZ2V0R2xvYmFsPWZ1bmN0aW9uKGYpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT1mP2Y6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJm51bGwhPWdsb2JhbD9nbG9iYWw6Zn07JGpzY29tcC5nbG9iYWw9JGpzY29tcC5nZXRHbG9iYWwodGhpcyk7CiRqc2NvbXAucG9seWZpbGw9ZnVuY3Rpb24oZix6LHkscCl7aWYoeil7eT0kanNjb21wLmdsb2JhbDtmPWYuc3BsaXQoIi4iKTtmb3IocD0wO3A8Zi5sZW5ndGgtMTtwKyspe3ZhciBIPWZbcF07SCBpbiB5fHwoeVtIXT17fSk7eT15W0hdfWY9ZltmLmxlbmd0aC0xXTtwPXlbZl07ej16KHApO3ohPXAmJm51bGwhPXomJiRqc2NvbXAuZGVmaW5lUHJvcGVydHkoeSxmLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6en0pfX07JGpzY29tcC5wb2x5ZmlsbCgiQXJyYXkucHJvdG90eXBlLmZpbmQiLGZ1bmN0aW9uKGYpe3JldHVybiBmP2Y6ZnVuY3Rpb24oZix5KXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxmLHkpLnZ9fSwiZXM2IiwiZXMzIik7CihmdW5jdGlvbihmKXsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiXSxmdW5jdGlvbih6KXtyZXR1cm4gZih6LHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHoseSl7enx8KHo9d2luZG93KTt5fHwoeT0idW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3c/cmVxdWlyZSgianF1ZXJ5Iik6cmVxdWlyZSgianF1ZXJ5IikoeikpO3JldHVybiBmKHkseix6LmRvY3VtZW50KX06ZihqUXVlcnksd2luZG93LGRvY3VtZW50KX0pKGZ1bmN0aW9uKGYseix5LHApe2Z1bmN0aW9uIEgoYSl7dmFyIGIsYyxkPXt9O2YuZWFjaChhLGZ1bmN0aW9uKGUsaCl7KGI9ZS5tYXRjaCgvXihbXkEtWl0rPykoW0EtWl0pLykpJiYtMSE9PSJhIGFhIGFpIGFvIGFzIGIgZm4gaSBtIG8gcyAiLmluZGV4T2YoYlsxXSsiICIpJiYoYz1lLnJlcGxhY2UoYlswXSxiWzJdLnRvTG93ZXJDYXNlKCkpLApkW2NdPWUsIm8iPT09YlsxXSYmSChhW2VdKSl9KTthLl9odW5nYXJpYW5NYXA9ZH1mdW5jdGlvbiBMKGEsYixjKXthLl9odW5nYXJpYW5NYXB8fEgoYSk7dmFyIGQ7Zi5lYWNoKGIsZnVuY3Rpb24oZSxoKXtkPWEuX2h1bmdhcmlhbk1hcFtlXTtkPT09cHx8IWMmJmJbZF0hPT1wfHwoIm8iPT09ZC5jaGFyQXQoMCk/KGJbZF18fChiW2RdPXt9KSxmLmV4dGVuZCghMCxiW2RdLGJbZV0pLEwoYVtkXSxiW2RdLGMpKTpiW2RdPWJbZV0pfSl9ZnVuY3Rpb24gR2EoYSl7dmFyIGI9cS5kZWZhdWx0cy5vTGFuZ3VhZ2UsYz1iLnNEZWNpbWFsO2MmJkhhKGMpO2lmKGEpe3ZhciBkPWEuc1plcm9SZWNvcmRzOyFhLnNFbXB0eVRhYmxlJiZkJiYiTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUiPT09Yi5zRW1wdHlUYWJsZSYmTShhLGEsInNaZXJvUmVjb3JkcyIsInNFbXB0eVRhYmxlIik7IWEuc0xvYWRpbmdSZWNvcmRzJiZkJiYiTG9hZGluZy4uLiI9PT1iLnNMb2FkaW5nUmVjb3JkcyYmTShhLGEsCiJzWmVyb1JlY29yZHMiLCJzTG9hZGluZ1JlY29yZHMiKTthLnNJbmZvVGhvdXNhbmRzJiYoYS5zVGhvdXNhbmRzPWEuc0luZm9UaG91c2FuZHMpOyhhPWEuc0RlY2ltYWwpJiZjIT09YSYmSGEoYSl9fWZ1bmN0aW9uIGpiKGEpe0YoYSwib3JkZXJpbmciLCJiU29ydCIpO0YoYSwib3JkZXJNdWx0aSIsImJTb3J0TXVsdGkiKTtGKGEsIm9yZGVyQ2xhc3NlcyIsImJTb3J0Q2xhc3NlcyIpO0YoYSwib3JkZXJDZWxsc1RvcCIsImJTb3J0Q2VsbHNUb3AiKTtGKGEsIm9yZGVyIiwiYWFTb3J0aW5nIik7RihhLCJvcmRlckZpeGVkIiwiYWFTb3J0aW5nRml4ZWQiKTtGKGEsInBhZ2luZyIsImJQYWdpbmF0ZSIpO0YoYSwicGFnaW5nVHlwZSIsInNQYWdpbmF0aW9uVHlwZSIpO0YoYSwicGFnZUxlbmd0aCIsImlEaXNwbGF5TGVuZ3RoIik7RihhLCJzZWFyY2hpbmciLCJiRmlsdGVyIik7ImJvb2xlYW4iPT09dHlwZW9mIGEuc1Njcm9sbFgmJihhLnNTY3JvbGxYPWEuc1Njcm9sbFg/IjEwMCUiOgoiIik7ImJvb2xlYW4iPT09dHlwZW9mIGEuc2Nyb2xsWCYmKGEuc2Nyb2xsWD1hLnNjcm9sbFg/IjEwMCUiOiIiKTtpZihhPWEuYW9TZWFyY2hDb2xzKWZvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKylhW2JdJiZMKHEubW9kZWxzLm9TZWFyY2gsYVtiXSl9ZnVuY3Rpb24ga2IoYSl7RihhLCJvcmRlcmFibGUiLCJiU29ydGFibGUiKTtGKGEsIm9yZGVyRGF0YSIsImFEYXRhU29ydCIpO0YoYSwib3JkZXJTZXF1ZW5jZSIsImFzU29ydGluZyIpO0YoYSwib3JkZXJEYXRhVHlwZSIsInNvcnREYXRhVHlwZSIpO3ZhciBiPWEuYURhdGFTb3J0OyJudW1iZXIiIT09dHlwZW9mIGJ8fGYuaXNBcnJheShiKXx8KGEuYURhdGFTb3J0PVtiXSl9ZnVuY3Rpb24gbGIoYSl7aWYoIXEuX19icm93c2VyKXt2YXIgYj17fTtxLl9fYnJvd3Nlcj1iO3ZhciBjPWYoIjxkaXYvPiIpLmNzcyh7cG9zaXRpb246ImZpeGVkIix0b3A6MCxsZWZ0Oi0xKmYoeikuc2Nyb2xsTGVmdCgpLGhlaWdodDoxLHdpZHRoOjEsCm92ZXJmbG93OiJoaWRkZW4ifSkuYXBwZW5kKGYoIjxkaXYvPiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MSxsZWZ0OjEsd2lkdGg6MTAwLG92ZXJmbG93OiJzY3JvbGwifSkuYXBwZW5kKGYoIjxkaXYvPiIpLmNzcyh7d2lkdGg6IjEwMCUiLGhlaWdodDoxMH0pKSkuYXBwZW5kVG8oImJvZHkiKSxkPWMuY2hpbGRyZW4oKSxlPWQuY2hpbGRyZW4oKTtiLmJhcldpZHRoPWRbMF0ub2Zmc2V0V2lkdGgtZFswXS5jbGllbnRXaWR0aDtiLmJTY3JvbGxPdmVyc2l6ZT0xMDA9PT1lWzBdLm9mZnNldFdpZHRoJiYxMDAhPT1kWzBdLmNsaWVudFdpZHRoO2IuYlNjcm9sbGJhckxlZnQ9MSE9PU1hdGgucm91bmQoZS5vZmZzZXQoKS5sZWZ0KTtiLmJCb3VuZGluZz1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPyEwOiExO2MucmVtb3ZlKCl9Zi5leHRlbmQoYS5vQnJvd3NlcixxLl9fYnJvd3Nlcik7YS5vU2Nyb2xsLmlCYXJXaWR0aD1xLl9fYnJvd3Nlci5iYXJXaWR0aH0KZnVuY3Rpb24gbWIoYSxiLGMsZCxlLGgpe3ZhciBnPSExO2lmKGMhPT1wKXt2YXIgaz1jO2c9ITB9Zm9yKDtkIT09ZTspYS5oYXNPd25Qcm9wZXJ0eShkKSYmKGs9Zz9iKGssYVtkXSxkLGEpOmFbZF0sZz0hMCxkKz1oKTtyZXR1cm4ga31mdW5jdGlvbiBJYShhLGIpe3ZhciBjPXEuZGVmYXVsdHMuY29sdW1uLGQ9YS5hb0NvbHVtbnMubGVuZ3RoO2M9Zi5leHRlbmQoe30scS5tb2RlbHMub0NvbHVtbixjLHtuVGg6Yj9iOnkuY3JlYXRlRWxlbWVudCgidGgiKSxzVGl0bGU6Yy5zVGl0bGU/Yy5zVGl0bGU6Yj9iLmlubmVySFRNTDoiIixhRGF0YVNvcnQ6Yy5hRGF0YVNvcnQ/Yy5hRGF0YVNvcnQ6W2RdLG1EYXRhOmMubURhdGE/Yy5tRGF0YTpkLGlkeDpkfSk7YS5hb0NvbHVtbnMucHVzaChjKTtjPWEuYW9QcmVTZWFyY2hDb2xzO2NbZF09Zi5leHRlbmQoe30scS5tb2RlbHMub1NlYXJjaCxjW2RdKTttYShhLGQsZihiKS5kYXRhKCkpfWZ1bmN0aW9uIG1hKGEsYixjKXtiPWEuYW9Db2x1bW5zW2JdOwp2YXIgZD1hLm9DbGFzc2VzLGU9ZihiLm5UaCk7aWYoIWIuc1dpZHRoT3JpZyl7Yi5zV2lkdGhPcmlnPWUuYXR0cigid2lkdGgiKXx8bnVsbDt2YXIgaD0oZS5hdHRyKCJzdHlsZSIpfHwiIikubWF0Y2goL3dpZHRoOlxzKihcZCtbcHhlbSVdKykvKTtoJiYoYi5zV2lkdGhPcmlnPWhbMV0pfWMhPT1wJiZudWxsIT09YyYmKGtiKGMpLEwocS5kZWZhdWx0cy5jb2x1bW4sYywhMCksYy5tRGF0YVByb3A9PT1wfHxjLm1EYXRhfHwoYy5tRGF0YT1jLm1EYXRhUHJvcCksYy5zVHlwZSYmKGIuX3NNYW51YWxUeXBlPWMuc1R5cGUpLGMuY2xhc3NOYW1lJiYhYy5zQ2xhc3MmJihjLnNDbGFzcz1jLmNsYXNzTmFtZSksYy5zQ2xhc3MmJmUuYWRkQ2xhc3MoYy5zQ2xhc3MpLGYuZXh0ZW5kKGIsYyksTShiLGMsInNXaWR0aCIsInNXaWR0aE9yaWciKSxjLmlEYXRhU29ydCE9PXAmJihiLmFEYXRhU29ydD1bYy5pRGF0YVNvcnRdKSxNKGIsYywiYURhdGFTb3J0IikpO3ZhciBnPWIubURhdGEsaz1VKGcpLApsPWIubVJlbmRlcj9VKGIubVJlbmRlcik6bnVsbDtjPWZ1bmN0aW9uKGEpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGEmJi0xIT09YS5pbmRleE9mKCJAIil9O2IuX2JBdHRyU3JjPWYuaXNQbGFpbk9iamVjdChnKSYmKGMoZy5zb3J0KXx8YyhnLnR5cGUpfHxjKGcuZmlsdGVyKSk7Yi5fc2V0dGVyPW51bGw7Yi5mbkdldERhdGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWsoYSxiLHAsYyk7cmV0dXJuIGwmJmI/bChkLGIsYSxjKTpkfTtiLmZuU2V0RGF0YT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoZykoYSxiLGMpfTsibnVtYmVyIiE9PXR5cGVvZiBnJiYoYS5fcm93UmVhZE9iamVjdD0hMCk7YS5vRmVhdHVyZXMuYlNvcnR8fChiLmJTb3J0YWJsZT0hMSxlLmFkZENsYXNzKGQuc1NvcnRhYmxlTm9uZSkpO2E9LTEhPT1mLmluQXJyYXkoImFzYyIsYi5hc1NvcnRpbmcpO2M9LTEhPT1mLmluQXJyYXkoImRlc2MiLGIuYXNTb3J0aW5nKTtiLmJTb3J0YWJsZSYmKGF8fGMpP2EmJiFjPyhiLnNTb3J0aW5nQ2xhc3M9CmQuc1NvcnRhYmxlQXNjLGIuc1NvcnRpbmdDbGFzc0pVST1kLnNTb3J0SlVJQXNjQWxsb3dlZCk6IWEmJmM/KGIuc1NvcnRpbmdDbGFzcz1kLnNTb3J0YWJsZURlc2MsYi5zU29ydGluZ0NsYXNzSlVJPWQuc1NvcnRKVUlEZXNjQWxsb3dlZCk6KGIuc1NvcnRpbmdDbGFzcz1kLnNTb3J0YWJsZSxiLnNTb3J0aW5nQ2xhc3NKVUk9ZC5zU29ydEpVSSk6KGIuc1NvcnRpbmdDbGFzcz1kLnNTb3J0YWJsZU5vbmUsYi5zU29ydGluZ0NsYXNzSlVJPSIiKX1mdW5jdGlvbiBhYShhKXtpZighMSE9PWEub0ZlYXR1cmVzLmJBdXRvV2lkdGgpe3ZhciBiPWEuYW9Db2x1bW5zO0phKGEpO2Zvcih2YXIgYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLm5UaC5zdHlsZS53aWR0aD1iW2NdLnNXaWR0aH1iPWEub1Njcm9sbDsiIj09PWIuc1kmJiIiPT09Yi5zWHx8bmEoYSk7QShhLG51bGwsImNvbHVtbi1zaXppbmciLFthXSl9ZnVuY3Rpb24gYmEoYSxiKXthPW9hKGEsImJWaXNpYmxlIik7cmV0dXJuIm51bWJlciI9PT0KdHlwZW9mIGFbYl0/YVtiXTpudWxsfWZ1bmN0aW9uIGNhKGEsYil7YT1vYShhLCJiVmlzaWJsZSIpO2I9Zi5pbkFycmF5KGIsYSk7cmV0dXJuLTEhPT1iP2I6bnVsbH1mdW5jdGlvbiBXKGEpe3ZhciBiPTA7Zi5lYWNoKGEuYW9Db2x1bW5zLGZ1bmN0aW9uKGEsZCl7ZC5iVmlzaWJsZSYmIm5vbmUiIT09ZihkLm5UaCkuY3NzKCJkaXNwbGF5IikmJmIrK30pO3JldHVybiBifWZ1bmN0aW9uIG9hKGEsYil7dmFyIGM9W107Zi5tYXAoYS5hb0NvbHVtbnMsZnVuY3Rpb24oYSxlKXthW2JdJiZjLnB1c2goZSl9KTtyZXR1cm4gY31mdW5jdGlvbiBLYShhKXt2YXIgYj1hLmFvQ29sdW1ucyxjPWEuYW9EYXRhLGQ9cS5leHQudHlwZS5kZXRlY3QsZSxoLGc7dmFyIGs9MDtmb3IoZT1iLmxlbmd0aDtrPGU7aysrKXt2YXIgZj1iW2tdO3ZhciBuPVtdO2lmKCFmLnNUeXBlJiZmLl9zTWFudWFsVHlwZSlmLnNUeXBlPWYuX3NNYW51YWxUeXBlO2Vsc2UgaWYoIWYuc1R5cGUpe3ZhciBtPTA7Zm9yKGg9CmQubGVuZ3RoO208aDttKyspe3ZhciB3PTA7Zm9yKGc9Yy5sZW5ndGg7dzxnO3crKyl7blt3XT09PXAmJihuW3ddPUkoYSx3LGssInR5cGUiKSk7dmFyIHU9ZFttXShuW3ddLGEpO2lmKCF1JiZtIT09ZC5sZW5ndGgtMSlicmVhaztpZigiaHRtbCI9PT11KWJyZWFrfWlmKHUpe2Yuc1R5cGU9dTticmVha319Zi5zVHlwZXx8KGYuc1R5cGU9InN0cmluZyIpfX19ZnVuY3Rpb24gbmIoYSxiLGMsZCl7dmFyIGUsaCxnLGs9YS5hb0NvbHVtbnM7aWYoYilmb3IoZT1iLmxlbmd0aC0xOzA8PWU7ZS0tKXt2YXIgbD1iW2VdO3ZhciBuPWwudGFyZ2V0cyE9PXA/bC50YXJnZXRzOmwuYVRhcmdldHM7Zi5pc0FycmF5KG4pfHwobj1bbl0pO3ZhciBtPTA7Zm9yKGg9bi5sZW5ndGg7bTxoO20rKylpZigibnVtYmVyIj09PXR5cGVvZiBuW21dJiYwPD1uW21dKXtmb3IoO2subGVuZ3RoPD1uW21dOylJYShhKTtkKG5bbV0sbCl9ZWxzZSBpZigibnVtYmVyIj09PXR5cGVvZiBuW21dJiYwPm5bbV0pZChrLmxlbmd0aCsKblttXSxsKTtlbHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIG5bbV0pe3ZhciB3PTA7Zm9yKGc9ay5sZW5ndGg7dzxnO3crKykoIl9hbGwiPT1uW21dfHxmKGtbd10ublRoKS5oYXNDbGFzcyhuW21dKSkmJmQodyxsKX19aWYoYylmb3IoZT0wLGE9Yy5sZW5ndGg7ZTxhO2UrKylkKGUsY1tlXSl9ZnVuY3Rpb24gUihhLGIsYyxkKXt2YXIgZT1hLmFvRGF0YS5sZW5ndGgsaD1mLmV4dGVuZCghMCx7fSxxLm1vZGVscy5vUm93LHtzcmM6Yz8iZG9tIjoiZGF0YSIsaWR4OmV9KTtoLl9hRGF0YT1iO2EuYW9EYXRhLnB1c2goaCk7Zm9yKHZhciBnPWEuYW9Db2x1bW5zLGs9MCxsPWcubGVuZ3RoO2s8bDtrKyspZ1trXS5zVHlwZT1udWxsO2EuYWlEaXNwbGF5TWFzdGVyLnB1c2goZSk7Yj1hLnJvd0lkRm4oYik7YiE9PXAmJihhLmFJZHNbYl09aCk7IWMmJmEub0ZlYXR1cmVzLmJEZWZlclJlbmRlcnx8TGEoYSxlLGMsZCk7cmV0dXJuIGV9ZnVuY3Rpb24gcGEoYSxiKXt2YXIgYztiIGluc3RhbmNlb2YKZnx8KGI9ZihiKSk7cmV0dXJuIGIubWFwKGZ1bmN0aW9uKGIsZSl7Yz1NYShhLGUpO3JldHVybiBSKGEsYy5kYXRhLGUsYy5jZWxscyl9KX1mdW5jdGlvbiBJKGEsYixjLGQpe3ZhciBlPWEuaURyYXcsaD1hLmFvQ29sdW1uc1tjXSxnPWEuYW9EYXRhW2JdLl9hRGF0YSxrPWguc0RlZmF1bHRDb250ZW50LGY9aC5mbkdldERhdGEoZyxkLHtzZXR0aW5nczphLHJvdzpiLGNvbDpjfSk7aWYoZj09PXApcmV0dXJuIGEuaURyYXdFcnJvciE9ZSYmbnVsbD09PWsmJihPKGEsMCwiUmVxdWVzdGVkIHVua25vd24gcGFyYW1ldGVyICIrKCJmdW5jdGlvbiI9PXR5cGVvZiBoLm1EYXRhPyJ7ZnVuY3Rpb259IjoiJyIraC5tRGF0YSsiJyIpKyIgZm9yIHJvdyAiK2IrIiwgY29sdW1uICIrYyw0KSxhLmlEcmF3RXJyb3I9ZSksaztpZigoZj09PWd8fG51bGw9PT1mKSYmbnVsbCE9PWsmJmQhPT1wKWY9aztlbHNlIGlmKCJmdW5jdGlvbiI9PT10eXBlb2YgZilyZXR1cm4gZi5jYWxsKGcpO3JldHVybiBudWxsPT09CmYmJiJkaXNwbGF5Ij09ZD8iIjpmfWZ1bmN0aW9uIG9iKGEsYixjLGQpe2EuYW9Db2x1bW5zW2NdLmZuU2V0RGF0YShhLmFvRGF0YVtiXS5fYURhdGEsZCx7c2V0dGluZ3M6YSxyb3c6Yixjb2w6Y30pfWZ1bmN0aW9uIE5hKGEpe3JldHVybiBmLm1hcChhLm1hdGNoKC8oXFwufFteXC5dKSsvZyl8fFsiIl0sZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXFxcLi9nLCIuIil9KX1mdW5jdGlvbiBVKGEpe2lmKGYuaXNQbGFpbk9iamVjdChhKSl7dmFyIGI9e307Zi5lYWNoKGEsZnVuY3Rpb24oYSxjKXtjJiYoYlthXT1VKGMpKX0pO3JldHVybiBmdW5jdGlvbihhLGMsaCxnKXt2YXIgZD1iW2NdfHxiLl87cmV0dXJuIGQhPT1wP2QoYSxjLGgsZyk6YX19aWYobnVsbD09PWEpcmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhfTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpcmV0dXJuIGZ1bmN0aW9uKGIsYyxoLGcpe3JldHVybiBhKGIsYyxoLGcpfTtpZigic3RyaW5nIiE9PXR5cGVvZiBhfHwKLTE9PT1hLmluZGV4T2YoIi4iKSYmLTE9PT1hLmluZGV4T2YoIlsiKSYmLTE9PT1hLmluZGV4T2YoIigiKSlyZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gYlthXX07dmFyIGM9ZnVuY3Rpb24oYSxiLGgpe2lmKCIiIT09aCl7dmFyIGQ9TmEoaCk7Zm9yKHZhciBlPTAsbD1kLmxlbmd0aDtlPGw7ZSsrKXtoPWRbZV0ubWF0Y2goZGEpO3ZhciBuPWRbZV0ubWF0Y2goWCk7aWYoaCl7ZFtlXT1kW2VdLnJlcGxhY2UoZGEsIiIpOyIiIT09ZFtlXSYmKGE9YVtkW2VdXSk7bj1bXTtkLnNwbGljZSgwLGUrMSk7ZD1kLmpvaW4oIi4iKTtpZihmLmlzQXJyYXkoYSkpZm9yKGU9MCxsPWEubGVuZ3RoO2U8bDtlKyspbi5wdXNoKGMoYVtlXSxiLGQpKTthPWhbMF0uc3Vic3RyaW5nKDEsaFswXS5sZW5ndGgtMSk7YT0iIj09PWE/bjpuLmpvaW4oYSk7YnJlYWt9ZWxzZSBpZihuKXtkW2VdPWRbZV0ucmVwbGFjZShYLCIiKTthPWFbZFtlXV0oKTtjb250aW51ZX1pZihudWxsPT09YXx8YVtkW2VdXT09PQpwKXJldHVybiBwO2E9YVtkW2VdXX19cmV0dXJuIGF9O3JldHVybiBmdW5jdGlvbihiLGUpe3JldHVybiBjKGIsZSxhKX19ZnVuY3Rpb24gUShhKXtpZihmLmlzUGxhaW5PYmplY3QoYSkpcmV0dXJuIFEoYS5fKTtpZihudWxsPT09YSlyZXR1cm4gZnVuY3Rpb24oKXt9O2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSlyZXR1cm4gZnVuY3Rpb24oYixkLGUpe2EoYiwic2V0IixkLGUpfTtpZigic3RyaW5nIiE9PXR5cGVvZiBhfHwtMT09PWEuaW5kZXhPZigiLiIpJiYtMT09PWEuaW5kZXhPZigiWyIpJiYtMT09PWEuaW5kZXhPZigiKCIpKXJldHVybiBmdW5jdGlvbihiLGQpe2JbYV09ZH07dmFyIGI9ZnVuY3Rpb24oYSxkLGUpe2U9TmEoZSk7dmFyIGM9ZVtlLmxlbmd0aC0xXTtmb3IodmFyIGcsayxsPTAsbj1lLmxlbmd0aC0xO2w8bjtsKyspe2c9ZVtsXS5tYXRjaChkYSk7az1lW2xdLm1hdGNoKFgpO2lmKGcpe2VbbF09ZVtsXS5yZXBsYWNlKGRhLCIiKTthW2VbbF1dPVtdO2M9ZS5zbGljZSgpOwpjLnNwbGljZSgwLGwrMSk7Zz1jLmpvaW4oIi4iKTtpZihmLmlzQXJyYXkoZCkpZm9yKGs9MCxuPWQubGVuZ3RoO2s8bjtrKyspYz17fSxiKGMsZFtrXSxnKSxhW2VbbF1dLnB1c2goYyk7ZWxzZSBhW2VbbF1dPWQ7cmV0dXJufWsmJihlW2xdPWVbbF0ucmVwbGFjZShYLCIiKSxhPWFbZVtsXV0oZCkpO2lmKG51bGw9PT1hW2VbbF1dfHxhW2VbbF1dPT09cClhW2VbbF1dPXt9O2E9YVtlW2xdXX1pZihjLm1hdGNoKFgpKWFbYy5yZXBsYWNlKFgsIiIpXShkKTtlbHNlIGFbYy5yZXBsYWNlKGRhLCIiKV09ZH07cmV0dXJuIGZ1bmN0aW9uKGMsZCl7cmV0dXJuIGIoYyxkLGEpfX1mdW5jdGlvbiBPYShhKXtyZXR1cm4gSihhLmFvRGF0YSwiX2FEYXRhIil9ZnVuY3Rpb24gcWEoYSl7YS5hb0RhdGEubGVuZ3RoPTA7YS5haURpc3BsYXlNYXN0ZXIubGVuZ3RoPTA7YS5haURpc3BsYXkubGVuZ3RoPTA7YS5hSWRzPXt9fWZ1bmN0aW9uIHJhKGEsYixjKXtmb3IodmFyIGQ9LTEsZT0wLGg9YS5sZW5ndGg7ZTwKaDtlKyspYVtlXT09Yj9kPWU6YVtlXT5iJiZhW2VdLS07IC0xIT1kJiZjPT09cCYmYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBlYShhLGIsYyxkKXt2YXIgZT1hLmFvRGF0YVtiXSxoLGc9ZnVuY3Rpb24oYyxkKXtmb3IoO2MuY2hpbGROb2Rlcy5sZW5ndGg7KWMucmVtb3ZlQ2hpbGQoYy5maXJzdENoaWxkKTtjLmlubmVySFRNTD1JKGEsYixkLCJkaXNwbGF5Iil9O2lmKCJkb20iIT09YyYmKGMmJiJhdXRvIiE9PWN8fCJkb20iIT09ZS5zcmMpKXt2YXIgaz1lLmFuQ2VsbHM7aWYoaylpZihkIT09cClnKGtbZF0sZCk7ZWxzZSBmb3IoYz0wLGg9ay5sZW5ndGg7YzxoO2MrKylnKGtbY10sYyl9ZWxzZSBlLl9hRGF0YT1NYShhLGUsZCxkPT09cD9wOmUuX2FEYXRhKS5kYXRhO2UuX2FTb3J0RGF0YT1udWxsO2UuX2FGaWx0ZXJEYXRhPW51bGw7Zz1hLmFvQ29sdW1ucztpZihkIT09cClnW2RdLnNUeXBlPW51bGw7ZWxzZXtjPTA7Zm9yKGg9Zy5sZW5ndGg7YzxoO2MrKylnW2NdLnNUeXBlPW51bGw7ClBhKGEsZSl9fWZ1bmN0aW9uIE1hKGEsYixjLGQpe3ZhciBlPVtdLGg9Yi5maXJzdENoaWxkLGcsaz0wLGwsbj1hLmFvQ29sdW1ucyxtPWEuX3Jvd1JlYWRPYmplY3Q7ZD1kIT09cD9kOm0/e306W107dmFyIHc9ZnVuY3Rpb24oYSxiKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXt2YXIgYz1hLmluZGV4T2YoIkAiKTstMSE9PWMmJihjPWEuc3Vic3RyaW5nKGMrMSksUShhKShkLGIuZ2V0QXR0cmlidXRlKGMpKSl9fSx1PWZ1bmN0aW9uKGEpe2lmKGM9PT1wfHxjPT09aylnPW5ba10sbD1mLnRyaW0oYS5pbm5lckhUTUwpLGcmJmcuX2JBdHRyU3JjPyhRKGcubURhdGEuXykoZCxsKSx3KGcubURhdGEuc29ydCxhKSx3KGcubURhdGEudHlwZSxhKSx3KGcubURhdGEuZmlsdGVyLGEpKTptPyhnLl9zZXR0ZXJ8fChnLl9zZXR0ZXI9UShnLm1EYXRhKSksZy5fc2V0dGVyKGQsbCkpOmRba109bDtrKyt9O2lmKGgpZm9yKDtoOyl7dmFyIHE9aC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO2lmKCJURCI9PQpxfHwiVEgiPT1xKXUoaCksZS5wdXNoKGgpO2g9aC5uZXh0U2libGluZ31lbHNlIGZvcihlPWIuYW5DZWxscyxoPTAscT1lLmxlbmd0aDtoPHE7aCsrKXUoZVtoXSk7KGI9Yi5maXJzdENoaWxkP2I6Yi5uVHIpJiYoYj1iLmdldEF0dHJpYnV0ZSgiaWQiKSkmJlEoYS5yb3dJZCkoZCxiKTtyZXR1cm57ZGF0YTpkLGNlbGxzOmV9fWZ1bmN0aW9uIExhKGEsYixjLGQpe3ZhciBlPWEuYW9EYXRhW2JdLGg9ZS5fYURhdGEsZz1bXSxrLGw7aWYobnVsbD09PWUublRyKXt2YXIgbj1jfHx5LmNyZWF0ZUVsZW1lbnQoInRyIik7ZS5uVHI9bjtlLmFuQ2VsbHM9ZztuLl9EVF9Sb3dJbmRleD1iO1BhKGEsZSk7dmFyIG09MDtmb3Ioaz1hLmFvQ29sdW1ucy5sZW5ndGg7bTxrO20rKyl7dmFyIHc9YS5hb0NvbHVtbnNbbV07dmFyIHA9KGw9Yz8hMTohMCk/eS5jcmVhdGVFbGVtZW50KHcuc0NlbGxUeXBlKTpkW21dO3AuX0RUX0NlbGxJbmRleD17cm93OmIsY29sdW1uOm19O2cucHVzaChwKTtpZihsfHwKIShjJiYhdy5tUmVuZGVyJiZ3Lm1EYXRhPT09bXx8Zi5pc1BsYWluT2JqZWN0KHcubURhdGEpJiZ3Lm1EYXRhLl89PT1tKyIuZGlzcGxheSIpKXAuaW5uZXJIVE1MPUkoYSxiLG0sImRpc3BsYXkiKTt3LnNDbGFzcyYmKHAuY2xhc3NOYW1lKz0iICIrdy5zQ2xhc3MpO3cuYlZpc2libGUmJiFjP24uYXBwZW5kQ2hpbGQocCk6IXcuYlZpc2libGUmJmMmJnAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwKTt3LmZuQ3JlYXRlZENlbGwmJncuZm5DcmVhdGVkQ2VsbC5jYWxsKGEub0luc3RhbmNlLHAsSShhLGIsbSksaCxiLG0pfUEoYSwiYW9Sb3dDcmVhdGVkQ2FsbGJhY2siLG51bGwsW24saCxiLGddKX1lLm5Uci5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKX1mdW5jdGlvbiBQYShhLGIpe3ZhciBjPWIublRyLGQ9Yi5fYURhdGE7aWYoYyl7aWYoYT1hLnJvd0lkRm4oZCkpYy5pZD1hO2QuRFRfUm93Q2xhc3MmJihhPWQuRFRfUm93Q2xhc3Muc3BsaXQoIiAiKSxiLl9fcm93Yz1iLl9fcm93Yz8KdGEoYi5fX3Jvd2MuY29uY2F0KGEpKTphLGYoYykucmVtb3ZlQ2xhc3MoYi5fX3Jvd2Muam9pbigiICIpKS5hZGRDbGFzcyhkLkRUX1Jvd0NsYXNzKSk7ZC5EVF9Sb3dBdHRyJiZmKGMpLmF0dHIoZC5EVF9Sb3dBdHRyKTtkLkRUX1Jvd0RhdGEmJmYoYykuZGF0YShkLkRUX1Jvd0RhdGEpfX1mdW5jdGlvbiBwYihhKXt2YXIgYixjLGQ9YS5uVEhlYWQsZT1hLm5URm9vdCxoPTA9PT1mKCJ0aCwgdGQiLGQpLmxlbmd0aCxnPWEub0NsYXNzZXMsaz1hLmFvQ29sdW1ucztoJiYoYz1mKCI8dHIvPiIpLmFwcGVuZFRvKGQpKTt2YXIgbD0wO2ZvcihiPWsubGVuZ3RoO2w8YjtsKyspe3ZhciBuPWtbbF07dmFyIG09ZihuLm5UaCkuYWRkQ2xhc3Mobi5zQ2xhc3MpO2gmJm0uYXBwZW5kVG8oYyk7YS5vRmVhdHVyZXMuYlNvcnQmJihtLmFkZENsYXNzKG4uc1NvcnRpbmdDbGFzcyksITEhPT1uLmJTb3J0YWJsZSYmKG0uYXR0cigidGFiaW5kZXgiLGEuaVRhYkluZGV4KS5hdHRyKCJhcmlhLWNvbnRyb2xzIiwKYS5zVGFibGVJZCksUWEoYSxuLm5UaCxsKSkpO24uc1RpdGxlIT1tWzBdLmlubmVySFRNTCYmbS5odG1sKG4uc1RpdGxlKTtSYShhLCJoZWFkZXIiKShhLG0sbixnKX1oJiZmYShhLmFvSGVhZGVyLGQpO2YoZCkuZmluZCgiPnRyIikuYXR0cigicm9sZSIsInJvdyIpO2YoZCkuZmluZCgiPnRyPnRoLCA+dHI+dGQiKS5hZGRDbGFzcyhnLnNIZWFkZXJUSCk7ZihlKS5maW5kKCI+dHI+dGgsID50cj50ZCIpLmFkZENsYXNzKGcuc0Zvb3RlclRIKTtpZihudWxsIT09ZSlmb3IoYT1hLmFvRm9vdGVyWzBdLGw9MCxiPWEubGVuZ3RoO2w8YjtsKyspbj1rW2xdLG4ublRmPWFbbF0uY2VsbCxuLnNDbGFzcyYmZihuLm5UZikuYWRkQ2xhc3Mobi5zQ2xhc3MpfWZ1bmN0aW9uIGhhKGEsYixjKXt2YXIgZCxlLGg9W10sZz1bXSxrPWEuYW9Db2x1bW5zLmxlbmd0aDtpZihiKXtjPT09cCYmKGM9ITEpO3ZhciBsPTA7Zm9yKGQ9Yi5sZW5ndGg7bDxkO2wrKyl7aFtsXT1iW2xdLnNsaWNlKCk7aFtsXS5uVHI9CmJbbF0ublRyO2ZvcihlPWstMTswPD1lO2UtLSlhLmFvQ29sdW1uc1tlXS5iVmlzaWJsZXx8Y3x8aFtsXS5zcGxpY2UoZSwxKTtnLnB1c2goW10pfWw9MDtmb3IoZD1oLmxlbmd0aDtsPGQ7bCsrKXtpZihhPWhbbF0ublRyKWZvcig7ZT1hLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoZSk7ZT0wO2ZvcihiPWhbbF0ubGVuZ3RoO2U8YjtlKyspe3ZhciBuPWs9MTtpZihnW2xdW2VdPT09cCl7YS5hcHBlbmRDaGlsZChoW2xdW2VdLmNlbGwpO2ZvcihnW2xdW2VdPTE7aFtsK2tdIT09cCYmaFtsXVtlXS5jZWxsPT1oW2wra11bZV0uY2VsbDspZ1tsK2tdW2VdPTEsaysrO2Zvcig7aFtsXVtlK25dIT09cCYmaFtsXVtlXS5jZWxsPT1oW2xdW2Urbl0uY2VsbDspe2ZvcihjPTA7YzxrO2MrKylnW2wrY11bZStuXT0xO24rK31mKGhbbF1bZV0uY2VsbCkuYXR0cigicm93c3BhbiIsaykuYXR0cigiY29sc3BhbiIsbil9fX19fWZ1bmN0aW9uIFMoYSl7dmFyIGI9QShhLCJhb1ByZURyYXdDYWxsYmFjayIsCiJwcmVEcmF3IixbYV0pO2lmKC0xIT09Zi5pbkFycmF5KCExLGIpKUsoYSwhMSk7ZWxzZXtiPVtdO3ZhciBjPTAsZD1hLmFzU3RyaXBlQ2xhc3NlcyxlPWQubGVuZ3RoLGg9YS5vTGFuZ3VhZ2UsZz1hLmlJbml0RGlzcGxheVN0YXJ0LGs9InNzcCI9PUQoYSksbD1hLmFpRGlzcGxheTthLmJEcmF3aW5nPSEwO2chPT1wJiYtMSE9PWcmJihhLl9pRGlzcGxheVN0YXJ0PWs/ZzpnPj1hLmZuUmVjb3Jkc0Rpc3BsYXkoKT8wOmcsYS5pSW5pdERpc3BsYXlTdGFydD0tMSk7Zz1hLl9pRGlzcGxheVN0YXJ0O3ZhciBuPWEuZm5EaXNwbGF5RW5kKCk7aWYoYS5iRGVmZXJMb2FkaW5nKWEuYkRlZmVyTG9hZGluZz0hMSxhLmlEcmF3KyssSyhhLCExKTtlbHNlIGlmKCFrKWEuaURyYXcrKztlbHNlIGlmKCFhLmJEZXN0cm95aW5nJiYhcWIoYSkpcmV0dXJuO2lmKDAhPT1sLmxlbmd0aClmb3IoaD1rP2EuYW9EYXRhLmxlbmd0aDpuLGs9az8wOmc7azxoO2srKyl7dmFyIG09bFtrXSx3PWEuYW9EYXRhW21dOwpudWxsPT09dy5uVHImJkxhKGEsbSk7dmFyIHU9dy5uVHI7aWYoMCE9PWUpe3ZhciBxPWRbYyVlXTt3Ll9zUm93U3RyaXBlIT1xJiYoZih1KS5yZW1vdmVDbGFzcyh3Ll9zUm93U3RyaXBlKS5hZGRDbGFzcyhxKSx3Ll9zUm93U3RyaXBlPXEpfUEoYSwiYW9Sb3dDYWxsYmFjayIsbnVsbCxbdSx3Ll9hRGF0YSxjLGssbV0pO2IucHVzaCh1KTtjKyt9ZWxzZSBjPWguc1plcm9SZWNvcmRzLDE9PWEuaURyYXcmJiJhamF4Ij09RChhKT9jPWguc0xvYWRpbmdSZWNvcmRzOmguc0VtcHR5VGFibGUmJjA9PT1hLmZuUmVjb3Jkc1RvdGFsKCkmJihjPWguc0VtcHR5VGFibGUpLGJbMF09ZigiPHRyLz4iLHsiY2xhc3MiOmU/ZFswXToiIn0pLmFwcGVuZChmKCI8dGQgLz4iLHt2YWxpZ246InRvcCIsY29sU3BhbjpXKGEpLCJjbGFzcyI6YS5vQ2xhc3Nlcy5zUm93RW1wdHl9KS5odG1sKGMpKVswXTtBKGEsImFvSGVhZGVyQ2FsbGJhY2siLCJoZWFkZXIiLFtmKGEublRIZWFkKS5jaGlsZHJlbigidHIiKVswXSwKT2EoYSksZyxuLGxdKTtBKGEsImFvRm9vdGVyQ2FsbGJhY2siLCJmb290ZXIiLFtmKGEublRGb290KS5jaGlsZHJlbigidHIiKVswXSxPYShhKSxnLG4sbF0pO2Q9ZihhLm5UQm9keSk7ZC5jaGlsZHJlbigpLmRldGFjaCgpO2QuYXBwZW5kKGYoYikpO0EoYSwiYW9EcmF3Q2FsbGJhY2siLCJkcmF3IixbYV0pO2EuYlNvcnRlZD0hMTthLmJGaWx0ZXJlZD0hMTthLmJEcmF3aW5nPSExfX1mdW5jdGlvbiBWKGEsYil7dmFyIGM9YS5vRmVhdHVyZXMsZD1jLmJGaWx0ZXI7Yy5iU29ydCYmcmIoYSk7ZD9pYShhLGEub1ByZXZpb3VzU2VhcmNoKTphLmFpRGlzcGxheT1hLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpOyEwIT09YiYmKGEuX2lEaXNwbGF5U3RhcnQ9MCk7YS5fZHJhd0hvbGQ9YjtTKGEpO2EuX2RyYXdIb2xkPSExfWZ1bmN0aW9uIHNiKGEpe3ZhciBiPWEub0NsYXNzZXMsYz1mKGEublRhYmxlKTtjPWYoIjxkaXYvPiIpLmluc2VydEJlZm9yZShjKTt2YXIgZD1hLm9GZWF0dXJlcyxlPQpmKCI8ZGl2Lz4iLHtpZDphLnNUYWJsZUlkKyJfd3JhcHBlciIsImNsYXNzIjpiLnNXcmFwcGVyKyhhLm5URm9vdD8iIjoiICIrYi5zTm9Gb290ZXIpfSk7YS5uSG9sZGluZz1jWzBdO2EublRhYmxlV3JhcHBlcj1lWzBdO2EublRhYmxlUmVpbnNlcnRCZWZvcmU9YS5uVGFibGUubmV4dFNpYmxpbmc7Zm9yKHZhciBoPWEuc0RvbS5zcGxpdCgiIiksZyxrLGwsbixtLHAsdT0wO3U8aC5sZW5ndGg7dSsrKXtnPW51bGw7az1oW3VdO2lmKCI8Ij09ayl7bD1mKCI8ZGl2Lz4iKVswXTtuPWhbdSsxXTtpZigiJyI9PW58fCciJz09bil7bT0iIjtmb3IocD0yO2hbdStwXSE9bjspbSs9aFt1K3BdLHArKzsiSCI9PW0/bT1iLnNKVUlIZWFkZXI6IkYiPT1tJiYobT1iLnNKVUlGb290ZXIpOy0xIT1tLmluZGV4T2YoIi4iKT8obj1tLnNwbGl0KCIuIiksbC5pZD1uWzBdLnN1YnN0cigxLG5bMF0ubGVuZ3RoLTEpLGwuY2xhc3NOYW1lPW5bMV0pOiIjIj09bS5jaGFyQXQoMCk/bC5pZD1tLnN1YnN0cigxLAptLmxlbmd0aC0xKTpsLmNsYXNzTmFtZT1tO3UrPXB9ZS5hcHBlbmQobCk7ZT1mKGwpfWVsc2UgaWYoIj4iPT1rKWU9ZS5wYXJlbnQoKTtlbHNlIGlmKCJsIj09ayYmZC5iUGFnaW5hdGUmJmQuYkxlbmd0aENoYW5nZSlnPXRiKGEpO2Vsc2UgaWYoImYiPT1rJiZkLmJGaWx0ZXIpZz11YihhKTtlbHNlIGlmKCJyIj09ayYmZC5iUHJvY2Vzc2luZylnPXZiKGEpO2Vsc2UgaWYoInQiPT1rKWc9d2IoYSk7ZWxzZSBpZigiaSI9PWsmJmQuYkluZm8pZz14YihhKTtlbHNlIGlmKCJwIj09ayYmZC5iUGFnaW5hdGUpZz15YihhKTtlbHNlIGlmKDAhPT1xLmV4dC5mZWF0dXJlLmxlbmd0aClmb3IobD1xLmV4dC5mZWF0dXJlLHA9MCxuPWwubGVuZ3RoO3A8bjtwKyspaWYoaz09bFtwXS5jRmVhdHVyZSl7Zz1sW3BdLmZuSW5pdChhKTticmVha31nJiYobD1hLmFhbkZlYXR1cmVzLGxba118fChsW2tdPVtdKSxsW2tdLnB1c2goZyksZS5hcHBlbmQoZykpfWMucmVwbGFjZVdpdGgoZSk7YS5uSG9sZGluZz0KbnVsbH1mdW5jdGlvbiBmYShhLGIpe2I9ZihiKS5jaGlsZHJlbigidHIiKTt2YXIgYyxkLGU7YS5zcGxpY2UoMCxhLmxlbmd0aCk7dmFyIGg9MDtmb3IoZT1iLmxlbmd0aDtoPGU7aCsrKWEucHVzaChbXSk7aD0wO2ZvcihlPWIubGVuZ3RoO2g8ZTtoKyspe3ZhciBnPWJbaF07Zm9yKGM9Zy5maXJzdENoaWxkO2M7KXtpZigiVEQiPT1jLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCl8fCJUSCI9PWMubm9kZU5hbWUudG9VcHBlckNhc2UoKSl7dmFyIGs9MSpjLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO3ZhciBsPTEqYy5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKTtrPWsmJjAhPT1rJiYxIT09az9rOjE7bD1sJiYwIT09bCYmMSE9PWw/bDoxO3ZhciBuPTA7Zm9yKGQ9YVtoXTtkW25dOyluKys7dmFyIG09bjt2YXIgcD0xPT09az8hMDohMTtmb3IoZD0wO2Q8aztkKyspZm9yKG49MDtuPGw7bisrKWFbaCtuXVttK2RdPXtjZWxsOmMsdW5pcXVlOnB9LGFbaCtuXS5uVHI9Z31jPWMubmV4dFNpYmxpbmd9fX0KZnVuY3Rpb24gdWEoYSxiLGMpe3ZhciBkPVtdO2N8fChjPWEuYW9IZWFkZXIsYiYmKGM9W10sZmEoYyxiKSkpO2I9MDtmb3IodmFyIGU9Yy5sZW5ndGg7YjxlO2IrKylmb3IodmFyIGg9MCxnPWNbYl0ubGVuZ3RoO2g8ZztoKyspIWNbYl1baF0udW5pcXVlfHxkW2hdJiZhLmJTb3J0Q2VsbHNUb3B8fChkW2hdPWNbYl1baF0uY2VsbCk7cmV0dXJuIGR9ZnVuY3Rpb24gdmEoYSxiLGMpe0EoYSwiYW9TZXJ2ZXJQYXJhbXMiLCJzZXJ2ZXJQYXJhbXMiLFtiXSk7aWYoYiYmZi5pc0FycmF5KGIpKXt2YXIgZD17fSxlPS8oLio/KVxbXF0kLztmLmVhY2goYixmdW5jdGlvbihhLGIpeyhhPWIubmFtZS5tYXRjaChlKSk/KGE9YVswXSxkW2FdfHwoZFthXT1bXSksZFthXS5wdXNoKGIudmFsdWUpKTpkW2IubmFtZV09Yi52YWx1ZX0pO2I9ZH12YXIgaD1hLmFqYXgsZz1hLm9JbnN0YW5jZSxrPWZ1bmN0aW9uKGIpe0EoYSxudWxsLCJ4aHIiLFthLGIsYS5qcVhIUl0pO2MoYil9O2lmKGYuaXNQbGFpbk9iamVjdChoKSYmCmguZGF0YSl7dmFyIGw9aC5kYXRhO3ZhciBuPSJmdW5jdGlvbiI9PT10eXBlb2YgbD9sKGIsYSk6bDtiPSJmdW5jdGlvbiI9PT10eXBlb2YgbCYmbj9uOmYuZXh0ZW5kKCEwLGIsbik7ZGVsZXRlIGguZGF0YX1uPXtkYXRhOmIsc3VjY2VzczpmdW5jdGlvbihiKXt2YXIgYz1iLmVycm9yfHxiLnNFcnJvcjtjJiZPKGEsMCxjKTthLmpzb249YjtrKGIpfSxkYXRhVHlwZToianNvbiIsY2FjaGU6ITEsdHlwZTphLnNTZXJ2ZXJNZXRob2QsZXJyb3I6ZnVuY3Rpb24oYixjLGQpe2Q9QShhLG51bGwsInhociIsW2EsbnVsbCxhLmpxWEhSXSk7LTE9PT1mLmluQXJyYXkoITAsZCkmJigicGFyc2VyZXJyb3IiPT1jP08oYSwwLCJJbnZhbGlkIEpTT04gcmVzcG9uc2UiLDEpOjQ9PT1iLnJlYWR5U3RhdGUmJk8oYSwwLCJBamF4IGVycm9yIiw3KSk7SyhhLCExKX19O2Eub0FqYXhEYXRhPWI7QShhLG51bGwsInByZVhociIsW2EsYl0pO2EuZm5TZXJ2ZXJEYXRhP2EuZm5TZXJ2ZXJEYXRhLmNhbGwoZywKYS5zQWpheFNvdXJjZSxmLm1hcChiLGZ1bmN0aW9uKGEsYil7cmV0dXJue25hbWU6Yix2YWx1ZTphfX0pLGssYSk6YS5zQWpheFNvdXJjZXx8InN0cmluZyI9PT10eXBlb2YgaD9hLmpxWEhSPWYuYWpheChmLmV4dGVuZChuLHt1cmw6aHx8YS5zQWpheFNvdXJjZX0pKToiZnVuY3Rpb24iPT09dHlwZW9mIGg/YS5qcVhIUj1oLmNhbGwoZyxiLGssYSk6KGEuanFYSFI9Zi5hamF4KGYuZXh0ZW5kKG4saCkpLGguZGF0YT1sKX1mdW5jdGlvbiBxYihhKXtyZXR1cm4gYS5iQWpheERhdGFHZXQ/KGEuaURyYXcrKyxLKGEsITApLHZhKGEsemIoYSksZnVuY3Rpb24oYil7QWIoYSxiKX0pLCExKTohMH1mdW5jdGlvbiB6YihhKXt2YXIgYj1hLmFvQ29sdW1ucyxjPWIubGVuZ3RoLGQ9YS5vRmVhdHVyZXMsZT1hLm9QcmV2aW91c1NlYXJjaCxoPWEuYW9QcmVTZWFyY2hDb2xzLGc9W10saz1ZKGEpO3ZhciBsPWEuX2lEaXNwbGF5U3RhcnQ7dmFyIG49ITEhPT1kLmJQYWdpbmF0ZT9hLl9pRGlzcGxheUxlbmd0aDoKLTE7dmFyIG09ZnVuY3Rpb24oYSxiKXtnLnB1c2goe25hbWU6YSx2YWx1ZTpifSl9O20oInNFY2hvIixhLmlEcmF3KTttKCJpQ29sdW1ucyIsYyk7bSgic0NvbHVtbnMiLEooYiwic05hbWUiKS5qb2luKCIsIikpO20oImlEaXNwbGF5U3RhcnQiLGwpO20oImlEaXNwbGF5TGVuZ3RoIixuKTt2YXIgcD17ZHJhdzphLmlEcmF3LGNvbHVtbnM6W10sb3JkZXI6W10sc3RhcnQ6bCxsZW5ndGg6bixzZWFyY2g6e3ZhbHVlOmUuc1NlYXJjaCxyZWdleDplLmJSZWdleH19O2ZvcihsPTA7bDxjO2wrKyl7dmFyIHU9YltsXTt2YXIgc2E9aFtsXTtuPSJmdW5jdGlvbiI9PXR5cGVvZiB1Lm1EYXRhPyJmdW5jdGlvbiI6dS5tRGF0YTtwLmNvbHVtbnMucHVzaCh7ZGF0YTpuLG5hbWU6dS5zTmFtZSxzZWFyY2hhYmxlOnUuYlNlYXJjaGFibGUsb3JkZXJhYmxlOnUuYlNvcnRhYmxlLHNlYXJjaDp7dmFsdWU6c2Euc1NlYXJjaCxyZWdleDpzYS5iUmVnZXh9fSk7bSgibURhdGFQcm9wXyIrbCxuKTtkLmJGaWx0ZXImJgoobSgic1NlYXJjaF8iK2wsc2Euc1NlYXJjaCksbSgiYlJlZ2V4XyIrbCxzYS5iUmVnZXgpLG0oImJTZWFyY2hhYmxlXyIrbCx1LmJTZWFyY2hhYmxlKSk7ZC5iU29ydCYmbSgiYlNvcnRhYmxlXyIrbCx1LmJTb3J0YWJsZSl9ZC5iRmlsdGVyJiYobSgic1NlYXJjaCIsZS5zU2VhcmNoKSxtKCJiUmVnZXgiLGUuYlJlZ2V4KSk7ZC5iU29ydCYmKGYuZWFjaChrLGZ1bmN0aW9uKGEsYil7cC5vcmRlci5wdXNoKHtjb2x1bW46Yi5jb2wsZGlyOmIuZGlyfSk7bSgiaVNvcnRDb2xfIithLGIuY29sKTttKCJzU29ydERpcl8iK2EsYi5kaXIpfSksbSgiaVNvcnRpbmdDb2xzIixrLmxlbmd0aCkpO2I9cS5leHQubGVnYWN5LmFqYXg7cmV0dXJuIG51bGw9PT1iP2Euc0FqYXhTb3VyY2U/ZzpwOmI/ZzpwfWZ1bmN0aW9uIEFiKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYlthXSE9PXA/YlthXTpiW2NdfSxkPXdhKGEsYiksZT1jKCJzRWNobyIsImRyYXciKSxoPWMoImlUb3RhbFJlY29yZHMiLAoicmVjb3Jkc1RvdGFsIik7Yz1jKCJpVG90YWxEaXNwbGF5UmVjb3JkcyIsInJlY29yZHNGaWx0ZXJlZCIpO2lmKGUpe2lmKDEqZTxhLmlEcmF3KXJldHVybjthLmlEcmF3PTEqZX1xYShhKTthLl9pUmVjb3Jkc1RvdGFsPXBhcnNlSW50KGgsMTApO2EuX2lSZWNvcmRzRGlzcGxheT1wYXJzZUludChjLDEwKTtlPTA7Zm9yKGg9ZC5sZW5ndGg7ZTxoO2UrKylSKGEsZFtlXSk7YS5haURpc3BsYXk9YS5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTthLmJBamF4RGF0YUdldD0hMTtTKGEpO2EuX2JJbml0Q29tcGxldGV8fHhhKGEsYik7YS5iQWpheERhdGFHZXQ9ITA7SyhhLCExKX1mdW5jdGlvbiB3YShhLGIpe2E9Zi5pc1BsYWluT2JqZWN0KGEuYWpheCkmJmEuYWpheC5kYXRhU3JjIT09cD9hLmFqYXguZGF0YVNyYzphLnNBamF4RGF0YVByb3A7cmV0dXJuImRhdGEiPT09YT9iLmFhRGF0YXx8YlthXToiIiE9PWE/VShhKShiKTpifWZ1bmN0aW9uIHViKGEpe3ZhciBiPWEub0NsYXNzZXMsYz0KYS5zVGFibGVJZCxkPWEub0xhbmd1YWdlLGU9YS5vUHJldmlvdXNTZWFyY2gsaD1hLmFhbkZlYXR1cmVzLGc9JzxpbnB1dCB0eXBlPSJzZWFyY2giIGNsYXNzPSInK2Iuc0ZpbHRlcklucHV0KyciLz4nLGs9ZC5zU2VhcmNoO2s9ay5tYXRjaCgvX0lOUFVUXy8pP2sucmVwbGFjZSgiX0lOUFVUXyIsZyk6aytnO2I9ZigiPGRpdi8+Iix7aWQ6aC5mP251bGw6YysiX2ZpbHRlciIsImNsYXNzIjpiLnNGaWx0ZXJ9KS5hcHBlbmQoZigiPGxhYmVsLz4iKS5hcHBlbmQoaykpO2g9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiI7YiE9ZS5zU2VhcmNoJiYoaWEoYSx7c1NlYXJjaDpiLGJSZWdleDplLmJSZWdleCxiU21hcnQ6ZS5iU21hcnQsYkNhc2VJbnNlbnNpdGl2ZTplLmJDYXNlSW5zZW5zaXRpdmV9KSxhLl9pRGlzcGxheVN0YXJ0PTAsUyhhKSl9O2c9bnVsbCE9PWEuc2VhcmNoRGVsYXk/YS5zZWFyY2hEZWxheToic3NwIj09PUQoYSk/NDAwOjA7dmFyIGw9ZigiaW5wdXQiLApiKS52YWwoZS5zU2VhcmNoKS5hdHRyKCJwbGFjZWhvbGRlciIsZC5zU2VhcmNoUGxhY2Vob2xkZXIpLm9uKCJrZXl1cC5EVCBzZWFyY2guRFQgaW5wdXQuRFQgcGFzdGUuRFQgY3V0LkRUIixnP1NhKGgsZyk6aCkub24oImtleXByZXNzLkRUIixmdW5jdGlvbihhKXtpZigxMz09YS5rZXlDb2RlKXJldHVybiExfSkuYXR0cigiYXJpYS1jb250cm9scyIsYyk7ZihhLm5UYWJsZSkub24oInNlYXJjaC5kdC5EVCIsZnVuY3Rpb24oYixjKXtpZihhPT09Yyl0cnl7bFswXSE9PXkuYWN0aXZlRWxlbWVudCYmbC52YWwoZS5zU2VhcmNoKX1jYXRjaCh3KXt9fSk7cmV0dXJuIGJbMF19ZnVuY3Rpb24gaWEoYSxiLGMpe3ZhciBkPWEub1ByZXZpb3VzU2VhcmNoLGU9YS5hb1ByZVNlYXJjaENvbHMsaD1mdW5jdGlvbihhKXtkLnNTZWFyY2g9YS5zU2VhcmNoO2QuYlJlZ2V4PWEuYlJlZ2V4O2QuYlNtYXJ0PWEuYlNtYXJ0O2QuYkNhc2VJbnNlbnNpdGl2ZT1hLmJDYXNlSW5zZW5zaXRpdmV9LGc9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuYkVzY2FwZVJlZ2V4IT09CnA/IWEuYkVzY2FwZVJlZ2V4OmEuYlJlZ2V4fTtLYShhKTtpZigic3NwIiE9RChhKSl7QmIoYSxiLnNTZWFyY2gsYyxnKGIpLGIuYlNtYXJ0LGIuYkNhc2VJbnNlbnNpdGl2ZSk7aChiKTtmb3IoYj0wO2I8ZS5sZW5ndGg7YisrKUNiKGEsZVtiXS5zU2VhcmNoLGIsZyhlW2JdKSxlW2JdLmJTbWFydCxlW2JdLmJDYXNlSW5zZW5zaXRpdmUpO0RiKGEpfWVsc2UgaChiKTthLmJGaWx0ZXJlZD0hMDtBKGEsbnVsbCwic2VhcmNoIixbYV0pfWZ1bmN0aW9uIERiKGEpe2Zvcih2YXIgYj1xLmV4dC5zZWFyY2gsYz1hLmFpRGlzcGxheSxkLGUsaD0wLGc9Yi5sZW5ndGg7aDxnO2grKyl7Zm9yKHZhciBrPVtdLGw9MCxuPWMubGVuZ3RoO2w8bjtsKyspZT1jW2xdLGQ9YS5hb0RhdGFbZV0sYltoXShhLGQuX2FGaWx0ZXJEYXRhLGUsZC5fYURhdGEsbCkmJmsucHVzaChlKTtjLmxlbmd0aD0wO2YubWVyZ2UoYyxrKX19ZnVuY3Rpb24gQ2IoYSxiLGMsZCxlLGgpe2lmKCIiIT09Yil7dmFyIGc9W10saz0KYS5haURpc3BsYXk7ZD1UYShiLGQsZSxoKTtmb3IoZT0wO2U8ay5sZW5ndGg7ZSsrKWI9YS5hb0RhdGFba1tlXV0uX2FGaWx0ZXJEYXRhW2NdLGQudGVzdChiKSYmZy5wdXNoKGtbZV0pO2EuYWlEaXNwbGF5PWd9fWZ1bmN0aW9uIEJiKGEsYixjLGQsZSxoKXtlPVRhKGIsZCxlLGgpO3ZhciBnPWEub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2gsaz1hLmFpRGlzcGxheU1hc3RlcjtoPVtdOzAhPT1xLmV4dC5zZWFyY2gubGVuZ3RoJiYoYz0hMCk7dmFyIGY9RWIoYSk7aWYoMD49Yi5sZW5ndGgpYS5haURpc3BsYXk9ay5zbGljZSgpO2Vsc2V7aWYoZnx8Y3x8ZHx8Zy5sZW5ndGg+Yi5sZW5ndGh8fDAhPT1iLmluZGV4T2YoZyl8fGEuYlNvcnRlZClhLmFpRGlzcGxheT1rLnNsaWNlKCk7Yj1hLmFpRGlzcGxheTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWUudGVzdChhLmFvRGF0YVtiW2NdXS5fc0ZpbHRlclJvdykmJmgucHVzaChiW2NdKTthLmFpRGlzcGxheT1ofX1mdW5jdGlvbiBUYShhLGIsCmMsZCl7YT1iP2E6VWEoYSk7YyYmKGE9Il4oPz0uKj8iK2YubWFwKGEubWF0Y2goLyJbXiJdKyJ8W14gXSsvZyl8fFsiIl0sZnVuY3Rpb24oYSl7aWYoJyInPT09YS5jaGFyQXQoMCkpe3ZhciBiPWEubWF0Y2goL14iKC4qKSIkLyk7YT1iP2JbMV06YX1yZXR1cm4gYS5yZXBsYWNlKCciJywiIil9KS5qb2luKCIpKD89Lio/IikrIikuKiQiKTtyZXR1cm4gbmV3IFJlZ0V4cChhLGQ/ImkiOiIiKX1mdW5jdGlvbiBFYihhKXt2YXIgYj1hLmFvQ29sdW1ucyxjLGQsZT1xLmV4dC50eXBlLnNlYXJjaDt2YXIgaD0hMTt2YXIgZz0wO2ZvcihjPWEuYW9EYXRhLmxlbmd0aDtnPGM7ZysrKXt2YXIgaz1hLmFvRGF0YVtnXTtpZighay5fYUZpbHRlckRhdGEpe3ZhciBmPVtdO3ZhciBuPTA7Zm9yKGQ9Yi5sZW5ndGg7bjxkO24rKyl7aD1iW25dO2lmKGguYlNlYXJjaGFibGUpe3ZhciBtPUkoYSxnLG4sImZpbHRlciIpO2VbaC5zVHlwZV0mJihtPWVbaC5zVHlwZV0obSkpO251bGw9PT1tJiYobT0iIik7CiJzdHJpbmciIT09dHlwZW9mIG0mJm0udG9TdHJpbmcmJihtPW0udG9TdHJpbmcoKSl9ZWxzZSBtPSIiO20uaW5kZXhPZiYmLTEhPT1tLmluZGV4T2YoIiYiKSYmKHlhLmlubmVySFRNTD1tLG09JGI/eWEudGV4dENvbnRlbnQ6eWEuaW5uZXJUZXh0KTttLnJlcGxhY2UmJihtPW0ucmVwbGFjZSgvW1xyXG5cdTIwMjhdL2csIiIpKTtmLnB1c2gobSl9ay5fYUZpbHRlckRhdGE9ZjtrLl9zRmlsdGVyUm93PWYuam9pbigiICAiKTtoPSEwfX1yZXR1cm4gaH1mdW5jdGlvbiBGYihhKXtyZXR1cm57c2VhcmNoOmEuc1NlYXJjaCxzbWFydDphLmJTbWFydCxyZWdleDphLmJSZWdleCxjYXNlSW5zZW5zaXRpdmU6YS5iQ2FzZUluc2Vuc2l0aXZlfX1mdW5jdGlvbiBHYihhKXtyZXR1cm57c1NlYXJjaDphLnNlYXJjaCxiU21hcnQ6YS5zbWFydCxiUmVnZXg6YS5yZWdleCxiQ2FzZUluc2Vuc2l0aXZlOmEuY2FzZUluc2Vuc2l0aXZlfX1mdW5jdGlvbiB4YihhKXt2YXIgYj1hLnNUYWJsZUlkLGM9YS5hYW5GZWF0dXJlcy5pLApkPWYoIjxkaXYvPiIseyJjbGFzcyI6YS5vQ2xhc3Nlcy5zSW5mbyxpZDpjP251bGw6YisiX2luZm8ifSk7Y3x8KGEuYW9EcmF3Q2FsbGJhY2sucHVzaCh7Zm46SGIsc05hbWU6ImluZm9ybWF0aW9uIn0pLGQuYXR0cigicm9sZSIsInN0YXR1cyIpLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpLGYoYS5uVGFibGUpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLGIrIl9pbmZvIikpO3JldHVybiBkWzBdfWZ1bmN0aW9uIEhiKGEpe3ZhciBiPWEuYWFuRmVhdHVyZXMuaTtpZigwIT09Yi5sZW5ndGgpe3ZhciBjPWEub0xhbmd1YWdlLGQ9YS5faURpc3BsYXlTdGFydCsxLGU9YS5mbkRpc3BsYXlFbmQoKSxoPWEuZm5SZWNvcmRzVG90YWwoKSxnPWEuZm5SZWNvcmRzRGlzcGxheSgpLGs9Zz9jLnNJbmZvOmMuc0luZm9FbXB0eTtnIT09aCYmKGsrPSIgIitjLnNJbmZvRmlsdGVyZWQpO2srPWMuc0luZm9Qb3N0Rml4O2s9SWIoYSxrKTtjPWMuZm5JbmZvQ2FsbGJhY2s7bnVsbCE9PWMmJihrPWMuY2FsbChhLm9JbnN0YW5jZSwKYSxkLGUsaCxnLGspKTtmKGIpLmh0bWwoayl9fWZ1bmN0aW9uIEliKGEsYil7dmFyIGM9YS5mbkZvcm1hdE51bWJlcixkPWEuX2lEaXNwbGF5U3RhcnQrMSxlPWEuX2lEaXNwbGF5TGVuZ3RoLGg9YS5mblJlY29yZHNEaXNwbGF5KCksZz0tMT09PWU7cmV0dXJuIGIucmVwbGFjZSgvX1NUQVJUXy9nLGMuY2FsbChhLGQpKS5yZXBsYWNlKC9fRU5EXy9nLGMuY2FsbChhLGEuZm5EaXNwbGF5RW5kKCkpKS5yZXBsYWNlKC9fTUFYXy9nLGMuY2FsbChhLGEuZm5SZWNvcmRzVG90YWwoKSkpLnJlcGxhY2UoL19UT1RBTF8vZyxjLmNhbGwoYSxoKSkucmVwbGFjZSgvX1BBR0VfL2csYy5jYWxsKGEsZz8xOk1hdGguY2VpbChkL2UpKSkucmVwbGFjZSgvX1BBR0VTXy9nLGMuY2FsbChhLGc/MTpNYXRoLmNlaWwoaC9lKSkpfWZ1bmN0aW9uIGphKGEpe3ZhciBiPWEuaUluaXREaXNwbGF5U3RhcnQsYz1hLmFvQ29sdW1uczt2YXIgZD1hLm9GZWF0dXJlczt2YXIgZT1hLmJEZWZlckxvYWRpbmc7aWYoYS5iSW5pdGlhbGlzZWQpe3NiKGEpOwpwYihhKTtoYShhLGEuYW9IZWFkZXIpO2hhKGEsYS5hb0Zvb3Rlcik7SyhhLCEwKTtkLmJBdXRvV2lkdGgmJkphKGEpO3ZhciBoPTA7Zm9yKGQ9Yy5sZW5ndGg7aDxkO2grKyl7dmFyIGc9Y1toXTtnLnNXaWR0aCYmKGcublRoLnN0eWxlLndpZHRoPUIoZy5zV2lkdGgpKX1BKGEsbnVsbCwicHJlSW5pdCIsW2FdKTtWKGEpO2M9RChhKTtpZigic3NwIiE9Y3x8ZSkiYWpheCI9PWM/dmEoYSxbXSxmdW5jdGlvbihjKXt2YXIgZD13YShhLGMpO2ZvcihoPTA7aDxkLmxlbmd0aDtoKyspUihhLGRbaF0pO2EuaUluaXREaXNwbGF5U3RhcnQ9YjtWKGEpO0soYSwhMSk7eGEoYSxjKX0sYSk6KEsoYSwhMSkseGEoYSkpfWVsc2Ugc2V0VGltZW91dChmdW5jdGlvbigpe2phKGEpfSwyMDApfWZ1bmN0aW9uIHhhKGEsYil7YS5fYkluaXRDb21wbGV0ZT0hMDsoYnx8YS5vSW5pdC5hYURhdGEpJiZhYShhKTtBKGEsbnVsbCwicGx1Z2luLWluaXQiLFthLGJdKTtBKGEsImFvSW5pdENvbXBsZXRlIiwiaW5pdCIsClthLGJdKX1mdW5jdGlvbiBWYShhLGIpe2I9cGFyc2VJbnQoYiwxMCk7YS5faURpc3BsYXlMZW5ndGg9YjtXYShhKTtBKGEsbnVsbCwibGVuZ3RoIixbYSxiXSl9ZnVuY3Rpb24gdGIoYSl7dmFyIGI9YS5vQ2xhc3NlcyxjPWEuc1RhYmxlSWQsZD1hLmFMZW5ndGhNZW51LGU9Zi5pc0FycmF5KGRbMF0pLGg9ZT9kWzBdOmQ7ZD1lP2RbMV06ZDtlPWYoIjxzZWxlY3QvPiIse25hbWU6YysiX2xlbmd0aCIsImFyaWEtY29udHJvbHMiOmMsImNsYXNzIjpiLnNMZW5ndGhTZWxlY3R9KTtmb3IodmFyIGc9MCxrPWgubGVuZ3RoO2c8aztnKyspZVswXVtnXT1uZXcgT3B0aW9uKCJudW1iZXIiPT09dHlwZW9mIGRbZ10/YS5mbkZvcm1hdE51bWJlcihkW2ddKTpkW2ddLGhbZ10pO3ZhciBsPWYoIjxkaXY+PGxhYmVsLz48L2Rpdj4iKS5hZGRDbGFzcyhiLnNMZW5ndGgpO2EuYWFuRmVhdHVyZXMubHx8KGxbMF0uaWQ9YysiX2xlbmd0aCIpO2wuY2hpbGRyZW4oKS5hcHBlbmQoYS5vTGFuZ3VhZ2Uuc0xlbmd0aE1lbnUucmVwbGFjZSgiX01FTlVfIiwKZVswXS5vdXRlckhUTUwpKTtmKCJzZWxlY3QiLGwpLnZhbChhLl9pRGlzcGxheUxlbmd0aCkub24oImNoYW5nZS5EVCIsZnVuY3Rpb24oYil7VmEoYSxmKHRoaXMpLnZhbCgpKTtTKGEpfSk7ZihhLm5UYWJsZSkub24oImxlbmd0aC5kdC5EVCIsZnVuY3Rpb24oYixjLGQpe2E9PT1jJiZmKCJzZWxlY3QiLGwpLnZhbChkKX0pO3JldHVybiBsWzBdfWZ1bmN0aW9uIHliKGEpe3ZhciBiPWEuc1BhZ2luYXRpb25UeXBlLGM9cS5leHQucGFnZXJbYl0sZD0iZnVuY3Rpb24iPT09dHlwZW9mIGMsZT1mdW5jdGlvbihhKXtTKGEpfTtiPWYoIjxkaXYvPiIpLmFkZENsYXNzKGEub0NsYXNzZXMuc1BhZ2luZytiKVswXTt2YXIgaD1hLmFhbkZlYXR1cmVzO2R8fGMuZm5Jbml0KGEsYixlKTtoLnB8fChiLmlkPWEuc1RhYmxlSWQrIl9wYWdpbmF0ZSIsYS5hb0RyYXdDYWxsYmFjay5wdXNoKHtmbjpmdW5jdGlvbihhKXtpZihkKXt2YXIgYj1hLl9pRGlzcGxheVN0YXJ0LGc9YS5faURpc3BsYXlMZW5ndGgsCmY9YS5mblJlY29yZHNEaXNwbGF5KCksbT0tMT09PWc7Yj1tPzA6TWF0aC5jZWlsKGIvZyk7Zz1tPzE6TWF0aC5jZWlsKGYvZyk7Zj1jKGIsZyk7dmFyIHA7bT0wO2ZvcihwPWgucC5sZW5ndGg7bTxwO20rKylSYShhLCJwYWdlQnV0dG9uIikoYSxoLnBbbV0sbSxmLGIsZyl9ZWxzZSBjLmZuVXBkYXRlKGEsZSl9LHNOYW1lOiJwYWdpbmF0aW9uIn0pKTtyZXR1cm4gYn1mdW5jdGlvbiBYYShhLGIsYyl7dmFyIGQ9YS5faURpc3BsYXlTdGFydCxlPWEuX2lEaXNwbGF5TGVuZ3RoLGg9YS5mblJlY29yZHNEaXNwbGF5KCk7MD09PWh8fC0xPT09ZT9kPTA6Im51bWJlciI9PT10eXBlb2YgYj8oZD1iKmUsZD5oJiYoZD0wKSk6ImZpcnN0Ij09Yj9kPTA6InByZXZpb3VzIj09Yj8oZD0wPD1lP2QtZTowLDA+ZCYmKGQ9MCkpOiJuZXh0Ij09Yj9kK2U8aCYmKGQrPWUpOiJsYXN0Ij09Yj9kPU1hdGguZmxvb3IoKGgtMSkvZSkqZTpPKGEsMCwiVW5rbm93biBwYWdpbmcgYWN0aW9uOiAiK2IsNSk7Yj0KYS5faURpc3BsYXlTdGFydCE9PWQ7YS5faURpc3BsYXlTdGFydD1kO2ImJihBKGEsbnVsbCwicGFnZSIsW2FdKSxjJiZTKGEpKTtyZXR1cm4gYn1mdW5jdGlvbiB2YihhKXtyZXR1cm4gZigiPGRpdi8+Iix7aWQ6YS5hYW5GZWF0dXJlcy5yP251bGw6YS5zVGFibGVJZCsiX3Byb2Nlc3NpbmciLCJjbGFzcyI6YS5vQ2xhc3Nlcy5zUHJvY2Vzc2luZ30pLmh0bWwoYS5vTGFuZ3VhZ2Uuc1Byb2Nlc3NpbmcpLmluc2VydEJlZm9yZShhLm5UYWJsZSlbMF19ZnVuY3Rpb24gSyhhLGIpe2Eub0ZlYXR1cmVzLmJQcm9jZXNzaW5nJiZmKGEuYWFuRmVhdHVyZXMucikuY3NzKCJkaXNwbGF5IixiPyJibG9jayI6Im5vbmUiKTtBKGEsbnVsbCwicHJvY2Vzc2luZyIsW2EsYl0pfWZ1bmN0aW9uIHdiKGEpe3ZhciBiPWYoYS5uVGFibGUpO2IuYXR0cigicm9sZSIsImdyaWQiKTt2YXIgYz1hLm9TY3JvbGw7aWYoIiI9PT1jLnNYJiYiIj09PWMuc1kpcmV0dXJuIGEublRhYmxlO3ZhciBkPWMuc1gsZT1jLnNZLApoPWEub0NsYXNzZXMsZz1iLmNoaWxkcmVuKCJjYXB0aW9uIiksaz1nLmxlbmd0aD9nWzBdLl9jYXB0aW9uU2lkZTpudWxsLGw9ZihiWzBdLmNsb25lTm9kZSghMSkpLG49ZihiWzBdLmNsb25lTm9kZSghMSkpLG09Yi5jaGlsZHJlbigidGZvb3QiKTttLmxlbmd0aHx8KG09bnVsbCk7bD1mKCI8ZGl2Lz4iLHsiY2xhc3MiOmguc1Njcm9sbFdyYXBwZXJ9KS5hcHBlbmQoZigiPGRpdi8+Iix7ImNsYXNzIjpoLnNTY3JvbGxIZWFkfSkuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIixwb3NpdGlvbjoicmVsYXRpdmUiLGJvcmRlcjowLHdpZHRoOmQ/ZD9CKGQpOm51bGw6IjEwMCUifSkuYXBwZW5kKGYoIjxkaXYvPiIseyJjbGFzcyI6aC5zU2Nyb2xsSGVhZElubmVyfSkuY3NzKHsiYm94LXNpemluZyI6ImNvbnRlbnQtYm94Iix3aWR0aDpjLnNYSW5uZXJ8fCIxMDAlIn0pLmFwcGVuZChsLnJlbW92ZUF0dHIoImlkIikuY3NzKCJtYXJnaW4tbGVmdCIsMCkuYXBwZW5kKCJ0b3AiPT09az9nOm51bGwpLmFwcGVuZChiLmNoaWxkcmVuKCJ0aGVhZCIpKSkpKS5hcHBlbmQoZigiPGRpdi8+IiwKeyJjbGFzcyI6aC5zU2Nyb2xsQm9keX0pLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoiYXV0byIsd2lkdGg6ZD9CKGQpOm51bGx9KS5hcHBlbmQoYikpO20mJmwuYXBwZW5kKGYoIjxkaXYvPiIseyJjbGFzcyI6aC5zU2Nyb2xsRm9vdH0pLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyOjAsd2lkdGg6ZD9kP0IoZCk6bnVsbDoiMTAwJSJ9KS5hcHBlbmQoZigiPGRpdi8+Iix7ImNsYXNzIjpoLnNTY3JvbGxGb290SW5uZXJ9KS5hcHBlbmQobi5yZW1vdmVBdHRyKCJpZCIpLmNzcygibWFyZ2luLWxlZnQiLDApLmFwcGVuZCgiYm90dG9tIj09PWs/ZzpudWxsKS5hcHBlbmQoYi5jaGlsZHJlbigidGZvb3QiKSkpKSk7Yj1sLmNoaWxkcmVuKCk7dmFyIHA9YlswXTtoPWJbMV07dmFyIHU9bT9iWzJdOm51bGw7aWYoZClmKGgpLm9uKCJzY3JvbGwuRFQiLGZ1bmN0aW9uKGEpe2E9dGhpcy5zY3JvbGxMZWZ0O3Auc2Nyb2xsTGVmdD1hO20mJih1LnNjcm9sbExlZnQ9YSl9KTsKZihoKS5jc3MoZSYmYy5iQ29sbGFwc2U/Im1heC1oZWlnaHQiOiJoZWlnaHQiLGUpO2EublNjcm9sbEhlYWQ9cDthLm5TY3JvbGxCb2R5PWg7YS5uU2Nyb2xsRm9vdD11O2EuYW9EcmF3Q2FsbGJhY2sucHVzaCh7Zm46bmEsc05hbWU6InNjcm9sbGluZyJ9KTtyZXR1cm4gbFswXX1mdW5jdGlvbiBuYShhKXt2YXIgYj1hLm9TY3JvbGwsYz1iLnNYLGQ9Yi5zWElubmVyLGU9Yi5zWTtiPWIuaUJhcldpZHRoO3ZhciBoPWYoYS5uU2Nyb2xsSGVhZCksZz1oWzBdLnN0eWxlLGs9aC5jaGlsZHJlbigiZGl2IiksbD1rWzBdLnN0eWxlLG49ay5jaGlsZHJlbigidGFibGUiKTtrPWEublNjcm9sbEJvZHk7dmFyIG09ZihrKSx3PWsuc3R5bGUsdT1mKGEublNjcm9sbEZvb3QpLmNoaWxkcmVuKCJkaXYiKSxxPXUuY2hpbGRyZW4oInRhYmxlIiksdD1mKGEublRIZWFkKSxyPWYoYS5uVGFibGUpLHY9clswXSx6YT12LnN0eWxlLFQ9YS5uVEZvb3Q/ZihhLm5URm9vdCk6bnVsbCxBPWEub0Jyb3dzZXIsCng9QS5iU2Nyb2xsT3ZlcnNpemUsYWM9SihhLmFvQ29sdW1ucywiblRoIiksWWE9W10seT1bXSx6PVtdLEM9W10sRyxIPWZ1bmN0aW9uKGEpe2E9YS5zdHlsZTthLnBhZGRpbmdUb3A9IjAiO2EucGFkZGluZ0JvdHRvbT0iMCI7YS5ib3JkZXJUb3BXaWR0aD0iMCI7YS5ib3JkZXJCb3R0b21XaWR0aD0iMCI7YS5oZWlnaHQ9MH07dmFyIEQ9ay5zY3JvbGxIZWlnaHQ+ay5jbGllbnRIZWlnaHQ7aWYoYS5zY3JvbGxCYXJWaXMhPT1EJiZhLnNjcm9sbEJhclZpcyE9PXApYS5zY3JvbGxCYXJWaXM9RCxhYShhKTtlbHNle2Euc2Nyb2xsQmFyVmlzPUQ7ci5jaGlsZHJlbigidGhlYWQsIHRmb290IikucmVtb3ZlKCk7aWYoVCl7dmFyIEU9VC5jbG9uZSgpLnByZXBlbmRUbyhyKTt2YXIgRj1ULmZpbmQoInRyIik7RT1FLmZpbmQoInRyIil9dmFyIEk9dC5jbG9uZSgpLnByZXBlbmRUbyhyKTt0PXQuZmluZCgidHIiKTtEPUkuZmluZCgidHIiKTtJLmZpbmQoInRoLCB0ZCIpLnJlbW92ZUF0dHIoInRhYmluZGV4Iik7CmN8fCh3LndpZHRoPSIxMDAlIixoWzBdLnN0eWxlLndpZHRoPSIxMDAlIik7Zi5lYWNoKHVhKGEsSSksZnVuY3Rpb24oYixjKXtHPWJhKGEsYik7Yy5zdHlsZS53aWR0aD1hLmFvQ29sdW1uc1tHXS5zV2lkdGh9KTtUJiZOKGZ1bmN0aW9uKGEpe2Euc3R5bGUud2lkdGg9IiJ9LEUpO2g9ci5vdXRlcldpZHRoKCk7IiI9PT1jPyh6YS53aWR0aD0iMTAwJSIseCYmKHIuZmluZCgidGJvZHkiKS5oZWlnaHQoKT5rLm9mZnNldEhlaWdodHx8InNjcm9sbCI9PW0uY3NzKCJvdmVyZmxvdy15IikpJiYoemEud2lkdGg9QihyLm91dGVyV2lkdGgoKS1iKSksaD1yLm91dGVyV2lkdGgoKSk6IiIhPT1kJiYoemEud2lkdGg9QihkKSxoPXIub3V0ZXJXaWR0aCgpKTtOKEgsRCk7TihmdW5jdGlvbihhKXt6LnB1c2goYS5pbm5lckhUTUwpO1lhLnB1c2goQihmKGEpLmNzcygid2lkdGgiKSkpfSxEKTtOKGZ1bmN0aW9uKGEsYil7LTEhPT1mLmluQXJyYXkoYSxhYykmJihhLnN0eWxlLndpZHRoPVlhW2JdKX0sCnQpO2YoRCkuaGVpZ2h0KDApO1QmJihOKEgsRSksTihmdW5jdGlvbihhKXtDLnB1c2goYS5pbm5lckhUTUwpO3kucHVzaChCKGYoYSkuY3NzKCJ3aWR0aCIpKSl9LEUpLE4oZnVuY3Rpb24oYSxiKXthLnN0eWxlLndpZHRoPXlbYl19LEYpLGYoRSkuaGVpZ2h0KDApKTtOKGZ1bmN0aW9uKGEsYil7YS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImRhdGFUYWJsZXNfc2l6aW5nIj4nK3pbYl0rIjwvZGl2PiI7YS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD0iMCI7YS5jaGlsZE5vZGVzWzBdLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Euc3R5bGUud2lkdGg9WWFbYl19LEQpO1QmJk4oZnVuY3Rpb24oYSxiKXthLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZGF0YVRhYmxlc19zaXppbmciPicrQ1tiXSsiPC9kaXY+IjthLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PSIwIjthLmNoaWxkTm9kZXNbMF0uc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7YS5zdHlsZS53aWR0aD15W2JdfSxFKTtyLm91dGVyV2lkdGgoKTwKaD8oRj1rLnNjcm9sbEhlaWdodD5rLm9mZnNldEhlaWdodHx8InNjcm9sbCI9PW0uY3NzKCJvdmVyZmxvdy15Iik/aCtiOmgseCYmKGsuc2Nyb2xsSGVpZ2h0Pmsub2Zmc2V0SGVpZ2h0fHwic2Nyb2xsIj09bS5jc3MoIm92ZXJmbG93LXkiKSkmJih6YS53aWR0aD1CKEYtYikpLCIiIT09YyYmIiI9PT1kfHxPKGEsMSwiUG9zc2libGUgY29sdW1uIG1pc2FsaWdubWVudCIsNikpOkY9IjEwMCUiO3cud2lkdGg9QihGKTtnLndpZHRoPUIoRik7VCYmKGEublNjcm9sbEZvb3Quc3R5bGUud2lkdGg9QihGKSk7IWUmJngmJih3LmhlaWdodD1CKHYub2Zmc2V0SGVpZ2h0K2IpKTtjPXIub3V0ZXJXaWR0aCgpO25bMF0uc3R5bGUud2lkdGg9QihjKTtsLndpZHRoPUIoYyk7ZD1yLmhlaWdodCgpPmsuY2xpZW50SGVpZ2h0fHwic2Nyb2xsIj09bS5jc3MoIm92ZXJmbG93LXkiKTtlPSJwYWRkaW5nIisoQS5iU2Nyb2xsYmFyTGVmdD8iTGVmdCI6IlJpZ2h0Iik7bFtlXT1kP2IrInB4IjoiMHB4IjtUJiYKKHFbMF0uc3R5bGUud2lkdGg9QihjKSx1WzBdLnN0eWxlLndpZHRoPUIoYyksdVswXS5zdHlsZVtlXT1kP2IrInB4IjoiMHB4Iik7ci5jaGlsZHJlbigiY29sZ3JvdXAiKS5pbnNlcnRCZWZvcmUoci5jaGlsZHJlbigidGhlYWQiKSk7bS50cmlnZ2VyKCJzY3JvbGwiKTshYS5iU29ydGVkJiYhYS5iRmlsdGVyZWR8fGEuX2RyYXdIb2xkfHwoay5zY3JvbGxUb3A9MCl9fWZ1bmN0aW9uIE4oYSxiLGMpe2Zvcih2YXIgZD0wLGU9MCxoPWIubGVuZ3RoLGcsaztlPGg7KXtnPWJbZV0uZmlyc3RDaGlsZDtmb3Ioaz1jP2NbZV0uZmlyc3RDaGlsZDpudWxsO2c7KTE9PT1nLm5vZGVUeXBlJiYoYz9hKGcsayxkKTphKGcsZCksZCsrKSxnPWcubmV4dFNpYmxpbmcsaz1jP2submV4dFNpYmxpbmc6bnVsbDtlKyt9fWZ1bmN0aW9uIEphKGEpe3ZhciBiPWEublRhYmxlLGM9YS5hb0NvbHVtbnMsZD1hLm9TY3JvbGwsZT1kLnNZLGg9ZC5zWCxnPWQuc1hJbm5lcixrPWMubGVuZ3RoLGw9b2EoYSwiYlZpc2libGUiKSwKbj1mKCJ0aCIsYS5uVEhlYWQpLG09Yi5nZXRBdHRyaWJ1dGUoIndpZHRoIikscD1iLnBhcmVudE5vZGUsdT0hMSxxLHQ9YS5vQnJvd3NlcjtkPXQuYlNjcm9sbE92ZXJzaXplOyhxPWIuc3R5bGUud2lkdGgpJiYtMSE9PXEuaW5kZXhPZigiJSIpJiYobT1xKTtmb3IocT0wO3E8bC5sZW5ndGg7cSsrKXt2YXIgcj1jW2xbcV1dO251bGwhPT1yLnNXaWR0aCYmKHIuc1dpZHRoPUpiKHIuc1dpZHRoT3JpZyxwKSx1PSEwKX1pZihkfHwhdSYmIWgmJiFlJiZrPT1XKGEpJiZrPT1uLmxlbmd0aClmb3IocT0wO3E8aztxKyspbD1iYShhLHEpLG51bGwhPT1sJiYoY1tsXS5zV2lkdGg9QihuLmVxKHEpLndpZHRoKCkpKTtlbHNle2s9ZihiKS5jbG9uZSgpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLnJlbW92ZUF0dHIoImlkIik7ay5maW5kKCJ0Ym9keSB0ciIpLnJlbW92ZSgpO3ZhciB2PWYoIjx0ci8+IikuYXBwZW5kVG8oay5maW5kKCJ0Ym9keSIpKTtrLmZpbmQoInRoZWFkLCB0Zm9vdCIpLnJlbW92ZSgpOwprLmFwcGVuZChmKGEublRIZWFkKS5jbG9uZSgpKS5hcHBlbmQoZihhLm5URm9vdCkuY2xvbmUoKSk7ay5maW5kKCJ0Zm9vdCB0aCwgdGZvb3QgdGQiKS5jc3MoIndpZHRoIiwiIik7bj11YShhLGsuZmluZCgidGhlYWQiKVswXSk7Zm9yKHE9MDtxPGwubGVuZ3RoO3ErKylyPWNbbFtxXV0sbltxXS5zdHlsZS53aWR0aD1udWxsIT09ci5zV2lkdGhPcmlnJiYiIiE9PXIuc1dpZHRoT3JpZz9CKHIuc1dpZHRoT3JpZyk6IiIsci5zV2lkdGhPcmlnJiZoJiZmKG5bcV0pLmFwcGVuZChmKCI8ZGl2Lz4iKS5jc3Moe3dpZHRoOnIuc1dpZHRoT3JpZyxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOjAsaGVpZ2h0OjF9KSk7aWYoYS5hb0RhdGEubGVuZ3RoKWZvcihxPTA7cTxsLmxlbmd0aDtxKyspdT1sW3FdLHI9Y1t1XSxmKEtiKGEsdSkpLmNsb25lKCExKS5hcHBlbmQoci5zQ29udGVudFBhZGRpbmcpLmFwcGVuZFRvKHYpO2YoIltuYW1lXSIsaykucmVtb3ZlQXR0cigibmFtZSIpO3I9ZigiPGRpdi8+IikuY3NzKGh8fAplP3twb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxoZWlnaHQ6MSxyaWdodDowLG92ZXJmbG93OiJoaWRkZW4ifTp7fSkuYXBwZW5kKGspLmFwcGVuZFRvKHApO2gmJmc/ay53aWR0aChnKTpoPyhrLmNzcygid2lkdGgiLCJhdXRvIiksay5yZW1vdmVBdHRyKCJ3aWR0aCIpLGsud2lkdGgoKTxwLmNsaWVudFdpZHRoJiZtJiZrLndpZHRoKHAuY2xpZW50V2lkdGgpKTplP2sud2lkdGgocC5jbGllbnRXaWR0aCk6bSYmay53aWR0aChtKTtmb3IocT1lPTA7cTxsLmxlbmd0aDtxKyspcD1mKG5bcV0pLGc9cC5vdXRlcldpZHRoKCktcC53aWR0aCgpLHA9dC5iQm91bmRpbmc/TWF0aC5jZWlsKG5bcV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpOnAub3V0ZXJXaWR0aCgpLGUrPXAsY1tsW3FdXS5zV2lkdGg9QihwLWcpO2Iuc3R5bGUud2lkdGg9QihlKTtyLnJlbW92ZSgpfW0mJihiLnN0eWxlLndpZHRoPUIobSkpOyFtJiYhaHx8YS5fcmVzekV2dHx8KGI9ZnVuY3Rpb24oKXtmKHopLm9uKCJyZXNpemUuRFQtIisKYS5zSW5zdGFuY2UsU2EoZnVuY3Rpb24oKXthYShhKX0pKX0sZD9zZXRUaW1lb3V0KGIsMUUzKTpiKCksYS5fcmVzekV2dD0hMCl9ZnVuY3Rpb24gSmIoYSxiKXtpZighYSlyZXR1cm4gMDthPWYoIjxkaXYvPiIpLmNzcygid2lkdGgiLEIoYSkpLmFwcGVuZFRvKGJ8fHkuYm9keSk7Yj1hWzBdLm9mZnNldFdpZHRoO2EucmVtb3ZlKCk7cmV0dXJuIGJ9ZnVuY3Rpb24gS2IoYSxiKXt2YXIgYz1MYihhLGIpO2lmKDA+YylyZXR1cm4gbnVsbDt2YXIgZD1hLmFvRGF0YVtjXTtyZXR1cm4gZC5uVHI/ZC5hbkNlbGxzW2JdOmYoIjx0ZC8+IikuaHRtbChJKGEsYyxiLCJkaXNwbGF5IikpWzBdfWZ1bmN0aW9uIExiKGEsYil7Zm9yKHZhciBjLGQ9LTEsZT0tMSxoPTAsZz1hLmFvRGF0YS5sZW5ndGg7aDxnO2grKyljPUkoYSxoLGIsImRpc3BsYXkiKSsiIixjPWMucmVwbGFjZShiYywiIiksYz1jLnJlcGxhY2UoLyZuYnNwOy9nLCIgIiksYy5sZW5ndGg+ZCYmKGQ9Yy5sZW5ndGgsZT1oKTtyZXR1cm4gZX0KZnVuY3Rpb24gQihhKXtyZXR1cm4gbnVsbD09PWE/IjBweCI6Im51bWJlciI9PXR5cGVvZiBhPzA+YT8iMHB4IjphKyJweCI6YS5tYXRjaCgvXGQkLyk/YSsicHgiOmF9ZnVuY3Rpb24gWShhKXt2YXIgYj1bXSxjPWEuYW9Db2x1bW5zO3ZhciBkPWEuYWFTb3J0aW5nRml4ZWQ7dmFyIGU9Zi5pc1BsYWluT2JqZWN0KGQpO3ZhciBoPVtdO3ZhciBnPWZ1bmN0aW9uKGEpe2EubGVuZ3RoJiYhZi5pc0FycmF5KGFbMF0pP2gucHVzaChhKTpmLm1lcmdlKGgsYSl9O2YuaXNBcnJheShkKSYmZyhkKTtlJiZkLnByZSYmZyhkLnByZSk7ZyhhLmFhU29ydGluZyk7ZSYmZC5wb3N0JiZnKGQucG9zdCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKyl7dmFyIGs9aFthXVswXTtnPWNba10uYURhdGFTb3J0O2Q9MDtmb3IoZT1nLmxlbmd0aDtkPGU7ZCsrKXt2YXIgbD1nW2RdO3ZhciBuPWNbbF0uc1R5cGV8fCJzdHJpbmciO2hbYV0uX2lkeD09PXAmJihoW2FdLl9pZHg9Zi5pbkFycmF5KGhbYV1bMV0sY1tsXS5hc1NvcnRpbmcpKTsKYi5wdXNoKHtzcmM6ayxjb2w6bCxkaXI6aFthXVsxXSxpbmRleDpoW2FdLl9pZHgsdHlwZTpuLGZvcm1hdHRlcjpxLmV4dC50eXBlLm9yZGVyW24rIi1wcmUiXX0pfX1yZXR1cm4gYn1mdW5jdGlvbiByYihhKXt2YXIgYixjPVtdLGQ9cS5leHQudHlwZS5vcmRlcixlPWEuYW9EYXRhLGg9MCxnPWEuYWlEaXNwbGF5TWFzdGVyO0thKGEpO3ZhciBrPVkoYSk7dmFyIGY9MDtmb3IoYj1rLmxlbmd0aDtmPGI7ZisrKXt2YXIgbj1rW2ZdO24uZm9ybWF0dGVyJiZoKys7TWIoYSxuLmNvbCl9aWYoInNzcCIhPUQoYSkmJjAhPT1rLmxlbmd0aCl7Zj0wO2ZvcihiPWcubGVuZ3RoO2Y8YjtmKyspY1tnW2ZdXT1mO2g9PT1rLmxlbmd0aD9nLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgZCxoPWsubGVuZ3RoLGc9ZVthXS5fYVNvcnREYXRhLGY9ZVtiXS5fYVNvcnREYXRhO2ZvcihkPTA7ZDxoO2QrKyl7dmFyIGw9a1tkXTt2YXIgbT1nW2wuY29sXTt2YXIgbj1mW2wuY29sXTttPW08bj8tMTptPm4/MTowOwppZigwIT09bSlyZXR1cm4iYXNjIj09PWwuZGlyP206LW19bT1jW2FdO249Y1tiXTtyZXR1cm4gbTxuPy0xOm0+bj8xOjB9KTpnLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgaCxnPWsubGVuZ3RoLGY9ZVthXS5fYVNvcnREYXRhLGw9ZVtiXS5fYVNvcnREYXRhO2ZvcihoPTA7aDxnO2grKyl7dmFyIG09a1toXTt2YXIgbj1mW20uY29sXTt2YXIgcD1sW20uY29sXTttPWRbbS50eXBlKyItIittLmRpcl18fGRbInN0cmluZy0iK20uZGlyXTtuPW0obixwKTtpZigwIT09bilyZXR1cm4gbn1uPWNbYV07cD1jW2JdO3JldHVybiBuPHA/LTE6bj5wPzE6MH0pfWEuYlNvcnRlZD0hMH1mdW5jdGlvbiBOYihhKXt2YXIgYj1hLmFvQ29sdW1ucyxjPVkoYSk7YT1hLm9MYW5ndWFnZS5vQXJpYTtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2Q8ZTtkKyspe3ZhciBoPWJbZF07dmFyIGc9aC5hc1NvcnRpbmc7dmFyIGs9aC5zVGl0bGUucmVwbGFjZSgvPC4qPz4vZywiIik7dmFyIGY9aC5uVGg7Zi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtc29ydCIpOwpoLmJTb3J0YWJsZSYmKDA8Yy5sZW5ndGgmJmNbMF0uY29sPT1kPyhmLnNldEF0dHJpYnV0ZSgiYXJpYS1zb3J0IiwiYXNjIj09Y1swXS5kaXI/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmciKSxoPWdbY1swXS5pbmRleCsxXXx8Z1swXSk6aD1nWzBdLGsrPSJhc2MiPT09aD9hLnNTb3J0QXNjZW5kaW5nOmEuc1NvcnREZXNjZW5kaW5nKTtmLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsayl9fWZ1bmN0aW9uIFphKGEsYixjLGQpe3ZhciBlPWEuYWFTb3J0aW5nLGg9YS5hb0NvbHVtbnNbYl0uYXNTb3J0aW5nLGc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLl9pZHg7Yz09PXAmJihjPWYuaW5BcnJheShhWzFdLGgpKTtyZXR1cm4gYysxPGgubGVuZ3RoP2MrMTpiP251bGw6MH07Im51bWJlciI9PT10eXBlb2YgZVswXSYmKGU9YS5hYVNvcnRpbmc9W2VdKTtjJiZhLm9GZWF0dXJlcy5iU29ydE11bHRpPyhjPWYuaW5BcnJheShiLEooZSwiMCIpKSwtMSE9PWM/KGI9ZyhlW2NdLCEwKSxudWxsPT09CmImJjE9PT1lLmxlbmd0aCYmKGI9MCksbnVsbD09PWI/ZS5zcGxpY2UoYywxKTooZVtjXVsxXT1oW2JdLGVbY10uX2lkeD1iKSk6KGUucHVzaChbYixoWzBdLDBdKSxlW2UubGVuZ3RoLTFdLl9pZHg9MCkpOmUubGVuZ3RoJiZlWzBdWzBdPT1iPyhiPWcoZVswXSksZS5sZW5ndGg9MSxlWzBdWzFdPWhbYl0sZVswXS5faWR4PWIpOihlLmxlbmd0aD0wLGUucHVzaChbYixoWzBdXSksZVswXS5faWR4PTApO1YoYSk7ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmQoYSl9ZnVuY3Rpb24gUWEoYSxiLGMsZCl7dmFyIGU9YS5hb0NvbHVtbnNbY107JGEoYix7fSxmdW5jdGlvbihiKXshMSE9PWUuYlNvcnRhYmxlJiYoYS5vRmVhdHVyZXMuYlByb2Nlc3Npbmc/KEsoYSwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe1phKGEsYyxiLnNoaWZ0S2V5LGQpOyJzc3AiIT09RChhKSYmSyhhLCExKX0sMCkpOlphKGEsYyxiLnNoaWZ0S2V5LGQpKX0pfWZ1bmN0aW9uIEFhKGEpe3ZhciBiPWEuYUxhc3RTb3J0LApjPWEub0NsYXNzZXMuc1NvcnRDb2x1bW4sZD1ZKGEpLGU9YS5vRmVhdHVyZXMsaDtpZihlLmJTb3J0JiZlLmJTb3J0Q2xhc3Nlcyl7ZT0wO2ZvcihoPWIubGVuZ3RoO2U8aDtlKyspe3ZhciBnPWJbZV0uc3JjO2YoSihhLmFvRGF0YSwiYW5DZWxscyIsZykpLnJlbW92ZUNsYXNzKGMrKDI+ZT9lKzE6MykpfWU9MDtmb3IoaD1kLmxlbmd0aDtlPGg7ZSsrKWc9ZFtlXS5zcmMsZihKKGEuYW9EYXRhLCJhbkNlbGxzIixnKSkuYWRkQ2xhc3MoYysoMj5lP2UrMTozKSl9YS5hTGFzdFNvcnQ9ZH1mdW5jdGlvbiBNYihhLGIpe3ZhciBjPWEuYW9Db2x1bW5zW2JdLGQ9cS5leHQub3JkZXJbYy5zU29ydERhdGFUeXBlXSxlO2QmJihlPWQuY2FsbChhLm9JbnN0YW5jZSxhLGIsY2EoYSxiKSkpO2Zvcih2YXIgaCxnPXEuZXh0LnR5cGUub3JkZXJbYy5zVHlwZSsiLXByZSJdLGs9MCxmPWEuYW9EYXRhLmxlbmd0aDtrPGY7aysrKWlmKGM9YS5hb0RhdGFba10sYy5fYVNvcnREYXRhfHwoYy5fYVNvcnREYXRhPQpbXSksIWMuX2FTb3J0RGF0YVtiXXx8ZCloPWQ/ZVtrXTpJKGEsayxiLCJzb3J0IiksYy5fYVNvcnREYXRhW2JdPWc/ZyhoKTpofWZ1bmN0aW9uIEJhKGEpe2lmKGEub0ZlYXR1cmVzLmJTdGF0ZVNhdmUmJiFhLmJEZXN0cm95aW5nKXt2YXIgYj17dGltZTorbmV3IERhdGUsc3RhcnQ6YS5faURpc3BsYXlTdGFydCxsZW5ndGg6YS5faURpc3BsYXlMZW5ndGgsb3JkZXI6Zi5leHRlbmQoITAsW10sYS5hYVNvcnRpbmcpLHNlYXJjaDpGYihhLm9QcmV2aW91c1NlYXJjaCksY29sdW1uczpmLm1hcChhLmFvQ29sdW1ucyxmdW5jdGlvbihiLGQpe3JldHVybnt2aXNpYmxlOmIuYlZpc2libGUsc2VhcmNoOkZiKGEuYW9QcmVTZWFyY2hDb2xzW2RdKX19KX07QShhLCJhb1N0YXRlU2F2ZVBhcmFtcyIsInN0YXRlU2F2ZVBhcmFtcyIsW2EsYl0pO2Eub1NhdmVkU3RhdGU9YjthLmZuU3RhdGVTYXZlQ2FsbGJhY2suY2FsbChhLm9JbnN0YW5jZSxhLGIpfX1mdW5jdGlvbiBPYihhLGIsYyl7dmFyIGQsCmUsaD1hLmFvQ29sdW1ucztiPWZ1bmN0aW9uKGIpe2lmKGImJmIudGltZSl7dmFyIGc9QShhLCJhb1N0YXRlTG9hZFBhcmFtcyIsInN0YXRlTG9hZFBhcmFtcyIsW2EsYl0pO2lmKC0xPT09Zi5pbkFycmF5KCExLGcpJiYoZz1hLmlTdGF0ZUR1cmF0aW9uLCEoMDxnJiZiLnRpbWU8K25ldyBEYXRlLTFFMypnfHxiLmNvbHVtbnMmJmgubGVuZ3RoIT09Yi5jb2x1bW5zLmxlbmd0aCkpKXthLm9Mb2FkZWRTdGF0ZT1mLmV4dGVuZCghMCx7fSxiKTtiLnN0YXJ0IT09cCYmKGEuX2lEaXNwbGF5U3RhcnQ9Yi5zdGFydCxhLmlJbml0RGlzcGxheVN0YXJ0PWIuc3RhcnQpO2IubGVuZ3RoIT09cCYmKGEuX2lEaXNwbGF5TGVuZ3RoPWIubGVuZ3RoKTtiLm9yZGVyIT09cCYmKGEuYWFTb3J0aW5nPVtdLGYuZWFjaChiLm9yZGVyLGZ1bmN0aW9uKGIsYyl7YS5hYVNvcnRpbmcucHVzaChjWzBdPj1oLmxlbmd0aD9bMCxjWzFdXTpjKX0pKTtiLnNlYXJjaCE9PXAmJmYuZXh0ZW5kKGEub1ByZXZpb3VzU2VhcmNoLApHYihiLnNlYXJjaCkpO2lmKGIuY29sdW1ucylmb3IoZD0wLGU9Yi5jb2x1bW5zLmxlbmd0aDtkPGU7ZCsrKWc9Yi5jb2x1bW5zW2RdLGcudmlzaWJsZSE9PXAmJihoW2RdLmJWaXNpYmxlPWcudmlzaWJsZSksZy5zZWFyY2ghPT1wJiZmLmV4dGVuZChhLmFvUHJlU2VhcmNoQ29sc1tkXSxHYihnLnNlYXJjaCkpO0EoYSwiYW9TdGF0ZUxvYWRlZCIsInN0YXRlTG9hZGVkIixbYSxiXSl9fWMoKX07aWYoYS5vRmVhdHVyZXMuYlN0YXRlU2F2ZSl7dmFyIGc9YS5mblN0YXRlTG9hZENhbGxiYWNrLmNhbGwoYS5vSW5zdGFuY2UsYSxiKTtnIT09cCYmYihnKX1lbHNlIGMoKX1mdW5jdGlvbiBDYShhKXt2YXIgYj1xLnNldHRpbmdzO2E9Zi5pbkFycmF5KGEsSihiLCJuVGFibGUiKSk7cmV0dXJuLTEhPT1hP2JbYV06bnVsbH1mdW5jdGlvbiBPKGEsYixjLGQpe2M9IkRhdGFUYWJsZXMgd2FybmluZzogIisoYT8idGFibGUgaWQ9IithLnNUYWJsZUlkKyIgLSAiOiIiKStjO2QmJihjKz0iLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGVycm9yLCBwbGVhc2Ugc2VlIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC90bi8iKwpkKTtpZihiKXouY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGMpO2Vsc2UgaWYoYj1xLmV4dCxiPWIuc0Vyck1vZGV8fGIuZXJyTW9kZSxhJiZBKGEsbnVsbCwiZXJyb3IiLFthLGQsY10pLCJhbGVydCI9PWIpYWxlcnQoYyk7ZWxzZXtpZigidGhyb3ciPT1iKXRocm93IEVycm9yKGMpOyJmdW5jdGlvbiI9PXR5cGVvZiBiJiZiKGEsZCxjKX19ZnVuY3Rpb24gTShhLGIsYyxkKXtmLmlzQXJyYXkoYyk/Zi5lYWNoKGMsZnVuY3Rpb24oYyxkKXtmLmlzQXJyYXkoZCk/TShhLGIsZFswXSxkWzFdKTpNKGEsYixkKX0pOihkPT09cCYmKGQ9YyksYltjXSE9PXAmJihhW2RdPWJbY10pKX1mdW5jdGlvbiBhYihhLGIsYyl7dmFyIGQ7Zm9yKGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpKXt2YXIgZT1iW2RdO2YuaXNQbGFpbk9iamVjdChlKT8oZi5pc1BsYWluT2JqZWN0KGFbZF0pfHwoYVtkXT17fSksZi5leHRlbmQoITAsYVtkXSxlKSk6YyYmImRhdGEiIT09ZCYmImFhRGF0YSIhPT0KZCYmZi5pc0FycmF5KGUpP2FbZF09ZS5zbGljZSgpOmFbZF09ZX1yZXR1cm4gYX1mdW5jdGlvbiAkYShhLGIsYyl7ZihhKS5vbigiY2xpY2suRFQiLGIsZnVuY3Rpb24oYil7ZihhKS5ibHVyKCk7YyhiKX0pLm9uKCJrZXlwcmVzcy5EVCIsYixmdW5jdGlvbihhKXsxMz09PWEud2hpY2gmJihhLnByZXZlbnREZWZhdWx0KCksYyhhKSl9KS5vbigic2VsZWN0c3RhcnQuRFQiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KX1mdW5jdGlvbiBFKGEsYixjLGQpe2MmJmFbYl0ucHVzaCh7Zm46YyxzTmFtZTpkfSl9ZnVuY3Rpb24gQShhLGIsYyxkKXt2YXIgZT1bXTtiJiYoZT1mLm1hcChhW2JdLnNsaWNlKCkucmV2ZXJzZSgpLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGIuZm4uYXBwbHkoYS5vSW5zdGFuY2UsZCl9KSk7bnVsbCE9PWMmJihiPWYuRXZlbnQoYysiLmR0IiksZihhLm5UYWJsZSkudHJpZ2dlcihiLGQpLGUucHVzaChiLnJlc3VsdCkpO3JldHVybiBlfWZ1bmN0aW9uIFdhKGEpe3ZhciBiPWEuX2lEaXNwbGF5U3RhcnQsCmM9YS5mbkRpc3BsYXlFbmQoKSxkPWEuX2lEaXNwbGF5TGVuZ3RoO2I+PWMmJihiPWMtZCk7Yi09YiVkO2lmKC0xPT09ZHx8MD5iKWI9MDthLl9pRGlzcGxheVN0YXJ0PWJ9ZnVuY3Rpb24gUmEoYSxiKXthPWEucmVuZGVyZXI7dmFyIGM9cS5leHQucmVuZGVyZXJbYl07cmV0dXJuIGYuaXNQbGFpbk9iamVjdChhKSYmYVtiXT9jW2FbYl1dfHxjLl86InN0cmluZyI9PT10eXBlb2YgYT9jW2FdfHxjLl86Yy5ffWZ1bmN0aW9uIEQoYSl7cmV0dXJuIGEub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlPyJzc3AiOmEuYWpheHx8YS5zQWpheFNvdXJjZT8iYWpheCI6ImRvbSJ9ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1QYi5udW1iZXJzX2xlbmd0aCxkPU1hdGguZmxvb3IoYy8yKTtiPD1jP2E9WigwLGIpOmE8PWQ/KGE9WigwLGMtMiksYS5wdXNoKCJlbGxpcHNpcyIpLGEucHVzaChiLTEpKTooYT49Yi0xLWQ/YT1aKGItKGMtMiksYik6KGE9WihhLWQrMixhK2QtMSksYS5wdXNoKCJlbGxpcHNpcyIpLAphLnB1c2goYi0xKSksYS5zcGxpY2UoMCwwLCJlbGxpcHNpcyIpLGEuc3BsaWNlKDAsMCwwKSk7YS5EVF9lbD0ic3BhbiI7cmV0dXJuIGF9ZnVuY3Rpb24gSGEoYSl7Zi5lYWNoKHtudW06ZnVuY3Rpb24oYil7cmV0dXJuIERhKGIsYSl9LCJudW0tZm10IjpmdW5jdGlvbihiKXtyZXR1cm4gRGEoYixhLGJiKX0sImh0bWwtbnVtIjpmdW5jdGlvbihiKXtyZXR1cm4gRGEoYixhLEVhKX0sImh0bWwtbnVtLWZtdCI6ZnVuY3Rpb24oYil7cmV0dXJuIERhKGIsYSxFYSxiYil9fSxmdW5jdGlvbihiLGMpe0MudHlwZS5vcmRlcltiK2ErIi1wcmUiXT1jO2IubWF0Y2goL15odG1sXC0vKSYmKEMudHlwZS5zZWFyY2hbYithXT1DLnR5cGUuc2VhcmNoLmh0bWwpfSl9ZnVuY3Rpb24gUWIoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9W0NhKHRoaXNbcS5leHQuaUFwaUluZGV4XSldLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gcS5leHQuaW50ZXJuYWxbYV0uYXBwbHkodGhpcywKYil9fXZhciBxPWZ1bmN0aW9uKGEpe3RoaXMuJD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmFwaSghMCkuJChhLGIpfTt0aGlzLl89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvd3MoYSxiKS5kYXRhKCl9O3RoaXMuYXBpPWZ1bmN0aW9uKGEpe3JldHVybiBhP25ldyB2KENhKHRoaXNbQy5pQXBpSW5kZXhdKSk6bmV3IHYodGhpcyl9O3RoaXMuZm5BZGREYXRhPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hcGkoITApO2E9Zi5pc0FycmF5KGEpJiYoZi5pc0FycmF5KGFbMF0pfHxmLmlzUGxhaW5PYmplY3QoYVswXSkpP2Mucm93cy5hZGQoYSk6Yy5yb3cuYWRkKGEpOyhiPT09cHx8YikmJmMuZHJhdygpO3JldHVybiBhLmZsYXR0ZW4oKS50b0FycmF5KCl9O3RoaXMuZm5BZGp1c3RDb2x1bW5TaXppbmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcGkoITApLmNvbHVtbnMuYWRqdXN0KCksYz1iLnNldHRpbmdzKClbMF0sZD1jLm9TY3JvbGw7YT09PXB8fGE/Yi5kcmF3KCExKToKKCIiIT09ZC5zWHx8IiIhPT1kLnNZKSYmbmEoYyl9O3RoaXMuZm5DbGVhclRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYXBpKCEwKS5jbGVhcigpOyhhPT09cHx8YSkmJmIuZHJhdygpfTt0aGlzLmZuQ2xvc2U9ZnVuY3Rpb24oYSl7dGhpcy5hcGkoITApLnJvdyhhKS5jaGlsZC5oaWRlKCl9O3RoaXMuZm5EZWxldGVSb3c9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuYXBpKCEwKTthPWQucm93cyhhKTt2YXIgZT1hLnNldHRpbmdzKClbMF0saD1lLmFvRGF0YVthWzBdWzBdXTthLnJlbW92ZSgpO2ImJmIuY2FsbCh0aGlzLGUsaCk7KGM9PT1wfHxjKSYmZC5kcmF3KCk7cmV0dXJuIGh9O3RoaXMuZm5EZXN0cm95PWZ1bmN0aW9uKGEpe3RoaXMuYXBpKCEwKS5kZXN0cm95KGEpfTt0aGlzLmZuRHJhdz1mdW5jdGlvbihhKXt0aGlzLmFwaSghMCkuZHJhdyhhKX07dGhpcy5mbkZpbHRlcj1mdW5jdGlvbihhLGIsYyxkLGUsZil7ZT10aGlzLmFwaSghMCk7bnVsbD09PWJ8fGI9PT1wPwplLnNlYXJjaChhLGMsZCxmKTplLmNvbHVtbihiKS5zZWFyY2goYSxjLGQsZik7ZS5kcmF3KCl9O3RoaXMuZm5HZXREYXRhPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hcGkoITApO2lmKGEhPT1wKXt2YXIgZD1hLm5vZGVOYW1lP2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKToiIjtyZXR1cm4gYiE9PXB8fCJ0ZCI9PWR8fCJ0aCI9PWQ/Yy5jZWxsKGEsYikuZGF0YSgpOmMucm93KGEpLmRhdGEoKXx8bnVsbH1yZXR1cm4gYy5kYXRhKCkudG9BcnJheSgpfTt0aGlzLmZuR2V0Tm9kZXM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcGkoITApO3JldHVybiBhIT09cD9iLnJvdyhhKS5ub2RlKCk6Yi5yb3dzKCkubm9kZXMoKS5mbGF0dGVuKCkudG9BcnJheSgpfTt0aGlzLmZuR2V0UG9zaXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcGkoITApLGM9YS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO3JldHVybiJUUiI9PWM/Yi5yb3coYSkuaW5kZXgoKToiVEQiPT1jfHwiVEgiPT1jPyhhPWIuY2VsbChhKS5pbmRleCgpLApbYS5yb3csYS5jb2x1bW5WaXNpYmxlLGEuY29sdW1uXSk6bnVsbH07dGhpcy5mbklzT3Blbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvdyhhKS5jaGlsZC5pc1Nob3duKCl9O3RoaXMuZm5PcGVuPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvdyhhKS5jaGlsZChiLGMpLnNob3coKS5jaGlsZCgpWzBdfTt0aGlzLmZuUGFnZUNoYW5nZT1mdW5jdGlvbihhLGIpe2E9dGhpcy5hcGkoITApLnBhZ2UoYSk7KGI9PT1wfHxiKSYmYS5kcmF3KCExKX07dGhpcy5mblNldENvbHVtblZpcz1mdW5jdGlvbihhLGIsYyl7YT10aGlzLmFwaSghMCkuY29sdW1uKGEpLnZpc2libGUoYik7KGM9PT1wfHxjKSYmYS5jb2x1bW5zLmFkanVzdCgpLmRyYXcoKX07dGhpcy5mblNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIENhKHRoaXNbQy5pQXBpSW5kZXhdKX07dGhpcy5mblNvcnQ9ZnVuY3Rpb24oYSl7dGhpcy5hcGkoITApLm9yZGVyKGEpLmRyYXcoKX07dGhpcy5mblNvcnRMaXN0ZW5lcj0KZnVuY3Rpb24oYSxiLGMpe3RoaXMuYXBpKCEwKS5vcmRlci5saXN0ZW5lcihhLGIsYyl9O3RoaXMuZm5VcGRhdGU9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgaD10aGlzLmFwaSghMCk7Yz09PXB8fG51bGw9PT1jP2gucm93KGIpLmRhdGEoYSk6aC5jZWxsKGIsYykuZGF0YShhKTsoZT09PXB8fGUpJiZoLmNvbHVtbnMuYWRqdXN0KCk7KGQ9PT1wfHxkKSYmaC5kcmF3KCk7cmV0dXJuIDB9O3RoaXMuZm5WZXJzaW9uQ2hlY2s9Qy5mblZlcnNpb25DaGVjazt2YXIgYj10aGlzLGM9YT09PXAsZD10aGlzLmxlbmd0aDtjJiYoYT17fSk7dGhpcy5vQXBpPXRoaXMuaW50ZXJuYWw9Qy5pbnRlcm5hbDtmb3IodmFyIGUgaW4gcS5leHQuaW50ZXJuYWwpZSYmKHRoaXNbZV09UWIoZSkpO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPXt9LGc9MTxkP2FiKGUsYSwhMCk6YSxrPTAsbDtlPXRoaXMuZ2V0QXR0cmlidXRlKCJpZCIpO3ZhciBuPSExLG09cS5kZWZhdWx0cyx3PWYodGhpcyk7aWYoInRhYmxlIiE9CnRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlPKG51bGwsMCwiTm9uLXRhYmxlIG5vZGUgaW5pdGlhbGlzYXRpb24gKCIrdGhpcy5ub2RlTmFtZSsiKSIsMik7ZWxzZXtqYihtKTtrYihtLmNvbHVtbik7TChtLG0sITApO0wobS5jb2x1bW4sbS5jb2x1bW4sITApO0wobSxmLmV4dGVuZChnLHcuZGF0YSgpKSwhMCk7dmFyIHU9cS5zZXR0aW5ncztrPTA7Zm9yKGw9dS5sZW5ndGg7azxsO2srKyl7dmFyIHQ9dVtrXTtpZih0Lm5UYWJsZT09dGhpc3x8dC5uVEhlYWQmJnQublRIZWFkLnBhcmVudE5vZGU9PXRoaXN8fHQublRGb290JiZ0Lm5URm9vdC5wYXJlbnROb2RlPT10aGlzKXt2YXIgdj1nLmJSZXRyaWV2ZSE9PXA/Zy5iUmV0cmlldmU6bS5iUmV0cmlldmU7aWYoY3x8dilyZXR1cm4gdC5vSW5zdGFuY2U7aWYoZy5iRGVzdHJveSE9PXA/Zy5iRGVzdHJveTptLmJEZXN0cm95KXt0Lm9JbnN0YW5jZS5mbkRlc3Ryb3koKTticmVha31lbHNle08odCwwLCJDYW5ub3QgcmVpbml0aWFsaXNlIERhdGFUYWJsZSIsCjMpO3JldHVybn19aWYodC5zVGFibGVJZD09dGhpcy5pZCl7dS5zcGxpY2UoaywxKTticmVha319aWYobnVsbD09PWV8fCIiPT09ZSl0aGlzLmlkPWU9IkRhdGFUYWJsZXNfVGFibGVfIitxLmV4dC5fdW5pcXVlKys7dmFyIHI9Zi5leHRlbmQoITAse30scS5tb2RlbHMub1NldHRpbmdzLHtzRGVzdHJveVdpZHRoOndbMF0uc3R5bGUud2lkdGgsc0luc3RhbmNlOmUsc1RhYmxlSWQ6ZX0pO3IublRhYmxlPXRoaXM7ci5vQXBpPWIuaW50ZXJuYWw7ci5vSW5pdD1nO3UucHVzaChyKTtyLm9JbnN0YW5jZT0xPT09Yi5sZW5ndGg/Yjp3LmRhdGFUYWJsZSgpO2piKGcpO0dhKGcub0xhbmd1YWdlKTtnLmFMZW5ndGhNZW51JiYhZy5pRGlzcGxheUxlbmd0aCYmKGcuaURpc3BsYXlMZW5ndGg9Zi5pc0FycmF5KGcuYUxlbmd0aE1lbnVbMF0pP2cuYUxlbmd0aE1lbnVbMF1bMF06Zy5hTGVuZ3RoTWVudVswXSk7Zz1hYihmLmV4dGVuZCghMCx7fSxtKSxnKTtNKHIub0ZlYXR1cmVzLGcsImJQYWdpbmF0ZSBiTGVuZ3RoQ2hhbmdlIGJGaWx0ZXIgYlNvcnQgYlNvcnRNdWx0aSBiSW5mbyBiUHJvY2Vzc2luZyBiQXV0b1dpZHRoIGJTb3J0Q2xhc3NlcyBiU2VydmVyU2lkZSBiRGVmZXJSZW5kZXIiLnNwbGl0KCIgIikpOwpNKHIsZyxbImFzU3RyaXBlQ2xhc3NlcyIsImFqYXgiLCJmblNlcnZlckRhdGEiLCJmbkZvcm1hdE51bWJlciIsInNTZXJ2ZXJNZXRob2QiLCJhYVNvcnRpbmciLCJhYVNvcnRpbmdGaXhlZCIsImFMZW5ndGhNZW51Iiwic1BhZ2luYXRpb25UeXBlIiwic0FqYXhTb3VyY2UiLCJzQWpheERhdGFQcm9wIiwiaVN0YXRlRHVyYXRpb24iLCJzRG9tIiwiYlNvcnRDZWxsc1RvcCIsImlUYWJJbmRleCIsImZuU3RhdGVMb2FkQ2FsbGJhY2siLCJmblN0YXRlU2F2ZUNhbGxiYWNrIiwicmVuZGVyZXIiLCJzZWFyY2hEZWxheSIsInJvd0lkIixbImlDb29raWVEdXJhdGlvbiIsImlTdGF0ZUR1cmF0aW9uIl0sWyJvU2VhcmNoIiwib1ByZXZpb3VzU2VhcmNoIl0sWyJhb1NlYXJjaENvbHMiLCJhb1ByZVNlYXJjaENvbHMiXSxbImlEaXNwbGF5TGVuZ3RoIiwiX2lEaXNwbGF5TGVuZ3RoIl1dKTtNKHIub1Njcm9sbCxnLFtbInNTY3JvbGxYIiwic1giXSxbInNTY3JvbGxYSW5uZXIiLCJzWElubmVyIl0sClsic1Njcm9sbFkiLCJzWSJdLFsiYlNjcm9sbENvbGxhcHNlIiwiYkNvbGxhcHNlIl1dKTtNKHIub0xhbmd1YWdlLGcsImZuSW5mb0NhbGxiYWNrIik7RShyLCJhb0RyYXdDYWxsYmFjayIsZy5mbkRyYXdDYWxsYmFjaywidXNlciIpO0UociwiYW9TZXJ2ZXJQYXJhbXMiLGcuZm5TZXJ2ZXJQYXJhbXMsInVzZXIiKTtFKHIsImFvU3RhdGVTYXZlUGFyYW1zIixnLmZuU3RhdGVTYXZlUGFyYW1zLCJ1c2VyIik7RShyLCJhb1N0YXRlTG9hZFBhcmFtcyIsZy5mblN0YXRlTG9hZFBhcmFtcywidXNlciIpO0UociwiYW9TdGF0ZUxvYWRlZCIsZy5mblN0YXRlTG9hZGVkLCJ1c2VyIik7RShyLCJhb1Jvd0NhbGxiYWNrIixnLmZuUm93Q2FsbGJhY2ssInVzZXIiKTtFKHIsImFvUm93Q3JlYXRlZENhbGxiYWNrIixnLmZuQ3JlYXRlZFJvdywidXNlciIpO0UociwiYW9IZWFkZXJDYWxsYmFjayIsZy5mbkhlYWRlckNhbGxiYWNrLCJ1c2VyIik7RShyLCJhb0Zvb3RlckNhbGxiYWNrIixnLmZuRm9vdGVyQ2FsbGJhY2ssCiJ1c2VyIik7RShyLCJhb0luaXRDb21wbGV0ZSIsZy5mbkluaXRDb21wbGV0ZSwidXNlciIpO0UociwiYW9QcmVEcmF3Q2FsbGJhY2siLGcuZm5QcmVEcmF3Q2FsbGJhY2ssInVzZXIiKTtyLnJvd0lkRm49VShnLnJvd0lkKTtsYihyKTt2YXIgeD1yLm9DbGFzc2VzO2YuZXh0ZW5kKHgscS5leHQuY2xhc3NlcyxnLm9DbGFzc2VzKTt3LmFkZENsYXNzKHguc1RhYmxlKTtyLmlJbml0RGlzcGxheVN0YXJ0PT09cCYmKHIuaUluaXREaXNwbGF5U3RhcnQ9Zy5pRGlzcGxheVN0YXJ0LHIuX2lEaXNwbGF5U3RhcnQ9Zy5pRGlzcGxheVN0YXJ0KTtudWxsIT09Zy5pRGVmZXJMb2FkaW5nJiYoci5iRGVmZXJMb2FkaW5nPSEwLGU9Zi5pc0FycmF5KGcuaURlZmVyTG9hZGluZyksci5faVJlY29yZHNEaXNwbGF5PWU/Zy5pRGVmZXJMb2FkaW5nWzBdOmcuaURlZmVyTG9hZGluZyxyLl9pUmVjb3Jkc1RvdGFsPWU/Zy5pRGVmZXJMb2FkaW5nWzFdOmcuaURlZmVyTG9hZGluZyk7dmFyIHk9ci5vTGFuZ3VhZ2U7CmYuZXh0ZW5kKCEwLHksZy5vTGFuZ3VhZ2UpO3kuc1VybCYmKGYuYWpheCh7ZGF0YVR5cGU6Impzb24iLHVybDp5LnNVcmwsc3VjY2VzczpmdW5jdGlvbihhKXtHYShhKTtMKG0ub0xhbmd1YWdlLGEpO2YuZXh0ZW5kKCEwLHksYSk7amEocil9LGVycm9yOmZ1bmN0aW9uKCl7amEocil9fSksbj0hMCk7bnVsbD09PWcuYXNTdHJpcGVDbGFzc2VzJiYoci5hc1N0cmlwZUNsYXNzZXM9W3guc1N0cmlwZU9kZCx4LnNTdHJpcGVFdmVuXSk7ZT1yLmFzU3RyaXBlQ2xhc3Nlczt2YXIgej13LmNoaWxkcmVuKCJ0Ym9keSIpLmZpbmQoInRyIikuZXEoMCk7LTEhPT1mLmluQXJyYXkoITAsZi5tYXAoZSxmdW5jdGlvbihhLGIpe3JldHVybiB6Lmhhc0NsYXNzKGEpfSkpJiYoZigidGJvZHkgdHIiLHRoaXMpLnJlbW92ZUNsYXNzKGUuam9pbigiICIpKSxyLmFzRGVzdHJveVN0cmlwZXM9ZS5zbGljZSgpKTtlPVtdO3U9dGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKTswIT09dS5sZW5ndGgmJgooZmEoci5hb0hlYWRlcix1WzBdKSxlPXVhKHIpKTtpZihudWxsPT09Zy5hb0NvbHVtbnMpZm9yKHU9W10saz0wLGw9ZS5sZW5ndGg7azxsO2srKyl1LnB1c2gobnVsbCk7ZWxzZSB1PWcuYW9Db2x1bW5zO2s9MDtmb3IobD11Lmxlbmd0aDtrPGw7aysrKUlhKHIsZT9lW2tdOm51bGwpO25iKHIsZy5hb0NvbHVtbkRlZnMsdSxmdW5jdGlvbihhLGIpe21hKHIsYSxiKX0pO2lmKHoubGVuZ3RoKXt2YXIgQj1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT09YS5nZXRBdHRyaWJ1dGUoImRhdGEtIitiKT9iOm51bGx9O2YoelswXSkuY2hpbGRyZW4oInRoLCB0ZCIpLmVhY2goZnVuY3Rpb24oYSxiKXt2YXIgYz1yLmFvQ29sdW1uc1thXTtpZihjLm1EYXRhPT09YSl7dmFyIGQ9QihiLCJzb3J0Iil8fEIoYiwib3JkZXIiKTtiPUIoYiwiZmlsdGVyIil8fEIoYiwic2VhcmNoIik7aWYobnVsbCE9PWR8fG51bGwhPT1iKWMubURhdGE9e186YSsiLmRpc3BsYXkiLHNvcnQ6bnVsbCE9PWQ/YSsiLkBkYXRhLSIrCmQ6cCx0eXBlOm51bGwhPT1kP2ErIi5AZGF0YS0iK2Q6cCxmaWx0ZXI6bnVsbCE9PWI/YSsiLkBkYXRhLSIrYjpwfSxtYShyLGEpfX0pfXZhciBDPXIub0ZlYXR1cmVzO2U9ZnVuY3Rpb24oKXtpZihnLmFhU29ydGluZz09PXApe3ZhciBhPXIuYWFTb3J0aW5nO2s9MDtmb3IobD1hLmxlbmd0aDtrPGw7aysrKWFba11bMV09ci5hb0NvbHVtbnNba10uYXNTb3J0aW5nWzBdfUFhKHIpO0MuYlNvcnQmJkUociwiYW9EcmF3Q2FsbGJhY2siLGZ1bmN0aW9uKCl7aWYoci5iU29ydGVkKXt2YXIgYT1ZKHIpLGI9e307Zi5lYWNoKGEsZnVuY3Rpb24oYSxjKXtiW2Muc3JjXT1jLmRpcn0pO0EocixudWxsLCJvcmRlciIsW3IsYSxiXSk7TmIocil9fSk7RShyLCJhb0RyYXdDYWxsYmFjayIsZnVuY3Rpb24oKXsoci5iU29ydGVkfHwic3NwIj09PUQocil8fEMuYkRlZmVyUmVuZGVyKSYmQWEocil9LCJzYyIpO2E9dy5jaGlsZHJlbigiY2FwdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9jYXB0aW9uU2lkZT0KZih0aGlzKS5jc3MoImNhcHRpb24tc2lkZSIpfSk7dmFyIGI9dy5jaGlsZHJlbigidGhlYWQiKTswPT09Yi5sZW5ndGgmJihiPWYoIjx0aGVhZC8+IikuYXBwZW5kVG8odykpO3IublRIZWFkPWJbMF07Yj13LmNoaWxkcmVuKCJ0Ym9keSIpOzA9PT1iLmxlbmd0aCYmKGI9ZigiPHRib2R5Lz4iKS5hcHBlbmRUbyh3KSk7ci5uVEJvZHk9YlswXTtiPXcuY2hpbGRyZW4oInRmb290Iik7MD09PWIubGVuZ3RoJiYwPGEubGVuZ3RoJiYoIiIhPT1yLm9TY3JvbGwuc1h8fCIiIT09ci5vU2Nyb2xsLnNZKSYmKGI9ZigiPHRmb290Lz4iKS5hcHBlbmRUbyh3KSk7MD09PWIubGVuZ3RofHwwPT09Yi5jaGlsZHJlbigpLmxlbmd0aD93LmFkZENsYXNzKHguc05vRm9vdGVyKTowPGIubGVuZ3RoJiYoci5uVEZvb3Q9YlswXSxmYShyLmFvRm9vdGVyLHIublRGb290KSk7aWYoZy5hYURhdGEpZm9yKGs9MDtrPGcuYWFEYXRhLmxlbmd0aDtrKyspUihyLGcuYWFEYXRhW2tdKTtlbHNlKHIuYkRlZmVyTG9hZGluZ3x8CiJkb20iPT1EKHIpKSYmcGEocixmKHIublRCb2R5KS5jaGlsZHJlbigidHIiKSk7ci5haURpc3BsYXk9ci5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTtyLmJJbml0aWFsaXNlZD0hMDshMT09PW4mJmphKHIpfTtnLmJTdGF0ZVNhdmU/KEMuYlN0YXRlU2F2ZT0hMCxFKHIsImFvRHJhd0NhbGxiYWNrIixCYSwic3RhdGVfc2F2ZSIpLE9iKHIsZyxlKSk6ZSgpfX0pO2I9bnVsbDtyZXR1cm4gdGhpc30sQyx0LHgsY2I9e30sUmI9L1tcclxuXHUyMDI4XS9nLEVhPS88Lio/Pi9nLGNjPS9eXGR7Miw0fVtcLlwvXC1dXGR7MSwyfVtcLlwvXC1dXGR7MSwyfShbVCBdezF9XGR7MSwyfVs6XC5dXGR7Mn0oW1wuOl1cZHsyfSk/KT8kLyxkYz0vKFwvfFwufFwqfFwrfFw/fFx8fFwofFwpfFxbfFxdfFx7fFx9fFxcfFwkfFxefFwtKS9nLGJiPS9bJywkwqPigqzCpSVcdTIwMDlcdTIwMkZcdTIwQkRcdTIwYTlcdTIwQkFyZmvJg86eXS9naSxQPWZ1bmN0aW9uKGEpe3JldHVybiBhJiYhMCE9PWEmJiItIiE9PWE/ITE6CiEwfSxTYj1mdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChhLDEwKTtyZXR1cm4haXNOYU4oYikmJmlzRmluaXRlKGEpP2I6bnVsbH0sVGI9ZnVuY3Rpb24oYSxiKXtjYltiXXx8KGNiW2JdPW5ldyBSZWdFeHAoVWEoYiksImciKSk7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgYSYmIi4iIT09Yj9hLnJlcGxhY2UoL1wuL2csIiIpLnJlcGxhY2UoY2JbYl0sIi4iKTphfSxkYj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9InN0cmluZyI9PT10eXBlb2YgYTtpZihQKGEpKXJldHVybiEwO2ImJmQmJihhPVRiKGEsYikpO2MmJmQmJihhPWEucmVwbGFjZShiYiwiIikpO3JldHVybiFpc05hTihwYXJzZUZsb2F0KGEpKSYmaXNGaW5pdGUoYSl9LFViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUChhKT8hMDpQKGEpfHwic3RyaW5nIj09PXR5cGVvZiBhP2RiKGEucmVwbGFjZShFYSwiIiksYixjKT8hMDpudWxsOm51bGx9LEo9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9MCxoPWEubGVuZ3RoO2lmKGMhPT0KcClmb3IoO2U8aDtlKyspYVtlXSYmYVtlXVtiXSYmZC5wdXNoKGFbZV1bYl1bY10pO2Vsc2UgZm9yKDtlPGg7ZSsrKWFbZV0mJmQucHVzaChhW2VdW2JdKTtyZXR1cm4gZH0sbGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9W10saD0wLGc9Yi5sZW5ndGg7aWYoZCE9PXApZm9yKDtoPGc7aCsrKWFbYltoXV1bY10mJmUucHVzaChhW2JbaF1dW2NdW2RdKTtlbHNlIGZvcig7aDxnO2grKyllLnB1c2goYVtiW2hdXVtjXSk7cmV0dXJuIGV9LFo9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihiPT09cCl7Yj0wO3ZhciBkPWF9ZWxzZSBkPWIsYj1hO2ZvcihhPWI7YTxkO2ErKyljLnB1c2goYSk7cmV0dXJuIGN9LFZiPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWFbY10mJmIucHVzaChhW2NdKTtyZXR1cm4gYn0sdGE9ZnVuY3Rpb24oYSl7YTp7aWYoISgyPmEubGVuZ3RoKSl7dmFyIGI9YS5zbGljZSgpLnNvcnQoKTtmb3IodmFyIGM9YlswXSxkPTEsCmU9Yi5sZW5ndGg7ZDxlO2QrKyl7aWYoYltkXT09PWMpe2I9ITE7YnJlYWsgYX1jPWJbZF19fWI9ITB9aWYoYilyZXR1cm4gYS5zbGljZSgpO2I9W107ZT1hLmxlbmd0aDt2YXIgaCxnPTA7ZD0wO2E6Zm9yKDtkPGU7ZCsrKXtjPWFbZF07Zm9yKGg9MDtoPGc7aCsrKWlmKGJbaF09PT1jKWNvbnRpbnVlIGE7Yi5wdXNoKGMpO2crK31yZXR1cm4gYn07cS51dGlsPXt0aHJvdHRsZTpmdW5jdGlvbihhLGIpe3ZhciBjPWIhPT1wP2I6MjAwLGQsZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLGc9K25ldyBEYXRlLGY9YXJndW1lbnRzO2QmJmc8ZCtjPyhjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZD1wO2EuYXBwbHkoYixmKX0sYykpOihkPWcsYS5hcHBseShiLGYpKX19LGVzY2FwZVJlZ2V4OmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZGMsIlxcJDEiKX19O3ZhciBGPWZ1bmN0aW9uKGEsYixjKXthW2JdIT09cCYmKGFbY109YVtiXSl9LGRhPS9cWy4qP1xdJC8sClg9L1woXCkkLyxVYT1xLnV0aWwuZXNjYXBlUmVnZXgseWE9ZigiPGRpdj4iKVswXSwkYj15YS50ZXh0Q29udGVudCE9PXAsYmM9LzwuKj8+L2csU2E9cS51dGlsLnRocm90dGxlLFdiPVtdLEc9QXJyYXkucHJvdG90eXBlLGVjPWZ1bmN0aW9uKGEpe3ZhciBiLGM9cS5zZXR0aW5ncyxkPWYubWFwKGMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5uVGFibGV9KTtpZihhKXtpZihhLm5UYWJsZSYmYS5vQXBpKXJldHVyblthXTtpZihhLm5vZGVOYW1lJiYidGFibGUiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXt2YXIgZT1mLmluQXJyYXkoYSxkKTtyZXR1cm4tMSE9PWU/W2NbZV1dOm51bGx9aWYoYSYmImZ1bmN0aW9uIj09PXR5cGVvZiBhLnNldHRpbmdzKXJldHVybiBhLnNldHRpbmdzKCkudG9BcnJheSgpOyJzdHJpbmciPT09dHlwZW9mIGE/Yj1mKGEpOmEgaW5zdGFuY2VvZiBmJiYoYj1hKX1lbHNlIHJldHVybltdO2lmKGIpcmV0dXJuIGIubWFwKGZ1bmN0aW9uKGEpe2U9Zi5pbkFycmF5KHRoaXMsCmQpO3JldHVybi0xIT09ZT9jW2VdOm51bGx9KS50b0FycmF5KCl9O3ZhciB2PWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KGEsYik7dmFyIGM9W10sZD1mdW5jdGlvbihhKXsoYT1lYyhhKSkmJmMucHVzaC5hcHBseShjLGEpfTtpZihmLmlzQXJyYXkoYSkpZm9yKHZhciBlPTAsaD1hLmxlbmd0aDtlPGg7ZSsrKWQoYVtlXSk7ZWxzZSBkKGEpO3RoaXMuY29udGV4dD10YShjKTtiJiZmLm1lcmdlKHRoaXMsYik7dGhpcy5zZWxlY3Rvcj17cm93czpudWxsLGNvbHM6bnVsbCxvcHRzOm51bGx9O3YuZXh0ZW5kKHRoaXMsdGhpcyxXYil9O3EuQXBpPXY7Zi5leHRlbmQodi5wcm90b3R5cGUse2FueTpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jb3VudCgpfSxjb25jYXQ6Ry5jb25jYXQsY29udGV4dDpbXSxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYXR0ZW4oKS5sZW5ndGh9LGVhY2g6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz0KdGhpcy5sZW5ndGg7YjxjO2IrKylhLmNhbGwodGhpcyx0aGlzW2JdLGIsdGhpcyk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29udGV4dDtyZXR1cm4gYi5sZW5ndGg+YT9uZXcgdihiW2FdLHRoaXNbYV0pOm51bGx9LGZpbHRlcjpmdW5jdGlvbihhKXt2YXIgYj1bXTtpZihHLmZpbHRlciliPUcuZmlsdGVyLmNhbGwodGhpcyxhLHRoaXMpO2Vsc2UgZm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWEuY2FsbCh0aGlzLHRoaXNbY10sYyx0aGlzKSYmYi5wdXNoKHRoaXNbY10pO3JldHVybiBuZXcgdih0aGlzLmNvbnRleHQsYil9LGZsYXR0ZW46ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LGEuY29uY2F0LmFwcGx5KGEsdGhpcy50b0FycmF5KCkpKX0sam9pbjpHLmpvaW4saW5kZXhPZjpHLmluZGV4T2Z8fGZ1bmN0aW9uKGEsYil7Yj1ifHwwO2Zvcih2YXIgYz10aGlzLmxlbmd0aDtiPGM7YisrKWlmKHRoaXNbYl09PT0KYSlyZXR1cm4gYjtyZXR1cm4tMX0saXRlcmF0b3I6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9W10saCxnLGY9dGhpcy5jb250ZXh0LGwsbj10aGlzLnNlbGVjdG9yOyJzdHJpbmciPT09dHlwZW9mIGEmJihkPWMsYz1iLGI9YSxhPSExKTt2YXIgbT0wO2ZvcihoPWYubGVuZ3RoO208aDttKyspe3ZhciBxPW5ldyB2KGZbbV0pO2lmKCJ0YWJsZSI9PT1iKXt2YXIgdT1jLmNhbGwocSxmW21dLG0pO3UhPT1wJiZlLnB1c2godSl9ZWxzZSBpZigiY29sdW1ucyI9PT1ifHwicm93cyI9PT1iKXU9Yy5jYWxsKHEsZlttXSx0aGlzW21dLG0pLHUhPT1wJiZlLnB1c2godSk7ZWxzZSBpZigiY29sdW1uIj09PWJ8fCJjb2x1bW4tcm93cyI9PT1ifHwicm93Ij09PWJ8fCJjZWxsIj09PWIpe3ZhciB0PXRoaXNbbV07ImNvbHVtbi1yb3dzIj09PWImJihsPUZhKGZbbV0sbi5vcHRzKSk7dmFyIHg9MDtmb3IoZz10Lmxlbmd0aDt4PGc7eCsrKXU9dFt4XSx1PSJjZWxsIj09PWI/Yy5jYWxsKHEsZlttXSx1LnJvdywKdS5jb2x1bW4sbSx4KTpjLmNhbGwocSxmW21dLHUsbSx4LGwpLHUhPT1wJiZlLnB1c2godSl9fXJldHVybiBlLmxlbmd0aHx8ZD8oYT1uZXcgdihmLGE/ZS5jb25jYXQuYXBwbHkoW10sZSk6ZSksYj1hLnNlbGVjdG9yLGIucm93cz1uLnJvd3MsYi5jb2xzPW4uY29scyxiLm9wdHM9bi5vcHRzLGEpOnRoaXN9LGxhc3RJbmRleE9mOkcubGFzdEluZGV4T2Z8fGZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuaW5kZXhPZi5hcHBseSh0aGlzLnRvQXJyYXkucmV2ZXJzZSgpLGFyZ3VtZW50cyl9LGxlbmd0aDowLG1hcDpmdW5jdGlvbihhKXt2YXIgYj1bXTtpZihHLm1hcCliPUcubWFwLmNhbGwodGhpcyxhLHRoaXMpO2Vsc2UgZm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWIucHVzaChhLmNhbGwodGhpcyx0aGlzW2NdLGMpKTtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LGIpfSxwbHVjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGJbYV19KX0sCnBvcDpHLnBvcCxwdXNoOkcucHVzaCxyZWR1Y2U6Ry5yZWR1Y2V8fGZ1bmN0aW9uKGEsYil7cmV0dXJuIG1iKHRoaXMsYSxiLDAsdGhpcy5sZW5ndGgsMSl9LHJlZHVjZVJpZ2h0OkcucmVkdWNlUmlnaHR8fGZ1bmN0aW9uKGEsYil7cmV0dXJuIG1iKHRoaXMsYSxiLHRoaXMubGVuZ3RoLTEsLTEsLTEpfSxyZXZlcnNlOkcucmV2ZXJzZSxzZWxlY3RvcjpudWxsLHNoaWZ0Okcuc2hpZnQsc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LHRoaXMpfSxzb3J0Okcuc29ydCxzcGxpY2U6Ry5zcGxpY2UsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBHLnNsaWNlLmNhbGwodGhpcyl9LHRvJDpmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpfSx0b0pRdWVyeTpmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpfSx1bmlxdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LHRhKHRoaXMpKX0sdW5zaGlmdDpHLnVuc2hpZnR9KTt2LmV4dGVuZD1mdW5jdGlvbihhLApiLGMpe2lmKGMubGVuZ3RoJiZiJiYoYiBpbnN0YW5jZW9mIHZ8fGIuX19kdF93cmFwcGVyKSl7dmFyIGQsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9Yi5hcHBseShhLGFyZ3VtZW50cyk7di5leHRlbmQoZCxkLGMubWV0aG9kRXh0KTtyZXR1cm4gZH19O3ZhciBoPTA7Zm9yKGQ9Yy5sZW5ndGg7aDxkO2grKyl7dmFyIGc9Y1toXTtiW2cubmFtZV09ImZ1bmN0aW9uIj09PWcudHlwZT9lKGEsZy52YWwsZyk6Im9iamVjdCI9PT1nLnR5cGU/e306Zy52YWw7YltnLm5hbWVdLl9fZHRfd3JhcHBlcj0hMDt2LmV4dGVuZChhLGJbZy5uYW1lXSxnLnByb3BFeHQpfX19O3YucmVnaXN0ZXI9dD1mdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShhKSlmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspdi5yZWdpc3RlcihhW2NdLGIpO2Vsc2V7ZD1hLnNwbGl0KCIuIik7dmFyIGU9V2IsaDthPTA7Zm9yKGM9ZC5sZW5ndGg7YTxjO2ErKyl7dmFyIGc9KGg9LTEhPT0KZFthXS5pbmRleE9mKCIoKSIpKT9kW2FdLnJlcGxhY2UoIigpIiwiIik6ZFthXTthOnt2YXIgaz0wO2Zvcih2YXIgbD1lLmxlbmd0aDtrPGw7aysrKWlmKGVba10ubmFtZT09PWcpe2s9ZVtrXTticmVhayBhfWs9bnVsbH1rfHwoaz17bmFtZTpnLHZhbDp7fSxtZXRob2RFeHQ6W10scHJvcEV4dDpbXSx0eXBlOiJvYmplY3QifSxlLnB1c2goaykpO2E9PT1jLTE/KGsudmFsPWIsay50eXBlPSJmdW5jdGlvbiI9PT10eXBlb2YgYj8iZnVuY3Rpb24iOmYuaXNQbGFpbk9iamVjdChiKT8ib2JqZWN0Ijoib3RoZXIiKTplPWg/ay5tZXRob2RFeHQ6ay5wcm9wRXh0fX19O3YucmVnaXN0ZXJQbHVyYWw9eD1mdW5jdGlvbihhLGIsYyl7di5yZWdpc3RlcihhLGMpO3YucmVnaXN0ZXIoYixmdW5jdGlvbigpe3ZhciBhPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhPT09dGhpcz90aGlzOmEgaW5zdGFuY2VvZiB2P2EubGVuZ3RoP2YuaXNBcnJheShhWzBdKT9uZXcgdihhLmNvbnRleHQsCmFbMF0pOmFbMF06cDphfSl9O3ZhciBmYz1mdW5jdGlvbihhLGIpe2lmKCJudW1iZXIiPT09dHlwZW9mIGEpcmV0dXJuW2JbYV1dO3ZhciBjPWYubWFwKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5uVGFibGV9KTtyZXR1cm4gZihjKS5maWx0ZXIoYSkubWFwKGZ1bmN0aW9uKGEpe2E9Zi5pbkFycmF5KHRoaXMsYyk7cmV0dXJuIGJbYV19KS50b0FycmF5KCl9O3QoInRhYmxlcygpIixmdW5jdGlvbihhKXtyZXR1cm4gYT9uZXcgdihmYyhhLHRoaXMuY29udGV4dCkpOnRoaXN9KTt0KCJ0YWJsZSgpIixmdW5jdGlvbihhKXthPXRoaXMudGFibGVzKGEpO3ZhciBiPWEuY29udGV4dDtyZXR1cm4gYi5sZW5ndGg/bmV3IHYoYlswXSk6YX0pO3goInRhYmxlcygpLm5vZGVzKCkiLCJ0YWJsZSgpLm5vZGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5UYWJsZX0sMSl9KTt4KCJ0YWJsZXMoKS5ib2R5KCkiLCJ0YWJsZSgpLmJvZHkoKSIsCmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtyZXR1cm4gYS5uVEJvZHl9LDEpfSk7eCgidGFibGVzKCkuaGVhZGVyKCkiLCJ0YWJsZSgpLmhlYWRlcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRIZWFkfSwxKX0pO3goInRhYmxlcygpLmZvb3RlcigpIiwidGFibGUoKS5mb290ZXIoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5URm9vdH0sMSl9KTt4KCJ0YWJsZXMoKS5jb250YWluZXJzKCkiLCJ0YWJsZSgpLmNvbnRhaW5lcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRhYmxlV3JhcHBlcn0sMSl9KTt0KCJkcmF3KCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7InBhZ2UiPT09CmE/UyhiKTooInN0cmluZyI9PT10eXBlb2YgYSYmKGE9ImZ1bGwtaG9sZCI9PT1hPyExOiEwKSxWKGIsITE9PT1hKSl9KX0pO3QoInBhZ2UoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1wP3RoaXMucGFnZS5pbmZvKCkucGFnZTp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7WGEoYixhKX0pfSk7dCgicGFnZS5pbmZvKCkiLGZ1bmN0aW9uKGEpe2lmKDA9PT10aGlzLmNvbnRleHQubGVuZ3RoKXJldHVybiBwO2E9dGhpcy5jb250ZXh0WzBdO3ZhciBiPWEuX2lEaXNwbGF5U3RhcnQsYz1hLm9GZWF0dXJlcy5iUGFnaW5hdGU/YS5faURpc3BsYXlMZW5ndGg6LTEsZD1hLmZuUmVjb3Jkc0Rpc3BsYXkoKSxlPS0xPT09YztyZXR1cm57cGFnZTplPzA6TWF0aC5mbG9vcihiL2MpLHBhZ2VzOmU/MTpNYXRoLmNlaWwoZC9jKSxzdGFydDpiLGVuZDphLmZuRGlzcGxheUVuZCgpLGxlbmd0aDpjLHJlY29yZHNUb3RhbDphLmZuUmVjb3Jkc1RvdGFsKCkscmVjb3Jkc0Rpc3BsYXk6ZCwKc2VydmVyU2lkZToic3NwIj09PUQoYSl9fSk7dCgicGFnZS5sZW4oKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1wPzAhPT10aGlzLmNvbnRleHQubGVuZ3RoP3RoaXMuY29udGV4dFswXS5faURpc3BsYXlMZW5ndGg6cDp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7VmEoYixhKX0pfSk7dmFyIFhiPWZ1bmN0aW9uKGEsYixjKXtpZihjKXt2YXIgZD1uZXcgdihhKTtkLm9uZSgiZHJhdyIsZnVuY3Rpb24oKXtjKGQuYWpheC5qc29uKCkpfSl9aWYoInNzcCI9PUQoYSkpVihhLGIpO2Vsc2V7SyhhLCEwKTt2YXIgZT1hLmpxWEhSO2UmJjQhPT1lLnJlYWR5U3RhdGUmJmUuYWJvcnQoKTt2YShhLFtdLGZ1bmN0aW9uKGMpe3FhKGEpO2M9d2EoYSxjKTtmb3IodmFyIGQ9MCxlPWMubGVuZ3RoO2Q8ZTtkKyspUihhLGNbZF0pO1YoYSxiKTtLKGEsITEpfSl9fTt0KCJhamF4Lmpzb24oKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7aWYoMDxhLmxlbmd0aClyZXR1cm4gYVswXS5qc29ufSk7CnQoImFqYXgucGFyYW1zKCkiLGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb250ZXh0O2lmKDA8YS5sZW5ndGgpcmV0dXJuIGFbMF0ub0FqYXhEYXRhfSk7dCgiYWpheC5yZWxvYWQoKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGMpe1hiKGMsITE9PT1iLGEpfSl9KTt0KCJhamF4LnVybCgpIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnRleHQ7aWYoYT09PXApe2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gcDtiPWJbMF07cmV0dXJuIGIuYWpheD9mLmlzUGxhaW5PYmplY3QoYi5hamF4KT9iLmFqYXgudXJsOmIuYWpheDpiLnNBamF4U291cmNlfXJldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7Zi5pc1BsYWluT2JqZWN0KGIuYWpheCk/Yi5hamF4LnVybD1hOmIuYWpheD1hfSl9KTt0KCJhamF4LnVybCgpLmxvYWQoKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGMpe1hiKGMsCiExPT09YixhKX0pfSk7dmFyIGViPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGg9W10sZyxrLGw7dmFyIG49dHlwZW9mIGI7YiYmInN0cmluZyIhPT1uJiYiZnVuY3Rpb24iIT09biYmYi5sZW5ndGghPT1wfHwoYj1bYl0pO249MDtmb3Ioaz1iLmxlbmd0aDtuPGs7bisrKXt2YXIgbT1iW25dJiZiW25dLnNwbGl0JiYhYltuXS5tYXRjaCgvW1xbXCg6XS8pP2Jbbl0uc3BsaXQoIiwiKTpbYltuXV07dmFyIHE9MDtmb3IobD1tLmxlbmd0aDtxPGw7cSsrKShnPWMoInN0cmluZyI9PT10eXBlb2YgbVtxXT9mLnRyaW0obVtxXSk6bVtxXSkpJiZnLmxlbmd0aCYmKGg9aC5jb25jYXQoZykpfWE9Qy5zZWxlY3RvclthXTtpZihhLmxlbmd0aClmb3Iobj0wLGs9YS5sZW5ndGg7bjxrO24rKyloPWFbbl0oZCxlLGgpO3JldHVybiB0YShoKX0sZmI9ZnVuY3Rpb24oYSl7YXx8KGE9e30pO2EuZmlsdGVyJiZhLnNlYXJjaD09PXAmJihhLnNlYXJjaD1hLmZpbHRlcik7cmV0dXJuIGYuZXh0ZW5kKHtzZWFyY2g6Im5vbmUiLApvcmRlcjoiY3VycmVudCIscGFnZToiYWxsIn0sYSl9LGdiPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKylpZigwPGFbYl0ubGVuZ3RoKXJldHVybiBhWzBdPWFbYl0sYVswXS5sZW5ndGg9MSxhLmxlbmd0aD0xLGEuY29udGV4dD1bYS5jb250ZXh0W2JdXSxhO2EubGVuZ3RoPTA7cmV0dXJuIGF9LEZhPWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD1hLmFpRGlzcGxheTt2YXIgZT1hLmFpRGlzcGxheU1hc3Rlcjt2YXIgaD1iLnNlYXJjaDt2YXIgZz1iLm9yZGVyO2I9Yi5wYWdlO2lmKCJzc3AiPT1EKGEpKXJldHVybiJyZW1vdmVkIj09PWg/W106WigwLGUubGVuZ3RoKTtpZigiY3VycmVudCI9PWIpZm9yKGc9YS5faURpc3BsYXlTdGFydCxhPWEuZm5EaXNwbGF5RW5kKCk7ZzxhO2crKyljLnB1c2goZFtnXSk7ZWxzZSBpZigiY3VycmVudCI9PWd8fCJhcHBsaWVkIj09ZylpZigibm9uZSI9PWgpYz1lLnNsaWNlKCk7ZWxzZSBpZigiYXBwbGllZCI9PWgpYz0KZC5zbGljZSgpO2Vsc2V7aWYoInJlbW92ZWQiPT1oKXt2YXIgaz17fTtnPTA7Zm9yKGE9ZC5sZW5ndGg7ZzxhO2crKylrW2RbZ11dPW51bGw7Yz1mLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBrLmhhc093blByb3BlcnR5KGEpP251bGw6YX0pfX1lbHNlIGlmKCJpbmRleCI9PWd8fCJvcmlnaW5hbCI9PWcpZm9yKGc9MCxhPWEuYW9EYXRhLmxlbmd0aDtnPGE7ZysrKSJub25lIj09aD9jLnB1c2goZyk6KGU9Zi5pbkFycmF5KGcsZCksKC0xPT09ZSYmInJlbW92ZWQiPT1ofHwwPD1lJiYiYXBwbGllZCI9PWgpJiZjLnB1c2goZykpO3JldHVybiBjfSxnYz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGViKCJyb3ciLGIsZnVuY3Rpb24oYil7dmFyIGU9U2IoYiksZz1hLmFvRGF0YTtpZihudWxsIT09ZSYmIWMpcmV0dXJuW2VdO2R8fChkPUZhKGEsYykpO2lmKG51bGwhPT1lJiYtMSE9PWYuaW5BcnJheShlLGQpKXJldHVybltlXTtpZihudWxsPT09Ynx8Yj09PXB8fCIiPT09YilyZXR1cm4gZDsKaWYoImZ1bmN0aW9uIj09PXR5cGVvZiBiKXJldHVybiBmLm1hcChkLGZ1bmN0aW9uKGEpe3ZhciBjPWdbYV07cmV0dXJuIGIoYSxjLl9hRGF0YSxjLm5Ucik/YTpudWxsfSk7aWYoYi5ub2RlTmFtZSl7ZT1iLl9EVF9Sb3dJbmRleDt2YXIgaz1iLl9EVF9DZWxsSW5kZXg7aWYoZSE9PXApcmV0dXJuIGdbZV0mJmdbZV0ublRyPT09Yj9bZV06W107aWYoaylyZXR1cm4gZ1trLnJvd10mJmdbay5yb3ddLm5Ucj09PWIucGFyZW50Tm9kZT9bay5yb3ddOltdO2U9ZihiKS5jbG9zZXN0KCIqW2RhdGEtZHQtcm93XSIpO3JldHVybiBlLmxlbmd0aD9bZS5kYXRhKCJkdC1yb3ciKV06W119aWYoInN0cmluZyI9PT10eXBlb2YgYiYmIiMiPT09Yi5jaGFyQXQoMCkmJihlPWEuYUlkc1tiLnJlcGxhY2UoL14jLywiIildLGUhPT1wKSlyZXR1cm5bZS5pZHhdO2U9VmIobGEoYS5hb0RhdGEsZCwiblRyIikpO3JldHVybiBmKGUpLmZpbHRlcihiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fRFRfUm93SW5kZXh9KS50b0FycmF5KCl9LAphLGMpfTt0KCJyb3dzKCkiLGZ1bmN0aW9uKGEsYil7YT09PXA/YT0iIjpmLmlzUGxhaW5PYmplY3QoYSkmJihiPWEsYT0iIik7Yj1mYihiKTt2YXIgYz10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGdjKGMsYSxiKX0sMSk7Yy5zZWxlY3Rvci5yb3dzPWE7Yy5zZWxlY3Rvci5vcHRzPWI7cmV0dXJuIGN9KTt0KCJyb3dzKCkubm9kZXMoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihhLGIpe3JldHVybiBhLmFvRGF0YVtiXS5uVHJ8fHB9LDEpfSk7dCgicm93cygpLmRhdGEoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcighMCwicm93cyIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gbGEoYS5hb0RhdGEsYiwiX2FEYXRhIil9LDEpfSk7eCgicm93cygpLmNhY2hlKCkiLCJyb3coKS5jYWNoZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihiLGMpe2I9Yi5hb0RhdGFbY107CnJldHVybiJzZWFyY2giPT09YT9iLl9hRmlsdGVyRGF0YTpiLl9hU29ydERhdGF9LDEpfSk7eCgicm93cygpLmludmFsaWRhdGUoKSIsInJvdygpLmludmFsaWRhdGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInJvdyIsZnVuY3Rpb24oYixjKXtlYShiLGMsYSl9KX0pO3goInJvd3MoKS5pbmRleGVzKCkiLCJyb3coKS5pbmRleCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJyb3ciLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ9LDEpfSk7eCgicm93cygpLmlkcygpIiwicm93KCkuaWQoKSIsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9dGhpcy5jb250ZXh0LGQ9MCxlPWMubGVuZ3RoO2Q8ZTtkKyspZm9yKHZhciBoPTAsZz10aGlzW2RdLmxlbmd0aDtoPGc7aCsrKXt2YXIgZj1jW2RdLnJvd0lkRm4oY1tkXS5hb0RhdGFbdGhpc1tkXVtoXV0uX2FEYXRhKTtiLnB1c2goKCEwPT09YT8iIyI6IiIpK2YpfXJldHVybiBuZXcgdihjLGIpfSk7eCgicm93cygpLnJlbW92ZSgpIiwKInJvdygpLnJlbW92ZSgpIixmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihiLGMsZCl7dmFyIGU9Yi5hb0RhdGEsaD1lW2NdLGcsZjtlLnNwbGljZShjLDEpO3ZhciBsPTA7Zm9yKGc9ZS5sZW5ndGg7bDxnO2wrKyl7dmFyIG49ZVtsXTt2YXIgbT1uLmFuQ2VsbHM7bnVsbCE9PW4ublRyJiYobi5uVHIuX0RUX1Jvd0luZGV4PWwpO2lmKG51bGwhPT1tKWZvcihuPTAsZj1tLmxlbmd0aDtuPGY7bisrKW1bbl0uX0RUX0NlbGxJbmRleC5yb3c9bH1yYShiLmFpRGlzcGxheU1hc3RlcixjKTtyYShiLmFpRGlzcGxheSxjKTtyYShhW2RdLGMsITEpOzA8Yi5faVJlY29yZHNEaXNwbGF5JiZiLl9pUmVjb3Jkc0Rpc3BsYXktLTtXYShiKTtjPWIucm93SWRGbihoLl9hRGF0YSk7YyE9PXAmJmRlbGV0ZSBiLmFJZHNbY119KTt0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsZD1hLmFvRGF0YS5sZW5ndGg7YjxkO2IrKylhLmFvRGF0YVtiXS5pZHg9CmJ9KTtyZXR1cm4gdGhpc30pO3QoInJvd3MuYWRkKCkiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXt2YXIgYyxkPVtdO3ZhciBnPTA7Zm9yKGM9YS5sZW5ndGg7ZzxjO2crKyl7dmFyIGY9YVtnXTtmLm5vZGVOYW1lJiYiVFIiPT09Zi5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpP2QucHVzaChwYShiLGYpWzBdKTpkLnB1c2goUihiLGYpKX1yZXR1cm4gZH0sMSksYz10aGlzLnJvd3MoLTEpO2MucG9wKCk7Zi5tZXJnZShjLGIpO3JldHVybiBjfSk7dCgicm93KCkiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGdiKHRoaXMucm93cyhhLGIpKX0pO3QoInJvdygpLmRhdGEoKSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jb250ZXh0O2lmKGE9PT1wKXJldHVybiBiLmxlbmd0aCYmdGhpcy5sZW5ndGg/YlswXS5hb0RhdGFbdGhpc1swXV0uX2FEYXRhOnA7dmFyIGM9YlswXS5hb0RhdGFbdGhpc1swXV07Yy5fYURhdGE9YTtmLmlzQXJyYXkoYSkmJmMublRyLmlkJiYKUShiWzBdLnJvd0lkKShhLGMublRyLmlkKTtlYShiWzBdLHRoaXNbMF0sImRhdGEiKTtyZXR1cm4gdGhpc30pO3QoInJvdygpLm5vZGUoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7cmV0dXJuIGEubGVuZ3RoJiZ0aGlzLmxlbmd0aD9hWzBdLmFvRGF0YVt0aGlzWzBdXS5uVHJ8fG51bGw6bnVsbH0pO3QoInJvdy5hZGQoKSIsZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIGYmJmEubGVuZ3RoJiYoYT1hWzBdKTt2YXIgYj10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7cmV0dXJuIGEubm9kZU5hbWUmJiJUUiI9PT1hLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk/cGEoYixhKVswXTpSKGIsYSl9KTtyZXR1cm4gdGhpcy5yb3coYlswXSl9KTt2YXIgaGM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9W10saD1mdW5jdGlvbihiLGMpe2lmKGYuaXNBcnJheShiKXx8YiBpbnN0YW5jZW9mIGYpZm9yKHZhciBkPTAsZz1iLmxlbmd0aDtkPGc7ZCsrKWgoYltkXSxjKTtlbHNlIGIubm9kZU5hbWUmJgoidHIiPT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2UucHVzaChiKTooZD1mKCI8dHI+PHRkLz48L3RyPiIpLmFkZENsYXNzKGMpLGYoInRkIixkKS5hZGRDbGFzcyhjKS5odG1sKGIpWzBdLmNvbFNwYW49VyhhKSxlLnB1c2goZFswXSkpfTtoKGMsZCk7Yi5fZGV0YWlscyYmYi5fZGV0YWlscy5kZXRhY2goKTtiLl9kZXRhaWxzPWYoZSk7Yi5fZGV0YWlsc1Nob3cmJmIuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoYi5uVHIpfSxoYj1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY29udGV4dDtjLmxlbmd0aCYmKGE9Y1swXS5hb0RhdGFbYiE9PXA/YjphWzBdXSkmJmEuX2RldGFpbHMmJihhLl9kZXRhaWxzLnJlbW92ZSgpLGEuX2RldGFpbHNTaG93PXAsYS5fZGV0YWlscz1wKX0sWWI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmNvbnRleHQ7Yy5sZW5ndGgmJmEubGVuZ3RoJiYoYT1jWzBdLmFvRGF0YVthWzBdXSxhLl9kZXRhaWxzJiYoKGEuX2RldGFpbHNTaG93PWIpP2EuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoYS5uVHIpOgphLl9kZXRhaWxzLmRldGFjaCgpLGljKGNbMF0pKSl9LGljPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyB2KGEpLGM9YS5hb0RhdGE7Yi5vZmYoImRyYXcuZHQuRFRfZGV0YWlscyBjb2x1bW4tdmlzaWJpbGl0eS5kdC5EVF9kZXRhaWxzIGRlc3Ryb3kuZHQuRFRfZGV0YWlscyIpOzA8SihjLCJfZGV0YWlscyIpLmxlbmd0aCYmKGIub24oImRyYXcuZHQuRFRfZGV0YWlscyIsZnVuY3Rpb24oZCxlKXthPT09ZSYmYi5yb3dzKHtwYWdlOiJjdXJyZW50In0pLmVxKDApLmVhY2goZnVuY3Rpb24oYSl7YT1jW2FdO2EuX2RldGFpbHNTaG93JiZhLl9kZXRhaWxzLmluc2VydEFmdGVyKGEublRyKX0pfSksYi5vbigiY29sdW1uLXZpc2liaWxpdHkuZHQuRFRfZGV0YWlscyIsZnVuY3Rpb24oYixlLGYsZyl7aWYoYT09PWUpZm9yKGU9VyhlKSxmPTAsZz1jLmxlbmd0aDtmPGc7ZisrKWI9Y1tmXSxiLl9kZXRhaWxzJiZiLl9kZXRhaWxzLmNoaWxkcmVuKCJ0ZFtjb2xzcGFuXSIpLmF0dHIoImNvbHNwYW4iLAplKX0pLGIub24oImRlc3Ryb3kuZHQuRFRfZGV0YWlscyIsZnVuY3Rpb24oZCxlKXtpZihhPT09ZSlmb3IoZD0wLGU9Yy5sZW5ndGg7ZDxlO2QrKyljW2RdLl9kZXRhaWxzJiZoYihiLGQpfSkpfTt0KCJyb3coKS5jaGlsZCgpIixmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29udGV4dDtpZihhPT09cClyZXR1cm4gYy5sZW5ndGgmJnRoaXMubGVuZ3RoP2NbMF0uYW9EYXRhW3RoaXNbMF1dLl9kZXRhaWxzOnA7ITA9PT1hP3RoaXMuY2hpbGQuc2hvdygpOiExPT09YT9oYih0aGlzKTpjLmxlbmd0aCYmdGhpcy5sZW5ndGgmJmhjKGNbMF0sY1swXS5hb0RhdGFbdGhpc1swXV0sYSxiKTtyZXR1cm4gdGhpc30pO3QoWyJyb3coKS5jaGlsZC5zaG93KCkiLCJyb3coKS5jaGlsZCgpLnNob3coKSJdLGZ1bmN0aW9uKGEpe1liKHRoaXMsITApO3JldHVybiB0aGlzfSk7dChbInJvdygpLmNoaWxkLmhpZGUoKSIsInJvdygpLmNoaWxkKCkuaGlkZSgpIl0sZnVuY3Rpb24oKXtZYih0aGlzLCExKTsKcmV0dXJuIHRoaXN9KTt0KFsicm93KCkuY2hpbGQucmVtb3ZlKCkiLCJyb3coKS5jaGlsZCgpLnJlbW92ZSgpIl0sZnVuY3Rpb24oKXtoYih0aGlzKTtyZXR1cm4gdGhpc30pO3QoInJvdygpLmNoaWxkLmlzU2hvd24oKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7cmV0dXJuIGEubGVuZ3RoJiZ0aGlzLmxlbmd0aD9hWzBdLmFvRGF0YVt0aGlzWzBdXS5fZGV0YWlsc1Nob3d8fCExOiExfSk7dmFyIGpjPS9eKFteOl0rKToobmFtZXx2aXNJZHh8dmlzaWJsZSkkLyxaYj1mdW5jdGlvbihhLGIsYyxkLGUpe2M9W107ZD0wO2Zvcih2YXIgZj1lLmxlbmd0aDtkPGY7ZCsrKWMucHVzaChJKGEsZVtkXSxiKSk7cmV0dXJuIGN9LGtjPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmFvQ29sdW1ucyxlPUooZCwic05hbWUiKSxoPUooZCwiblRoIik7cmV0dXJuIGViKCJjb2x1bW4iLGIsZnVuY3Rpb24oYil7dmFyIGc9U2IoYik7aWYoIiI9PT1iKXJldHVybiBaKGQubGVuZ3RoKTtpZihudWxsIT09CmcpcmV0dXJuWzA8PWc/ZzpkLmxlbmd0aCtnXTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGIpe3ZhciBsPUZhKGEsYyk7cmV0dXJuIGYubWFwKGQsZnVuY3Rpb24oYyxkKXtyZXR1cm4gYihkLFpiKGEsZCwwLDAsbCksaFtkXSk/ZDpudWxsfSl9dmFyIG49InN0cmluZyI9PT10eXBlb2YgYj9iLm1hdGNoKGpjKToiIjtpZihuKXN3aXRjaChuWzJdKXtjYXNlICJ2aXNJZHgiOmNhc2UgInZpc2libGUiOmc9cGFyc2VJbnQoblsxXSwxMCk7aWYoMD5nKXt2YXIgbT1mLm1hcChkLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYlZpc2libGU/YjpudWxsfSk7cmV0dXJuW21bbS5sZW5ndGgrZ11dfXJldHVybltiYShhLGcpXTtjYXNlICJuYW1lIjpyZXR1cm4gZi5tYXAoZSxmdW5jdGlvbihhLGIpe3JldHVybiBhPT09blsxXT9iOm51bGx9KTtkZWZhdWx0OnJldHVybltdfWlmKGIubm9kZU5hbWUmJmIuX0RUX0NlbGxJbmRleClyZXR1cm5bYi5fRFRfQ2VsbEluZGV4LmNvbHVtbl07Zz1mKGgpLmZpbHRlcihiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5pbkFycmF5KHRoaXMsCmgpfSkudG9BcnJheSgpO2lmKGcubGVuZ3RofHwhYi5ub2RlTmFtZSlyZXR1cm4gZztnPWYoYikuY2xvc2VzdCgiKltkYXRhLWR0LWNvbHVtbl0iKTtyZXR1cm4gZy5sZW5ndGg/W2cuZGF0YSgiZHQtY29sdW1uIildOltdfSxhLGMpfTt0KCJjb2x1bW5zKCkiLGZ1bmN0aW9uKGEsYil7YT09PXA/YT0iIjpmLmlzUGxhaW5PYmplY3QoYSkmJihiPWEsYT0iIik7Yj1mYihiKTt2YXIgYz10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGtjKGMsYSxiKX0sMSk7Yy5zZWxlY3Rvci5jb2xzPWE7Yy5zZWxlY3Rvci5vcHRzPWI7cmV0dXJuIGN9KTt4KCJjb2x1bW5zKCkuaGVhZGVyKCkiLCJjb2x1bW4oKS5oZWFkZXIoKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbihhLGIpe3JldHVybiBhLmFvQ29sdW1uc1tiXS5uVGh9LDEpfSk7eCgiY29sdW1ucygpLmZvb3RlcigpIiwiY29sdW1uKCkuZm9vdGVyKCkiLGZ1bmN0aW9uKGEsCmIpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYW9Db2x1bW5zW2JdLm5UZn0sMSl9KTt4KCJjb2x1bW5zKCkuZGF0YSgpIiwiY29sdW1uKCkuZGF0YSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4tcm93cyIsWmIsMSl9KTt4KCJjb2x1bW5zKCkuZGF0YVNyYygpIiwiY29sdW1uKCkuZGF0YVNyYygpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYW9Db2x1bW5zW2JdLm1EYXRhfSwxKX0pO3goImNvbHVtbnMoKS5jYWNoZSgpIiwiY29sdW1uKCkuY2FjaGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbi1yb3dzIixmdW5jdGlvbihiLGMsZCxlLGYpe3JldHVybiBsYShiLmFvRGF0YSxmLCJzZWFyY2giPT09YT8iX2FGaWx0ZXJEYXRhIjoiX2FTb3J0RGF0YSIsYyl9LDEpfSk7eCgiY29sdW1ucygpLm5vZGVzKCkiLAoiY29sdW1uKCkubm9kZXMoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uLXJvd3MiLGZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIGxhKGEuYW9EYXRhLGUsImFuQ2VsbHMiLGIpfSwxKX0pO3goImNvbHVtbnMoKS52aXNpYmxlKCkiLCJjb2x1bW4oKS52aXNpYmxlKCkiLGZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPXRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYixjKXtpZihhPT09cClyZXR1cm4gYi5hb0NvbHVtbnNbY10uYlZpc2libGU7dmFyIGQ9Yi5hb0NvbHVtbnMsZT1kW2NdLGg9Yi5hb0RhdGEsbjtpZihhIT09cCYmZS5iVmlzaWJsZSE9PWEpe2lmKGEpe3ZhciBtPWYuaW5BcnJheSghMCxKKGQsImJWaXNpYmxlIiksYysxKTtkPTA7Zm9yKG49aC5sZW5ndGg7ZDxuO2QrKyl7dmFyIHE9aFtkXS5uVHI7Yj1oW2RdLmFuQ2VsbHM7cSYmcS5pbnNlcnRCZWZvcmUoYltjXSxiW21dfHxudWxsKX19ZWxzZSBmKEooYi5hb0RhdGEsImFuQ2VsbHMiLApjKSkuZGV0YWNoKCk7ZS5iVmlzaWJsZT1hfX0pO2EhPT1wJiZ0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oZCl7aGEoZCxkLmFvSGVhZGVyKTtoYShkLGQuYW9Gb290ZXIpO2QuYWlEaXNwbGF5Lmxlbmd0aHx8ZihkLm5UQm9keSkuZmluZCgidGRbY29sc3Bhbl0iKS5hdHRyKCJjb2xzcGFuIixXKGQpKTtCYShkKTtjLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGMsZCl7QShjLG51bGwsImNvbHVtbi12aXNpYmlsaXR5IixbYyxkLGEsYl0pfSk7KGI9PT1wfHxiKSYmYy5jb2x1bW5zLmFkanVzdCgpfSk7cmV0dXJuIGR9KTt4KCJjb2x1bW5zKCkuaW5kZXhlcygpIiwiY29sdW1uKCkuaW5kZXgoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYixjKXtyZXR1cm4idmlzaWJsZSI9PT1hP2NhKGIsYyk6Y30sMSl9KTt0KCJjb2x1bW5zLmFkanVzdCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7YWEoYSl9LAoxKX0pO3QoImNvbHVtbi5pbmRleCgpIixmdW5jdGlvbihhLGIpe2lmKDAhPT10aGlzLmNvbnRleHQubGVuZ3RoKXt2YXIgYz10aGlzLmNvbnRleHRbMF07aWYoImZyb21WaXNpYmxlIj09PWF8fCJ0b0RhdGEiPT09YSlyZXR1cm4gYmEoYyxiKTtpZigiZnJvbURhdGEiPT09YXx8InRvVmlzaWJsZSI9PT1hKXJldHVybiBjYShjLGIpfX0pO3QoImNvbHVtbigpIixmdW5jdGlvbihhLGIpe3JldHVybiBnYih0aGlzLmNvbHVtbnMoYSxiKSl9KTt2YXIgbGM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuYW9EYXRhLGU9RmEoYSxjKSxoPVZiKGxhKGQsZSwiYW5DZWxscyIpKSxnPWYoW10uY29uY2F0LmFwcGx5KFtdLGgpKSxrLGw9YS5hb0NvbHVtbnMubGVuZ3RoLG4sbSxxLHUsdCx2O3JldHVybiBlYigiY2VsbCIsYixmdW5jdGlvbihiKXt2YXIgYz0iZnVuY3Rpb24iPT09dHlwZW9mIGI7aWYobnVsbD09PWJ8fGI9PT1wfHxjKXtuPVtdO209MDtmb3IocT1lLmxlbmd0aDttPHE7bSsrKWZvcihrPQplW21dLHU9MDt1PGw7dSsrKXQ9e3JvdzprLGNvbHVtbjp1fSxjPyh2PWRba10sYih0LEkoYSxrLHUpLHYuYW5DZWxscz92LmFuQ2VsbHNbdV06bnVsbCkmJm4ucHVzaCh0KSk6bi5wdXNoKHQpO3JldHVybiBufWlmKGYuaXNQbGFpbk9iamVjdChiKSlyZXR1cm4gYi5jb2x1bW4hPT1wJiZiLnJvdyE9PXAmJi0xIT09Zi5pbkFycmF5KGIucm93LGUpP1tiXTpbXTtjPWcuZmlsdGVyKGIpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybntyb3c6Yi5fRFRfQ2VsbEluZGV4LnJvdyxjb2x1bW46Yi5fRFRfQ2VsbEluZGV4LmNvbHVtbn19KS50b0FycmF5KCk7aWYoYy5sZW5ndGh8fCFiLm5vZGVOYW1lKXJldHVybiBjO3Y9ZihiKS5jbG9zZXN0KCIqW2RhdGEtZHQtcm93XSIpO3JldHVybiB2Lmxlbmd0aD9be3Jvdzp2LmRhdGEoImR0LXJvdyIpLGNvbHVtbjp2LmRhdGEoImR0LWNvbHVtbiIpfV06W119LGEsYyl9O3QoImNlbGxzKCkiLGZ1bmN0aW9uKGEsYixjKXtmLmlzUGxhaW5PYmplY3QoYSkmJgooYS5yb3c9PT1wPyhjPWEsYT1udWxsKTooYz1iLGI9bnVsbCkpO2YuaXNQbGFpbk9iamVjdChiKSYmKGM9YixiPW51bGwpO2lmKG51bGw9PT1ifHxiPT09cClyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe3JldHVybiBsYyhiLGEsZmIoYykpfSk7dmFyIGQ9Yz97cGFnZTpjLnBhZ2Usb3JkZXI6Yy5vcmRlcixzZWFyY2g6Yy5zZWFyY2h9Ont9LGU9dGhpcy5jb2x1bW5zKGIsZCksaD10aGlzLnJvd3MoYSxkKSxnLGssbCxuO2Q9dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEsYil7YT1bXTtnPTA7Zm9yKGs9aFtiXS5sZW5ndGg7ZzxrO2crKylmb3IobD0wLG49ZVtiXS5sZW5ndGg7bDxuO2wrKylhLnB1c2goe3JvdzpoW2JdW2ddLGNvbHVtbjplW2JdW2xdfSk7cmV0dXJuIGF9LDEpO2Q9YyYmYy5zZWxlY3RlZD90aGlzLmNlbGxzKGQsYyk6ZDtmLmV4dGVuZChkLnNlbGVjdG9yLHtjb2xzOmIscm93czphLG9wdHM6Y30pO3JldHVybiBkfSk7eCgiY2VsbHMoKS5ub2RlcygpIiwKImNlbGwoKS5ub2RlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4oYT1hLmFvRGF0YVtiXSkmJmEuYW5DZWxscz9hLmFuQ2VsbHNbY106cH0sMSl9KTt0KCJjZWxscygpLmRhdGEoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY2VsbCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBJKGEsYixjKX0sMSl9KTt4KCJjZWxscygpLmNhY2hlKCkiLCJjZWxsKCkuY2FjaGUoKSIsZnVuY3Rpb24oYSl7YT0ic2VhcmNoIj09PWE/Il9hRmlsdGVyRGF0YSI6Il9hU29ydERhdGEiO3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGIuYW9EYXRhW2NdW2FdW2RdfSwxKX0pO3goImNlbGxzKCkucmVuZGVyKCkiLCJjZWxsKCkucmVuZGVyKCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihiLGMsZCl7cmV0dXJuIEkoYixjLGQsYSl9LAoxKX0pO3goImNlbGxzKCkuaW5kZXhlcygpIiwiY2VsbCgpLmluZGV4KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm57cm93OmIsY29sdW1uOmMsY29sdW1uVmlzaWJsZTpjYShhLGMpfX0sMSl9KTt4KCJjZWxscygpLmludmFsaWRhdGUoKSIsImNlbGwoKS5pbnZhbGlkYXRlKCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihiLGMsZCl7ZWEoYixjLGEsZCl9KX0pO3QoImNlbGwoKSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBnYih0aGlzLmNlbGxzKGEsYixjKSl9KTt0KCJjZWxsKCkuZGF0YSgpIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnRleHQsYz10aGlzWzBdO2lmKGE9PT1wKXJldHVybiBiLmxlbmd0aCYmYy5sZW5ndGg/SShiWzBdLGNbMF0ucm93LGNbMF0uY29sdW1uKTpwO29iKGJbMF0sY1swXS5yb3csY1swXS5jb2x1bW4sYSk7ZWEoYlswXSxjWzBdLnJvdywKImRhdGEiLGNbMF0uY29sdW1uKTtyZXR1cm4gdGhpc30pO3QoIm9yZGVyKCkiLGZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jb250ZXh0O2lmKGE9PT1wKXJldHVybiAwIT09Yy5sZW5ndGg/Y1swXS5hYVNvcnRpbmc6cDsibnVtYmVyIj09PXR5cGVvZiBhP2E9W1thLGJdXTphLmxlbmd0aCYmIWYuaXNBcnJheShhWzBdKSYmKGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLmFhU29ydGluZz1hLnNsaWNlKCl9KX0pO3QoIm9yZGVyLmxpc3RlbmVyKCkiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGQpe1FhKGQsYSxiLGMpfSl9KTt0KCJvcmRlci5maXhlZCgpIixmdW5jdGlvbihhKXtpZighYSl7dmFyIGI9dGhpcy5jb250ZXh0O2I9Yi5sZW5ndGg/YlswXS5hYVNvcnRpbmdGaXhlZDpwO3JldHVybiBmLmlzQXJyYXkoYik/e3ByZTpifToKYn1yZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2IuYWFTb3J0aW5nRml4ZWQ9Zi5leHRlbmQoITAse30sYSl9KX0pO3QoWyJjb2x1bW5zKCkub3JkZXIoKSIsImNvbHVtbigpLm9yZGVyKCkiXSxmdW5jdGlvbihhKXt2YXIgYj10aGlzO3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyxkKXt2YXIgZT1bXTtmLmVhY2goYltkXSxmdW5jdGlvbihiLGMpe2UucHVzaChbYyxhXSl9KTtjLmFhU29ydGluZz1lfSl9KTt0KCJzZWFyY2goKSIsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5jb250ZXh0O3JldHVybiBhPT09cD8wIT09ZS5sZW5ndGg/ZVswXS5vUHJldmlvdXNTZWFyY2guc1NlYXJjaDpwOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihlKXtlLm9GZWF0dXJlcy5iRmlsdGVyJiZpYShlLGYuZXh0ZW5kKHt9LGUub1ByZXZpb3VzU2VhcmNoLHtzU2VhcmNoOmErIiIsYlJlZ2V4Om51bGw9PT1iPyExOmIsYlNtYXJ0Om51bGw9PT0KYz8hMDpjLGJDYXNlSW5zZW5zaXRpdmU6bnVsbD09PWQ/ITA6ZH0pLDEpfSl9KTt4KCJjb2x1bW5zKCkuc2VhcmNoKCkiLCJjb2x1bW4oKS5zZWFyY2goKSIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oZSxoKXt2YXIgZz1lLmFvUHJlU2VhcmNoQ29scztpZihhPT09cClyZXR1cm4gZ1toXS5zU2VhcmNoO2Uub0ZlYXR1cmVzLmJGaWx0ZXImJihmLmV4dGVuZChnW2hdLHtzU2VhcmNoOmErIiIsYlJlZ2V4Om51bGw9PT1iPyExOmIsYlNtYXJ0Om51bGw9PT1jPyEwOmMsYkNhc2VJbnNlbnNpdGl2ZTpudWxsPT09ZD8hMDpkfSksaWEoZSxlLm9QcmV2aW91c1NlYXJjaCwxKSl9KX0pO3QoInN0YXRlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dC5sZW5ndGg/dGhpcy5jb250ZXh0WzBdLm9TYXZlZFN0YXRlOm51bGx9KTt0KCJzdGF0ZS5jbGVhcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsCmZ1bmN0aW9uKGEpe2EuZm5TdGF0ZVNhdmVDYWxsYmFjay5jYWxsKGEub0luc3RhbmNlLGEse30pfSl9KTt0KCJzdGF0ZS5sb2FkZWQoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aD90aGlzLmNvbnRleHRbMF0ub0xvYWRlZFN0YXRlOm51bGx9KTt0KCJzdGF0ZS5zYXZlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtCYShhKX0pfSk7cS52ZXJzaW9uQ2hlY2s9cS5mblZlcnNpb25DaGVjaz1mdW5jdGlvbihhKXt2YXIgYj1xLnZlcnNpb24uc3BsaXQoIi4iKTthPWEuc3BsaXQoIi4iKTtmb3IodmFyIGMsZCxlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKWlmKGM9cGFyc2VJbnQoYltlXSwxMCl8fDAsZD1wYXJzZUludChhW2VdLDEwKXx8MCxjIT09ZClyZXR1cm4gYz5kO3JldHVybiEwfTtxLmlzRGF0YVRhYmxlPXEuZm5Jc0RhdGFUYWJsZT1mdW5jdGlvbihhKXt2YXIgYj1mKGEpLmdldCgwKSxjPSExO2lmKGEgaW5zdGFuY2VvZgpxLkFwaSlyZXR1cm4hMDtmLmVhY2gocS5zZXR0aW5ncyxmdW5jdGlvbihhLGUpe2E9ZS5uU2Nyb2xsSGVhZD9mKCJ0YWJsZSIsZS5uU2Nyb2xsSGVhZClbMF06bnVsbDt2YXIgZD1lLm5TY3JvbGxGb290P2YoInRhYmxlIixlLm5TY3JvbGxGb290KVswXTpudWxsO2lmKGUublRhYmxlPT09Ynx8YT09PWJ8fGQ9PT1iKWM9ITB9KTtyZXR1cm4gY307cS50YWJsZXM9cS5mblRhYmxlcz1mdW5jdGlvbihhKXt2YXIgYj0hMTtmLmlzUGxhaW5PYmplY3QoYSkmJihiPWEuYXBpLGE9YS52aXNpYmxlKTt2YXIgYz1mLm1hcChxLnNldHRpbmdzLGZ1bmN0aW9uKGIpe2lmKCFhfHxhJiZmKGIublRhYmxlKS5pcygiOnZpc2libGUiKSlyZXR1cm4gYi5uVGFibGV9KTtyZXR1cm4gYj9uZXcgdihjKTpjfTtxLmNhbWVsVG9IdW5nYXJpYW49TDt0KCIkKCkiLGZ1bmN0aW9uKGEsYil7Yj10aGlzLnJvd3MoYikubm9kZXMoKTtiPWYoYik7cmV0dXJuIGYoW10uY29uY2F0KGIuZmlsdGVyKGEpLnRvQXJyYXkoKSwKYi5maW5kKGEpLnRvQXJyYXkoKSkpfSk7Zi5lYWNoKFsib24iLCJvbmUiLCJvZmYiXSxmdW5jdGlvbihhLGIpe3QoYisiKCkiLGZ1bmN0aW9uKCl7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthWzBdPWYubWFwKGFbMF0uc3BsaXQoL1xzLyksZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goL1wuZHRcYi8pP2E6YSsiLmR0In0pLmpvaW4oIiAiKTt2YXIgZD1mKHRoaXMudGFibGVzKCkubm9kZXMoKSk7ZFtiXS5hcHBseShkLGEpO3JldHVybiB0aGlzfSl9KTt0KCJjbGVhcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cWEoYSl9KX0pO3QoInNldHRpbmdzKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMuY29udGV4dCx0aGlzLmNvbnRleHQpfSk7dCgiaW5pdCgpIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGV4dDtyZXR1cm4gYS5sZW5ndGg/YVswXS5vSW5pdDpudWxsfSk7dCgiZGF0YSgpIiwKZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3JldHVybiBKKGEuYW9EYXRhLCJfYURhdGEiKX0pLmZsYXR0ZW4oKX0pO3QoImRlc3Ryb3koKSIsZnVuY3Rpb24oYSl7YT1hfHwhMTtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe3ZhciBjPWIublRhYmxlV3JhcHBlci5wYXJlbnROb2RlLGQ9Yi5vQ2xhc3NlcyxlPWIublRhYmxlLGg9Yi5uVEJvZHksZz1iLm5USGVhZCxrPWIublRGb290LGw9ZihlKTtoPWYoaCk7dmFyIG49ZihiLm5UYWJsZVdyYXBwZXIpLG09Zi5tYXAoYi5hb0RhdGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRyfSkscDtiLmJEZXN0cm95aW5nPSEwO0EoYiwiYW9EZXN0cm95Q2FsbGJhY2siLCJkZXN0cm95IixbYl0pO2F8fChuZXcgdihiKSkuY29sdW1ucygpLnZpc2libGUoITApO24ub2ZmKCIuRFQiKS5maW5kKCI6bm90KHRib2R5ICopIikub2ZmKCIuRFQiKTtmKHopLm9mZigiLkRULSIrYi5zSW5zdGFuY2UpOwplIT1nLnBhcmVudE5vZGUmJihsLmNoaWxkcmVuKCJ0aGVhZCIpLmRldGFjaCgpLGwuYXBwZW5kKGcpKTtrJiZlIT1rLnBhcmVudE5vZGUmJihsLmNoaWxkcmVuKCJ0Zm9vdCIpLmRldGFjaCgpLGwuYXBwZW5kKGspKTtiLmFhU29ydGluZz1bXTtiLmFhU29ydGluZ0ZpeGVkPVtdO0FhKGIpO2YobSkucmVtb3ZlQ2xhc3MoYi5hc1N0cmlwZUNsYXNzZXMuam9pbigiICIpKTtmKCJ0aCwgdGQiLGcpLnJlbW92ZUNsYXNzKGQuc1NvcnRhYmxlKyIgIitkLnNTb3J0YWJsZUFzYysiICIrZC5zU29ydGFibGVEZXNjKyIgIitkLnNTb3J0YWJsZU5vbmUpO2guY2hpbGRyZW4oKS5kZXRhY2goKTtoLmFwcGVuZChtKTtnPWE/InJlbW92ZSI6ImRldGFjaCI7bFtnXSgpO25bZ10oKTshYSYmYyYmKGMuaW5zZXJ0QmVmb3JlKGUsYi5uVGFibGVSZWluc2VydEJlZm9yZSksbC5jc3MoIndpZHRoIixiLnNEZXN0cm95V2lkdGgpLnJlbW92ZUNsYXNzKGQuc1RhYmxlKSwocD1iLmFzRGVzdHJveVN0cmlwZXMubGVuZ3RoKSYmCmguY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKGEpe2YodGhpcykuYWRkQ2xhc3MoYi5hc0Rlc3Ryb3lTdHJpcGVzW2ElcF0pfSkpO2M9Zi5pbkFycmF5KGIscS5zZXR0aW5ncyk7LTEhPT1jJiZxLnNldHRpbmdzLnNwbGljZShjLDEpfSl9KTtmLmVhY2goWyJjb2x1bW4iLCJyb3ciLCJjZWxsIl0sZnVuY3Rpb24oYSxiKXt0KGIrInMoKS5ldmVyeSgpIixmdW5jdGlvbihhKXt2YXIgYz10aGlzLnNlbGVjdG9yLm9wdHMsZT10aGlzO3JldHVybiB0aGlzLml0ZXJhdG9yKGIsZnVuY3Rpb24oZCxmLGssbCxuKXthLmNhbGwoZVtiXShmLCJjZWxsIj09PWI/azpjLCJjZWxsIj09PWI/YzpwKSxmLGssbCxuKX0pfSl9KTt0KCJpMThuKCkiLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmNvbnRleHRbMF07YT1VKGEpKGQub0xhbmd1YWdlKTthPT09cCYmKGE9Yik7YyE9PXAmJmYuaXNQbGFpbk9iamVjdChhKSYmKGE9YVtjXSE9PXA/YVtjXTphLl8pO3JldHVybiBhLnJlcGxhY2UoIiVkIixjKX0pOwpxLnZlcnNpb249IjEuMTAuMjAiO3Euc2V0dGluZ3M9W107cS5tb2RlbHM9e307cS5tb2RlbHMub1NlYXJjaD17YkNhc2VJbnNlbnNpdGl2ZTohMCxzU2VhcmNoOiIiLGJSZWdleDohMSxiU21hcnQ6ITB9O3EubW9kZWxzLm9Sb3c9e25UcjpudWxsLGFuQ2VsbHM6bnVsbCxfYURhdGE6W10sX2FTb3J0RGF0YTpudWxsLF9hRmlsdGVyRGF0YTpudWxsLF9zRmlsdGVyUm93Om51bGwsX3NSb3dTdHJpcGU6IiIsc3JjOm51bGwsaWR4Oi0xfTtxLm1vZGVscy5vQ29sdW1uPXtpZHg6bnVsbCxhRGF0YVNvcnQ6bnVsbCxhc1NvcnRpbmc6bnVsbCxiU2VhcmNoYWJsZTpudWxsLGJTb3J0YWJsZTpudWxsLGJWaXNpYmxlOm51bGwsX3NNYW51YWxUeXBlOm51bGwsX2JBdHRyU3JjOiExLGZuQ3JlYXRlZENlbGw6bnVsbCxmbkdldERhdGE6bnVsbCxmblNldERhdGE6bnVsbCxtRGF0YTpudWxsLG1SZW5kZXI6bnVsbCxuVGg6bnVsbCxuVGY6bnVsbCxzQ2xhc3M6bnVsbCxzQ29udGVudFBhZGRpbmc6bnVsbCwKc0RlZmF1bHRDb250ZW50Om51bGwsc05hbWU6bnVsbCxzU29ydERhdGFUeXBlOiJzdGQiLHNTb3J0aW5nQ2xhc3M6bnVsbCxzU29ydGluZ0NsYXNzSlVJOm51bGwsc1RpdGxlOm51bGwsc1R5cGU6bnVsbCxzV2lkdGg6bnVsbCxzV2lkdGhPcmlnOm51bGx9O3EuZGVmYXVsdHM9e2FhRGF0YTpudWxsLGFhU29ydGluZzpbWzAsImFzYyJdXSxhYVNvcnRpbmdGaXhlZDpbXSxhamF4Om51bGwsYUxlbmd0aE1lbnU6WzEwLDI1LDUwLDEwMF0sYW9Db2x1bW5zOm51bGwsYW9Db2x1bW5EZWZzOm51bGwsYW9TZWFyY2hDb2xzOltdLGFzU3RyaXBlQ2xhc3NlczpudWxsLGJBdXRvV2lkdGg6ITAsYkRlZmVyUmVuZGVyOiExLGJEZXN0cm95OiExLGJGaWx0ZXI6ITAsYkluZm86ITAsYkxlbmd0aENoYW5nZTohMCxiUGFnaW5hdGU6ITAsYlByb2Nlc3Npbmc6ITEsYlJldHJpZXZlOiExLGJTY3JvbGxDb2xsYXBzZTohMSxiU2VydmVyU2lkZTohMSxiU29ydDohMCxiU29ydE11bHRpOiEwLGJTb3J0Q2VsbHNUb3A6ITEsCmJTb3J0Q2xhc3NlczohMCxiU3RhdGVTYXZlOiExLGZuQ3JlYXRlZFJvdzpudWxsLGZuRHJhd0NhbGxiYWNrOm51bGwsZm5Gb290ZXJDYWxsYmFjazpudWxsLGZuRm9ybWF0TnVtYmVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKCkucmVwbGFjZSgvXEIoPz0oXGR7M30pKyg/IVxkKSkvZyx0aGlzLm9MYW5ndWFnZS5zVGhvdXNhbmRzKX0sZm5IZWFkZXJDYWxsYmFjazpudWxsLGZuSW5mb0NhbGxiYWNrOm51bGwsZm5Jbml0Q29tcGxldGU6bnVsbCxmblByZURyYXdDYWxsYmFjazpudWxsLGZuUm93Q2FsbGJhY2s6bnVsbCxmblNlcnZlckRhdGE6bnVsbCxmblNlcnZlclBhcmFtczpudWxsLGZuU3RhdGVMb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKCgtMT09PWEuaVN0YXRlRHVyYXRpb24/c2Vzc2lvblN0b3JhZ2U6bG9jYWxTdG9yYWdlKS5nZXRJdGVtKCJEYXRhVGFibGVzXyIrYS5zSW5zdGFuY2UrIl8iK2xvY2F0aW9uLnBhdGhuYW1lKSl9Y2F0Y2goYil7fX0sCmZuU3RhdGVMb2FkUGFyYW1zOm51bGwsZm5TdGF0ZUxvYWRlZDpudWxsLGZuU3RhdGVTYXZlQ2FsbGJhY2s6ZnVuY3Rpb24oYSxiKXt0cnl7KC0xPT09YS5pU3RhdGVEdXJhdGlvbj9zZXNzaW9uU3RvcmFnZTpsb2NhbFN0b3JhZ2UpLnNldEl0ZW0oIkRhdGFUYWJsZXNfIithLnNJbnN0YW5jZSsiXyIrbG9jYXRpb24ucGF0aG5hbWUsSlNPTi5zdHJpbmdpZnkoYikpfWNhdGNoKGMpe319LGZuU3RhdGVTYXZlUGFyYW1zOm51bGwsaVN0YXRlRHVyYXRpb246NzIwMCxpRGVmZXJMb2FkaW5nOm51bGwsaURpc3BsYXlMZW5ndGg6MTAsaURpc3BsYXlTdGFydDowLGlUYWJJbmRleDowLG9DbGFzc2VzOnt9LG9MYW5ndWFnZTp7b0FyaWE6e3NTb3J0QXNjZW5kaW5nOiI6IGFjdGl2YXRlIHRvIHNvcnQgY29sdW1uIGFzY2VuZGluZyIsc1NvcnREZXNjZW5kaW5nOiI6IGFjdGl2YXRlIHRvIHNvcnQgY29sdW1uIGRlc2NlbmRpbmcifSxvUGFnaW5hdGU6e3NGaXJzdDoiRmlyc3QiLHNMYXN0OiJMYXN0IiwKc05leHQ6Ik5leHQiLHNQcmV2aW91czoiUHJldmlvdXMifSxzRW1wdHlUYWJsZToiTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUiLHNJbmZvOiJTaG93aW5nIF9TVEFSVF8gdG8gX0VORF8gb2YgX1RPVEFMXyBlbnRyaWVzIixzSW5mb0VtcHR5OiJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXMiLHNJbmZvRmlsdGVyZWQ6IihmaWx0ZXJlZCBmcm9tIF9NQVhfIHRvdGFsIGVudHJpZXMpIixzSW5mb1Bvc3RGaXg6IiIsc0RlY2ltYWw6IiIsc1Rob3VzYW5kczoiLCIsc0xlbmd0aE1lbnU6IlNob3cgX01FTlVfIGVudHJpZXMiLHNMb2FkaW5nUmVjb3JkczoiTG9hZGluZy4uLiIsc1Byb2Nlc3Npbmc6IlByb2Nlc3NpbmcuLi4iLHNTZWFyY2g6IlNlYXJjaDoiLHNTZWFyY2hQbGFjZWhvbGRlcjoiIixzVXJsOiIiLHNaZXJvUmVjb3JkczoiTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZCJ9LG9TZWFyY2g6Zi5leHRlbmQoe30scS5tb2RlbHMub1NlYXJjaCksc0FqYXhEYXRhUHJvcDoiZGF0YSIsCnNBamF4U291cmNlOm51bGwsc0RvbToibGZydGlwIixzZWFyY2hEZWxheTpudWxsLHNQYWdpbmF0aW9uVHlwZToic2ltcGxlX251bWJlcnMiLHNTY3JvbGxYOiIiLHNTY3JvbGxYSW5uZXI6IiIsc1Njcm9sbFk6IiIsc1NlcnZlck1ldGhvZDoiR0VUIixyZW5kZXJlcjpudWxsLHJvd0lkOiJEVF9Sb3dJZCJ9O0gocS5kZWZhdWx0cyk7cS5kZWZhdWx0cy5jb2x1bW49e2FEYXRhU29ydDpudWxsLGlEYXRhU29ydDotMSxhc1NvcnRpbmc6WyJhc2MiLCJkZXNjIl0sYlNlYXJjaGFibGU6ITAsYlNvcnRhYmxlOiEwLGJWaXNpYmxlOiEwLGZuQ3JlYXRlZENlbGw6bnVsbCxtRGF0YTpudWxsLG1SZW5kZXI6bnVsbCxzQ2VsbFR5cGU6InRkIixzQ2xhc3M6IiIsc0NvbnRlbnRQYWRkaW5nOiIiLHNEZWZhdWx0Q29udGVudDpudWxsLHNOYW1lOiIiLHNTb3J0RGF0YVR5cGU6InN0ZCIsc1RpdGxlOm51bGwsc1R5cGU6bnVsbCxzV2lkdGg6bnVsbH07SChxLmRlZmF1bHRzLmNvbHVtbik7cS5tb2RlbHMub1NldHRpbmdzPQp7b0ZlYXR1cmVzOntiQXV0b1dpZHRoOm51bGwsYkRlZmVyUmVuZGVyOm51bGwsYkZpbHRlcjpudWxsLGJJbmZvOm51bGwsYkxlbmd0aENoYW5nZTpudWxsLGJQYWdpbmF0ZTpudWxsLGJQcm9jZXNzaW5nOm51bGwsYlNlcnZlclNpZGU6bnVsbCxiU29ydDpudWxsLGJTb3J0TXVsdGk6bnVsbCxiU29ydENsYXNzZXM6bnVsbCxiU3RhdGVTYXZlOm51bGx9LG9TY3JvbGw6e2JDb2xsYXBzZTpudWxsLGlCYXJXaWR0aDowLHNYOm51bGwsc1hJbm5lcjpudWxsLHNZOm51bGx9LG9MYW5ndWFnZTp7Zm5JbmZvQ2FsbGJhY2s6bnVsbH0sb0Jyb3dzZXI6e2JTY3JvbGxPdmVyc2l6ZTohMSxiU2Nyb2xsYmFyTGVmdDohMSxiQm91bmRpbmc6ITEsYmFyV2lkdGg6MH0sYWpheDpudWxsLGFhbkZlYXR1cmVzOltdLGFvRGF0YTpbXSxhaURpc3BsYXk6W10sYWlEaXNwbGF5TWFzdGVyOltdLGFJZHM6e30sYW9Db2x1bW5zOltdLGFvSGVhZGVyOltdLGFvRm9vdGVyOltdLG9QcmV2aW91c1NlYXJjaDp7fSwKYW9QcmVTZWFyY2hDb2xzOltdLGFhU29ydGluZzpudWxsLGFhU29ydGluZ0ZpeGVkOltdLGFzU3RyaXBlQ2xhc3NlczpudWxsLGFzRGVzdHJveVN0cmlwZXM6W10sc0Rlc3Ryb3lXaWR0aDowLGFvUm93Q2FsbGJhY2s6W10sYW9IZWFkZXJDYWxsYmFjazpbXSxhb0Zvb3RlckNhbGxiYWNrOltdLGFvRHJhd0NhbGxiYWNrOltdLGFvUm93Q3JlYXRlZENhbGxiYWNrOltdLGFvUHJlRHJhd0NhbGxiYWNrOltdLGFvSW5pdENvbXBsZXRlOltdLGFvU3RhdGVTYXZlUGFyYW1zOltdLGFvU3RhdGVMb2FkUGFyYW1zOltdLGFvU3RhdGVMb2FkZWQ6W10sc1RhYmxlSWQ6IiIsblRhYmxlOm51bGwsblRIZWFkOm51bGwsblRGb290Om51bGwsblRCb2R5Om51bGwsblRhYmxlV3JhcHBlcjpudWxsLGJEZWZlckxvYWRpbmc6ITEsYkluaXRpYWxpc2VkOiExLGFvT3BlblJvd3M6W10sc0RvbTpudWxsLHNlYXJjaERlbGF5Om51bGwsc1BhZ2luYXRpb25UeXBlOiJ0d29fYnV0dG9uIixpU3RhdGVEdXJhdGlvbjowLAphb1N0YXRlU2F2ZTpbXSxhb1N0YXRlTG9hZDpbXSxvU2F2ZWRTdGF0ZTpudWxsLG9Mb2FkZWRTdGF0ZTpudWxsLHNBamF4U291cmNlOm51bGwsc0FqYXhEYXRhUHJvcDpudWxsLGJBamF4RGF0YUdldDohMCxqcVhIUjpudWxsLGpzb246cCxvQWpheERhdGE6cCxmblNlcnZlckRhdGE6bnVsbCxhb1NlcnZlclBhcmFtczpbXSxzU2VydmVyTWV0aG9kOm51bGwsZm5Gb3JtYXROdW1iZXI6bnVsbCxhTGVuZ3RoTWVudTpudWxsLGlEcmF3OjAsYkRyYXdpbmc6ITEsaURyYXdFcnJvcjotMSxfaURpc3BsYXlMZW5ndGg6MTAsX2lEaXNwbGF5U3RhcnQ6MCxfaVJlY29yZHNUb3RhbDowLF9pUmVjb3Jkc0Rpc3BsYXk6MCxvQ2xhc3Nlczp7fSxiRmlsdGVyZWQ6ITEsYlNvcnRlZDohMSxiU29ydENlbGxzVG9wOm51bGwsb0luaXQ6bnVsbCxhb0Rlc3Ryb3lDYWxsYmFjazpbXSxmblJlY29yZHNUb3RhbDpmdW5jdGlvbigpe3JldHVybiJzc3AiPT1EKHRoaXMpPzEqdGhpcy5faVJlY29yZHNUb3RhbDoKdGhpcy5haURpc3BsYXlNYXN0ZXIubGVuZ3RofSxmblJlY29yZHNEaXNwbGF5OmZ1bmN0aW9uKCl7cmV0dXJuInNzcCI9PUQodGhpcyk/MSp0aGlzLl9pUmVjb3Jkc0Rpc3BsYXk6dGhpcy5haURpc3BsYXkubGVuZ3RofSxmbkRpc3BsYXlFbmQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pRGlzcGxheUxlbmd0aCxiPXRoaXMuX2lEaXNwbGF5U3RhcnQsYz1iK2EsZD10aGlzLmFpRGlzcGxheS5sZW5ndGgsZT10aGlzLm9GZWF0dXJlcyxmPWUuYlBhZ2luYXRlO3JldHVybiBlLmJTZXJ2ZXJTaWRlPyExPT09Znx8LTE9PT1hP2IrZDpNYXRoLm1pbihiK2EsdGhpcy5faVJlY29yZHNEaXNwbGF5KTohZnx8Yz5kfHwtMT09PWE/ZDpjfSxvSW5zdGFuY2U6bnVsbCxzSW5zdGFuY2U6bnVsbCxpVGFiSW5kZXg6MCxuU2Nyb2xsSGVhZDpudWxsLG5TY3JvbGxGb290Om51bGwsYUxhc3RTb3J0OltdLG9QbHVnaW5zOnt9LHJvd0lkRm46bnVsbCxyb3dJZDpudWxsfTtxLmV4dD1DPXtidXR0b25zOnt9LApjbGFzc2VzOnt9LGJ1aWxkZXI6Ii1zb3VyY2UtIixlcnJNb2RlOiJhbGVydCIsZmVhdHVyZTpbXSxzZWFyY2g6W10sc2VsZWN0b3I6e2NlbGw6W10sY29sdW1uOltdLHJvdzpbXX0saW50ZXJuYWw6e30sbGVnYWN5OnthamF4Om51bGx9LHBhZ2VyOnt9LHJlbmRlcmVyOntwYWdlQnV0dG9uOnt9LGhlYWRlcjp7fX0sb3JkZXI6e30sdHlwZTp7ZGV0ZWN0OltdLHNlYXJjaDp7fSxvcmRlcjp7fX0sX3VuaXF1ZTowLGZuVmVyc2lvbkNoZWNrOnEuZm5WZXJzaW9uQ2hlY2ssaUFwaUluZGV4OjAsb0pVSUNsYXNzZXM6e30sc1ZlcnNpb246cS52ZXJzaW9ufTtmLmV4dGVuZChDLHthZm5GaWx0ZXJpbmc6Qy5zZWFyY2gsYVR5cGVzOkMudHlwZS5kZXRlY3Qsb2ZuU2VhcmNoOkMudHlwZS5zZWFyY2gsb1NvcnQ6Qy50eXBlLm9yZGVyLGFmblNvcnREYXRhOkMub3JkZXIsYW9GZWF0dXJlczpDLmZlYXR1cmUsb0FwaTpDLmludGVybmFsLG9TdGRDbGFzc2VzOkMuY2xhc3NlcyxvUGFnaW5hdGlvbjpDLnBhZ2VyfSk7CmYuZXh0ZW5kKHEuZXh0LmNsYXNzZXMse3NUYWJsZToiZGF0YVRhYmxlIixzTm9Gb290ZXI6Im5vLWZvb3RlciIsc1BhZ2VCdXR0b246InBhZ2luYXRlX2J1dHRvbiIsc1BhZ2VCdXR0b25BY3RpdmU6ImN1cnJlbnQiLHNQYWdlQnV0dG9uRGlzYWJsZWQ6ImRpc2FibGVkIixzU3RyaXBlT2RkOiJvZGQiLHNTdHJpcGVFdmVuOiJldmVuIixzUm93RW1wdHk6ImRhdGFUYWJsZXNfZW1wdHkiLHNXcmFwcGVyOiJkYXRhVGFibGVzX3dyYXBwZXIiLHNGaWx0ZXI6ImRhdGFUYWJsZXNfZmlsdGVyIixzSW5mbzoiZGF0YVRhYmxlc19pbmZvIixzUGFnaW5nOiJkYXRhVGFibGVzX3BhZ2luYXRlIHBhZ2luZ18iLHNMZW5ndGg6ImRhdGFUYWJsZXNfbGVuZ3RoIixzUHJvY2Vzc2luZzoiZGF0YVRhYmxlc19wcm9jZXNzaW5nIixzU29ydEFzYzoic29ydGluZ19hc2MiLHNTb3J0RGVzYzoic29ydGluZ19kZXNjIixzU29ydGFibGU6InNvcnRpbmciLHNTb3J0YWJsZUFzYzoic29ydGluZ19hc2NfZGlzYWJsZWQiLApzU29ydGFibGVEZXNjOiJzb3J0aW5nX2Rlc2NfZGlzYWJsZWQiLHNTb3J0YWJsZU5vbmU6InNvcnRpbmdfZGlzYWJsZWQiLHNTb3J0Q29sdW1uOiJzb3J0aW5nXyIsc0ZpbHRlcklucHV0OiIiLHNMZW5ndGhTZWxlY3Q6IiIsc1Njcm9sbFdyYXBwZXI6ImRhdGFUYWJsZXNfc2Nyb2xsIixzU2Nyb2xsSGVhZDoiZGF0YVRhYmxlc19zY3JvbGxIZWFkIixzU2Nyb2xsSGVhZElubmVyOiJkYXRhVGFibGVzX3Njcm9sbEhlYWRJbm5lciIsc1Njcm9sbEJvZHk6ImRhdGFUYWJsZXNfc2Nyb2xsQm9keSIsc1Njcm9sbEZvb3Q6ImRhdGFUYWJsZXNfc2Nyb2xsRm9vdCIsc1Njcm9sbEZvb3RJbm5lcjoiZGF0YVRhYmxlc19zY3JvbGxGb290SW5uZXIiLHNIZWFkZXJUSDoiIixzRm9vdGVyVEg6IiIsc1NvcnRKVUlBc2M6IiIsc1NvcnRKVUlEZXNjOiIiLHNTb3J0SlVJOiIiLHNTb3J0SlVJQXNjQWxsb3dlZDoiIixzU29ydEpVSURlc2NBbGxvd2VkOiIiLHNTb3J0SlVJV3JhcHBlcjoiIixzU29ydEljb246IiIsCnNKVUlIZWFkZXI6IiIsc0pVSUZvb3RlcjoiIn0pO3ZhciBQYj1xLmV4dC5wYWdlcjtmLmV4dGVuZChQYix7c2ltcGxlOmZ1bmN0aW9uKGEsYil7cmV0dXJuWyJwcmV2aW91cyIsIm5leHQiXX0sZnVsbDpmdW5jdGlvbihhLGIpe3JldHVyblsiZmlyc3QiLCJwcmV2aW91cyIsIm5leHQiLCJsYXN0Il19LG51bWJlcnM6ZnVuY3Rpb24oYSxiKXtyZXR1cm5ba2EoYSxiKV19LHNpbXBsZV9udW1iZXJzOmZ1bmN0aW9uKGEsYil7cmV0dXJuWyJwcmV2aW91cyIsa2EoYSxiKSwibmV4dCJdfSxmdWxsX251bWJlcnM6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bImZpcnN0IiwicHJldmlvdXMiLGthKGEsYiksIm5leHQiLCJsYXN0Il19LGZpcnN0X2xhc3RfbnVtYmVyczpmdW5jdGlvbihhLGIpe3JldHVyblsiZmlyc3QiLGthKGEsYiksImxhc3QiXX0sX251bWJlcnM6a2EsbnVtYmVyc19sZW5ndGg6N30pO2YuZXh0ZW5kKCEwLHEuZXh0LnJlbmRlcmVyLHtwYWdlQnV0dG9uOntfOmZ1bmN0aW9uKGEsYiwKYyxkLGUsaCl7dmFyIGc9YS5vQ2xhc3NlcyxrPWEub0xhbmd1YWdlLm9QYWdpbmF0ZSxsPWEub0xhbmd1YWdlLm9BcmlhLnBhZ2luYXRlfHx7fSxuLG0scT0wLHQ9ZnVuY3Rpb24oYixkKXt2YXIgcCxyPWcuc1BhZ2VCdXR0b25EaXNhYmxlZCx1PWZ1bmN0aW9uKGIpe1hhKGEsYi5kYXRhLmFjdGlvbiwhMCl9O3ZhciB3PTA7Zm9yKHA9ZC5sZW5ndGg7dzxwO3crKyl7dmFyIHY9ZFt3XTtpZihmLmlzQXJyYXkodikpe3ZhciB4PWYoIjwiKyh2LkRUX2VsfHwiZGl2IikrIi8+IikuYXBwZW5kVG8oYik7dCh4LHYpfWVsc2V7bj1udWxsO209djt4PWEuaVRhYkluZGV4O3N3aXRjaCh2KXtjYXNlICJlbGxpcHNpcyI6Yi5hcHBlbmQoJzxzcGFuIGNsYXNzPSJlbGxpcHNpcyI+JiN4MjAyNjs8L3NwYW4+Jyk7YnJlYWs7Y2FzZSAiZmlyc3QiOm49ay5zRmlyc3Q7MD09PWUmJih4PS0xLG0rPSIgIityKTticmVhaztjYXNlICJwcmV2aW91cyI6bj1rLnNQcmV2aW91czswPT09ZSYmKHg9LTEsbSs9CiIgIityKTticmVhaztjYXNlICJuZXh0IjpuPWsuc05leHQ7ZT09PWgtMSYmKHg9LTEsbSs9IiAiK3IpO2JyZWFrO2Nhc2UgImxhc3QiOm49ay5zTGFzdDtlPT09aC0xJiYoeD0tMSxtKz0iICIrcik7YnJlYWs7ZGVmYXVsdDpuPXYrMSxtPWU9PT12P2cuc1BhZ2VCdXR0b25BY3RpdmU6IiJ9bnVsbCE9PW4mJih4PWYoIjxhPiIseyJjbGFzcyI6Zy5zUGFnZUJ1dHRvbisiICIrbSwiYXJpYS1jb250cm9scyI6YS5zVGFibGVJZCwiYXJpYS1sYWJlbCI6bFt2XSwiZGF0YS1kdC1pZHgiOnEsdGFiaW5kZXg6eCxpZDowPT09YyYmInN0cmluZyI9PT10eXBlb2Ygdj9hLnNUYWJsZUlkKyJfIit2Om51bGx9KS5odG1sKG4pLmFwcGVuZFRvKGIpLCRhKHgse2FjdGlvbjp2fSx1KSxxKyspfX19O3RyeXt2YXIgdj1mKGIpLmZpbmQoeS5hY3RpdmVFbGVtZW50KS5kYXRhKCJkdC1pZHgiKX1jYXRjaChtYyl7fXQoZihiKS5lbXB0eSgpLGQpO3YhPT1wJiZmKGIpLmZpbmQoIltkYXRhLWR0LWlkeD0iKwp2KyJdIikuZm9jdXMoKX19fSk7Zi5leHRlbmQocS5leHQudHlwZS5kZXRlY3QsW2Z1bmN0aW9uKGEsYil7Yj1iLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gZGIoYSxiKT8ibnVtIitiOm51bGx9LGZ1bmN0aW9uKGEsYil7aWYoYSYmIShhIGluc3RhbmNlb2YgRGF0ZSkmJiFjYy50ZXN0KGEpKXJldHVybiBudWxsO2I9RGF0ZS5wYXJzZShhKTtyZXR1cm4gbnVsbCE9PWImJiFpc05hTihiKXx8UChhKT8iZGF0ZSI6bnVsbH0sZnVuY3Rpb24oYSxiKXtiPWIub0xhbmd1YWdlLnNEZWNpbWFsO3JldHVybiBkYihhLGIsITApPyJudW0tZm10IitiOm51bGx9LGZ1bmN0aW9uKGEsYil7Yj1iLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gVWIoYSxiKT8iaHRtbC1udW0iK2I6bnVsbH0sZnVuY3Rpb24oYSxiKXtiPWIub0xhbmd1YWdlLnNEZWNpbWFsO3JldHVybiBVYihhLGIsITApPyJodG1sLW51bS1mbXQiK2I6bnVsbH0sZnVuY3Rpb24oYSxiKXtyZXR1cm4gUChhKXx8InN0cmluZyI9PT0KdHlwZW9mIGEmJi0xIT09YS5pbmRleE9mKCI8Iik/Imh0bWwiOm51bGx9XSk7Zi5leHRlbmQocS5leHQudHlwZS5zZWFyY2gse2h0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSk/YToic3RyaW5nIj09PXR5cGVvZiBhP2EucmVwbGFjZShSYiwiICIpLnJlcGxhY2UoRWEsIiIpOiIifSxzdHJpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSk/YToic3RyaW5nIj09PXR5cGVvZiBhP2EucmVwbGFjZShSYiwiICIpOmF9fSk7dmFyIERhPWZ1bmN0aW9uKGEsYixjLGQpe2lmKDAhPT1hJiYoIWF8fCItIj09PWEpKXJldHVybi1JbmZpbml0eTtiJiYoYT1UYihhLGIpKTthLnJlcGxhY2UmJihjJiYoYT1hLnJlcGxhY2UoYywiIikpLGQmJihhPWEucmVwbGFjZShkLCIiKSkpO3JldHVybiAxKmF9O2YuZXh0ZW5kKEMudHlwZS5vcmRlcix7ImRhdGUtcHJlIjpmdW5jdGlvbihhKXthPURhdGUucGFyc2UoYSk7cmV0dXJuIGlzTmFOKGEpPy1JbmZpbml0eTphfSwiaHRtbC1wcmUiOmZ1bmN0aW9uKGEpe3JldHVybiBQKGEpPwoiIjphLnJlcGxhY2U/YS5yZXBsYWNlKC88Lio/Pi9nLCIiKS50b0xvd2VyQ2FzZSgpOmErIiJ9LCJzdHJpbmctcHJlIjpmdW5jdGlvbihhKXtyZXR1cm4gUChhKT8iIjoic3RyaW5nIj09PXR5cGVvZiBhP2EudG9Mb3dlckNhc2UoKTphLnRvU3RyaW5nP2EudG9TdHJpbmcoKToiIn0sInN0cmluZy1hc2MiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE8Yj8tMTphPmI/MTowfSwic3RyaW5nLWRlc2MiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE8Yj8xOmE+Yj8tMTowfX0pO0hhKCIiKTtmLmV4dGVuZCghMCxxLmV4dC5yZW5kZXJlcix7aGVhZGVyOntfOmZ1bmN0aW9uKGEsYixjLGQpe2YoYS5uVGFibGUpLm9uKCJvcmRlci5kdC5EVCIsZnVuY3Rpb24oZSxmLGcsayl7YT09PWYmJihlPWMuaWR4LGIucmVtb3ZlQ2xhc3MoYy5zU29ydGluZ0NsYXNzKyIgIitkLnNTb3J0QXNjKyIgIitkLnNTb3J0RGVzYykuYWRkQ2xhc3MoImFzYyI9PWtbZV0/ZC5zU29ydEFzYzoiZGVzYyI9PWtbZV0/ZC5zU29ydERlc2M6CmMuc1NvcnRpbmdDbGFzcykpfSl9LGpxdWVyeXVpOmZ1bmN0aW9uKGEsYixjLGQpe2YoIjxkaXYvPiIpLmFkZENsYXNzKGQuc1NvcnRKVUlXcmFwcGVyKS5hcHBlbmQoYi5jb250ZW50cygpKS5hcHBlbmQoZigiPHNwYW4vPiIpLmFkZENsYXNzKGQuc1NvcnRJY29uKyIgIitjLnNTb3J0aW5nQ2xhc3NKVUkpKS5hcHBlbmRUbyhiKTtmKGEublRhYmxlKS5vbigib3JkZXIuZHQuRFQiLGZ1bmN0aW9uKGUsZixnLGspe2E9PT1mJiYoZT1jLmlkeCxiLnJlbW92ZUNsYXNzKGQuc1NvcnRBc2MrIiAiK2Quc1NvcnREZXNjKS5hZGRDbGFzcygiYXNjIj09a1tlXT9kLnNTb3J0QXNjOiJkZXNjIj09a1tlXT9kLnNTb3J0RGVzYzpjLnNTb3J0aW5nQ2xhc3MpLGIuZmluZCgic3Bhbi4iK2Quc1NvcnRJY29uKS5yZW1vdmVDbGFzcyhkLnNTb3J0SlVJQXNjKyIgIitkLnNTb3J0SlVJRGVzYysiICIrZC5zU29ydEpVSSsiICIrZC5zU29ydEpVSUFzY0FsbG93ZWQrIiAiK2Quc1NvcnRKVUlEZXNjQWxsb3dlZCkuYWRkQ2xhc3MoImFzYyI9PQprW2VdP2Quc1NvcnRKVUlBc2M6ImRlc2MiPT1rW2VdP2Quc1NvcnRKVUlEZXNjOmMuc1NvcnRpbmdDbGFzc0pVSSkpfSl9fX0pO3ZhciBpYj1mdW5jdGlvbihhKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBhP2EucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKTphfTtxLnJlbmRlcj17bnVtYmVyOmZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJue2Rpc3BsYXk6ZnVuY3Rpb24oZil7aWYoIm51bWJlciIhPT10eXBlb2YgZiYmInN0cmluZyIhPT10eXBlb2YgZilyZXR1cm4gZjt2YXIgZz0wPmY/Ii0iOiIiLGg9cGFyc2VGbG9hdChmKTtpZihpc05hTihoKSlyZXR1cm4gaWIoZik7aD1oLnRvRml4ZWQoYyk7Zj1NYXRoLmFicyhoKTtoPXBhcnNlSW50KGYsMTApO2Y9Yz9iKyhmLWgpLnRvRml4ZWQoYykuc3Vic3RyaW5nKDIpOiIiO3JldHVybiBnKyhkfHwiIikraC50b1N0cmluZygpLnJlcGxhY2UoL1xCKD89KFxkezN9KSsoPyFcZCkpL2csCmEpK2YrKGV8fCIiKX19fSx0ZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2Rpc3BsYXk6aWIsZmlsdGVyOmlifX19O2YuZXh0ZW5kKHEuZXh0LmludGVybmFsLHtfZm5FeHRlcm5BcGlGdW5jOlFiLF9mbkJ1aWxkQWpheDp2YSxfZm5BamF4VXBkYXRlOnFiLF9mbkFqYXhQYXJhbWV0ZXJzOnpiLF9mbkFqYXhVcGRhdGVEcmF3OkFiLF9mbkFqYXhEYXRhU3JjOndhLF9mbkFkZENvbHVtbjpJYSxfZm5Db2x1bW5PcHRpb25zOm1hLF9mbkFkanVzdENvbHVtblNpemluZzphYSxfZm5WaXNpYmxlVG9Db2x1bW5JbmRleDpiYSxfZm5Db2x1bW5JbmRleFRvVmlzaWJsZTpjYSxfZm5WaXNibGVDb2x1bW5zOlcsX2ZuR2V0Q29sdW1uczpvYSxfZm5Db2x1bW5UeXBlczpLYSxfZm5BcHBseUNvbHVtbkRlZnM6bmIsX2ZuSHVuZ2FyaWFuTWFwOkgsX2ZuQ2FtZWxUb0h1bmdhcmlhbjpMLF9mbkxhbmd1YWdlQ29tcGF0OkdhLF9mbkJyb3dzZXJEZXRlY3Q6bGIsX2ZuQWRkRGF0YTpSLF9mbkFkZFRyOnBhLF9mbk5vZGVUb0RhdGFJbmRleDpmdW5jdGlvbihhLApiKXtyZXR1cm4gYi5fRFRfUm93SW5kZXghPT1wP2IuX0RUX1Jvd0luZGV4Om51bGx9LF9mbk5vZGVUb0NvbHVtbkluZGV4OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5pbkFycmF5KGMsYS5hb0RhdGFbYl0uYW5DZWxscyl9LF9mbkdldENlbGxEYXRhOkksX2ZuU2V0Q2VsbERhdGE6b2IsX2ZuU3BsaXRPYmpOb3RhdGlvbjpOYSxfZm5HZXRPYmplY3REYXRhRm46VSxfZm5TZXRPYmplY3REYXRhRm46USxfZm5HZXREYXRhTWFzdGVyOk9hLF9mbkNsZWFyVGFibGU6cWEsX2ZuRGVsZXRlSW5kZXg6cmEsX2ZuSW52YWxpZGF0ZTplYSxfZm5HZXRSb3dFbGVtZW50czpNYSxfZm5DcmVhdGVUcjpMYSxfZm5CdWlsZEhlYWQ6cGIsX2ZuRHJhd0hlYWQ6aGEsX2ZuRHJhdzpTLF9mblJlRHJhdzpWLF9mbkFkZE9wdGlvbnNIdG1sOnNiLF9mbkRldGVjdEhlYWRlcjpmYSxfZm5HZXRVbmlxdWVUaHM6dWEsX2ZuRmVhdHVyZUh0bWxGaWx0ZXI6dWIsX2ZuRmlsdGVyQ29tcGxldGU6aWEsX2ZuRmlsdGVyQ3VzdG9tOkRiLApfZm5GaWx0ZXJDb2x1bW46Q2IsX2ZuRmlsdGVyOkJiLF9mbkZpbHRlckNyZWF0ZVNlYXJjaDpUYSxfZm5Fc2NhcGVSZWdleDpVYSxfZm5GaWx0ZXJEYXRhOkViLF9mbkZlYXR1cmVIdG1sSW5mbzp4YixfZm5VcGRhdGVJbmZvOkhiLF9mbkluZm9NYWNyb3M6SWIsX2ZuSW5pdGlhbGlzZTpqYSxfZm5Jbml0Q29tcGxldGU6eGEsX2ZuTGVuZ3RoQ2hhbmdlOlZhLF9mbkZlYXR1cmVIdG1sTGVuZ3RoOnRiLF9mbkZlYXR1cmVIdG1sUGFnaW5hdGU6eWIsX2ZuUGFnZUNoYW5nZTpYYSxfZm5GZWF0dXJlSHRtbFByb2Nlc3Npbmc6dmIsX2ZuUHJvY2Vzc2luZ0Rpc3BsYXk6SyxfZm5GZWF0dXJlSHRtbFRhYmxlOndiLF9mblNjcm9sbERyYXc6bmEsX2ZuQXBwbHlUb0NoaWxkcmVuOk4sX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzOkphLF9mblRocm90dGxlOlNhLF9mbkNvbnZlcnRUb1dpZHRoOkpiLF9mbkdldFdpZGVzdE5vZGU6S2IsX2ZuR2V0TWF4TGVuU3RyaW5nOkxiLF9mblN0cmluZ1RvQ3NzOkIsCl9mblNvcnRGbGF0dGVuOlksX2ZuU29ydDpyYixfZm5Tb3J0QXJpYTpOYixfZm5Tb3J0TGlzdGVuZXI6WmEsX2ZuU29ydEF0dGFjaExpc3RlbmVyOlFhLF9mblNvcnRpbmdDbGFzc2VzOkFhLF9mblNvcnREYXRhOk1iLF9mblNhdmVTdGF0ZTpCYSxfZm5Mb2FkU3RhdGU6T2IsX2ZuU2V0dGluZ3NGcm9tTm9kZTpDYSxfZm5Mb2c6TyxfZm5NYXA6TSxfZm5CaW5kQWN0aW9uOiRhLF9mbkNhbGxiYWNrUmVnOkUsX2ZuQ2FsbGJhY2tGaXJlOkEsX2ZuTGVuZ3RoT3ZlcmZsb3c6V2EsX2ZuUmVuZGVyZXI6UmEsX2ZuRGF0YVNvdXJjZTpELF9mblJvd0F0dHJpYnV0ZXM6UGEsX2ZuRXh0ZW5kOmFiLF9mbkNhbGN1bGF0ZUVuZDpmdW5jdGlvbigpe319KTtmLmZuLmRhdGFUYWJsZT1xO3EuJD1mO2YuZm4uZGF0YVRhYmxlU2V0dGluZ3M9cS5zZXR0aW5ncztmLmZuLmRhdGFUYWJsZUV4dD1xLmV4dDtmLmZuLkRhdGFUYWJsZT1mdW5jdGlvbihhKXtyZXR1cm4gZih0aGlzKS5kYXRhVGFibGUoYSkuYXBpKCl9OwpmLmVhY2gocSxmdW5jdGlvbihhLGIpe2YuZm4uRGF0YVRhYmxlW2FdPWJ9KTtyZXR1cm4gZi5mbi5kYXRhVGFibGV9KTsK"></script>
<link href="data:text/css,%0A%2EnoUi%2Dtarget%2C%2EnoUi%2Dtarget%20%2A%7B%2Dwebkit%2Dtouch%2Dcallout%3Anone%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dms%2Dtouch%2Daction%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2EnoUi%2Dtarget%7Bposition%3Arelative%3Bdirection%3Altr%7D%2EnoUi%2Dbase%7Bwidth%3A100%25%3Bheight%3A100%25%3Bposition%3Arelative%7D%2EnoUi%2Dorigin%7Bposition%3Aabsolute%3Bright%3A0%3Btop%3A0%3Bleft%3A0%3Bbottom%3A0%7D%2EnoUi%2Dhandle%7Bposition%3Arelative%3Bz%2Dindex%3A1%7D%2EnoUi%2Dstacking%20%2EnoUi%2Dhandle%7Bz%2Dindex%3A10%7D%2EnoUi%2Dstate%2Dtap%20%2EnoUi%2Dorigin%7B%2Dwebkit%2Dtransition%3Aleft%20%2E3s%2Ctop%20%2E3s%3Btransition%3Aleft%20%2E3s%2Ctop%20%2E3s%7D%2EnoUi%2Dstate%2Ddrag%20%2A%7Bcursor%3Ainherit%21important%7D%2EnoUi%2Dbase%7B%2Dwebkit%2Dtransform%3Atranslate3d%280%2C0%2C0%29%3Btransform%3Atranslate3d%280%2C0%2C0%29%7D%2EnoUi%2Dhorizontal%7Bheight%3A10px%7D%2EnoUi%2Dhorizontal%20%2EnoUi%2Dhandle%7Bwidth%3A24px%3Bheight%3A18px%3Bleft%3A%2D12px%3Btop%3A%2D6px%7D%2EnoUi%2Dvertical%7Bwidth%3A18px%7D%2EnoUi%2Dvertical%20%2EnoUi%2Dhandle%7Bwidth%3A28px%3Bheight%3A34px%3Bleft%3A%2D6px%3Btop%3A%2D17px%7D%2EnoUi%2Dbackground%7Bbackground%3A%23FAFAFA%3Bbox%2Dshadow%3Ainset%200%201px%201px%20%23f0f0f0%7D%2EnoUi%2Dconnect%7Bbackground%3A%233FB8AF%3Bbox%2Dshadow%3Ainset%200%200%203px%20rgba%2851%2C51%2C51%2C%2E45%29%3B%2Dwebkit%2Dtransition%3Abackground%20450ms%3Btransition%3Abackground%20450ms%7D%2EnoUi%2Dorigin%7Bborder%2Dradius%3A2px%7D%2EnoUi%2Dtarget%7Bborder%2Dradius%3A4px%3Bborder%3A1px%20solid%20%23D3D3D3%3Bbox%2Dshadow%3Ainset%200%201px%201px%20%23F0F0F0%2C0%203px%206px%20%2D5px%20%23BBB%7D%2EnoUi%2Dtarget%2EnoUi%2Dconnect%7Bbox%2Dshadow%3Ainset%200%200%203px%20rgba%2851%2C51%2C51%2C%2E45%29%2C0%203px%206px%20%2D5px%20%23BBB%7D%2EnoUi%2Ddragable%7Bcursor%3Aw%2Dresize%7D%2EnoUi%2Dvertical%20%2EnoUi%2Ddragable%7Bcursor%3An%2Dresize%7D%2EnoUi%2Dhandle%7Bborder%3A1px%20solid%20%23D9D9D9%3Bborder%2Dradius%3A3px%3Bbackground%3A%23FFF%3Bcursor%3Adefault%3Bbox%2Dshadow%3Ainset%200%200%201px%20%23FFF%2Cinset%200%201px%207px%20%23EBEBEB%2C0%203px%206px%20%2D3px%20%23BBB%7D%2EnoUi%2Dactive%7Bbox%2Dshadow%3Ainset%200%200%201px%20%23FFF%2Cinset%200%201px%207px%20%23DDD%2C0%203px%206px%20%2D3px%20%23BBB%7D%2EnoUi%2Dhandle%3Aafter%2C%2EnoUi%2Dhandle%3Abefore%7Bcontent%3A%22%22%3Bdisplay%3Ablock%3Bposition%3Aabsolute%3Bheight%3A9px%3Bwidth%3A1px%3Bbackground%3A%23E8E7E6%3Bleft%3A9px%3Btop%3A3%2E5px%7D%2EnoUi%2Dhandle%3Aafter%7Bleft%3A12px%7D%2EnoUi%2Dvertical%20%2EnoUi%2Dhandle%3Aafter%2C%2EnoUi%2Dvertical%20%2EnoUi%2Dhandle%3Abefore%7Bwidth%3A14px%3Bheight%3A1px%3Bleft%3A6px%3Btop%3A14px%7D%2EnoUi%2Dvertical%20%2EnoUi%2Dhandle%3Aafter%7Btop%3A17px%7D%5Bdisabled%5D%20%2EnoUi%2Dconnect%2C%5Bdisabled%5D%2EnoUi%2Dconnect%7Bbackground%3A%23B8B8B8%7D%5Bdisabled%5D%20%2EnoUi%2Dhandle%7Bcursor%3Anot%2Dallowed%7D" rel="stylesheet" />
<script src="data:application/javascript;base64,LyohIG5vVWlTbGlkZXIgLSA3LjAuMTAgLSAyMDE1LTAzLTE3IDE3OjMwOjIyICovCgohZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm4gTWF0aC5yb3VuZChhL2IpKmJ9ZnVuY3Rpb24gYyhhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGEmJiFpc05hTihhKSYmaXNGaW5pdGUoYSl9ZnVuY3Rpb24gZChhKXt2YXIgYj1NYXRoLnBvdygxMCw3KTtyZXR1cm4gTnVtYmVyKChNYXRoLnJvdW5kKGEqYikvYikudG9GaXhlZCg3KSl9ZnVuY3Rpb24gZShhLGIsYyl7YS5hZGRDbGFzcyhiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5yZW1vdmVDbGFzcyhiKX0sYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxMDApLDApfWZ1bmN0aW9uIGcoYil7cmV0dXJuIGEuaXNBcnJheShiKT9iOltiXX1mdW5jdGlvbiBoKGEpe3ZhciBiPWEuc3BsaXQoIi4iKTtyZXR1cm4gYi5sZW5ndGg+MT9iWzFdLmxlbmd0aDowfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gMTAwLyhiLWEpfWZ1bmN0aW9uIGooYSxiKXtyZXR1cm4gMTAwKmIvKGFbMV0tYVswXSl9ZnVuY3Rpb24gayhhLGIpe3JldHVybiBqKGEsYVswXTwwP2IrTWF0aC5hYnMoYVswXSk6Yi1hWzBdKX1mdW5jdGlvbiBsKGEsYil7cmV0dXJuIGIqKGFbMV0tYVswXSkvMTAwK2FbMF19ZnVuY3Rpb24gbShhLGIpe2Zvcih2YXIgYz0xO2E+PWJbY107KWMrPTE7cmV0dXJuIGN9ZnVuY3Rpb24gbihhLGIsYyl7aWYoYz49YS5zbGljZSgtMSlbMF0pcmV0dXJuIDEwMDt2YXIgZCxlLGYsZyxoPW0oYyxhKTtyZXR1cm4gZD1hW2gtMV0sZT1hW2hdLGY9YltoLTFdLGc9YltoXSxmK2soW2QsZV0sYykvaShmLGcpfWZ1bmN0aW9uIG8oYSxiLGMpe2lmKGM+PTEwMClyZXR1cm4gYS5zbGljZSgtMSlbMF07dmFyIGQsZSxmLGcsaD1tKGMsYik7cmV0dXJuIGQ9YVtoLTFdLGU9YVtoXSxmPWJbaC0xXSxnPWJbaF0sbChbZCxlXSwoYy1mKSppKGYsZykpfWZ1bmN0aW9uIHAoYSxjLGQsZSl7aWYoMTAwPT09ZSlyZXR1cm4gZTt2YXIgZixnLGg9bShlLGEpO3JldHVybiBkPyhmPWFbaC0xXSxnPWFbaF0sZS1mPihnLWYpLzI/ZzpmKTpjW2gtMV0/YVtoLTFdK2IoZS1hW2gtMV0sY1toLTFdKTplfWZ1bmN0aW9uIHEoYSxiLGQpe3ZhciBlO2lmKCJudW1iZXIiPT10eXBlb2YgYiYmKGI9W2JdKSwiW29iamVjdCBBcnJheV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIpKXRocm93IG5ldyBFcnJvcigibm9VaVNsaWRlcjogJ3JhbmdlJyBjb250YWlucyBpbnZhbGlkIHZhbHVlLiIpO2lmKGU9Im1pbiI9PT1hPzA6Im1heCI9PT1hPzEwMDpwYXJzZUZsb2F0KGEpLCFjKGUpfHwhYyhiWzBdKSl0aHJvdyBuZXcgRXJyb3IoIm5vVWlTbGlkZXI6ICdyYW5nZScgdmFsdWUgaXNuJ3QgbnVtZXJpYy4iKTtkLnhQY3QucHVzaChlKSxkLnhWYWwucHVzaChiWzBdKSxlP2QueFN0ZXBzLnB1c2goaXNOYU4oYlsxXSk/ITE6YlsxXSk6aXNOYU4oYlsxXSl8fChkLnhTdGVwc1swXT1iWzFdKX1mdW5jdGlvbiByKGEsYixjKXtyZXR1cm4gYj92b2lkKGMueFN0ZXBzW2FdPWooW2MueFZhbFthXSxjLnhWYWxbYSsxXV0sYikvaShjLnhQY3RbYV0sYy54UGN0W2ErMV0pKTohMH1mdW5jdGlvbiBzKGEsYixjLGQpe3RoaXMueFBjdD1bXSx0aGlzLnhWYWw9W10sdGhpcy54U3RlcHM9W2R8fCExXSx0aGlzLnhOdW1TdGVwcz1bITFdLHRoaXMuc25hcD1iLHRoaXMuZGlyZWN0aW9uPWM7dmFyIGUsZj1bXTtmb3IoZSBpbiBhKWEuaGFzT3duUHJvcGVydHkoZSkmJmYucHVzaChbYVtlXSxlXSk7Zm9yKGYuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KSxlPTA7ZTxmLmxlbmd0aDtlKyspcShmW2VdWzFdLGZbZV1bMF0sdGhpcyk7Zm9yKHRoaXMueE51bVN0ZXBzPXRoaXMueFN0ZXBzLnNsaWNlKDApLGU9MDtlPHRoaXMueE51bVN0ZXBzLmxlbmd0aDtlKyspcihlLHRoaXMueE51bVN0ZXBzW2VdLHRoaXMpfWZ1bmN0aW9uIHQoYSxiKXtpZighYyhiKSl0aHJvdyBuZXcgRXJyb3IoIm5vVWlTbGlkZXI6ICdzdGVwJyBpcyBub3QgbnVtZXJpYy4iKTthLnNpbmdsZVN0ZXA9Yn1mdW5jdGlvbiB1KGIsYyl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxhLmlzQXJyYXkoYykpdGhyb3cgbmV3IEVycm9yKCJub1VpU2xpZGVyOiAncmFuZ2UnIGlzIG5vdCBhbiBvYmplY3QuIik7aWYodm9pZCAwPT09Yy5taW58fHZvaWQgMD09PWMubWF4KXRocm93IG5ldyBFcnJvcigibm9VaVNsaWRlcjogTWlzc2luZyAnbWluJyBvciAnbWF4JyBpbiAncmFuZ2UnLiIpO2Iuc3BlY3RydW09bmV3IHMoYyxiLnNuYXAsYi5kaXIsYi5zaW5nbGVTdGVwKX1mdW5jdGlvbiB2KGIsYyl7aWYoYz1nKGMpLCFhLmlzQXJyYXkoYyl8fCFjLmxlbmd0aHx8Yy5sZW5ndGg+Mil0aHJvdyBuZXcgRXJyb3IoIm5vVWlTbGlkZXI6ICdzdGFydCcgb3B0aW9uIGlzIGluY29ycmVjdC4iKTtiLmhhbmRsZXM9Yy5sZW5ndGgsYi5zdGFydD1jfWZ1bmN0aW9uIHcoYSxiKXtpZihhLnNuYXA9YiwiYm9vbGVhbiIhPXR5cGVvZiBiKXRocm93IG5ldyBFcnJvcigibm9VaVNsaWRlcjogJ3NuYXAnIG9wdGlvbiBtdXN0IGJlIGEgYm9vbGVhbi4iKX1mdW5jdGlvbiB4KGEsYil7aWYoYS5hbmltYXRlPWIsImJvb2xlYW4iIT10eXBlb2YgYil0aHJvdyBuZXcgRXJyb3IoIm5vVWlTbGlkZXI6ICdhbmltYXRlJyBvcHRpb24gbXVzdCBiZSBhIGJvb2xlYW4uIil9ZnVuY3Rpb24geShhLGIpe2lmKCJsb3dlciI9PT1iJiYxPT09YS5oYW5kbGVzKWEuY29ubmVjdD0xO2Vsc2UgaWYoInVwcGVyIj09PWImJjE9PT1hLmhhbmRsZXMpYS5jb25uZWN0PTI7ZWxzZSBpZihiPT09ITAmJjI9PT1hLmhhbmRsZXMpYS5jb25uZWN0PTM7ZWxzZXtpZihiIT09ITEpdGhyb3cgbmV3IEVycm9yKCJub1VpU2xpZGVyOiAnY29ubmVjdCcgb3B0aW9uIGRvZXNuJ3QgbWF0Y2ggaGFuZGxlIGNvdW50LiIpO2EuY29ubmVjdD0wfX1mdW5jdGlvbiB6KGEsYil7c3dpdGNoKGIpe2Nhc2UiaG9yaXpvbnRhbCI6YS5vcnQ9MDticmVhaztjYXNlInZlcnRpY2FsIjphLm9ydD0xO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJub1VpU2xpZGVyOiAnb3JpZW50YXRpb24nIG9wdGlvbiBpcyBpbnZhbGlkLiIpfX1mdW5jdGlvbiBBKGEsYil7aWYoIWMoYikpdGhyb3cgbmV3IEVycm9yKCJub1VpU2xpZGVyOiAnbWFyZ2luJyBvcHRpb24gbXVzdCBiZSBudW1lcmljLiIpO2lmKGEubWFyZ2luPWEuc3BlY3RydW0uZ2V0TWFyZ2luKGIpLCFhLm1hcmdpbil0aHJvdyBuZXcgRXJyb3IoIm5vVWlTbGlkZXI6ICdtYXJnaW4nIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBsaW5lYXIgc2xpZGVycy4iKX1mdW5jdGlvbiBCKGEsYil7aWYoIWMoYikpdGhyb3cgbmV3IEVycm9yKCJub1VpU2xpZGVyOiAnbGltaXQnIG9wdGlvbiBtdXN0IGJlIG51bWVyaWMuIik7aWYoYS5saW1pdD1hLnNwZWN0cnVtLmdldE1hcmdpbihiKSwhYS5saW1pdCl0aHJvdyBuZXcgRXJyb3IoIm5vVWlTbGlkZXI6ICdsaW1pdCcgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIGxpbmVhciBzbGlkZXJzLiIpfWZ1bmN0aW9uIEMoYSxiKXtzd2l0Y2goYil7Y2FzZSJsdHIiOmEuZGlyPTA7YnJlYWs7Y2FzZSJydGwiOmEuZGlyPTEsYS5jb25uZWN0PVswLDIsMSwzXVthLmNvbm5lY3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJub1VpU2xpZGVyOiAnZGlyZWN0aW9uJyBvcHRpb24gd2FzIG5vdCByZWNvZ25pemVkLiIpfX1mdW5jdGlvbiBEKGEsYil7aWYoInN0cmluZyIhPXR5cGVvZiBiKXRocm93IG5ldyBFcnJvcigibm9VaVNsaWRlcjogJ2JlaGF2aW91cicgbXVzdCBiZSBhIHN0cmluZyBjb250YWluaW5nIG9wdGlvbnMuIik7dmFyIGM9Yi5pbmRleE9mKCJ0YXAiKT49MCxkPWIuaW5kZXhPZigiZHJhZyIpPj0wLGU9Yi5pbmRleE9mKCJmaXhlZCIpPj0wLGY9Yi5pbmRleE9mKCJzbmFwIik+PTA7YS5ldmVudHM9e3RhcDpjfHxmLGRyYWc6ZCxmaXhlZDplLHNuYXA6Zn19ZnVuY3Rpb24gRShhLGIpe2lmKGEuZm9ybWF0PWIsImZ1bmN0aW9uIj09dHlwZW9mIGIudG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmZyb20pcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKCJub1VpU2xpZGVyOiAnZm9ybWF0JyByZXF1aXJlcyAndG8nIGFuZCAnZnJvbScgbWV0aG9kcy4iKX1mdW5jdGlvbiBGKGIpe3ZhciBjLGQ9e21hcmdpbjowLGxpbWl0OjAsYW5pbWF0ZTohMCxmb3JtYXQ6Vn07cmV0dXJuIGM9e3N0ZXA6e3I6ITEsdDp0fSxzdGFydDp7cjohMCx0OnZ9LGNvbm5lY3Q6e3I6ITAsdDp5fSxkaXJlY3Rpb246e3I6ITAsdDpDfSxzbmFwOntyOiExLHQ6d30sYW5pbWF0ZTp7cjohMSx0Onh9LHJhbmdlOntyOiEwLHQ6dX0sb3JpZW50YXRpb246e3I6ITEsdDp6fSxtYXJnaW46e3I6ITEsdDpBfSxsaW1pdDp7cjohMSx0OkJ9LGJlaGF2aW91cjp7cjohMCx0OkR9LGZvcm1hdDp7cjohMSx0OkV9fSxiPWEuZXh0ZW5kKHtjb25uZWN0OiExLGRpcmVjdGlvbjoibHRyIixiZWhhdmlvdXI6InRhcCIsb3JpZW50YXRpb246Imhvcml6b250YWwifSxiKSxhLmVhY2goYyxmdW5jdGlvbihhLGMpe2lmKHZvaWQgMD09PWJbYV0pe2lmKGMucil0aHJvdyBuZXcgRXJyb3IoIm5vVWlTbGlkZXI6ICciK2ErIicgaXMgcmVxdWlyZWQuIik7cmV0dXJuITB9Yy50KGQsYlthXSl9KSxkLnN0eWxlPWQub3J0PyJ0b3AiOiJsZWZ0IixkfWZ1bmN0aW9uIEcoYSxiLGMpe3ZhciBkPWErYlswXSxlPWErYlsxXTtyZXR1cm4gYz8oMD5kJiYoZSs9TWF0aC5hYnMoZCkpLGU+MTAwJiYoZC09ZS0xMDApLFtmKGQpLGYoZSldKTpbZCxlXX1mdW5jdGlvbiBIKGEpe2EucHJldmVudERlZmF1bHQoKTt2YXIgYixjLGQ9MD09PWEudHlwZS5pbmRleE9mKCJ0b3VjaCIpLGU9MD09PWEudHlwZS5pbmRleE9mKCJtb3VzZSIpLGY9MD09PWEudHlwZS5pbmRleE9mKCJwb2ludGVyIiksZz1hO3JldHVybiAwPT09YS50eXBlLmluZGV4T2YoIk1TUG9pbnRlciIpJiYoZj0hMCksYS5vcmlnaW5hbEV2ZW50JiYoYT1hLm9yaWdpbmFsRXZlbnQpLGQmJihiPWEuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgsYz1hLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZKSwoZXx8ZikmJihmfHx2b2lkIDAhPT13aW5kb3cucGFnZVhPZmZzZXR8fCh3aW5kb3cucGFnZVhPZmZzZXQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsd2luZG93LnBhZ2VZT2Zmc2V0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApLGI9YS5jbGllbnRYK3dpbmRvdy5wYWdlWE9mZnNldCxjPWEuY2xpZW50WSt3aW5kb3cucGFnZVlPZmZzZXQpLGcucG9pbnRzPVtiLGNdLGcuY3Vyc29yPWUsZ31mdW5jdGlvbiBJKGIsYyl7dmFyIGQ9YSgiPGRpdj48ZGl2Lz48L2Rpdj4iKS5hZGRDbGFzcyhVWzJdKSxlPVsiLWxvd2VyIiwiLXVwcGVyIl07cmV0dXJuIGImJmUucmV2ZXJzZSgpLGQuY2hpbGRyZW4oKS5hZGRDbGFzcyhVWzNdKyIgIitVWzNdK2VbY10pLGR9ZnVuY3Rpb24gSihhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMTpiLmFkZENsYXNzKFVbN10pLGNbMF0uYWRkQ2xhc3MoVVs2XSk7YnJlYWs7Y2FzZSAzOmNbMV0uYWRkQ2xhc3MoVVs2XSk7Y2FzZSAyOmNbMF0uYWRkQ2xhc3MoVVs3XSk7Y2FzZSAwOmIuYWRkQ2xhc3MoVVs2XSl9fWZ1bmN0aW9uIEsoYSxiLGMpe3ZhciBkLGU9W107Zm9yKGQ9MDthPmQ7ZCs9MSllLnB1c2goSShiLGQpLmFwcGVuZFRvKGMpKTtyZXR1cm4gZX1mdW5jdGlvbiBMKGIsYyxkKXtyZXR1cm4gZC5hZGRDbGFzcyhbVVswXSxVWzgrYl0sVVs0K2NdXS5qb2luKCIgIikpLGEoIjxkaXYvPiIpLmFwcGVuZFRvKGQpLmFkZENsYXNzKFVbMV0pfWZ1bmN0aW9uIE0oYixjLGQpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gQ1tbIndpZHRoIiwiaGVpZ2h0Il1bYy5vcnRdXSgpfWZ1bmN0aW9uIGooYSl7dmFyIGIsYz1bRS52YWwoKV07Zm9yKGI9MDtiPGEubGVuZ3RoO2IrPTEpRS50cmlnZ2VyKGFbYl0sYyl9ZnVuY3Rpb24gayhhKXtyZXR1cm4gMT09PWEubGVuZ3RoP2FbMF06Yy5kaXI/YS5yZXZlcnNlKCk6YX1mdW5jdGlvbiBsKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe0UudmFsKFthP251bGw6YyxhP2M6bnVsbF0sITApfX1mdW5jdGlvbiBtKGIpe3ZhciBjPWEuaW5BcnJheShiLE4pO0VbMF0ubGlua0FQSSYmRVswXS5saW5rQVBJW2JdJiZFWzBdLmxpbmtBUElbYl0uY2hhbmdlKE1bY10sRFtjXS5jaGlsZHJlbigpLEUpfWZ1bmN0aW9uIG4oYixkKXt2YXIgZT1hLmluQXJyYXkoYixOKTtyZXR1cm4gZCYmZC5hcHBlbmRUbyhEW2VdLmNoaWxkcmVuKCkpLGMuZGlyJiZjLmhhbmRsZXM+MSYmKGU9MT09PWU/MDoxKSxsKGUpfWZ1bmN0aW9uIG8oKXt2YXIgYSxiO2ZvcihhPTA7YTxOLmxlbmd0aDthKz0xKXRoaXMubGlua0FQSSYmdGhpcy5saW5rQVBJW2I9TlthXV0mJnRoaXMubGlua0FQSVtiXS5yZWNvbmZpcm0oYil9ZnVuY3Rpb24gcChhLGIsZCxlKXtyZXR1cm4gYT1hLnJlcGxhY2UoL1xzL2csUysiICIpK1MsYi5vbihhLGZ1bmN0aW9uKGEpe3JldHVybiBFLmF0dHIoImRpc2FibGVkIik/ITE6RS5oYXNDbGFzcyhVWzE0XSk/ITE6KGE9SChhKSxhLmNhbGNQb2ludD1hLnBvaW50c1tjLm9ydF0sdm9pZCBkKGEsZSkpfSl9ZnVuY3Rpb24gcShhLGIpe3ZhciBjLGQ9Yi5oYW5kbGVzfHxELGU9ITEsZj0xMDAqKGEuY2FsY1BvaW50LWIuc3RhcnQpL2koKSxnPWRbMF1bMF0hPT1EWzBdWzBdPzE6MDtjPUcoZixiLnBvc2l0aW9ucyxkLmxlbmd0aD4xKSxlPXYoZFswXSxjW2ddLDE9PT1kLmxlbmd0aCksZC5sZW5ndGg+MSYmKGU9dihkWzFdLGNbZz8wOjFdLCExKXx8ZSksZSYmaihbInNsaWRlIl0pfWZ1bmN0aW9uIHIoYil7YSgiLiIrVVsxNV0pLnJlbW92ZUNsYXNzKFVbMTVdKSxiLmN1cnNvciYmYSgiYm9keSIpLmNzcygiY3Vyc29yIiwiIikub2ZmKFMpLFEub2ZmKFMpLEUucmVtb3ZlQ2xhc3MoVVsxMl0pLGooWyJzZXQiLCJjaGFuZ2UiXSl9ZnVuY3Rpb24gcyhiLGMpezE9PT1jLmhhbmRsZXMubGVuZ3RoJiZjLmhhbmRsZXNbMF0uY2hpbGRyZW4oKS5hZGRDbGFzcyhVWzE1XSksYi5zdG9wUHJvcGFnYXRpb24oKSxwKFQubW92ZSxRLHEse3N0YXJ0OmIuY2FsY1BvaW50LGhhbmRsZXM6Yy5oYW5kbGVzLHBvc2l0aW9uczpbRlswXSxGW0QubGVuZ3RoLTFdXX0pLHAoVC5lbmQsUSxyLG51bGwpLGIuY3Vyc29yJiYoYSgiYm9keSIpLmNzcygiY3Vyc29yIixhKGIudGFyZ2V0KS5jc3MoImN1cnNvciIpKSxELmxlbmd0aD4xJiZFLmFkZENsYXNzKFVbMTJdKSxhKCJib2R5Iikub24oInNlbGVjdHN0YXJ0IitTLCExKSl9ZnVuY3Rpb24gdChiKXt2YXIgZCxmPWIuY2FsY1BvaW50LGc9MDtiLnN0b3BQcm9wYWdhdGlvbigpLGEuZWFjaChELGZ1bmN0aW9uKCl7Zys9dGhpcy5vZmZzZXQoKVtjLnN0eWxlXX0pLGc9Zy8yPmZ8fDE9PT1ELmxlbmd0aD8wOjEsZi09Qy5vZmZzZXQoKVtjLnN0eWxlXSxkPTEwMCpmL2koKSxjLmV2ZW50cy5zbmFwfHxlKEUsVVsxNF0sMzAwKSx2KERbZ10sZCksaihbInNsaWRlIiwic2V0IiwiY2hhbmdlIl0pLGMuZXZlbnRzLnNuYXAmJnMoYix7aGFuZGxlczpbRFtnXV19KX1mdW5jdGlvbiB1KGEpe3ZhciBiLGM7aWYoIWEuZml4ZWQpZm9yKGI9MDtiPEQubGVuZ3RoO2IrPTEpcChULnN0YXJ0LERbYl0uY2hpbGRyZW4oKSxzLHtoYW5kbGVzOltEW2JdXX0pO2EudGFwJiZwKFQuc3RhcnQsQyx0LHtoYW5kbGVzOkR9KSxhLmRyYWcmJihjPUMuZmluZCgiLiIrVVs3XSkuYWRkQ2xhc3MoVVsxMF0pLGEuZml4ZWQmJihjPWMuYWRkKEMuY2hpbGRyZW4oKS5ub3QoYykuY2hpbGRyZW4oKSkpLHAoVC5zdGFydCxjLHMse2hhbmRsZXM6RH0pKX1mdW5jdGlvbiB2KGEsYixkKXt2YXIgZT1hWzBdIT09RFswXVswXT8xOjAsZz1GWzBdK2MubWFyZ2luLGg9RlsxXS1jLm1hcmdpbixpPUZbMF0rYy5saW1pdCxqPUZbMV0tYy5saW1pdDtyZXR1cm4gRC5sZW5ndGg+MSYmKGI9ZT9NYXRoLm1heChiLGcpOk1hdGgubWluKGIsaCkpLGQhPT0hMSYmYy5saW1pdCYmRC5sZW5ndGg+MSYmKGI9ZT9NYXRoLm1pbihiLGkpOk1hdGgubWF4KGIsaikpLGI9SS5nZXRTdGVwKGIpLGI9ZihwYXJzZUZsb2F0KGIudG9GaXhlZCg3KSkpLGI9PT1GW2VdPyExOihhLmNzcyhjLnN0eWxlLGIrIiUiKSxhLmlzKCI6Zmlyc3QtY2hpbGQiKSYmYS50b2dnbGVDbGFzcyhVWzE3XSxiPjUwKSxGW2VdPWIsTVtlXT1JLmZyb21TdGVwcGluZyhiKSxtKE5bZV0pLCEwKX1mdW5jdGlvbiB3KGEsYil7dmFyIGQsZSxmO2ZvcihjLmxpbWl0JiYoYSs9MSksZD0wO2E+ZDtkKz0xKWU9ZCUyLGY9YltlXSxudWxsIT09ZiYmZiE9PSExJiYoIm51bWJlciI9PXR5cGVvZiBmJiYoZj1TdHJpbmcoZikpLGY9Yy5mb3JtYXQuZnJvbShmKSwoZj09PSExfHxpc05hTihmKXx8dihEW2VdLEkudG9TdGVwcGluZyhmKSxkPT09My1jLmRpcik9PT0hMSkmJm0oTltlXSkpfWZ1bmN0aW9uIHgoYSl7aWYoRVswXS5MaW5rSXNFbWl0dGluZylyZXR1cm4gdGhpczt2YXIgYixkPWcoYSk7cmV0dXJuIGMuZGlyJiZjLmhhbmRsZXM+MSYmZC5yZXZlcnNlKCksYy5hbmltYXRlJiYtMSE9PUZbMF0mJmUoRSxVWzE0XSwzMDApLGI9RC5sZW5ndGg+MT8zOjEsMT09PWQubGVuZ3RoJiYoYj0xKSx3KGIsZCksaihbInNldCJdKSx0aGlzfWZ1bmN0aW9uIHkoKXt2YXIgYSxiPVtdO2ZvcihhPTA7YTxjLmhhbmRsZXM7YSs9MSliW2FdPWMuZm9ybWF0LnRvKE1bYV0pO3JldHVybiBrKGIpfWZ1bmN0aW9uIHooKXtyZXR1cm4gYSh0aGlzKS5vZmYoUykucmVtb3ZlQ2xhc3MoVS5qb2luKCIgIikpLmVtcHR5KCksZGVsZXRlIHRoaXMuTGlua1VwZGF0ZSxkZWxldGUgdGhpcy5MaW5rQ29uZmlybSxkZWxldGUgdGhpcy5MaW5rRGVmYXVsdEZvcm1hdHRlcixkZWxldGUgdGhpcy5MaW5rRGVmYXVsdEZsYWcsZGVsZXRlIHRoaXMucmVhcHBlbmQsZGVsZXRlIHRoaXMudkdldCxkZWxldGUgdGhpcy52U2V0LGRlbGV0ZSB0aGlzLmdldEN1cnJlbnRTdGVwLGRlbGV0ZSB0aGlzLmdldEluZm8sZGVsZXRlIHRoaXMuZGVzdHJveSxkfWZ1bmN0aW9uIEEoKXt2YXIgYj1hLm1hcChGLGZ1bmN0aW9uKGEsYil7dmFyIGM9SS5nZXRBcHBsaWNhYmxlU3RlcChhKSxkPWgoU3RyaW5nKGNbMl0pKSxlPU1bYl0sZj0xMDA9PT1hP251bGw6Y1syXSxnPU51bWJlcigoZS1jWzJdKS50b0ZpeGVkKGQpKSxpPTA9PT1hP251bGw6Zz49Y1sxXT9jWzJdOmNbMF18fCExO3JldHVybltbaSxmXV19KTtyZXR1cm4gayhiKX1mdW5jdGlvbiBCKCl7cmV0dXJuIGR9dmFyIEMsRCxFPWEoYiksRj1bLTEsLTFdLEk9Yy5zcGVjdHJ1bSxNPVtdLE49WyJsb3dlciIsInVwcGVyIl0uc2xpY2UoMCxjLmhhbmRsZXMpO2lmKGMuZGlyJiZOLnJldmVyc2UoKSxiLkxpbmtVcGRhdGU9bSxiLkxpbmtDb25maXJtPW4sYi5MaW5rRGVmYXVsdEZvcm1hdHRlcj1jLmZvcm1hdCxiLkxpbmtEZWZhdWx0RmxhZz0ibG93ZXIiLGIucmVhcHBlbmQ9byxFLmhhc0NsYXNzKFVbMF0pKXRocm93IG5ldyBFcnJvcigiU2xpZGVyIHdhcyBhbHJlYWR5IGluaXRpYWxpemVkLiIpO0M9TChjLmRpcixjLm9ydCxFKSxEPUsoYy5oYW5kbGVzLGMuZGlyLEMpLEooYy5jb25uZWN0LEUsRCksdShjLmV2ZW50cyksYi52U2V0PXgsYi52R2V0PXksYi5kZXN0cm95PXosYi5nZXRDdXJyZW50U3RlcD1BLGIuZ2V0T3JpZ2luYWxPcHRpb25zPUIsYi5nZXRJbmZvPWZ1bmN0aW9uKCl7cmV0dXJuW0ksYy5zdHlsZSxjLm9ydF19LEUudmFsKGMuc3RhcnQpfWZ1bmN0aW9uIE4oYSl7dmFyIGI9RihhLHRoaXMpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtNKHRoaXMsYixhKX0pfWZ1bmN0aW9uIE8oYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCF0aGlzLmRlc3Ryb3kpcmV0dXJuIHZvaWQgYSh0aGlzKS5ub1VpU2xpZGVyKGIpO3ZhciBjPWEodGhpcykudmFsKCksZD10aGlzLmRlc3Ryb3koKSxlPWEuZXh0ZW5kKHt9LGQsYik7YSh0aGlzKS5ub1VpU2xpZGVyKGUpLHRoaXMucmVhcHBlbmQoKSxkLnN0YXJ0PT09ZS5zdGFydCYmYSh0aGlzKS52YWwoYyl9KX1mdW5jdGlvbiBQKCl7cmV0dXJuIHRoaXNbMF1bYXJndW1lbnRzLmxlbmd0aD8idlNldCI6InZHZXQiXS5hcHBseSh0aGlzWzBdLGFyZ3VtZW50cyl9dmFyIFE9YShkb2N1bWVudCksUj1hLmZuLnZhbCxTPSIubnVpIixUPXdpbmRvdy5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQ/e3N0YXJ0OiJwb2ludGVyZG93biIsbW92ZToicG9pbnRlcm1vdmUiLGVuZDoicG9pbnRlcnVwIn06d2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkP3tzdGFydDoiTVNQb2ludGVyRG93biIsbW92ZToiTVNQb2ludGVyTW92ZSIsZW5kOiJNU1BvaW50ZXJVcCJ9OntzdGFydDoibW91c2Vkb3duIHRvdWNoc3RhcnQiLG1vdmU6Im1vdXNlbW92ZSB0b3VjaG1vdmUiLGVuZDoibW91c2V1cCB0b3VjaGVuZCJ9LFU9WyJub1VpLXRhcmdldCIsIm5vVWktYmFzZSIsIm5vVWktb3JpZ2luIiwibm9VaS1oYW5kbGUiLCJub1VpLWhvcml6b250YWwiLCJub1VpLXZlcnRpY2FsIiwibm9VaS1iYWNrZ3JvdW5kIiwibm9VaS1jb25uZWN0Iiwibm9VaS1sdHIiLCJub1VpLXJ0bCIsIm5vVWktZHJhZ2FibGUiLCIiLCJub1VpLXN0YXRlLWRyYWciLCIiLCJub1VpLXN0YXRlLXRhcCIsIm5vVWktYWN0aXZlIiwiIiwibm9VaS1zdGFja2luZyJdO3MucHJvdG90eXBlLmdldE1hcmdpbj1mdW5jdGlvbihhKXtyZXR1cm4gMj09PXRoaXMueFBjdC5sZW5ndGg/aih0aGlzLnhWYWwsYSk6ITF9LHMucHJvdG90eXBlLnRvU3RlcHBpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9bih0aGlzLnhWYWwsdGhpcy54UGN0LGEpLHRoaXMuZGlyZWN0aW9uJiYoYT0xMDAtYSksYX0scy5wcm90b3R5cGUuZnJvbVN0ZXBwaW5nPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRpcmVjdGlvbiYmKGE9MTAwLWEpLGQobyh0aGlzLnhWYWwsdGhpcy54UGN0LGEpKX0scy5wcm90b3R5cGUuZ2V0U3RlcD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24mJihhPTEwMC1hKSxhPXAodGhpcy54UGN0LHRoaXMueFN0ZXBzLHRoaXMuc25hcCxhKSx0aGlzLmRpcmVjdGlvbiYmKGE9MTAwLWEpLGF9LHMucHJvdG90eXBlLmdldEFwcGxpY2FibGVTdGVwPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSx0aGlzLnhQY3QpLGM9MTAwPT09YT8yOjE7cmV0dXJuW3RoaXMueE51bVN0ZXBzW2ItMl0sdGhpcy54VmFsW2ItY10sdGhpcy54TnVtU3RlcHNbYi1jXV19LHMucHJvdG90eXBlLmNvbnZlcnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2V0U3RlcCh0aGlzLnRvU3RlcHBpbmcoYSkpfTt2YXIgVj17dG86ZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9GaXhlZCgyKX0sZnJvbTpOdW1iZXJ9O2EuZm4udmFsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEuaGFzQ2xhc3MoVVswXSk/UDpSfWlmKCFhcmd1bWVudHMubGVuZ3RoKXt2YXIgZD1hKHRoaXNbMF0pO3JldHVybiBjKGQpLmNhbGwoZCl9dmFyIGU9YS5pc0Z1bmN0aW9uKGIpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGY9YixnPWEodGhpcyk7ZSYmKGY9Yi5jYWxsKHRoaXMsZCxnLnZhbCgpKSksYyhnKS5jYWxsKGcsZil9KX0sYS5mbi5ub1VpU2xpZGVyPWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2Uic3RlcCI6cmV0dXJuIHRoaXNbMF0uZ2V0Q3VycmVudFN0ZXAoKTtjYXNlIm9wdGlvbnMiOnJldHVybiB0aGlzWzBdLmdldE9yaWdpbmFsT3B0aW9ucygpfXJldHVybihiP086TikuY2FsbCh0aGlzLGEpfX0od2luZG93LmpRdWVyeXx8d2luZG93LlplcHRvKTs="></script>
<link href="data:text/css,%0A%2Eselectize%2Dcontrol%2Eplugin%2Ddrag%5Fdrop%2Emulti%20%3E%20%2Eselectize%2Dinput%20%3E%20div%2Eui%2Dsortable%2Dplaceholder%20%7B%0Avisibility%3A%20visible%20%21important%3B%0Abackground%3A%20%23f2f2f2%20%21important%3B%0Abackground%3A%20rgba%280%2C%200%2C%200%2C%200%2E06%29%20%21important%3B%0Aborder%3A%200%20none%20%21important%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20inset%200%200%2012px%204px%20%23ffffff%3B%0Abox%2Dshadow%3A%20inset%200%200%2012px%204px%20%23ffffff%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Ddrag%5Fdrop%20%2Eui%2Dsortable%2Dplaceholder%3A%3Aafter%20%7B%0Acontent%3A%20%27%21%27%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Ddrag%5Fdrop%20%2Eui%2Dsortable%2Dhelper%20%7B%0A%2Dwebkit%2Dbox%2Dshadow%3A%200%202px%205px%20rgba%280%2C%200%2C%200%2C%200%2E2%29%3B%0Abox%2Dshadow%3A%200%202px%205px%20rgba%280%2C%200%2C%200%2C%200%2E2%29%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Dheader%20%7B%0Aposition%3A%20relative%3B%0Apadding%3A%203px%2012px%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23d0d0d0%3B%0Abackground%3A%20%23f8f8f8%3B%0A%2Dwebkit%2Dborder%2Dradius%3A%204px%204px%200%200%3B%0A%2Dmoz%2Dborder%2Dradius%3A%204px%204px%200%200%3B%0Aborder%2Dradius%3A%204px%204px%200%200%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Dheader%2Dclose%20%7B%0Aposition%3A%20absolute%3B%0Aright%3A%2012px%3B%0Atop%3A%2050%25%3B%0Acolor%3A%20%23333333%3B%0Aopacity%3A%200%2E4%3B%0Amargin%2Dtop%3A%20%2D12px%3B%0Aline%2Dheight%3A%2020px%3B%0Afont%2Dsize%3A%2020px%20%21important%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Dheader%2Dclose%3Ahover%20%7B%0Acolor%3A%20%23000000%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Eplugin%2Doptgroup%5Fcolumns%20%2Eoptgroup%20%7B%0Aborder%2Dright%3A%201px%20solid%20%23f2f2f2%3B%0Aborder%2Dtop%3A%200%20none%3B%0Afloat%3A%20left%3B%0A%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Eplugin%2Doptgroup%5Fcolumns%20%2Eoptgroup%3Alast%2Dchild%20%7B%0Aborder%2Dright%3A%200%20none%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Eplugin%2Doptgroup%5Fcolumns%20%2Eoptgroup%3Abefore%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Eplugin%2Doptgroup%5Fcolumns%20%2Eoptgroup%2Dheader%20%7B%0Aborder%2Dtop%3A%200%20none%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Dremove%5Fbutton%20%5Bdata%2Dvalue%5D%20%7B%0Aposition%3A%20relative%3B%0Apadding%2Dright%3A%2024px%20%21important%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Dremove%5Fbutton%20%5Bdata%2Dvalue%5D%20%2Eremove%20%7B%0Az%2Dindex%3A%201%3B%0A%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aright%3A%200%3B%0Abottom%3A%200%3B%0Awidth%3A%2017px%3B%0Atext%2Dalign%3A%20center%3B%0Afont%2Dweight%3A%20bold%3B%0Afont%2Dsize%3A%2012px%3B%0Acolor%3A%20inherit%3B%0Atext%2Ddecoration%3A%20none%3B%0Avertical%2Dalign%3A%20middle%3B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%3A%201px%200%200%200%3B%0Aborder%2Dleft%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%200%29%3B%0A%2Dwebkit%2Dborder%2Dradius%3A%200%202px%202px%200%3B%0A%2Dmoz%2Dborder%2Dradius%3A%200%202px%202px%200%3B%0Aborder%2Dradius%3A%200%202px%202px%200%3B%0A%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Dremove%5Fbutton%20%5Bdata%2Dvalue%5D%20%2Eremove%3Ahover%20%7B%0Abackground%3A%20rgba%280%2C%200%2C%200%2C%200%2E05%29%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Dremove%5Fbutton%20%5Bdata%2Dvalue%5D%2Eactive%20%2Eremove%20%7B%0Aborder%2Dleft%2Dcolor%3A%20rgba%280%2C%200%2C%200%2C%200%29%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Dremove%5Fbutton%20%2Edisabled%20%5Bdata%2Dvalue%5D%20%2Eremove%3Ahover%20%7B%0Abackground%3A%20none%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Eplugin%2Dremove%5Fbutton%20%2Edisabled%20%5Bdata%2Dvalue%5D%20%2Eremove%20%7B%0Aborder%2Dleft%2Dcolor%3A%20rgba%2877%2C%2077%2C%2077%2C%200%29%3B%0A%7D%0A%2Eselectize%2Dcontrol%20%7B%0Aposition%3A%20relative%3B%0A%7D%0A%2Eselectize%2Ddropdown%2C%0A%2Eselectize%2Dinput%2C%0A%2Eselectize%2Dinput%20input%20%7B%0Acolor%3A%20%23333333%3B%0Afont%2Dfamily%3A%20inherit%3B%0Afont%2Dsize%3A%20inherit%3B%0Aline%2Dheight%3A%2020px%3B%0A%2Dwebkit%2Dfont%2Dsmoothing%3A%20inherit%3B%0A%7D%0A%2Eselectize%2Dinput%2C%0A%2Eselectize%2Dcontrol%2Esingle%20%2Eselectize%2Dinput%2Einput%2Dactive%20%7B%0Abackground%3A%20%23ffffff%3B%0Acursor%3A%20text%3B%0Adisplay%3A%20inline%2Dblock%3B%0A%7D%0A%2Eselectize%2Dinput%20%7B%0Aborder%3A%201px%20solid%20%23cccccc%3B%0Apadding%3A%206px%2012px%3B%0Adisplay%3A%20inline%2Dblock%3B%0Awidth%3A%20100%25%3B%0Aoverflow%3A%20hidden%3B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%201%3B%0A%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20none%3B%0Abox%2Dshadow%3A%20none%3B%0A%2Dwebkit%2Dborder%2Dradius%3A%204px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%204px%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Emulti%20%2Eselectize%2Dinput%2Ehas%2Ditems%20%7B%0Apadding%3A%205px%2012px%202px%3B%0A%7D%0A%2Eselectize%2Dinput%2Efull%20%7B%0Abackground%2Dcolor%3A%20%23ffffff%3B%0A%7D%0A%2Eselectize%2Dinput%2Edisabled%2C%0A%2Eselectize%2Dinput%2Edisabled%20%2A%20%7B%0Acursor%3A%20default%20%21important%3B%0A%7D%0A%2Eselectize%2Dinput%2Efocus%20%7B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20inset%200%201px%202px%20rgba%280%2C%200%2C%200%2C%200%2E15%29%3B%0Abox%2Dshadow%3A%20inset%200%201px%202px%20rgba%280%2C%200%2C%200%2C%200%2E15%29%3B%0A%7D%0A%2Eselectize%2Dinput%2Edropdown%2Dactive%20%7B%0A%2Dwebkit%2Dborder%2Dradius%3A%204px%204px%200%200%3B%0A%2Dmoz%2Dborder%2Dradius%3A%204px%204px%200%200%3B%0Aborder%2Dradius%3A%204px%204px%200%200%3B%0A%7D%0A%2Eselectize%2Dinput%20%3E%20%2A%20%7B%0Avertical%2Dalign%3A%20baseline%3B%0Adisplay%3A%20%2Dmoz%2Dinline%2Dstack%3B%0Adisplay%3A%20inline%2Dblock%3B%0Azoom%3A%201%3B%0A%2Adisplay%3A%20inline%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Emulti%20%2Eselectize%2Dinput%20%3E%20div%20%7B%0Acursor%3A%20pointer%3B%0Amargin%3A%200%203px%203px%200%3B%0Apadding%3A%201px%203px%3B%0Abackground%3A%20%23efefef%3B%0Acolor%3A%20%23333333%3B%0Aborder%3A%200%20solid%20rgba%280%2C%200%2C%200%2C%200%29%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Emulti%20%2Eselectize%2Dinput%20%3E%20div%2Eactive%20%7B%0Abackground%3A%20%23428bca%3B%0Acolor%3A%20%23ffffff%3B%0Aborder%3A%200%20solid%20rgba%280%2C%200%2C%200%2C%200%29%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Emulti%20%2Eselectize%2Dinput%2Edisabled%20%3E%20div%2C%0A%2Eselectize%2Dcontrol%2Emulti%20%2Eselectize%2Dinput%2Edisabled%20%3E%20div%2Eactive%20%7B%0Acolor%3A%20%23808080%3B%0Abackground%3A%20%23ffffff%3B%0Aborder%3A%200%20solid%20rgba%2877%2C%2077%2C%2077%2C%200%29%3B%0A%7D%0A%2Eselectize%2Dinput%20%3E%20input%20%7B%0Adisplay%3A%20inline%2Dblock%20%21important%3B%0Apadding%3A%200%20%21important%3B%0Amin%2Dheight%3A%200%20%21important%3B%0Amax%2Dheight%3A%20none%20%21important%3B%0Amax%2Dwidth%3A%20100%25%20%21important%3B%0Amargin%3A%200%20%21important%3B%0Atext%2Dindent%3A%200%20%21important%3B%0Aborder%3A%200%20none%20%21important%3B%0Abackground%3A%20none%20%21important%3B%0Aline%2Dheight%3A%20inherit%20%21important%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20auto%20%21important%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20none%20%21important%3B%0Abox%2Dshadow%3A%20none%20%21important%3B%0A%7D%0A%2Eselectize%2Dinput%20%3E%20input%3A%3A%2Dms%2Dclear%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eselectize%2Dinput%20%3E%20input%3Afocus%20%7B%0Aoutline%3A%20none%20%21important%3B%0A%7D%0A%2Eselectize%2Dinput%3A%3Aafter%20%7B%0Acontent%3A%20%27%20%27%3B%0Adisplay%3A%20block%3B%0Aclear%3A%20left%3B%0A%7D%0A%2Eselectize%2Dinput%2Edropdown%2Dactive%3A%3Abefore%20%7B%0Acontent%3A%20%27%20%27%3B%0Adisplay%3A%20block%3B%0Aposition%3A%20absolute%3B%0Abackground%3A%20%23ffffff%3B%0Aheight%3A%201px%3B%0Abottom%3A%200%3B%0Aleft%3A%200%3B%0Aright%3A%200%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%2010%3B%0Aborder%3A%201px%20solid%20%23d0d0d0%3B%0Abackground%3A%20%23ffffff%3B%0Amargin%3A%20%2D1px%200%200%200%3B%0Aborder%2Dtop%3A%200%20none%3B%0A%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%200%201px%203px%20rgba%280%2C%200%2C%200%2C%200%2E1%29%3B%0Abox%2Dshadow%3A%200%201px%203px%20rgba%280%2C%200%2C%200%2C%200%2E1%29%3B%0A%2Dwebkit%2Dborder%2Dradius%3A%200%200%204px%204px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%200%200%204px%204px%3B%0Aborder%2Dradius%3A%200%200%204px%204px%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%5Bdata%2Dselectable%5D%20%7B%0Acursor%3A%20pointer%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%5Bdata%2Dselectable%5D%20%2Ehighlight%20%7B%0Abackground%3A%20rgba%28255%2C%20237%2C%2040%2C%200%2E4%29%3B%0A%2Dwebkit%2Dborder%2Dradius%3A%201px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%201px%3B%0Aborder%2Dradius%3A%201px%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%5Bdata%2Dselectable%5D%2C%0A%2Eselectize%2Ddropdown%20%2Eoptgroup%2Dheader%20%7B%0Apadding%3A%203px%2012px%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Eoptgroup%3Afirst%2Dchild%20%2Eoptgroup%2Dheader%20%7B%0Aborder%2Dtop%3A%200%20none%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Eoptgroup%2Dheader%20%7B%0Acolor%3A%20%23777777%3B%0Abackground%3A%20%23ffffff%3B%0Acursor%3A%20default%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Eactive%20%7B%0Abackground%2Dcolor%3A%20%23f5f5f5%3B%0Acolor%3A%20%23262626%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Eactive%2Ecreate%20%7B%0Acolor%3A%20%23262626%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Ecreate%20%7B%0Acolor%3A%20rgba%2851%2C%2051%2C%2051%2C%200%2E5%29%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Dcontent%20%7B%0Aoverflow%2Dy%3A%20auto%3B%0Aoverflow%2Dx%3A%20hidden%3B%0Amax%2Dheight%3A%20200px%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Esingle%20%2Eselectize%2Dinput%2C%0A%2Eselectize%2Dcontrol%2Esingle%20%2Eselectize%2Dinput%20input%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Esingle%20%2Eselectize%2Dinput%2Einput%2Dactive%2C%0A%2Eselectize%2Dcontrol%2Esingle%20%2Eselectize%2Dinput%2Einput%2Dactive%20input%20%7B%0Acursor%3A%20text%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Esingle%20%2Eselectize%2Dinput%3Aafter%20%7B%0Acontent%3A%20%27%20%27%3B%0Adisplay%3A%20block%3B%0Aposition%3A%20absolute%3B%0Atop%3A%2050%25%3B%0Aright%3A%2017px%3B%0Amargin%2Dtop%3A%20%2D3px%3B%0Awidth%3A%200%3B%0Aheight%3A%200%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dwidth%3A%205px%205px%200%205px%3B%0Aborder%2Dcolor%3A%20%23333333%20transparent%20transparent%20transparent%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Esingle%20%2Eselectize%2Dinput%2Edropdown%2Dactive%3Aafter%20%7B%0Amargin%2Dtop%3A%20%2D4px%3B%0Aborder%2Dwidth%3A%200%205px%205px%205px%3B%0Aborder%2Dcolor%3A%20transparent%20transparent%20%23333333%20transparent%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Ertl%2Esingle%20%2Eselectize%2Dinput%3Aafter%20%7B%0Aleft%3A%2017px%3B%0Aright%3A%20auto%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Ertl%20%2Eselectize%2Dinput%20%3E%20input%20%7B%0Amargin%3A%200%204px%200%20%2D2px%20%21important%3B%0A%7D%0A%2Eselectize%2Dcontrol%20%2Eselectize%2Dinput%2Edisabled%20%7B%0Aopacity%3A%200%2E5%3B%0Abackground%2Dcolor%3A%20%23ffffff%3B%0A%7D%0A%2Eselectize%2Ddropdown%2C%0A%2Eselectize%2Ddropdown%2Eform%2Dcontrol%20%7B%0Aheight%3A%20auto%3B%0Apadding%3A%200%3B%0Amargin%3A%202px%200%200%200%3B%0Az%2Dindex%3A%201000%3B%0Abackground%3A%20%23ffffff%3B%0Aborder%3A%201px%20solid%20%23cccccc%3B%0Aborder%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%200%2E15%29%3B%0A%2Dwebkit%2Dborder%2Dradius%3A%204px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%204px%3B%0Aborder%2Dradius%3A%204px%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%200%206px%2012px%20rgba%280%2C%200%2C%200%2C%200%2E175%29%3B%0Abox%2Dshadow%3A%200%206px%2012px%20rgba%280%2C%200%2C%200%2C%200%2E175%29%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Eoptgroup%2Dheader%20%7B%0Afont%2Dsize%3A%2012px%3B%0Aline%2Dheight%3A%201%2E42857143%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Eoptgroup%3Afirst%2Dchild%3Abefore%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eselectize%2Ddropdown%20%2Eoptgroup%3Abefore%20%7B%0Acontent%3A%20%27%20%27%3B%0Adisplay%3A%20block%3B%0Aheight%3A%201px%3B%0Amargin%3A%209px%200%3B%0Aoverflow%3A%20hidden%3B%0Abackground%2Dcolor%3A%20%23e5e5e5%3B%0Amargin%2Dleft%3A%20%2D12px%3B%0Amargin%2Dright%3A%20%2D12px%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Dcontent%20%7B%0Apadding%3A%205px%200%3B%0A%7D%0A%2Eselectize%2Ddropdown%2Dheader%20%7B%0Apadding%3A%206px%2012px%3B%0A%7D%0A%2Eselectize%2Dinput%20%7B%0Amin%2Dheight%3A%2034px%3B%0A%7D%0A%2Eselectize%2Dinput%2Edropdown%2Dactive%20%7B%0A%2Dwebkit%2Dborder%2Dradius%3A%204px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%204px%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eselectize%2Dinput%2Edropdown%2Dactive%3A%3Abefore%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eselectize%2Dinput%2Efocus%20%7B%0Aborder%2Dcolor%3A%20%2366afe9%3B%0Aoutline%3A%200%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20inset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C%200%200%208px%20rgba%28102%2C%20175%2C%20233%2C%200%2E6%29%3B%0Abox%2Dshadow%3A%20inset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C%200%200%208px%20rgba%28102%2C%20175%2C%20233%2C%200%2E6%29%3B%0A%7D%0A%2Ehas%2Derror%20%2Eselectize%2Dinput%20%7B%0Aborder%2Dcolor%3A%20%23a94442%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20inset%200%201px%201px%20rgba%280%2C%200%2C%200%2C%200%2E075%29%3B%0Abox%2Dshadow%3A%20inset%200%201px%201px%20rgba%280%2C%200%2C%200%2C%200%2E075%29%3B%0A%7D%0A%2Ehas%2Derror%20%2Eselectize%2Dinput%3Afocus%20%7B%0Aborder%2Dcolor%3A%20%23843534%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20inset%200%201px%201px%20rgba%280%2C%200%2C%200%2C%200%2E075%29%2C%200%200%206px%20%23ce8483%3B%0Abox%2Dshadow%3A%20inset%200%201px%201px%20rgba%280%2C%200%2C%200%2C%200%2E075%29%2C%200%200%206px%20%23ce8483%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Emulti%20%2Eselectize%2Dinput%2Ehas%2Ditems%20%7B%0Apadding%2Dleft%3A%209px%3B%0Apadding%2Dright%3A%209px%3B%0A%7D%0A%2Eselectize%2Dcontrol%2Emulti%20%2Eselectize%2Dinput%20%3E%20div%20%7B%0A%2Dwebkit%2Dborder%2Dradius%3A%203px%3B%0A%2Dmoz%2Dborder%2Dradius%3A%203px%3B%0Aborder%2Dradius%3A%203px%3B%0A%7D%0A%2Eform%2Dcontrol%2Eselectize%2Dcontrol%20%7B%0Apadding%3A%200%3B%0Aheight%3A%20auto%3B%0Aborder%3A%20none%3B%0Abackground%3A%20none%3B%0A%2Dwebkit%2Dbox%2Dshadow%3A%20none%3B%0Abox%2Dshadow%3A%20none%3B%0A%2Dwebkit%2Dborder%2Dradius%3A%200%3B%0A%2Dmoz%2Dborder%2Dradius%3A%200%3B%0Aborder%2Dradius%3A%200%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyohIHNlbGVjdGl6ZS5qcyAtIHYwLjEyLjEgfCBodHRwczovL2dpdGh1Yi5jb20vYnJpYW5yZWF2aXMvc2VsZWN0aXplLmpzIHwgQXBhY2hlIExpY2Vuc2UgKHYyKSAqLwohZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgic2lmdGVyIixiKToib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YigpOmEuU2lmdGVyPWIoKX0odGhpcyxmdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKGEsYil7dGhpcy5pdGVtcz1hLHRoaXMuc2V0dGluZ3M9Ynx8e2RpYWNyaXRpY3M6ITB9fTthLnByb3RvdHlwZS50b2tlbml6ZT1mdW5jdGlvbihhKXtpZihhPWQoU3RyaW5nKGF8fCIiKS50b0xvd2VyQ2FzZSgpKSwhYXx8IWEubGVuZ3RoKXJldHVybltdO3ZhciBiLGMsZixoLGk9W10saj1hLnNwbGl0KC8gKy8pO2ZvcihiPTAsYz1qLmxlbmd0aDtjPmI7YisrKXtpZihmPWUoaltiXSksdGhpcy5zZXR0aW5ncy5kaWFjcml0aWNzKWZvcihoIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShoKSYmKGY9Zi5yZXBsYWNlKG5ldyBSZWdFeHAoaCwiZyIpLGdbaF0pKTtpLnB1c2goe3N0cmluZzpqW2JdLHJlZ2V4Om5ldyBSZWdFeHAoZiwiaSIpfSl9cmV0dXJuIGl9LGEucHJvdG90eXBlLml0ZXJhdG9yPWZ1bmN0aW9uKGEsYil7dmFyIGM7Yz1mKGEpP0FycmF5LnByb3RvdHlwZS5mb3JFYWNofHxmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspYSh0aGlzW2JdLGIsdGhpcyl9OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkoYikmJmEodGhpc1tiXSxiLHRoaXMpfSxjLmFwcGx5KGEsW2JdKX0sYS5wcm90b3R5cGUuZ2V0U2NvcmVGdW5jdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmO2M9dGhpcyxhPWMucHJlcGFyZVNlYXJjaChhLGIpLGU9YS50b2tlbnMsZD1hLm9wdGlvbnMuZmllbGRzLGY9ZS5sZW5ndGg7dmFyIGc9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO3JldHVybiBhPyhhPVN0cmluZyhhfHwiIiksZD1hLnNlYXJjaChiLnJlZ2V4KSwtMT09PWQ/MDooYz1iLnN0cmluZy5sZW5ndGgvYS5sZW5ndGgsMD09PWQmJihjKz0uNSksYykpOjB9LGg9ZnVuY3Rpb24oKXt2YXIgYT1kLmxlbmd0aDtyZXR1cm4gYT8xPT09YT9mdW5jdGlvbihhLGIpe3JldHVybiBnKGJbZFswXV0sYSl9OmZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBlPTAsZj0wO2E+ZTtlKyspZis9ZyhjW2RbZV1dLGIpO3JldHVybiBmL2F9OmZ1bmN0aW9uKCl7cmV0dXJuIDB9fSgpO3JldHVybiBmPzE9PT1mP2Z1bmN0aW9uKGEpe3JldHVybiBoKGVbMF0sYSl9OiJhbmQiPT09YS5vcHRpb25zLmNvbmp1bmN0aW9uP2Z1bmN0aW9uKGEpe2Zvcih2YXIgYixjPTAsZD0wO2Y+YztjKyspe2lmKGI9aChlW2NdLGEpLDA+PWIpcmV0dXJuIDA7ZCs9Yn1yZXR1cm4gZC9mfTpmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPTA7Zj5iO2IrKyljKz1oKGVbYl0sYSk7cmV0dXJuIGMvZn06ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGEucHJvdG90eXBlLmdldFNvcnRGdW5jdGlvbj1mdW5jdGlvbihhLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG47aWYoZj10aGlzLGE9Zi5wcmVwYXJlU2VhcmNoKGEsYyksbj0hYS5xdWVyeSYmYy5zb3J0X2VtcHR5fHxjLnNvcnQsbD1mdW5jdGlvbihhLGIpe3JldHVybiIkc2NvcmUiPT09YT9iLnNjb3JlOmYuaXRlbXNbYi5pZF1bYV19LGg9W10sbilmb3IoZD0wLGU9bi5sZW5ndGg7ZT5kO2QrKykoYS5xdWVyeXx8IiRzY29yZSIhPT1uW2RdLmZpZWxkKSYmaC5wdXNoKG5bZF0pO2lmKGEucXVlcnkpe2ZvcihtPSEwLGQ9MCxlPWgubGVuZ3RoO2U+ZDtkKyspaWYoIiRzY29yZSI9PT1oW2RdLmZpZWxkKXttPSExO2JyZWFrfW0mJmgudW5zaGlmdCh7ZmllbGQ6IiRzY29yZSIsZGlyZWN0aW9uOiJkZXNjIn0pfWVsc2UgZm9yKGQ9MCxlPWgubGVuZ3RoO2U+ZDtkKyspaWYoIiRzY29yZSI9PT1oW2RdLmZpZWxkKXtoLnNwbGljZShkLDEpO2JyZWFrfWZvcihrPVtdLGQ9MCxlPWgubGVuZ3RoO2U+ZDtkKyspay5wdXNoKCJkZXNjIj09PWhbZF0uZGlyZWN0aW9uPy0xOjEpO3JldHVybiBpPWgubGVuZ3RoLGk/MT09PWk/KGc9aFswXS5maWVsZCxqPWtbMF0sZnVuY3Rpb24oYSxjKXtyZXR1cm4gaipiKGwoZyxhKSxsKGcsYykpfSk6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGY7Zm9yKGQ9MDtpPmQ7ZCsrKWlmKGY9aFtkXS5maWVsZCxlPWtbZF0qYihsKGYsYSksbChmLGMpKSlyZXR1cm4gZTtyZXR1cm4gMH06bnVsbH0sYS5wcm90b3R5cGUucHJlcGFyZVNlYXJjaD1mdW5jdGlvbihhLGIpe2lmKCJvYmplY3QiPT10eXBlb2YgYSlyZXR1cm4gYTtiPWMoe30sYik7dmFyIGQ9Yi5maWVsZHMsZT1iLnNvcnQsZz1iLnNvcnRfZW1wdHk7cmV0dXJuIGQmJiFmKGQpJiYoYi5maWVsZHM9W2RdKSxlJiYhZihlKSYmKGIuc29ydD1bZV0pLGcmJiFmKGcpJiYoYi5zb3J0X2VtcHR5PVtnXSkse29wdGlvbnM6YixxdWVyeTpTdHJpbmcoYXx8IiIpLnRvTG93ZXJDYXNlKCksdG9rZW5zOnRoaXMudG9rZW5pemUoYSksdG90YWw6MCxpdGVtczpbXX19LGEucHJvdG90eXBlLnNlYXJjaD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9dGhpcztyZXR1cm4gZD10aGlzLnByZXBhcmVTZWFyY2goYSxiKSxiPWQub3B0aW9ucyxhPWQucXVlcnksZj1iLnNjb3JlfHxnLmdldFNjb3JlRnVuY3Rpb24oZCksYS5sZW5ndGg/Zy5pdGVyYXRvcihnLml0ZW1zLGZ1bmN0aW9uKGEsZSl7Yz1mKGEpLChiLmZpbHRlcj09PSExfHxjPjApJiZkLml0ZW1zLnB1c2goe3Njb3JlOmMsaWQ6ZX0pfSk6Zy5pdGVyYXRvcihnLml0ZW1zLGZ1bmN0aW9uKGEsYil7ZC5pdGVtcy5wdXNoKHtzY29yZToxLGlkOmJ9KX0pLGU9Zy5nZXRTb3J0RnVuY3Rpb24oZCxiKSxlJiZkLml0ZW1zLnNvcnQoZSksZC50b3RhbD1kLml0ZW1zLmxlbmd0aCwibnVtYmVyIj09dHlwZW9mIGIubGltaXQmJihkLml0ZW1zPWQuaXRlbXMuc2xpY2UoMCxiLmxpbWl0KSksZH07dmFyIGI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgYj9hPmI/MTpiPmE/LTE6MDooYT1oKFN0cmluZyhhfHwiIikpLGI9aChTdHJpbmcoYnx8IiIpKSxhPmI/MTpiPmE/LTE6MCl9LGM9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU7Zm9yKGI9MSxjPWFyZ3VtZW50cy5sZW5ndGg7Yz5iO2IrKylpZihlPWFyZ3VtZW50c1tiXSlmb3IoZCBpbiBlKWUuaGFzT3duUHJvcGVydHkoZCkmJihhW2RdPWVbZF0pO3JldHVybiBhfSxkPWZ1bmN0aW9uKGEpe3JldHVybihhKyIiKS5yZXBsYWNlKC9eXHMrfFxzKyR8L2csIiIpfSxlPWZ1bmN0aW9uKGEpe3JldHVybihhKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpfSxmPUFycmF5LmlzQXJyYXl8fCQmJiQuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX0sZz17YToiW2HDgMOBw4LDg8OEw4XDoMOhw6LDo8Okw6XEgMSBxIXEhF0iLGM6Iltjw4fDp8SHxIbEjcSMXSIsZDoiW2TEkcSQxI/Ejl0iLGU6Iltlw4jDicOKw4vDqMOpw6rDq8SbxJrEksSTxJnEmF0iLGk6Iltpw4zDjcOOw4/DrMOtw67Dr8SqxKtdIixsOiJbbMWCxYFdIixuOiJbbsORw7HFiMWHxYTFg10iLG86Iltvw5LDk8OUw5XDlcOWw5jDssOzw7TDtcO2w7jFjMWNXSIscjoiW3LFmcWYXSIsczoiW3PFoMWhxZvFml0iLHQ6Ilt0xaXFpF0iLHU6Ilt1w5nDmsObw5zDucO6w7vDvMWvxa7FqsWrXSIseToiW3nFuMO/w73DnV0iLHo6Ilt6xb3FvsW8xbvFusW5XSJ9LGg9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlPSIiLGY9e307Zm9yKGMgaW4gZylpZihnLmhhc093blByb3BlcnR5KGMpKWZvcihkPWdbY10uc3Vic3RyaW5nKDIsZ1tjXS5sZW5ndGgtMSksZSs9ZCxhPTAsYj1kLmxlbmd0aDtiPmE7YSsrKWZbZC5jaGFyQXQoYSldPWM7dmFyIGg9bmV3IFJlZ0V4cCgiWyIrZSsiXSIsImciKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShoLGZ1bmN0aW9uKGEpe3JldHVybiBmW2FdfSkudG9Mb3dlckNhc2UoKX19KCk7cmV0dXJuIGF9KSxmdW5jdGlvbihhLGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJtaWNyb3BsdWdpbiIsYik6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWIoKTphLk1pY3JvUGx1Z2luPWIoKX0odGhpcyxmdW5jdGlvbigpe3ZhciBhPXt9O2EubWl4aW49ZnVuY3Rpb24oYSl7YS5wbHVnaW5zPXt9LGEucHJvdG90eXBlLmluaXRpYWxpemVQbHVnaW5zPWZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxmPXRoaXMsZz1bXTtpZihmLnBsdWdpbnM9e25hbWVzOltdLHNldHRpbmdzOnt9LHJlcXVlc3RlZDp7fSxsb2FkZWQ6e319LGIuaXNBcnJheShhKSlmb3IoYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKykic3RyaW5nIj09dHlwZW9mIGFbY10/Zy5wdXNoKGFbY10pOihmLnBsdWdpbnMuc2V0dGluZ3NbYVtjXS5uYW1lXT1hW2NdLm9wdGlvbnMsZy5wdXNoKGFbY10ubmFtZSkpO2Vsc2UgaWYoYSlmb3IoZSBpbiBhKWEuaGFzT3duUHJvcGVydHkoZSkmJihmLnBsdWdpbnMuc2V0dGluZ3NbZV09YVtlXSxnLnB1c2goZSkpO2Zvcig7Zy5sZW5ndGg7KWYucmVxdWlyZShnLnNoaWZ0KCkpfSxhLnByb3RvdHlwZS5sb2FkUGx1Z2luPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMsZD1jLnBsdWdpbnMsZT1hLnBsdWdpbnNbYl07aWYoIWEucGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShiKSl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kICInK2IrJyIgcGx1Z2luJyk7ZC5yZXF1ZXN0ZWRbYl09ITAsZC5sb2FkZWRbYl09ZS5mbi5hcHBseShjLFtjLnBsdWdpbnMuc2V0dGluZ3NbYl18fHt9XSksZC5uYW1lcy5wdXNoKGIpfSxhLnByb3RvdHlwZS5yZXF1aXJlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLnBsdWdpbnM7aWYoIWIucGx1Z2lucy5sb2FkZWQuaGFzT3duUHJvcGVydHkoYSkpe2lmKGMucmVxdWVzdGVkW2FdKXRocm93IG5ldyBFcnJvcignUGx1Z2luIGhhcyBjaXJjdWxhciBkZXBlbmRlbmN5ICgiJythKyciKScpO2IubG9hZFBsdWdpbihhKX1yZXR1cm4gYy5sb2FkZWRbYV19LGEuZGVmaW5lPWZ1bmN0aW9uKGIsYyl7YS5wbHVnaW5zW2JdPXtuYW1lOmIsZm46Y319fTt2YXIgYj17aXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfX07cmV0dXJuIGF9KSxmdW5jdGlvbihhLGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJzZWxlY3RpemUiLFsianF1ZXJ5Iiwic2lmdGVyIiwibWljcm9wbHVnaW4iXSxiKToib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YihyZXF1aXJlKCJqcXVlcnkiKSxyZXF1aXJlKCJzaWZ0ZXIiKSxyZXF1aXJlKCJtaWNyb3BsdWdpbiIpKTphLlNlbGVjdGl6ZT1iKGEualF1ZXJ5LGEuU2lmdGVyLGEuTWljcm9QbHVnaW4pfSh0aGlzLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9ZnVuY3Rpb24oYSxiKXtpZigic3RyaW5nIiE9dHlwZW9mIGJ8fGIubGVuZ3RoKXt2YXIgYz0ic3RyaW5nIj09dHlwZW9mIGI/bmV3IFJlZ0V4cChiLCJpIik6YixkPWZ1bmN0aW9uKGEpe3ZhciBiPTA7aWYoMz09PWEubm9kZVR5cGUpe3ZhciBlPWEuZGF0YS5zZWFyY2goYyk7aWYoZT49MCYmYS5kYXRhLmxlbmd0aD4wKXt2YXIgZj1hLmRhdGEubWF0Y2goYyksZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zy5jbGFzc05hbWU9ImhpZ2hsaWdodCI7dmFyIGg9YS5zcGxpdFRleHQoZSksaT0oaC5zcGxpdFRleHQoZlswXS5sZW5ndGgpLGguY2xvbmVOb2RlKCEwKSk7Zy5hcHBlbmRDaGlsZChpKSxoLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGcsaCksYj0xfX1lbHNlIGlmKDE9PT1hLm5vZGVUeXBlJiZhLmNoaWxkTm9kZXMmJiEvKHNjcmlwdHxzdHlsZSkvaS50ZXN0KGEudGFnTmFtZSkpZm9yKHZhciBqPTA7ajxhLmNoaWxkTm9kZXMubGVuZ3RoOysrailqKz1kKGEuY2hpbGROb2Rlc1tqXSk7cmV0dXJuIGJ9O3JldHVybiBhLmVhY2goZnVuY3Rpb24oKXtkKHRoaXMpfSl9fSxlPWZ1bmN0aW9uKCl7fTtlLnByb3RvdHlwZT17b246ZnVuY3Rpb24oYSxiKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fSx0aGlzLl9ldmVudHNbYV09dGhpcy5fZXZlbnRzW2FdfHxbXSx0aGlzLl9ldmVudHNbYV0ucHVzaChiKX0sb2ZmOmZ1bmN0aW9uKGEsYil7dmFyIGM9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gMD09PWM/ZGVsZXRlIHRoaXMuX2V2ZW50czoxPT09Yz9kZWxldGUgdGhpcy5fZXZlbnRzW2FdOih0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fSx2b2lkKGEgaW4gdGhpcy5fZXZlbnRzIT0hMSYmdGhpcy5fZXZlbnRzW2FdLnNwbGljZSh0aGlzLl9ldmVudHNbYV0uaW5kZXhPZihiKSwxKSkpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LGEgaW4gdGhpcy5fZXZlbnRzIT0hMSlmb3IodmFyIGI9MDtiPHRoaXMuX2V2ZW50c1thXS5sZW5ndGg7YisrKXRoaXMuX2V2ZW50c1thXVtiXS5hcHBseSh0aGlzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fSxlLm1peGluPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bIm9uIiwib2ZmIiwidHJpZ2dlciJdLGM9MDtjPGIubGVuZ3RoO2MrKylhLnByb3RvdHlwZVtiW2NdXT1lLnByb3RvdHlwZVtiW2NdXX07dmFyIGY9L01hYy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxnPTY1LGg9MTMsaT0yNyxqPTM3LGs9MzgsbD04MCxtPTM5LG49NDAsbz03OCxwPTgscT00NixyPTE2LHM9Zj85MToxNyx0PWY/MTg6MTcsdT05LHY9MSx3PTIseD0hL2FuZHJvaWQvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSYmISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIikudmFsaWRpdHkseT1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGF9LHo9ZnVuY3Rpb24oYSl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBhfHxudWxsPT09YT9udWxsOiJib29sZWFuIj09dHlwZW9mIGE/YT8iMSI6IjAiOmErIiJ9LEE9ZnVuY3Rpb24oYSl7cmV0dXJuKGErIiIpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpfSxCPWZ1bmN0aW9uKGEpe3JldHVybihhKyIiKS5yZXBsYWNlKC9cJC9nLCIkJCQkIil9LEM9e307Qy5iZWZvcmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWFbYl07YVtiXT1mdW5jdGlvbigpe3JldHVybiBjLmFwcGx5KGEsYXJndW1lbnRzKSxkLmFwcGx5KGEsYXJndW1lbnRzKX19LEMuYWZ0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWFbYl07YVtiXT1mdW5jdGlvbigpe3ZhciBiPWQuYXBwbHkoYSxhcmd1bWVudHMpO3JldHVybiBjLmFwcGx5KGEsYXJndW1lbnRzKSxifX07dmFyIEQ9ZnVuY3Rpb24oYSl7dmFyIGI9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Ynx8KGI9ITAsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0sRT1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPXRoaXMsZT1hcmd1bWVudHM7d2luZG93LmNsZWFyVGltZW91dChjKSxjPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5hcHBseShkLGUpfSxiKX19LEY9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9YS50cmlnZ2VyLGY9e307YS50cmlnZ2VyPWZ1bmN0aW9uKCl7dmFyIGM9YXJndW1lbnRzWzBdO3JldHVybi0xPT09Yi5pbmRleE9mKGMpP2UuYXBwbHkoYSxhcmd1bWVudHMpOnZvaWQoZltjXT1hcmd1bWVudHMpfSxjLmFwcGx5KGEsW10pLGEudHJpZ2dlcj1lO2ZvcihkIGluIGYpZi5oYXNPd25Qcm9wZXJ0eShkKSYmZS5hcHBseShhLGZbZF0pfSxHPWZ1bmN0aW9uKGEsYixjLGQpe2Eub24oYixjLGZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1iLnRhcmdldDtjJiZjLnBhcmVudE5vZGUhPT1hWzBdOyljPWMucGFyZW50Tm9kZTtyZXR1cm4gYi5jdXJyZW50VGFyZ2V0PWMsZC5hcHBseSh0aGlzLFtiXSl9KX0sSD1mdW5jdGlvbihhKXt2YXIgYj17fTtpZigic2VsZWN0aW9uU3RhcnQiaW4gYSliLnN0YXJ0PWEuc2VsZWN0aW9uU3RhcnQsYi5sZW5ndGg9YS5zZWxlY3Rpb25FbmQtYi5zdGFydDtlbHNlIGlmKGRvY3VtZW50LnNlbGVjdGlvbil7YS5mb2N1cygpO3ZhciBjPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLGQ9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dC5sZW5ndGg7Yy5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLWEudmFsdWUubGVuZ3RoKSxiLnN0YXJ0PWMudGV4dC5sZW5ndGgtZCxiLmxlbmd0aD1kfXJldHVybiBifSxJPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e307aWYoYylmb3IoZD0wLGU9Yy5sZW5ndGg7ZT5kO2QrKylmW2NbZF1dPWEuY3NzKGNbZF0pO2Vsc2UgZj1hLmNzcygpO2IuY3NzKGYpfSxKPWZ1bmN0aW9uKGIsYyl7aWYoIWIpcmV0dXJuIDA7dmFyIGQ9YSgiPHRlc3Q+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDotOTk5OTksbGVmdDotOTk5OTksd2lkdGg6ImF1dG8iLHBhZGRpbmc6MCx3aGl0ZVNwYWNlOiJwcmUifSkudGV4dChiKS5hcHBlbmRUbygiYm9keSIpO0koYyxkLFsibGV0dGVyU3BhY2luZyIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJ0ZXh0VHJhbnNmb3JtIl0pO3ZhciBlPWQud2lkdGgoKTtyZXR1cm4gZC5yZW1vdmUoKSxlfSxLPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsYz1mdW5jdGlvbihjLGQpe3ZhciBlLGYsZyxoLGksaixrLGw7Yz1jfHx3aW5kb3cuZXZlbnR8fHt9LGQ9ZHx8e30sYy5tZXRhS2V5fHxjLmFsdEtleXx8KGQuZm9yY2V8fGEuZGF0YSgiZ3JvdyIpIT09ITEpJiYoZT1hLnZhbCgpLGMudHlwZSYmImtleWRvd24iPT09Yy50eXBlLnRvTG93ZXJDYXNlKCkmJihmPWMua2V5Q29kZSxnPWY+PTk3JiYxMjI+PWZ8fGY+PTY1JiY5MD49Znx8Zj49NDgmJjU3Pj1mfHwzMj09PWYsZj09PXF8fGY9PT1wPyhsPUgoYVswXSksbC5sZW5ndGg/ZT1lLnN1YnN0cmluZygwLGwuc3RhcnQpK2Uuc3Vic3RyaW5nKGwuc3RhcnQrbC5sZW5ndGgpOmY9PT1wJiZsLnN0YXJ0P2U9ZS5zdWJzdHJpbmcoMCxsLnN0YXJ0LTEpK2Uuc3Vic3RyaW5nKGwuc3RhcnQrMSk6Zj09PXEmJiJ1bmRlZmluZWQiIT10eXBlb2YgbC5zdGFydCYmKGU9ZS5zdWJzdHJpbmcoMCxsLnN0YXJ0KStlLnN1YnN0cmluZyhsLnN0YXJ0KzEpKSk6ZyYmKGo9Yy5zaGlmdEtleSxrPVN0cmluZy5mcm9tQ2hhckNvZGUoYy5rZXlDb2RlKSxrPWo/ay50b1VwcGVyQ2FzZSgpOmsudG9Mb3dlckNhc2UoKSxlKz1rKSksaD1hLmF0dHIoInBsYWNlaG9sZGVyIiksIWUmJmgmJihlPWgpLGk9SihlLGEpKzQsaSE9PWImJihiPWksYS53aWR0aChpKSxhLnRyaWdnZXJIYW5kbGVyKCJyZXNpemUiKSkpfTthLm9uKCJrZXlkb3duIGtleXVwIHVwZGF0ZSBibHVyIixjKSxjKCl9LEw9ZnVuY3Rpb24oYyxkKXt2YXIgZSxmLGcsaCxpPXRoaXM7aD1jWzBdLGguc2VsZWN0aXplPWk7dmFyIGo9d2luZG93LmdldENvbXB1dGVkU3R5bGUmJndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGgsbnVsbCk7aWYoZz1qP2ouZ2V0UHJvcGVydHlWYWx1ZSgiZGlyZWN0aW9uIik6aC5jdXJyZW50U3R5bGUmJmguY3VycmVudFN0eWxlLmRpcmVjdGlvbixnPWd8fGMucGFyZW50cygiW2Rpcl06Zmlyc3QiKS5hdHRyKCJkaXIiKXx8IiIsYS5leHRlbmQoaSx7b3JkZXI6MCxzZXR0aW5nczpkLCRpbnB1dDpjLHRhYkluZGV4OmMuYXR0cigidGFiaW5kZXgiKXx8IiIsdGFnVHlwZToic2VsZWN0Ij09PWgudGFnTmFtZS50b0xvd2VyQ2FzZSgpP3Y6dyxydGw6L3J0bC9pLnRlc3QoZyksZXZlbnROUzoiLnNlbGVjdGl6ZSIrICsrTC5jb3VudCxoaWdobGlnaHRlZFZhbHVlOm51bGwsaXNPcGVuOiExLGlzRGlzYWJsZWQ6ITEsaXNSZXF1aXJlZDpjLmlzKCJbcmVxdWlyZWRdIiksaXNJbnZhbGlkOiExLGlzTG9ja2VkOiExLGlzRm9jdXNlZDohMSxpc0lucHV0SGlkZGVuOiExLGlzU2V0dXA6ITEsaXNTaGlmdERvd246ITEsaXNDbWREb3duOiExLGlzQ3RybERvd246ITEsaWdub3JlRm9jdXM6ITEsaWdub3JlQmx1cjohMSxpZ25vcmVIb3ZlcjohMSxoYXNPcHRpb25zOiExLGN1cnJlbnRSZXN1bHRzOm51bGwsbGFzdFZhbHVlOiIiLGNhcmV0UG9zOjAsbG9hZGluZzowLGxvYWRlZFNlYXJjaGVzOnt9LCRhY3RpdmVPcHRpb246bnVsbCwkYWN0aXZlSXRlbXM6W10sb3B0Z3JvdXBzOnt9LG9wdGlvbnM6e30sdXNlck9wdGlvbnM6e30saXRlbXM6W10scmVuZGVyQ2FjaGU6e30sb25TZWFyY2hDaGFuZ2U6bnVsbD09PWQubG9hZFRocm90dGxlP2kub25TZWFyY2hDaGFuZ2U6RShpLm9uU2VhcmNoQ2hhbmdlLGQubG9hZFRocm90dGxlKX0pLGkuc2lmdGVyPW5ldyBiKHRoaXMub3B0aW9ucyx7ZGlhY3JpdGljczpkLmRpYWNyaXRpY3N9KSxpLnNldHRpbmdzLm9wdGlvbnMpe2ZvcihlPTAsZj1pLnNldHRpbmdzLm9wdGlvbnMubGVuZ3RoO2Y+ZTtlKyspaS5yZWdpc3Rlck9wdGlvbihpLnNldHRpbmdzLm9wdGlvbnNbZV0pO2RlbGV0ZSBpLnNldHRpbmdzLm9wdGlvbnN9aWYoaS5zZXR0aW5ncy5vcHRncm91cHMpe2ZvcihlPTAsZj1pLnNldHRpbmdzLm9wdGdyb3Vwcy5sZW5ndGg7Zj5lO2UrKylpLnJlZ2lzdGVyT3B0aW9uR3JvdXAoaS5zZXR0aW5ncy5vcHRncm91cHNbZV0pO2RlbGV0ZSBpLnNldHRpbmdzLm9wdGdyb3Vwc31pLnNldHRpbmdzLm1vZGU9aS5zZXR0aW5ncy5tb2RlfHwoMT09PWkuc2V0dGluZ3MubWF4SXRlbXM/InNpbmdsZSI6Im11bHRpIiksImJvb2xlYW4iIT10eXBlb2YgaS5zZXR0aW5ncy5oaWRlU2VsZWN0ZWQmJihpLnNldHRpbmdzLmhpZGVTZWxlY3RlZD0ibXVsdGkiPT09aS5zZXR0aW5ncy5tb2RlKSxpLmluaXRpYWxpemVQbHVnaW5zKGkuc2V0dGluZ3MucGx1Z2lucyksaS5zZXR1cENhbGxiYWNrcygpLGkuc2V0dXBUZW1wbGF0ZXMoKSxpLnNldHVwKCl9O3JldHVybiBlLm1peGluKEwpLGMubWl4aW4oTCksYS5leHRlbmQoTC5wcm90b3R5cGUse3NldHVwOmZ1bmN0aW9uKCl7dmFyIGIsYyxkLGUsZyxoLGksaixrLGw9dGhpcyxtPWwuc2V0dGluZ3Msbj1sLmV2ZW50TlMsbz1hKHdpbmRvdykscD1hKGRvY3VtZW50KSxxPWwuJGlucHV0O2lmKGk9bC5zZXR0aW5ncy5tb2RlLGo9cS5hdHRyKCJjbGFzcyIpfHwiIixiPWEoIjxkaXY+IikuYWRkQ2xhc3MobS53cmFwcGVyQ2xhc3MpLmFkZENsYXNzKGopLmFkZENsYXNzKGkpLGM9YSgiPGRpdj4iKS5hZGRDbGFzcyhtLmlucHV0Q2xhc3MpLmFkZENsYXNzKCJpdGVtcyIpLmFwcGVuZFRvKGIpLGQ9YSgnPGlucHV0IHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiAvPicpLmFwcGVuZFRvKGMpLmF0dHIoInRhYmluZGV4IixxLmlzKCI6ZGlzYWJsZWQiKT8iLTEiOmwudGFiSW5kZXgpLGg9YShtLmRyb3Bkb3duUGFyZW50fHxiKSxlPWEoIjxkaXY+IikuYWRkQ2xhc3MobS5kcm9wZG93bkNsYXNzKS5hZGRDbGFzcyhpKS5oaWRlKCkuYXBwZW5kVG8oaCksZz1hKCI8ZGl2PiIpLmFkZENsYXNzKG0uZHJvcGRvd25Db250ZW50Q2xhc3MpLmFwcGVuZFRvKGUpLGwuc2V0dGluZ3MuY29weUNsYXNzZXNUb0Ryb3Bkb3duJiZlLmFkZENsYXNzKGopLGIuY3NzKHt3aWR0aDpxWzBdLnN0eWxlLndpZHRofSksbC5wbHVnaW5zLm5hbWVzLmxlbmd0aCYmKGs9InBsdWdpbi0iK2wucGx1Z2lucy5uYW1lcy5qb2luKCIgcGx1Z2luLSIpLGIuYWRkQ2xhc3MoayksZS5hZGRDbGFzcyhrKSksKG51bGw9PT1tLm1heEl0ZW1zfHxtLm1heEl0ZW1zPjEpJiZsLnRhZ1R5cGU9PT12JiZxLmF0dHIoIm11bHRpcGxlIiwibXVsdGlwbGUiKSxsLnNldHRpbmdzLnBsYWNlaG9sZGVyJiZkLmF0dHIoInBsYWNlaG9sZGVyIixtLnBsYWNlaG9sZGVyKSwhbC5zZXR0aW5ncy5zcGxpdE9uJiZsLnNldHRpbmdzLmRlbGltaXRlcil7dmFyIHU9bC5zZXR0aW5ncy5kZWxpbWl0ZXIucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKTtsLnNldHRpbmdzLnNwbGl0T249bmV3IFJlZ0V4cCgiXFxzKiIrdSsiK1xccyoiKX1xLmF0dHIoImF1dG9jb3JyZWN0IikmJmQuYXR0cigiYXV0b2NvcnJlY3QiLHEuYXR0cigiYXV0b2NvcnJlY3QiKSkscS5hdHRyKCJhdXRvY2FwaXRhbGl6ZSIpJiZkLmF0dHIoImF1dG9jYXBpdGFsaXplIixxLmF0dHIoImF1dG9jYXBpdGFsaXplIikpLGwuJHdyYXBwZXI9YixsLiRjb250cm9sPWMsbC4kY29udHJvbF9pbnB1dD1kLGwuJGRyb3Bkb3duPWUsbC4kZHJvcGRvd25fY29udGVudD1nLGUub24oIm1vdXNlZW50ZXIiLCJbZGF0YS1zZWxlY3RhYmxlXSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk9wdGlvbkhvdmVyLmFwcGx5KGwsYXJndW1lbnRzKX0pLGUub24oIm1vdXNlZG93biBjbGljayIsIltkYXRhLXNlbGVjdGFibGVdIixmdW5jdGlvbigpe3JldHVybiBsLm9uT3B0aW9uU2VsZWN0LmFwcGx5KGwsYXJndW1lbnRzKX0pLEcoYywibW91c2Vkb3duIiwiKjpub3QoaW5wdXQpIixmdW5jdGlvbigpe3JldHVybiBsLm9uSXRlbVNlbGVjdC5hcHBseShsLGFyZ3VtZW50cyl9KSxLKGQpLGMub24oe21vdXNlZG93bjpmdW5jdGlvbigpe3JldHVybiBsLm9uTW91c2VEb3duLmFwcGx5KGwsYXJndW1lbnRzKX0sY2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkNsaWNrLmFwcGx5KGwsYXJndW1lbnRzKX19KSxkLm9uKHttb3VzZWRvd246ZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0sa2V5ZG93bjpmdW5jdGlvbigpe3JldHVybiBsLm9uS2V5RG93bi5hcHBseShsLGFyZ3VtZW50cyl9LGtleXVwOmZ1bmN0aW9uKCl7cmV0dXJuIGwub25LZXlVcC5hcHBseShsLGFyZ3VtZW50cyl9LGtleXByZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIGwub25LZXlQcmVzcy5hcHBseShsLGFyZ3VtZW50cyl9LHJlc2l6ZTpmdW5jdGlvbigpe2wucG9zaXRpb25Ecm9wZG93bi5hcHBseShsLFtdKX0sYmx1cjpmdW5jdGlvbigpe3JldHVybiBsLm9uQmx1ci5hcHBseShsLGFyZ3VtZW50cyl9LGZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIGwuaWdub3JlQmx1cj0hMSxsLm9uRm9jdXMuYXBwbHkobCxhcmd1bWVudHMpfSxwYXN0ZTpmdW5jdGlvbigpe3JldHVybiBsLm9uUGFzdGUuYXBwbHkobCxhcmd1bWVudHMpfX0pLHAub24oImtleWRvd24iK24sZnVuY3Rpb24oYSl7bC5pc0NtZERvd249YVtmPyJtZXRhS2V5IjoiY3RybEtleSJdLGwuaXNDdHJsRG93bj1hW2Y/ImFsdEtleSI6ImN0cmxLZXkiXSxsLmlzU2hpZnREb3duPWEuc2hpZnRLZXl9KSxwLm9uKCJrZXl1cCIrbixmdW5jdGlvbihhKXthLmtleUNvZGU9PT10JiYobC5pc0N0cmxEb3duPSExKSxhLmtleUNvZGU9PT1yJiYobC5pc1NoaWZ0RG93bj0hMSksYS5rZXlDb2RlPT09cyYmKGwuaXNDbWREb3duPSExKX0pLHAub24oIm1vdXNlZG93biIrbixmdW5jdGlvbihhKXtpZihsLmlzRm9jdXNlZCl7aWYoYS50YXJnZXQ9PT1sLiRkcm9wZG93blswXXx8YS50YXJnZXQucGFyZW50Tm9kZT09PWwuJGRyb3Bkb3duWzBdKXJldHVybiExO2wuJGNvbnRyb2wuaGFzKGEudGFyZ2V0KS5sZW5ndGh8fGEudGFyZ2V0PT09bC4kY29udHJvbFswXXx8bC5ibHVyKGEudGFyZ2V0KX19KSxvLm9uKFsic2Nyb2xsIituLCJyZXNpemUiK25dLmpvaW4oIiAiKSxmdW5jdGlvbigpe2wuaXNPcGVuJiZsLnBvc2l0aW9uRHJvcGRvd24uYXBwbHkobCxhcmd1bWVudHMpfSksby5vbigibW91c2Vtb3ZlIituLGZ1bmN0aW9uKCl7bC5pZ25vcmVIb3Zlcj0hMX0pLHRoaXMucmV2ZXJ0U2V0dGluZ3M9eyRjaGlsZHJlbjpxLmNoaWxkcmVuKCkuZGV0YWNoKCksdGFiaW5kZXg6cS5hdHRyKCJ0YWJpbmRleCIpfSxxLmF0dHIoInRhYmluZGV4IiwtMSkuaGlkZSgpLmFmdGVyKGwuJHdyYXBwZXIpLGEuaXNBcnJheShtLml0ZW1zKSYmKGwuc2V0VmFsdWUobS5pdGVtcyksZGVsZXRlIG0uaXRlbXMpLHgmJnEub24oImludmFsaWQiK24sZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGwuaXNJbnZhbGlkPSEwLGwucmVmcmVzaFN0YXRlKCl9KSxsLnVwZGF0ZU9yaWdpbmFsSW5wdXQoKSxsLnJlZnJlc2hJdGVtcygpLGwucmVmcmVzaFN0YXRlKCksbC51cGRhdGVQbGFjZWhvbGRlcigpLGwuaXNTZXR1cD0hMCxxLmlzKCI6ZGlzYWJsZWQiKSYmbC5kaXNhYmxlKCksbC5vbigiY2hhbmdlIix0aGlzLm9uQ2hhbmdlKSxxLmRhdGEoInNlbGVjdGl6ZSIsbCkscS5hZGRDbGFzcygic2VsZWN0aXplZCIpLGwudHJpZ2dlcigiaW5pdGlhbGl6ZSIpLG0ucHJlbG9hZD09PSEwJiZsLm9uU2VhcmNoQ2hhbmdlKCIiKX0sc2V0dXBUZW1wbGF0ZXM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9Yi5zZXR0aW5ncy5sYWJlbEZpZWxkLGQ9Yi5zZXR0aW5ncy5vcHRncm91cExhYmVsRmllbGQsZT17b3B0Z3JvdXA6ZnVuY3Rpb24oYSl7cmV0dXJuJzxkaXYgY2xhc3M9Im9wdGdyb3VwIj4nK2EuaHRtbCsiPC9kaXY+In0sb3B0Z3JvdXBfaGVhZGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuJzxkaXYgY2xhc3M9Im9wdGdyb3VwLWhlYWRlciI+JytiKGFbZF0pKyI8L2Rpdj4ifSxvcHRpb246ZnVuY3Rpb24oYSxiKXtyZXR1cm4nPGRpdiBjbGFzcz0ib3B0aW9uIj4nK2IoYVtjXSkrIjwvZGl2PiJ9LGl0ZW06ZnVuY3Rpb24oYSxiKXtyZXR1cm4nPGRpdiBjbGFzcz0iaXRlbSI+JytiKGFbY10pKyI8L2Rpdj4ifSxvcHRpb25fY3JlYXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuJzxkaXYgY2xhc3M9ImNyZWF0ZSI+QWRkIDxzdHJvbmc+JytiKGEuaW5wdXQpKyI8L3N0cm9uZz4maGVsbGlwOzwvZGl2PiJ9fTtiLnNldHRpbmdzLnJlbmRlcj1hLmV4dGVuZCh7fSxlLGIuc2V0dGluZ3MucmVuZGVyKX0sc2V0dXBDYWxsYmFja3M6ZnVuY3Rpb24oKXt2YXIgYSxiLGM9e2luaXRpYWxpemU6Im9uSW5pdGlhbGl6ZSIsY2hhbmdlOiJvbkNoYW5nZSIsaXRlbV9hZGQ6Im9uSXRlbUFkZCIsaXRlbV9yZW1vdmU6Im9uSXRlbVJlbW92ZSIsY2xlYXI6Im9uQ2xlYXIiLG9wdGlvbl9hZGQ6Im9uT3B0aW9uQWRkIixvcHRpb25fcmVtb3ZlOiJvbk9wdGlvblJlbW92ZSIsb3B0aW9uX2NsZWFyOiJvbk9wdGlvbkNsZWFyIixvcHRncm91cF9hZGQ6Im9uT3B0aW9uR3JvdXBBZGQiLG9wdGdyb3VwX3JlbW92ZToib25PcHRpb25Hcm91cFJlbW92ZSIsb3B0Z3JvdXBfY2xlYXI6Im9uT3B0aW9uR3JvdXBDbGVhciIsZHJvcGRvd25fb3Blbjoib25Ecm9wZG93bk9wZW4iLGRyb3Bkb3duX2Nsb3NlOiJvbkRyb3Bkb3duQ2xvc2UiLHR5cGU6Im9uVHlwZSIsbG9hZDoib25Mb2FkIixmb2N1czoib25Gb2N1cyIsYmx1cjoib25CbHVyIn07Zm9yKGEgaW4gYyljLmhhc093blByb3BlcnR5KGEpJiYoYj10aGlzLnNldHRpbmdzW2NbYV1dLGImJnRoaXMub24oYSxiKSl9LG9uQ2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLmlzRm9jdXNlZHx8KGIuZm9jdXMoKSxhLnByZXZlbnREZWZhdWx0KCkpfSxvbk1vdXNlRG93bjpmdW5jdGlvbihiKXt7dmFyIGM9dGhpcyxkPWIuaXNEZWZhdWx0UHJldmVudGVkKCk7YShiLnRhcmdldCl9aWYoYy5pc0ZvY3VzZWQpe2lmKGIudGFyZ2V0IT09Yy4kY29udHJvbF9pbnB1dFswXSlyZXR1cm4ic2luZ2xlIj09PWMuc2V0dGluZ3MubW9kZT9jLmlzT3Blbj9jLmNsb3NlKCk6Yy5vcGVuKCk6ZHx8Yy5zZXRBY3RpdmVJdGVtKG51bGwpLCExfWVsc2UgZHx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvY3VzKCl9LDApfSxvbkNoYW5nZTpmdW5jdGlvbigpe3RoaXMuJGlucHV0LnRyaWdnZXIoImNoYW5nZSIpfSxvblBhc3RlOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7Yy5pc0Z1bGwoKXx8Yy5pc0lucHV0SGlkZGVufHxjLmlzTG9ja2VkP2IucHJldmVudERlZmF1bHQoKTpjLnNldHRpbmdzLnNwbGl0T24mJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmb3IodmFyIGI9YS50cmltKGMuJGNvbnRyb2xfaW5wdXQudmFsKCl8fCIiKS5zcGxpdChjLnNldHRpbmdzLnNwbGl0T24pLGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspYy5jcmVhdGVJdGVtKGJbZF0pfSwwKX0sb25LZXlQcmVzczpmdW5jdGlvbihhKXtpZih0aGlzLmlzTG9ja2VkKXJldHVybiBhJiZhLnByZXZlbnREZWZhdWx0KCk7dmFyIGI9U3RyaW5nLmZyb21DaGFyQ29kZShhLmtleUNvZGV8fGEud2hpY2gpO3JldHVybiB0aGlzLnNldHRpbmdzLmNyZWF0ZSYmIm11bHRpIj09PXRoaXMuc2V0dGluZ3MubW9kZSYmYj09PXRoaXMuc2V0dGluZ3MuZGVsaW1pdGVyPyh0aGlzLmNyZWF0ZUl0ZW0oKSxhLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMH0sb25LZXlEb3duOmZ1bmN0aW9uKGEpe3ZhciBiPShhLnRhcmdldD09PXRoaXMuJGNvbnRyb2xfaW5wdXRbMF0sdGhpcyk7aWYoYi5pc0xvY2tlZClyZXR1cm4gdm9pZChhLmtleUNvZGUhPT11JiZhLnByZXZlbnREZWZhdWx0KCkpO3N3aXRjaChhLmtleUNvZGUpe2Nhc2UgZzppZihiLmlzQ21kRG93bilyZXR1cm4gdm9pZCBiLnNlbGVjdEFsbCgpO2JyZWFrO2Nhc2UgaTpyZXR1cm4gdm9pZChiLmlzT3BlbiYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGIuY2xvc2UoKSkpO2Nhc2UgbzppZighYS5jdHJsS2V5fHxhLmFsdEtleSlicmVhaztjYXNlIG46aWYoIWIuaXNPcGVuJiZiLmhhc09wdGlvbnMpYi5vcGVuKCk7ZWxzZSBpZihiLiRhY3RpdmVPcHRpb24pe2IuaWdub3JlSG92ZXI9ITA7dmFyIGM9Yi5nZXRBZGphY2VudE9wdGlvbihiLiRhY3RpdmVPcHRpb24sMSk7Yy5sZW5ndGgmJmIuc2V0QWN0aXZlT3B0aW9uKGMsITAsITApfXJldHVybiB2b2lkIGEucHJldmVudERlZmF1bHQoKTtjYXNlIGw6aWYoIWEuY3RybEtleXx8YS5hbHRLZXkpYnJlYWs7Y2FzZSBrOmlmKGIuJGFjdGl2ZU9wdGlvbil7Yi5pZ25vcmVIb3Zlcj0hMDt2YXIgZD1iLmdldEFkamFjZW50T3B0aW9uKGIuJGFjdGl2ZU9wdGlvbiwtMSk7ZC5sZW5ndGgmJmIuc2V0QWN0aXZlT3B0aW9uKGQsITAsITApfXJldHVybiB2b2lkIGEucHJldmVudERlZmF1bHQoKTtjYXNlIGg6cmV0dXJuIHZvaWQoYi5pc09wZW4mJmIuJGFjdGl2ZU9wdGlvbiYmKGIub25PcHRpb25TZWxlY3Qoe2N1cnJlbnRUYXJnZXQ6Yi4kYWN0aXZlT3B0aW9ufSksYS5wcmV2ZW50RGVmYXVsdCgpKSk7Y2FzZSBqOnJldHVybiB2b2lkIGIuYWR2YW5jZVNlbGVjdGlvbigtMSxhKTtjYXNlIG06cmV0dXJuIHZvaWQgYi5hZHZhbmNlU2VsZWN0aW9uKDEsYSk7Y2FzZSB1OnJldHVybiBiLnNldHRpbmdzLnNlbGVjdE9uVGFiJiZiLmlzT3BlbiYmYi4kYWN0aXZlT3B0aW9uJiYoYi5vbk9wdGlvblNlbGVjdCh7Y3VycmVudFRhcmdldDpiLiRhY3RpdmVPcHRpb259KSxiLmlzRnVsbCgpfHxhLnByZXZlbnREZWZhdWx0KCkpLHZvaWQoYi5zZXR0aW5ncy5jcmVhdGUmJmIuY3JlYXRlSXRlbSgpJiZhLnByZXZlbnREZWZhdWx0KCkpO2Nhc2UgcDpjYXNlIHE6cmV0dXJuIHZvaWQgYi5kZWxldGVTZWxlY3Rpb24oYSl9cmV0dXJuIWIuaXNGdWxsKCkmJiFiLmlzSW5wdXRIaWRkZW58fChmP2EubWV0YUtleTphLmN0cmxLZXkpP3ZvaWQgMDp2b2lkIGEucHJldmVudERlZmF1bHQoKX0sb25LZXlVcDpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKGIuaXNMb2NrZWQpcmV0dXJuIGEmJmEucHJldmVudERlZmF1bHQoKTt2YXIgYz1iLiRjb250cm9sX2lucHV0LnZhbCgpfHwiIjtiLmxhc3RWYWx1ZSE9PWMmJihiLmxhc3RWYWx1ZT1jLGIub25TZWFyY2hDaGFuZ2UoYyksYi5yZWZyZXNoT3B0aW9ucygpLGIudHJpZ2dlcigidHlwZSIsYykpfSxvblNlYXJjaENoYW5nZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5zZXR0aW5ncy5sb2FkO2MmJihiLmxvYWRlZFNlYXJjaGVzLmhhc093blByb3BlcnR5KGEpfHwoYi5sb2FkZWRTZWFyY2hlc1thXT0hMCxiLmxvYWQoZnVuY3Rpb24oZCl7Yy5hcHBseShiLFthLGRdKX0pKSl9LG9uRm9jdXM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuaXNGb2N1c2VkO3JldHVybiBiLmlzRGlzYWJsZWQ/KGIuYmx1cigpLGEmJmEucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZChiLmlnbm9yZUZvY3VzfHwoYi5pc0ZvY3VzZWQ9ITAsImZvY3VzIj09PWIuc2V0dGluZ3MucHJlbG9hZCYmYi5vblNlYXJjaENoYW5nZSgiIiksY3x8Yi50cmlnZ2VyKCJmb2N1cyIpLGIuJGFjdGl2ZUl0ZW1zLmxlbmd0aHx8KGIuc2hvd0lucHV0KCksYi5zZXRBY3RpdmVJdGVtKG51bGwpLGIucmVmcmVzaE9wdGlvbnMoISFiLnNldHRpbmdzLm9wZW5PbkZvY3VzKSksYi5yZWZyZXNoU3RhdGUoKSkpfSxvbkJsdXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2lmKGMuaXNGb2N1c2VkJiYoYy5pc0ZvY3VzZWQ9ITEsIWMuaWdub3JlRm9jdXMpKXtpZighYy5pZ25vcmVCbHVyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09Yy4kZHJvcGRvd25fY29udGVudFswXSlyZXR1cm4gYy5pZ25vcmVCbHVyPSEwLHZvaWQgYy5vbkZvY3VzKGEpO3ZhciBkPWZ1bmN0aW9uKCl7Yy5jbG9zZSgpLGMuc2V0VGV4dGJveFZhbHVlKCIiKSxjLnNldEFjdGl2ZUl0ZW0obnVsbCksYy5zZXRBY3RpdmVPcHRpb24obnVsbCksYy5zZXRDYXJldChjLml0ZW1zLmxlbmd0aCksYy5yZWZyZXNoU3RhdGUoKSwoYnx8ZG9jdW1lbnQuYm9keSkuZm9jdXMoKSxjLmlnbm9yZUZvY3VzPSExLGMudHJpZ2dlcigiYmx1ciIpfTtjLmlnbm9yZUZvY3VzPSEwLGMuc2V0dGluZ3MuY3JlYXRlJiZjLnNldHRpbmdzLmNyZWF0ZU9uQmx1cj9jLmNyZWF0ZUl0ZW0obnVsbCwhMSxkKTpkKCl9fSxvbk9wdGlvbkhvdmVyOmZ1bmN0aW9uKGEpe3RoaXMuaWdub3JlSG92ZXJ8fHRoaXMuc2V0QWN0aXZlT3B0aW9uKGEuY3VycmVudFRhcmdldCwhMSl9LG9uT3B0aW9uU2VsZWN0OmZ1bmN0aW9uKGIpe3ZhciBjLGQsZT10aGlzO2IucHJldmVudERlZmF1bHQmJihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSksZD1hKGIuY3VycmVudFRhcmdldCksZC5oYXNDbGFzcygiY3JlYXRlIik/ZS5jcmVhdGVJdGVtKG51bGwsZnVuY3Rpb24oKXtlLnNldHRpbmdzLmNsb3NlQWZ0ZXJTZWxlY3QmJmUuY2xvc2UoKX0pOihjPWQuYXR0cigiZGF0YS12YWx1ZSIpLCJ1bmRlZmluZWQiIT10eXBlb2YgYyYmKGUubGFzdFF1ZXJ5PW51bGwsZS5zZXRUZXh0Ym94VmFsdWUoIiIpLGUuYWRkSXRlbShjKSxlLnNldHRpbmdzLmNsb3NlQWZ0ZXJTZWxlY3Q/ZS5jbG9zZSgpOiFlLnNldHRpbmdzLmhpZGVTZWxlY3RlZCYmYi50eXBlJiYvbW91c2UvLnRlc3QoYi50eXBlKSYmZS5zZXRBY3RpdmVPcHRpb24oZS5nZXRPcHRpb24oYykpKSl9LG9uSXRlbVNlbGVjdDpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2IuaXNMb2NrZWR8fCJtdWx0aSI9PT1iLnNldHRpbmdzLm1vZGUmJihhLnByZXZlbnREZWZhdWx0KCksYi5zZXRBY3RpdmVJdGVtKGEuY3VycmVudFRhcmdldCxhKSl9LGxvYWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuJHdyYXBwZXIuYWRkQ2xhc3MoYi5zZXR0aW5ncy5sb2FkaW5nQ2xhc3MpO2IubG9hZGluZysrLGEuYXBwbHkoYixbZnVuY3Rpb24oYSl7Yi5sb2FkaW5nPU1hdGgubWF4KGIubG9hZGluZy0xLDApLGEmJmEubGVuZ3RoJiYoYi5hZGRPcHRpb24oYSksYi5yZWZyZXNoT3B0aW9ucyhiLmlzRm9jdXNlZCYmIWIuaXNJbnB1dEhpZGRlbikpLGIubG9hZGluZ3x8Yy5yZW1vdmVDbGFzcyhiLnNldHRpbmdzLmxvYWRpbmdDbGFzcyksYi50cmlnZ2VyKCJsb2FkIixhKX1dKX0sc2V0VGV4dGJveFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJGNvbnRyb2xfaW5wdXQsYz1iLnZhbCgpIT09YTtjJiYoYi52YWwoYSkudHJpZ2dlckhhbmRsZXIoInVwZGF0ZSIpLHRoaXMubGFzdFZhbHVlPWEpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ1R5cGU9PT12JiZ0aGlzLiRpbnB1dC5hdHRyKCJtdWx0aXBsZSIpP3RoaXMuaXRlbXM6dGhpcy5pdGVtcy5qb2luKHRoaXMuc2V0dGluZ3MuZGVsaW1pdGVyKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iP1tdOlsiY2hhbmdlIl07Rih0aGlzLGMsZnVuY3Rpb24oKXt0aGlzLmNsZWFyKGIpLHRoaXMuYWRkSXRlbXMoYSxiKX0pfSxzZXRBY3RpdmVJdGVtOmZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXM7aWYoInNpbmdsZSIhPT1sLnNldHRpbmdzLm1vZGUpe2lmKGI9YShiKSwhYi5sZW5ndGgpcmV0dXJuIGEobC4kYWN0aXZlSXRlbXMpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxsLiRhY3RpdmVJdGVtcz1bXSx2b2lkKGwuaXNGb2N1c2VkJiZsLnNob3dJbnB1dCgpKTtpZihkPWMmJmMudHlwZS50b0xvd2VyQ2FzZSgpLCJtb3VzZWRvd24iPT09ZCYmbC5pc1NoaWZ0RG93biYmbC4kYWN0aXZlSXRlbXMubGVuZ3RoKXtmb3Ioaz1sLiRjb250cm9sLmNoaWxkcmVuKCIuYWN0aXZlOmxhc3QiKSxnPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmFwcGx5KGwuJGNvbnRyb2xbMF0uY2hpbGROb2Rlcyxba1swXV0pLGg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuYXBwbHkobC4kY29udHJvbFswXS5jaGlsZE5vZGVzLFtiWzBdXSksZz5oJiYoaj1nLGc9aCxoPWopLGU9ZztoPj1lO2UrKylpPWwuJGNvbnRyb2xbMF0uY2hpbGROb2Rlc1tlXSwtMT09PWwuJGFjdGl2ZUl0ZW1zLmluZGV4T2YoaSkmJihhKGkpLmFkZENsYXNzKCJhY3RpdmUiKSxsLiRhY3RpdmVJdGVtcy5wdXNoKGkpKTtjLnByZXZlbnREZWZhdWx0KCl9ZWxzZSJtb3VzZWRvd24iPT09ZCYmbC5pc0N0cmxEb3dufHwia2V5ZG93biI9PT1kJiZ0aGlzLmlzU2hpZnREb3duP2IuaGFzQ2xhc3MoImFjdGl2ZSIpPyhmPWwuJGFjdGl2ZUl0ZW1zLmluZGV4T2YoYlswXSksbC4kYWN0aXZlSXRlbXMuc3BsaWNlKGYsMSksYi5yZW1vdmVDbGFzcygiYWN0aXZlIikpOmwuJGFjdGl2ZUl0ZW1zLnB1c2goYi5hZGRDbGFzcygiYWN0aXZlIilbMF0pOihhKGwuJGFjdGl2ZUl0ZW1zKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksbC4kYWN0aXZlSXRlbXM9W2IuYWRkQ2xhc3MoImFjdGl2ZSIpWzBdXSk7bC5oaWRlSW5wdXQoKSx0aGlzLmlzRm9jdXNlZHx8bC5mb2N1cygpfX0sc2V0QWN0aXZlT3B0aW9uOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo9dGhpcztqLiRhY3RpdmVPcHRpb24mJmouJGFjdGl2ZU9wdGlvbi5yZW1vdmVDbGFzcygiYWN0aXZlIiksai4kYWN0aXZlT3B0aW9uPW51bGwsYj1hKGIpLGIubGVuZ3RoJiYoai4kYWN0aXZlT3B0aW9uPWIuYWRkQ2xhc3MoImFjdGl2ZSIpLChjfHwheShjKSkmJihlPWouJGRyb3Bkb3duX2NvbnRlbnQuaGVpZ2h0KCksZj1qLiRhY3RpdmVPcHRpb24ub3V0ZXJIZWlnaHQoITApLGM9ai4kZHJvcGRvd25fY29udGVudC5zY3JvbGxUb3AoKXx8MCxnPWouJGFjdGl2ZU9wdGlvbi5vZmZzZXQoKS50b3Atai4kZHJvcGRvd25fY29udGVudC5vZmZzZXQoKS50b3ArYyxoPWcsaT1nLWUrZixnK2Y+ZStjP2ouJGRyb3Bkb3duX2NvbnRlbnQuc3RvcCgpLmFuaW1hdGUoe3Njcm9sbFRvcDppfSxkP2ouc2V0dGluZ3Muc2Nyb2xsRHVyYXRpb246MCk6Yz5nJiZqLiRkcm9wZG93bl9jb250ZW50LnN0b3AoKS5hbmltYXRlKHtzY3JvbGxUb3A6aH0sZD9qLnNldHRpbmdzLnNjcm9sbER1cmF0aW9uOjApKSl9LHNlbGVjdEFsbDpmdW5jdGlvbigpe3ZhciBhPXRoaXM7InNpbmdsZSIhPT1hLnNldHRpbmdzLm1vZGUmJihhLiRhY3RpdmVJdGVtcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYS4kY29udHJvbC5jaGlsZHJlbigiOm5vdChpbnB1dCkiKS5hZGRDbGFzcygiYWN0aXZlIikpLGEuJGFjdGl2ZUl0ZW1zLmxlbmd0aCYmKGEuaGlkZUlucHV0KCksYS5jbG9zZSgpKSxhLmZvY3VzKCkpfSxoaWRlSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2Euc2V0VGV4dGJveFZhbHVlKCIiKSxhLiRjb250cm9sX2lucHV0LmNzcyh7b3BhY2l0eTowLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDphLnJ0bD8xZTQ6LTFlNH0pLGEuaXNJbnB1dEhpZGRlbj0hMH0sc2hvd0lucHV0OmZ1bmN0aW9uKCl7dGhpcy4kY29udHJvbF9pbnB1dC5jc3Moe29wYWNpdHk6MSxwb3NpdGlvbjoicmVsYXRpdmUiLGxlZnQ6MH0pLHRoaXMuaXNJbnB1dEhpZGRlbj0hMX0sZm9jdXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EuaXNEaXNhYmxlZHx8KGEuaWdub3JlRm9jdXM9ITAsYS4kY29udHJvbF9pbnB1dFswXS5mb2N1cygpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5pZ25vcmVGb2N1cz0hMSxhLm9uRm9jdXMoKX0sMCkpfSxibHVyOmZ1bmN0aW9uKGEpe3RoaXMuJGNvbnRyb2xfaW5wdXRbMF0uYmx1cigpLHRoaXMub25CbHVyKG51bGwsYSl9LGdldFNjb3JlRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2lmdGVyLmdldFNjb3JlRnVuY3Rpb24oYSx0aGlzLmdldFNlYXJjaE9wdGlvbnMoKSl9LGdldFNlYXJjaE9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNldHRpbmdzLGI9YS5zb3J0RmllbGQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYj1be2ZpZWxkOmJ9XSkse2ZpZWxkczphLnNlYXJjaEZpZWxkLGNvbmp1bmN0aW9uOmEuc2VhcmNoQ29uanVuY3Rpb24sc29ydDpifX0sc2VhcmNoOmZ1bmN0aW9uKGIpe3ZhciBjLGQsZSxmPXRoaXMsZz1mLnNldHRpbmdzLGg9dGhpcy5nZXRTZWFyY2hPcHRpb25zKCk7aWYoZy5zY29yZSYmKGU9Zi5zZXR0aW5ncy5zY29yZS5hcHBseSh0aGlzLFtiXSksImZ1bmN0aW9uIiE9dHlwZW9mIGUpKXRocm93IG5ldyBFcnJvcignU2VsZWN0aXplICJzY29yZSIgc2V0dGluZyBtdXN0IGJlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24nKTtpZihiIT09Zi5sYXN0UXVlcnk/KGYubGFzdFF1ZXJ5PWIsZD1mLnNpZnRlci5zZWFyY2goYixhLmV4dGVuZChoLHtzY29yZTplfSkpLGYuY3VycmVudFJlc3VsdHM9ZCk6ZD1hLmV4dGVuZCghMCx7fSxmLmN1cnJlbnRSZXN1bHRzKSxnLmhpZGVTZWxlY3RlZClmb3IoYz1kLml0ZW1zLmxlbmd0aC0xO2M+PTA7Yy0tKS0xIT09Zi5pdGVtcy5pbmRleE9mKHooZC5pdGVtc1tjXS5pZCkpJiZkLml0ZW1zLnNwbGljZShjLDEpO3JldHVybiBkfSxyZWZyZXNoT3B0aW9uczpmdW5jdGlvbihiKXt2YXIgYyxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIsczsidW5kZWZpbmVkIj09dHlwZW9mIGImJihiPSEwKTt2YXIgdD10aGlzLHU9YS50cmltKHQuJGNvbnRyb2xfaW5wdXQudmFsKCkpLHY9dC5zZWFyY2godSksdz10LiRkcm9wZG93bl9jb250ZW50LHg9dC4kYWN0aXZlT3B0aW9uJiZ6KHQuJGFjdGl2ZU9wdGlvbi5hdHRyKCJkYXRhLXZhbHVlIikpO2ZvcihnPXYuaXRlbXMubGVuZ3RoLCJudW1iZXIiPT10eXBlb2YgdC5zZXR0aW5ncy5tYXhPcHRpb25zJiYoZz1NYXRoLm1pbihnLHQuc2V0dGluZ3MubWF4T3B0aW9ucykpLGg9e30saT1bXSxjPTA7Zz5jO2MrKylmb3Ioaj10Lm9wdGlvbnNbdi5pdGVtc1tjXS5pZF0saz10LnJlbmRlcigib3B0aW9uIixqKSxsPWpbdC5zZXR0aW5ncy5vcHRncm91cEZpZWxkXXx8IiIsbT1hLmlzQXJyYXkobCk/bDpbbF0sZT0wLGY9bSYmbS5sZW5ndGg7Zj5lO2UrKylsPW1bZV0sdC5vcHRncm91cHMuaGFzT3duUHJvcGVydHkobCl8fChsPSIiKSxoLmhhc093blByb3BlcnR5KGwpfHwoaFtsXT1bXSxpLnB1c2gobCkpLGhbbF0ucHVzaChrKTtmb3IodGhpcy5zZXR0aW5ncy5sb2NrT3B0Z3JvdXBPcmRlciYmaS5zb3J0KGZ1bmN0aW9uKGEsYil7dmFyIGM9dC5vcHRncm91cHNbYV0uJG9yZGVyfHwwLGQ9dC5vcHRncm91cHNbYl0uJG9yZGVyfHwwO3JldHVybiBjLWR9KSxuPVtdLGM9MCxnPWkubGVuZ3RoO2c+YztjKyspbD1pW2NdLHQub3B0Z3JvdXBzLmhhc093blByb3BlcnR5KGwpJiZoW2xdLmxlbmd0aD8obz10LnJlbmRlcigib3B0Z3JvdXBfaGVhZGVyIix0Lm9wdGdyb3Vwc1tsXSl8fCIiLG8rPWhbbF0uam9pbigiIiksbi5wdXNoKHQucmVuZGVyKCJvcHRncm91cCIsYS5leHRlbmQoe30sdC5vcHRncm91cHNbbF0se2h0bWw6b30pKSkpOm4ucHVzaChoW2xdLmpvaW4oIiIpKTtpZih3Lmh0bWwobi5qb2luKCIiKSksdC5zZXR0aW5ncy5oaWdobGlnaHQmJnYucXVlcnkubGVuZ3RoJiZ2LnRva2Vucy5sZW5ndGgpZm9yKGM9MCxnPXYudG9rZW5zLmxlbmd0aDtnPmM7YysrKWQodyx2LnRva2Vuc1tjXS5yZWdleCk7aWYoIXQuc2V0dGluZ3MuaGlkZVNlbGVjdGVkKWZvcihjPTAsZz10Lml0ZW1zLmxlbmd0aDtnPmM7YysrKXQuZ2V0T3B0aW9uKHQuaXRlbXNbY10pLmFkZENsYXNzKCJzZWxlY3RlZCIpO3A9dC5jYW5DcmVhdGUodSkscCYmKHcucHJlcGVuZCh0LnJlbmRlcigib3B0aW9uX2NyZWF0ZSIse2lucHV0OnV9KSkscz1hKHdbMF0uY2hpbGROb2Rlc1swXSkpLHQuaGFzT3B0aW9ucz12Lml0ZW1zLmxlbmd0aD4wfHxwLHQuaGFzT3B0aW9ucz8odi5pdGVtcy5sZW5ndGg+MD8ocj14JiZ0LmdldE9wdGlvbih4KSxyJiZyLmxlbmd0aD9xPXI6InNpbmdsZSI9PT10LnNldHRpbmdzLm1vZGUmJnQuaXRlbXMubGVuZ3RoJiYocT10LmdldE9wdGlvbih0Lml0ZW1zWzBdKSkscSYmcS5sZW5ndGh8fChxPXMmJiF0LnNldHRpbmdzLmFkZFByZWNlZGVuY2U/dC5nZXRBZGphY2VudE9wdGlvbihzLDEpOncuZmluZCgiW2RhdGEtc2VsZWN0YWJsZV06Zmlyc3QiKSkpOnE9cyx0LnNldEFjdGl2ZU9wdGlvbihxKSxiJiYhdC5pc09wZW4mJnQub3BlbigpKToodC5zZXRBY3RpdmVPcHRpb24obnVsbCksYiYmdC5pc09wZW4mJnQuY2xvc2UoKSl9LGFkZE9wdGlvbjpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZj10aGlzO2lmKGEuaXNBcnJheShiKSlmb3IoYz0wLGQ9Yi5sZW5ndGg7ZD5jO2MrKylmLmFkZE9wdGlvbihiW2NdKTtlbHNlKGU9Zi5yZWdpc3Rlck9wdGlvbihiKSkmJihmLnVzZXJPcHRpb25zW2VdPSEwLGYubGFzdFF1ZXJ5PW51bGwsZi50cmlnZ2VyKCJvcHRpb25fYWRkIixlLGIpKX0scmVnaXN0ZXJPcHRpb246ZnVuY3Rpb24oYSl7dmFyIGI9eihhW3RoaXMuc2V0dGluZ3MudmFsdWVGaWVsZF0pO3JldHVybiFifHx0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoYik/ITE6KGEuJG9yZGVyPWEuJG9yZGVyfHwrK3RoaXMub3JkZXIsdGhpcy5vcHRpb25zW2JdPWEsYil9LHJlZ2lzdGVyT3B0aW9uR3JvdXA6ZnVuY3Rpb24oYSl7dmFyIGI9eihhW3RoaXMuc2V0dGluZ3Mub3B0Z3JvdXBWYWx1ZUZpZWxkXSk7cmV0dXJuIGI/KGEuJG9yZGVyPWEuJG9yZGVyfHwrK3RoaXMub3JkZXIsdGhpcy5vcHRncm91cHNbYl09YSxiKTohMX0sYWRkT3B0aW9uR3JvdXA6ZnVuY3Rpb24oYSxiKXtiW3RoaXMuc2V0dGluZ3Mub3B0Z3JvdXBWYWx1ZUZpZWxkXT1hLChhPXRoaXMucmVnaXN0ZXJPcHRpb25Hcm91cChiKSkmJnRoaXMudHJpZ2dlcigib3B0Z3JvdXBfYWRkIixhLGIpfSxyZW1vdmVPcHRpb25Hcm91cDpmdW5jdGlvbihhKXt0aGlzLm9wdGdyb3Vwcy5oYXNPd25Qcm9wZXJ0eShhKSYmKGRlbGV0ZSB0aGlzLm9wdGdyb3Vwc1thXSx0aGlzLnJlbmRlckNhY2hlPXt9LHRoaXMudHJpZ2dlcigib3B0Z3JvdXBfcmVtb3ZlIixhKSl9LGNsZWFyT3B0aW9uR3JvdXBzOmZ1bmN0aW9uKCl7dGhpcy5vcHRncm91cHM9e30sdGhpcy5yZW5kZXJDYWNoZT17fSx0aGlzLnRyaWdnZXIoIm9wdGdyb3VwX2NsZWFyIil9LHVwZGF0ZU9wdGlvbjpmdW5jdGlvbihiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs9dGhpcztpZihiPXooYiksZj16KGNbay5zZXR0aW5ncy52YWx1ZUZpZWxkXSksbnVsbCE9PWImJmsub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShiKSl7aWYoInN0cmluZyIhPXR5cGVvZiBmKXRocm93IG5ldyBFcnJvcigiVmFsdWUgbXVzdCBiZSBzZXQgaW4gb3B0aW9uIGRhdGEiKTtqPWsub3B0aW9uc1tiXS4kb3JkZXIsZiE9PWImJihkZWxldGUgay5vcHRpb25zW2JdLGc9ay5pdGVtcy5pbmRleE9mKGIpLC0xIT09ZyYmay5pdGVtcy5zcGxpY2UoZywxLGYpKSxjLiRvcmRlcj1jLiRvcmRlcnx8aixrLm9wdGlvbnNbZl09YyxoPWsucmVuZGVyQ2FjaGUuaXRlbSxpPWsucmVuZGVyQ2FjaGUub3B0aW9uLGgmJihkZWxldGUgaFtiXSxkZWxldGUgaFtmXSksaSYmKGRlbGV0ZSBpW2JdLGRlbGV0ZSBpW2ZdKSwtMSE9PWsuaXRlbXMuaW5kZXhPZihmKSYmKGQ9ay5nZXRJdGVtKGIpLGU9YShrLnJlbmRlcigiaXRlbSIsYykpLGQuaGFzQ2xhc3MoImFjdGl2ZSIpJiZlLmFkZENsYXNzKCJhY3RpdmUiKSxkLnJlcGxhY2VXaXRoKGUpKSxrLmxhc3RRdWVyeT1udWxsLGsuaXNPcGVuJiZrLnJlZnJlc2hPcHRpb25zKCExKX19LHJlbW92ZU9wdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7YT16KGEpO3ZhciBkPWMucmVuZGVyQ2FjaGUuaXRlbSxlPWMucmVuZGVyQ2FjaGUub3B0aW9uO2QmJmRlbGV0ZSBkW2FdLGUmJmRlbGV0ZSBlW2FdLGRlbGV0ZSBjLnVzZXJPcHRpb25zW2FdLGRlbGV0ZSBjLm9wdGlvbnNbYV0sYy5sYXN0UXVlcnk9bnVsbCxjLnRyaWdnZXIoIm9wdGlvbl9yZW1vdmUiLGEpLGMucmVtb3ZlSXRlbShhLGIpfSxjbGVhck9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EubG9hZGVkU2VhcmNoZXM9e30sYS51c2VyT3B0aW9ucz17fSxhLnJlbmRlckNhY2hlPXt9LGEub3B0aW9ucz1hLnNpZnRlci5pdGVtcz17fSxhLmxhc3RRdWVyeT1udWxsLGEudHJpZ2dlcigib3B0aW9uX2NsZWFyIiksYS5jbGVhcigpfSxnZXRPcHRpb246ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFdpdGhWYWx1ZShhLHRoaXMuJGRyb3Bkb3duX2NvbnRlbnQuZmluZCgiW2RhdGEtc2VsZWN0YWJsZV0iKSl9LGdldEFkamFjZW50T3B0aW9uOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy4kZHJvcGRvd24uZmluZCgiW2RhdGEtc2VsZWN0YWJsZV0iKSxlPWQuaW5kZXgoYikrYztyZXR1cm4gZT49MCYmZTxkLmxlbmd0aD9kLmVxKGUpOmEoKX0sZ2V0RWxlbWVudFdpdGhWYWx1ZTpmdW5jdGlvbihiLGMpe2lmKGI9eihiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGImJm51bGwhPT1iKWZvcih2YXIgZD0wLGU9Yy5sZW5ndGg7ZT5kO2QrKylpZihjW2RdLmdldEF0dHJpYnV0ZSgiZGF0YS12YWx1ZSIpPT09YilyZXR1cm4gYShjW2RdKTtyZXR1cm4gYSgpfSxnZXRJdGVtOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdldEVsZW1lbnRXaXRoVmFsdWUoYSx0aGlzLiRjb250cm9sLmNoaWxkcmVuKCkpfSxhZGRJdGVtczpmdW5jdGlvbihiLGMpe2Zvcih2YXIgZD1hLmlzQXJyYXkoYik/YjpbYl0sZT0wLGY9ZC5sZW5ndGg7Zj5lO2UrKyl0aGlzLmlzUGVuZGluZz1mLTE+ZSx0aGlzLmFkZEl0ZW0oZFtlXSxjKX0sYWRkSXRlbTpmdW5jdGlvbihiLGMpe3ZhciBkPWM/W106WyJjaGFuZ2UiXTtGKHRoaXMsZCxmdW5jdGlvbigpe3ZhciBkLGUsZixnLGgsaT10aGlzLGo9aS5zZXR0aW5ncy5tb2RlO3JldHVybiBiPXooYiksLTEhPT1pLml0ZW1zLmluZGV4T2YoYik/dm9pZCgic2luZ2xlIj09PWomJmkuY2xvc2UoKSk6dm9pZChpLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoYikmJigic2luZ2xlIj09PWomJmkuY2xlYXIoYyksIm11bHRpIj09PWomJmkuaXNGdWxsKCl8fChkPWEoaS5yZW5kZXIoIml0ZW0iLGkub3B0aW9uc1tiXSkpLGg9aS5pc0Z1bGwoKSxpLml0ZW1zLnNwbGljZShpLmNhcmV0UG9zLDAsYiksaS5pbnNlcnRBdENhcmV0KGQpLCghaS5pc1BlbmRpbmd8fCFoJiZpLmlzRnVsbCgpKSYmaS5yZWZyZXNoU3RhdGUoKSxpLmlzU2V0dXAmJihmPWkuJGRyb3Bkb3duX2NvbnRlbnQuZmluZCgiW2RhdGEtc2VsZWN0YWJsZV0iKSxpLmlzUGVuZGluZ3x8KGU9aS5nZXRPcHRpb24oYiksZz1pLmdldEFkamFjZW50T3B0aW9uKGUsMSkuYXR0cigiZGF0YS12YWx1ZSIpLGkucmVmcmVzaE9wdGlvbnMoaS5pc0ZvY3VzZWQmJiJzaW5nbGUiIT09aiksZyYmaS5zZXRBY3RpdmVPcHRpb24oaS5nZXRPcHRpb24oZykpKSwhZi5sZW5ndGh8fGkuaXNGdWxsKCk/aS5jbG9zZSgpOmkucG9zaXRpb25Ecm9wZG93bigpLGkudXBkYXRlUGxhY2Vob2xkZXIoKSxpLnRyaWdnZXIoIml0ZW1fYWRkIixiLGQpLGkudXBkYXRlT3JpZ2luYWxJbnB1dCh7c2lsZW50OmN9KSkpKSl9KX0scmVtb3ZlSXRlbTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXM7Yz0ib2JqZWN0Ij09dHlwZW9mIGE/YTpmLmdldEl0ZW0oYSksYT16KGMuYXR0cigiZGF0YS12YWx1ZSIpKSxkPWYuaXRlbXMuaW5kZXhPZihhKSwtMSE9PWQmJihjLnJlbW92ZSgpLGMuaGFzQ2xhc3MoImFjdGl2ZSIpJiYoZT1mLiRhY3RpdmVJdGVtcy5pbmRleE9mKGNbMF0pLGYuJGFjdGl2ZUl0ZW1zLnNwbGljZShlLDEpKSxmLml0ZW1zLnNwbGljZShkLDEpLGYubGFzdFF1ZXJ5PW51bGwsIWYuc2V0dGluZ3MucGVyc2lzdCYmZi51c2VyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShhKSYmZi5yZW1vdmVPcHRpb24oYSxiKSxkPGYuY2FyZXRQb3MmJmYuc2V0Q2FyZXQoZi5jYXJldFBvcy0xKSxmLnJlZnJlc2hTdGF0ZSgpLGYudXBkYXRlUGxhY2Vob2xkZXIoKSxmLnVwZGF0ZU9yaWdpbmFsSW5wdXQoe3NpbGVudDpifSksZi5wb3NpdGlvbkRyb3Bkb3duKCksZi50cmlnZ2VyKCJpdGVtX3JlbW92ZSIsYSxjKSl9LGNyZWF0ZUl0ZW06ZnVuY3Rpb24oYixjKXt2YXIgZD10aGlzLGU9ZC5jYXJldFBvcztiPWJ8fGEudHJpbShkLiRjb250cm9sX2lucHV0LnZhbCgpfHwiIik7dmFyIGY9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGYmJihmPWZ1bmN0aW9uKCl7fSksImJvb2xlYW4iIT10eXBlb2YgYyYmKGM9ITApLCFkLmNhbkNyZWF0ZShiKSlyZXR1cm4gZigpLCExO2QubG9jaygpO3ZhciBnPSJmdW5jdGlvbiI9PXR5cGVvZiBkLnNldHRpbmdzLmNyZWF0ZT90aGlzLnNldHRpbmdzLmNyZWF0ZTpmdW5jdGlvbihhKXt2YXIgYj17fTtyZXR1cm4gYltkLnNldHRpbmdzLmxhYmVsRmllbGRdPWEsYltkLnNldHRpbmdzLnZhbHVlRmllbGRdPWEsYn0saD1EKGZ1bmN0aW9uKGEpe2lmKGQudW5sb2NrKCksIWF8fCJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gZigpO3ZhciBiPXooYVtkLnNldHRpbmdzLnZhbHVlRmllbGRdKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGI/ZigpOihkLnNldFRleHRib3hWYWx1ZSgiIiksZC5hZGRPcHRpb24oYSksZC5zZXRDYXJldChlKSxkLmFkZEl0ZW0oYiksZC5yZWZyZXNoT3B0aW9ucyhjJiYic2luZ2xlIiE9PWQuc2V0dGluZ3MubW9kZSksdm9pZCBmKGEpKX0pLGk9Zy5hcHBseSh0aGlzLFtiLGhdKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGkmJmgoaSksITB9LHJlZnJlc2hJdGVtczpmdW5jdGlvbigpe3RoaXMubGFzdFF1ZXJ5PW51bGwsdGhpcy5pc1NldHVwJiZ0aGlzLmFkZEl0ZW0odGhpcy5pdGVtcyksdGhpcy5yZWZyZXNoU3RhdGUoKSx0aGlzLnVwZGF0ZU9yaWdpbmFsSW5wdXQoKX0scmVmcmVzaFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzO2IuaXNSZXF1aXJlZCYmKGIuaXRlbXMubGVuZ3RoJiYoYi5pc0ludmFsaWQ9ITEpLGIuJGNvbnRyb2xfaW5wdXQucHJvcCgicmVxdWlyZWQiLGEpKSxiLnJlZnJlc2hDbGFzc2VzKCl9LHJlZnJlc2hDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWIuaXNGdWxsKCksZD1iLmlzTG9ja2VkO2IuJHdyYXBwZXIudG9nZ2xlQ2xhc3MoInJ0bCIsYi5ydGwpLGIuJGNvbnRyb2wudG9nZ2xlQ2xhc3MoImZvY3VzIixiLmlzRm9jdXNlZCkudG9nZ2xlQ2xhc3MoImRpc2FibGVkIixiLmlzRGlzYWJsZWQpLnRvZ2dsZUNsYXNzKCJyZXF1aXJlZCIsYi5pc1JlcXVpcmVkKS50b2dnbGVDbGFzcygiaW52YWxpZCIsYi5pc0ludmFsaWQpLnRvZ2dsZUNsYXNzKCJsb2NrZWQiLGQpLnRvZ2dsZUNsYXNzKCJmdWxsIixjKS50b2dnbGVDbGFzcygibm90LWZ1bGwiLCFjKS50b2dnbGVDbGFzcygiaW5wdXQtYWN0aXZlIixiLmlzRm9jdXNlZCYmIWIuaXNJbnB1dEhpZGRlbikudG9nZ2xlQ2xhc3MoImRyb3Bkb3duLWFjdGl2ZSIsYi5pc09wZW4pLnRvZ2dsZUNsYXNzKCJoYXMtb3B0aW9ucyIsIWEuaXNFbXB0eU9iamVjdChiLm9wdGlvbnMpKS50b2dnbGVDbGFzcygiaGFzLWl0ZW1zIixiLml0ZW1zLmxlbmd0aD4wKSxiLiRjb250cm9sX2lucHV0LmRhdGEoImdyb3ciLCFjJiYhZCl9LGlzRnVsbDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5zZXR0aW5ncy5tYXhJdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGg+PXRoaXMuc2V0dGluZ3MubWF4SXRlbXN9LHVwZGF0ZU9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZj10aGlzO2lmKGE9YXx8e30sZi50YWdUeXBlPT09dil7Zm9yKGQ9W10sYj0wLGM9Zi5pdGVtcy5sZW5ndGg7Yz5iO2IrKyllPWYub3B0aW9uc1tmLml0ZW1zW2JdXVtmLnNldHRpbmdzLmxhYmVsRmllbGRdfHwiIixkLnB1c2goJzxvcHRpb24gdmFsdWU9IicrQShmLml0ZW1zW2JdKSsnIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPicrQShlKSsiPC9vcHRpb24+Iik7ZC5sZW5ndGh8fHRoaXMuJGlucHV0LmF0dHIoIm11bHRpcGxlIil8fGQucHVzaCgnPG9wdGlvbiB2YWx1ZT0iIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPjwvb3B0aW9uPicpLGYuJGlucHV0Lmh0bWwoZC5qb2luKCIiKSl9ZWxzZSBmLiRpbnB1dC52YWwoZi5nZXRWYWx1ZSgpKSxmLiRpbnB1dC5hdHRyKCJ2YWx1ZSIsZi4kaW5wdXQudmFsKCkpO2YuaXNTZXR1cCYmKGEuc2lsZW50fHxmLnRyaWdnZXIoImNoYW5nZSIsZi4kaW5wdXQudmFsKCkpKX0sdXBkYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXtpZih0aGlzLnNldHRpbmdzLnBsYWNlaG9sZGVyKXt2YXIgYT10aGlzLiRjb250cm9sX2lucHV0O3RoaXMuaXRlbXMubGVuZ3RoP2EucmVtb3ZlQXR0cigicGxhY2Vob2xkZXIiKTphLmF0dHIoInBsYWNlaG9sZGVyIix0aGlzLnNldHRpbmdzLnBsYWNlaG9sZGVyKSxhLnRyaWdnZXJIYW5kbGVyKCJ1cGRhdGUiLHtmb3JjZTohMH0pfX0sb3BlbjpmdW5jdGlvbigpe3ZhciBhPXRoaXM7YS5pc0xvY2tlZHx8YS5pc09wZW58fCJtdWx0aSI9PT1hLnNldHRpbmdzLm1vZGUmJmEuaXNGdWxsKCl8fChhLmZvY3VzKCksYS5pc09wZW49ITAsYS5yZWZyZXNoU3RhdGUoKSxhLiRkcm9wZG93bi5jc3Moe3Zpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSksYS5wb3NpdGlvbkRyb3Bkb3duKCksYS4kZHJvcGRvd24uY3NzKHt2aXNpYmlsaXR5OiJ2aXNpYmxlIn0pLGEudHJpZ2dlcigiZHJvcGRvd25fb3BlbiIsYS4kZHJvcGRvd24pKX0sY2xvc2U6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5pc09wZW47InNpbmdsZSI9PT1hLnNldHRpbmdzLm1vZGUmJmEuaXRlbXMubGVuZ3RoJiZhLmhpZGVJbnB1dCgpLGEuaXNPcGVuPSExLGEuJGRyb3Bkb3duLmhpZGUoKSxhLnNldEFjdGl2ZU9wdGlvbihudWxsKSxhLnJlZnJlc2hTdGF0ZSgpLGImJmEudHJpZ2dlcigiZHJvcGRvd25fY2xvc2UiLGEuJGRyb3Bkb3duKX0scG9zaXRpb25Ecm9wZG93bjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJGNvbnRyb2wsYj0iYm9keSI9PT10aGlzLnNldHRpbmdzLmRyb3Bkb3duUGFyZW50P2Eub2Zmc2V0KCk6YS5wb3NpdGlvbigpO2IudG9wKz1hLm91dGVySGVpZ2h0KCEwKSx0aGlzLiRkcm9wZG93bi5jc3Moe3dpZHRoOmEub3V0ZXJXaWR0aCgpLHRvcDpiLnRvcCxsZWZ0OmIubGVmdH0pfSxjbGVhcjpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2IuaXRlbXMubGVuZ3RoJiYoYi4kY29udHJvbC5jaGlsZHJlbigiOm5vdChpbnB1dCkiKS5yZW1vdmUoKSxiLml0ZW1zPVtdLGIubGFzdFF1ZXJ5PW51bGwsYi5zZXRDYXJldCgwKSxiLnNldEFjdGl2ZUl0ZW0obnVsbCksYi51cGRhdGVQbGFjZWhvbGRlcigpLGIudXBkYXRlT3JpZ2luYWxJbnB1dCh7c2lsZW50OmF9KSxiLnJlZnJlc2hTdGF0ZSgpLGIuc2hvd0lucHV0KCksYi50cmlnZ2VyKCJjbGVhciIpKX0saW5zZXJ0QXRDYXJldDpmdW5jdGlvbihiKXt2YXIgYz1NYXRoLm1pbih0aGlzLmNhcmV0UG9zLHRoaXMuaXRlbXMubGVuZ3RoKTswPT09Yz90aGlzLiRjb250cm9sLnByZXBlbmQoYik6YSh0aGlzLiRjb250cm9sWzBdLmNoaWxkTm9kZXNbY10pLmJlZm9yZShiKSx0aGlzLnNldENhcmV0KGMrMSl9LGRlbGV0ZVNlbGVjdGlvbjpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbD10aGlzO2lmKGU9YiYmYi5rZXlDb2RlPT09cD8tMToxLGY9SChsLiRjb250cm9sX2lucHV0WzBdKSxsLiRhY3RpdmVPcHRpb24mJiFsLnNldHRpbmdzLmhpZGVTZWxlY3RlZCYmKGk9bC5nZXRBZGphY2VudE9wdGlvbihsLiRhY3RpdmVPcHRpb24sLTEpLmF0dHIoImRhdGEtdmFsdWUiKSksZz1bXSxsLiRhY3RpdmVJdGVtcy5sZW5ndGgpe2ZvcihrPWwuJGNvbnRyb2wuY2hpbGRyZW4oIi5hY3RpdmU6IisoZT4wPyJsYXN0IjoiZmlyc3QiKSksaD1sLiRjb250cm9sLmNoaWxkcmVuKCI6bm90KGlucHV0KSIpLmluZGV4KGspLGU+MCYmaCsrLGM9MCxkPWwuJGFjdGl2ZUl0ZW1zLmxlbmd0aDtkPmM7YysrKWcucHVzaChhKGwuJGFjdGl2ZUl0ZW1zW2NdKS5hdHRyKCJkYXRhLXZhbHVlIikpOwpiJiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCkpfWVsc2UobC5pc0ZvY3VzZWR8fCJzaW5nbGUiPT09bC5zZXR0aW5ncy5tb2RlKSYmbC5pdGVtcy5sZW5ndGgmJigwPmUmJjA9PT1mLnN0YXJ0JiYwPT09Zi5sZW5ndGg/Zy5wdXNoKGwuaXRlbXNbbC5jYXJldFBvcy0xXSk6ZT4wJiZmLnN0YXJ0PT09bC4kY29udHJvbF9pbnB1dC52YWwoKS5sZW5ndGgmJmcucHVzaChsLml0ZW1zW2wuY2FyZXRQb3NdKSk7aWYoIWcubGVuZ3RofHwiZnVuY3Rpb24iPT10eXBlb2YgbC5zZXR0aW5ncy5vbkRlbGV0ZSYmbC5zZXR0aW5ncy5vbkRlbGV0ZS5hcHBseShsLFtnXSk9PT0hMSlyZXR1cm4hMTtmb3IoInVuZGVmaW5lZCIhPXR5cGVvZiBoJiZsLnNldENhcmV0KGgpO2cubGVuZ3RoOylsLnJlbW92ZUl0ZW0oZy5wb3AoKSk7cmV0dXJuIGwuc2hvd0lucHV0KCksbC5wb3NpdGlvbkRyb3Bkb3duKCksbC5yZWZyZXNoT3B0aW9ucyghMCksaSYmKGo9bC5nZXRPcHRpb24oaSksai5sZW5ndGgmJmwuc2V0QWN0aXZlT3B0aW9uKGopKSwhMH0sYWR2YW5jZVNlbGVjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpPXRoaXM7MCE9PWEmJihpLnJ0bCYmKGEqPS0xKSxjPWE+MD8ibGFzdCI6ImZpcnN0IixkPUgoaS4kY29udHJvbF9pbnB1dFswXSksaS5pc0ZvY3VzZWQmJiFpLmlzSW5wdXRIaWRkZW4/KGY9aS4kY29udHJvbF9pbnB1dC52YWwoKS5sZW5ndGgsZz0wPmE/MD09PWQuc3RhcnQmJjA9PT1kLmxlbmd0aDpkLnN0YXJ0PT09ZixnJiYhZiYmaS5hZHZhbmNlQ2FyZXQoYSxiKSk6KGg9aS4kY29udHJvbC5jaGlsZHJlbigiLmFjdGl2ZToiK2MpLGgubGVuZ3RoJiYoZT1pLiRjb250cm9sLmNoaWxkcmVuKCI6bm90KGlucHV0KSIpLmluZGV4KGgpLGkuc2V0QWN0aXZlSXRlbShudWxsKSxpLnNldENhcmV0KGE+MD9lKzE6ZSkpKSl9LGFkdmFuY2VDYXJldDpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzOzAhPT1hJiYoYz1hPjA/Im5leHQiOiJwcmV2IixlLmlzU2hpZnREb3duPyhkPWUuJGNvbnRyb2xfaW5wdXRbY10oKSxkLmxlbmd0aCYmKGUuaGlkZUlucHV0KCksZS5zZXRBY3RpdmVJdGVtKGQpLGImJmIucHJldmVudERlZmF1bHQoKSkpOmUuc2V0Q2FyZXQoZS5jYXJldFBvcythKSl9LHNldENhcmV0OmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYoYj0ic2luZ2xlIj09PWMuc2V0dGluZ3MubW9kZT9jLml0ZW1zLmxlbmd0aDpNYXRoLm1heCgwLE1hdGgubWluKGMuaXRlbXMubGVuZ3RoLGIpKSwhYy5pc1BlbmRpbmcpe3ZhciBkLGUsZixnO2ZvcihmPWMuJGNvbnRyb2wuY2hpbGRyZW4oIjpub3QoaW5wdXQpIiksZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKylnPWEoZltkXSkuZGV0YWNoKCksYj5kP2MuJGNvbnRyb2xfaW5wdXQuYmVmb3JlKGcpOmMuJGNvbnRyb2wuYXBwZW5kKGcpfWMuY2FyZXRQb3M9Yn0sbG9jazpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKSx0aGlzLmlzTG9ja2VkPSEwLHRoaXMucmVmcmVzaFN0YXRlKCl9LHVubG9jazpmdW5jdGlvbigpe3RoaXMuaXNMb2NrZWQ9ITEsdGhpcy5yZWZyZXNoU3RhdGUoKX0sZGlzYWJsZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7YS4kaW5wdXQucHJvcCgiZGlzYWJsZWQiLCEwKSxhLiRjb250cm9sX2lucHV0LnByb3AoImRpc2FibGVkIiwhMCkucHJvcCgidGFiaW5kZXgiLC0xKSxhLmlzRGlzYWJsZWQ9ITAsYS5sb2NrKCl9LGVuYWJsZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7YS4kaW5wdXQucHJvcCgiZGlzYWJsZWQiLCExKSxhLiRjb250cm9sX2lucHV0LnByb3AoImRpc2FibGVkIiwhMSkucHJvcCgidGFiaW5kZXgiLGEudGFiSW5kZXgpLGEuaXNEaXNhYmxlZD0hMSxhLnVubG9jaygpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWIuZXZlbnROUyxkPWIucmV2ZXJ0U2V0dGluZ3M7Yi50cmlnZ2VyKCJkZXN0cm95IiksYi5vZmYoKSxiLiR3cmFwcGVyLnJlbW92ZSgpLGIuJGRyb3Bkb3duLnJlbW92ZSgpLGIuJGlucHV0Lmh0bWwoIiIpLmFwcGVuZChkLiRjaGlsZHJlbikucmVtb3ZlQXR0cigidGFiaW5kZXgiKS5yZW1vdmVDbGFzcygic2VsZWN0aXplZCIpLmF0dHIoe3RhYmluZGV4OmQudGFiaW5kZXh9KS5zaG93KCksYi4kY29udHJvbF9pbnB1dC5yZW1vdmVEYXRhKCJncm93IiksYi4kaW5wdXQucmVtb3ZlRGF0YSgic2VsZWN0aXplIiksYSh3aW5kb3cpLm9mZihjKSxhKGRvY3VtZW50KS5vZmYoYyksYShkb2N1bWVudC5ib2R5KS5vZmYoYyksZGVsZXRlIGIuJGlucHV0WzBdLnNlbGVjdGl6ZX0scmVuZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPSIiLGY9ITEsZz10aGlzLGg9L15bXHQgXHJcbl0qPChbYS16XVthLXowLTlcLV9dKig/Olw6W2Etel1bYS16MC05XC1fXSopPykvaTtyZXR1cm4oIm9wdGlvbiI9PT1hfHwiaXRlbSI9PT1hKSYmKGM9eihiW2cuc2V0dGluZ3MudmFsdWVGaWVsZF0pLGY9ISFjKSxmJiYoeShnLnJlbmRlckNhY2hlW2FdKXx8KGcucmVuZGVyQ2FjaGVbYV09e30pLGcucmVuZGVyQ2FjaGVbYV0uaGFzT3duUHJvcGVydHkoYykpP2cucmVuZGVyQ2FjaGVbYV1bY106KGU9Zy5zZXR0aW5ncy5yZW5kZXJbYV0uYXBwbHkodGhpcyxbYixBXSksKCJvcHRpb24iPT09YXx8Im9wdGlvbl9jcmVhdGUiPT09YSkmJihlPWUucmVwbGFjZShoLCI8JDEgZGF0YS1zZWxlY3RhYmxlIikpLCJvcHRncm91cCI9PT1hJiYoZD1iW2cuc2V0dGluZ3Mub3B0Z3JvdXBWYWx1ZUZpZWxkXXx8IiIsZT1lLnJlcGxhY2UoaCwnPCQxIGRhdGEtZ3JvdXA9IicrQihBKGQpKSsnIicpKSwoIm9wdGlvbiI9PT1hfHwiaXRlbSI9PT1hKSYmKGU9ZS5yZXBsYWNlKGgsJzwkMSBkYXRhLXZhbHVlPSInK0IoQShjfHwiIikpKyciJykpLGYmJihnLnJlbmRlckNhY2hlW2FdW2NdPWUpLGUpfSxjbGVhckNhY2hlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7InVuZGVmaW5lZCI9PXR5cGVvZiBhP2IucmVuZGVyQ2FjaGU9e306ZGVsZXRlIGIucmVuZGVyQ2FjaGVbYV19LGNhbkNyZWF0ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKCFiLnNldHRpbmdzLmNyZWF0ZSlyZXR1cm4hMTt2YXIgYz1iLnNldHRpbmdzLmNyZWF0ZUZpbHRlcjtyZXR1cm4hKCFhLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIGMmJiFjLmFwcGx5KGIsW2FdKXx8InN0cmluZyI9PXR5cGVvZiBjJiYhbmV3IFJlZ0V4cChjKS50ZXN0KGEpfHxjIGluc3RhbmNlb2YgUmVnRXhwJiYhYy50ZXN0KGEpKX19KSxMLmNvdW50PTAsTC5kZWZhdWx0cz17b3B0aW9uczpbXSxvcHRncm91cHM6W10scGx1Z2luczpbXSxkZWxpbWl0ZXI6IiwiLHNwbGl0T246bnVsbCxwZXJzaXN0OiEwLGRpYWNyaXRpY3M6ITAsY3JlYXRlOiExLGNyZWF0ZU9uQmx1cjohMSxjcmVhdGVGaWx0ZXI6bnVsbCxoaWdobGlnaHQ6ITAsb3Blbk9uRm9jdXM6ITAsbWF4T3B0aW9uczoxZTMsbWF4SXRlbXM6bnVsbCxoaWRlU2VsZWN0ZWQ6bnVsbCxhZGRQcmVjZWRlbmNlOiExLHNlbGVjdE9uVGFiOiExLHByZWxvYWQ6ITEsYWxsb3dFbXB0eU9wdGlvbjohMSxjbG9zZUFmdGVyU2VsZWN0OiExLHNjcm9sbER1cmF0aW9uOjYwLGxvYWRUaHJvdHRsZTozMDAsbG9hZGluZ0NsYXNzOiJsb2FkaW5nIixkYXRhQXR0cjoiZGF0YS1kYXRhIixvcHRncm91cEZpZWxkOiJvcHRncm91cCIsdmFsdWVGaWVsZDoidmFsdWUiLGxhYmVsRmllbGQ6InRleHQiLG9wdGdyb3VwTGFiZWxGaWVsZDoibGFiZWwiLG9wdGdyb3VwVmFsdWVGaWVsZDoidmFsdWUiLGxvY2tPcHRncm91cE9yZGVyOiExLHNvcnRGaWVsZDoiJG9yZGVyIixzZWFyY2hGaWVsZDpbInRleHQiXSxzZWFyY2hDb25qdW5jdGlvbjoiYW5kIixtb2RlOm51bGwsd3JhcHBlckNsYXNzOiJzZWxlY3RpemUtY29udHJvbCIsaW5wdXRDbGFzczoic2VsZWN0aXplLWlucHV0Iixkcm9wZG93bkNsYXNzOiJzZWxlY3RpemUtZHJvcGRvd24iLGRyb3Bkb3duQ29udGVudENsYXNzOiJzZWxlY3RpemUtZHJvcGRvd24tY29udGVudCIsZHJvcGRvd25QYXJlbnQ6bnVsbCxjb3B5Q2xhc3Nlc1RvRHJvcGRvd246ITAscmVuZGVyOnt9fSxhLmZuLnNlbGVjdGl6ZT1mdW5jdGlvbihiKXt2YXIgYz1hLmZuLnNlbGVjdGl6ZS5kZWZhdWx0cyxkPWEuZXh0ZW5kKHt9LGMsYiksZT1kLmRhdGFBdHRyLGY9ZC5sYWJlbEZpZWxkLGc9ZC52YWx1ZUZpZWxkLGg9ZC5vcHRncm91cEZpZWxkLGk9ZC5vcHRncm91cExhYmVsRmllbGQsaj1kLm9wdGdyb3VwVmFsdWVGaWVsZCxrPWZ1bmN0aW9uKGIsYyl7dmFyIGgsaSxqLGssbD1iLmF0dHIoZSk7aWYobClmb3IoYy5vcHRpb25zPUpTT04ucGFyc2UobCksaD0wLGk9Yy5vcHRpb25zLmxlbmd0aDtpPmg7aCsrKWMuaXRlbXMucHVzaChjLm9wdGlvbnNbaF1bZ10pO2Vsc2V7dmFyIG09YS50cmltKGIudmFsKCl8fCIiKTtpZighZC5hbGxvd0VtcHR5T3B0aW9uJiYhbS5sZW5ndGgpcmV0dXJuO2ZvcihqPW0uc3BsaXQoZC5kZWxpbWl0ZXIpLGg9MCxpPWoubGVuZ3RoO2k+aDtoKyspaz17fSxrW2ZdPWpbaF0sa1tnXT1qW2hdLGMub3B0aW9ucy5wdXNoKGspO2MuaXRlbXM9an19LGw9ZnVuY3Rpb24oYixjKXt2YXIgayxsLG0sbixvPWMub3B0aW9ucyxwPXt9LHE9ZnVuY3Rpb24oYSl7dmFyIGI9ZSYmYS5hdHRyKGUpO3JldHVybiJzdHJpbmciPT10eXBlb2YgYiYmYi5sZW5ndGg/SlNPTi5wYXJzZShiKTpudWxsfSxyPWZ1bmN0aW9uKGIsZSl7Yj1hKGIpO3ZhciBpPXooYi5hdHRyKCJ2YWx1ZSIpKTtpZihpfHxkLmFsbG93RW1wdHlPcHRpb24paWYocC5oYXNPd25Qcm9wZXJ0eShpKSl7aWYoZSl7dmFyIGo9cFtpXVtoXTtqP2EuaXNBcnJheShqKT9qLnB1c2goZSk6cFtpXVtoXT1baixlXTpwW2ldW2hdPWV9fWVsc2V7dmFyIGs9cShiKXx8e307a1tmXT1rW2ZdfHxiLnRleHQoKSxrW2ddPWtbZ118fGksa1toXT1rW2hdfHxlLHBbaV09ayxvLnB1c2goayksYi5pcygiOnNlbGVjdGVkIikmJmMuaXRlbXMucHVzaChpKX19LHM9ZnVuY3Rpb24oYil7dmFyIGQsZSxmLGcsaDtmb3IoYj1hKGIpLGY9Yi5hdHRyKCJsYWJlbCIpLGYmJihnPXEoYil8fHt9LGdbaV09ZixnW2pdPWYsYy5vcHRncm91cHMucHVzaChnKSksaD1hKCJvcHRpb24iLGIpLGQ9MCxlPWgubGVuZ3RoO2U+ZDtkKyspcihoW2RdLGYpfTtmb3IoYy5tYXhJdGVtcz1iLmF0dHIoIm11bHRpcGxlIik/bnVsbDoxLG49Yi5jaGlsZHJlbigpLGs9MCxsPW4ubGVuZ3RoO2w+aztrKyspbT1uW2tdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSwib3B0Z3JvdXAiPT09bT9zKG5ba10pOiJvcHRpb24iPT09bSYmcihuW2tdKX07cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCF0aGlzLnNlbGVjdGl6ZSl7dmFyIGUsZj1hKHRoaXMpLGc9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCksaD1mLmF0dHIoInBsYWNlaG9sZGVyIil8fGYuYXR0cigiZGF0YS1wbGFjZWhvbGRlciIpO2h8fGQuYWxsb3dFbXB0eU9wdGlvbnx8KGg9Zi5jaGlsZHJlbignb3B0aW9uW3ZhbHVlPSIiXScpLnRleHQoKSk7dmFyIGk9e3BsYWNlaG9sZGVyOmgsb3B0aW9uczpbXSxvcHRncm91cHM6W10saXRlbXM6W119OyJzZWxlY3QiPT09Zz9sKGYsaSk6ayhmLGkpLGU9bmV3IEwoZixhLmV4dGVuZCghMCx7fSxjLGksYikpfX0pfSxhLmZuLnNlbGVjdGl6ZS5kZWZhdWx0cz1MLmRlZmF1bHRzLGEuZm4uc2VsZWN0aXplLnN1cHBvcnQ9e3ZhbGlkaXR5Onh9LEwuZGVmaW5lKCJkcmFnX2Ryb3AiLGZ1bmN0aW9uKCl7aWYoIWEuZm4uc29ydGFibGUpdGhyb3cgbmV3IEVycm9yKCdUaGUgImRyYWdfZHJvcCIgcGx1Z2luIHJlcXVpcmVzIGpRdWVyeSBVSSAic29ydGFibGUiLicpO2lmKCJtdWx0aSI9PT10aGlzLnNldHRpbmdzLm1vZGUpe3ZhciBiPXRoaXM7Yi5sb2NrPWZ1bmN0aW9uKCl7dmFyIGE9Yi5sb2NrO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPWIuJGNvbnRyb2wuZGF0YSgic29ydGFibGUiKTtyZXR1cm4gYyYmYy5kaXNhYmxlKCksYS5hcHBseShiLGFyZ3VtZW50cyl9fSgpLGIudW5sb2NrPWZ1bmN0aW9uKCl7dmFyIGE9Yi51bmxvY2s7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9Yi4kY29udHJvbC5kYXRhKCJzb3J0YWJsZSIpO3JldHVybiBjJiZjLmVuYWJsZSgpLGEuYXBwbHkoYixhcmd1bWVudHMpfX0oKSxiLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGM9Yi5zZXR1cDtyZXR1cm4gZnVuY3Rpb24oKXtjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZD1iLiRjb250cm9sLnNvcnRhYmxlKHtpdGVtczoiW2RhdGEtdmFsdWVdIixmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMCxkaXNhYmxlZDpiLmlzTG9ja2VkLHN0YXJ0OmZ1bmN0aW9uKGEsYil7Yi5wbGFjZWhvbGRlci5jc3MoIndpZHRoIixiLmhlbHBlci5jc3MoIndpZHRoIikpLGQuY3NzKHtvdmVyZmxvdzoidmlzaWJsZSJ9KX0sc3RvcDpmdW5jdGlvbigpe2QuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pO3ZhciBjPWIuJGFjdGl2ZUl0ZW1zP2IuJGFjdGl2ZUl0ZW1zLnNsaWNlKCk6bnVsbCxlPVtdO2QuY2hpbGRyZW4oIltkYXRhLXZhbHVlXSIpLmVhY2goZnVuY3Rpb24oKXtlLnB1c2goYSh0aGlzKS5hdHRyKCJkYXRhLXZhbHVlIikpfSksYi5zZXRWYWx1ZShlKSxiLnNldEFjdGl2ZUl0ZW0oYyl9fSl9fSgpfX0pLEwuZGVmaW5lKCJkcm9wZG93bl9oZWFkZXIiLGZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7Yj1hLmV4dGVuZCh7dGl0bGU6IlVudGl0bGVkIixoZWFkZXJDbGFzczoic2VsZWN0aXplLWRyb3Bkb3duLWhlYWRlciIsdGl0bGVSb3dDbGFzczoic2VsZWN0aXplLWRyb3Bkb3duLWhlYWRlci10aXRsZSIsbGFiZWxDbGFzczoic2VsZWN0aXplLWRyb3Bkb3duLWhlYWRlci1sYWJlbCIsY2xvc2VDbGFzczoic2VsZWN0aXplLWRyb3Bkb3duLWhlYWRlci1jbG9zZSIsaHRtbDpmdW5jdGlvbihhKXtyZXR1cm4nPGRpdiBjbGFzcz0iJythLmhlYWRlckNsYXNzKyciPjxkaXYgY2xhc3M9IicrYS50aXRsZVJvd0NsYXNzKyciPjxzcGFuIGNsYXNzPSInK2EubGFiZWxDbGFzcysnIj4nK2EudGl0bGUrJzwvc3Bhbj48YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGNsYXNzPSInK2EuY2xvc2VDbGFzcysnIj4mdGltZXM7PC9hPjwvZGl2PjwvZGl2Pid9fSxiKSxjLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGQ9Yy5zZXR1cDtyZXR1cm4gZnVuY3Rpb24oKXtkLmFwcGx5KGMsYXJndW1lbnRzKSxjLiRkcm9wZG93bl9oZWFkZXI9YShiLmh0bWwoYikpLGMuJGRyb3Bkb3duLnByZXBlbmQoYy4kZHJvcGRvd25faGVhZGVyKX19KCl9KSxMLmRlZmluZSgib3B0Z3JvdXBfY29sdW1ucyIsZnVuY3Rpb24oYil7dmFyIGM9dGhpcztiPWEuZXh0ZW5kKHtlcXVhbGl6ZVdpZHRoOiEwLGVxdWFsaXplSGVpZ2h0OiEwfSxiKSx0aGlzLmdldEFkamFjZW50T3B0aW9uPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yi5jbG9zZXN0KCJbZGF0YS1ncm91cF0iKS5maW5kKCJbZGF0YS1zZWxlY3RhYmxlXSIpLGU9ZC5pbmRleChiKStjO3JldHVybiBlPj0wJiZlPGQubGVuZ3RoP2QuZXEoZSk6YSgpfSx0aGlzLm9uS2V5RG93bj1mdW5jdGlvbigpe3ZhciBhPWMub25LZXlEb3duO3JldHVybiBmdW5jdGlvbihiKXt2YXIgZCxlLGYsZztyZXR1cm4hdGhpcy5pc09wZW58fGIua2V5Q29kZSE9PWomJmIua2V5Q29kZSE9PW0/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGMuaWdub3JlSG92ZXI9ITAsZz10aGlzLiRhY3RpdmVPcHRpb24uY2xvc2VzdCgiW2RhdGEtZ3JvdXBdIiksZD1nLmZpbmQoIltkYXRhLXNlbGVjdGFibGVdIikuaW5kZXgodGhpcy4kYWN0aXZlT3B0aW9uKSxnPWIua2V5Q29kZT09PWo/Zy5wcmV2KCJbZGF0YS1ncm91cF0iKTpnLm5leHQoIltkYXRhLWdyb3VwXSIpLGY9Zy5maW5kKCJbZGF0YS1zZWxlY3RhYmxlXSIpLGU9Zi5lcShNYXRoLm1pbihmLmxlbmd0aC0xLGQpKSx2b2lkKGUubGVuZ3RoJiZ0aGlzLnNldEFjdGl2ZU9wdGlvbihlKSkpfX0oKTt2YXIgZD1mdW5jdGlvbigpe3ZhciBhLGI9ZC53aWR0aCxjPWRvY3VtZW50O3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYiYmKGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLmlubmVySFRNTD0nPGRpdiBzdHlsZT0id2lkdGg6NTBweDtoZWlnaHQ6NTBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi01MHB4O3RvcDotNTBweDtvdmVyZmxvdzphdXRvOyI+PGRpdiBzdHlsZT0id2lkdGg6MXB4O2hlaWdodDoxMDBweDsiPjwvZGl2PjwvZGl2PicsYT1hLmZpcnN0Q2hpbGQsYy5ib2R5LmFwcGVuZENoaWxkKGEpLGI9ZC53aWR0aD1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGgsYy5ib2R5LnJlbW92ZUNoaWxkKGEpKSxifSxlPWZ1bmN0aW9uKCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoaz1hKCJbZGF0YS1ncm91cF0iLGMuJGRyb3Bkb3duX2NvbnRlbnQpLGY9ay5sZW5ndGgsZiYmYy4kZHJvcGRvd25fY29udGVudC53aWR0aCgpKXtpZihiLmVxdWFsaXplSGVpZ2h0KXtmb3IoZz0wLGU9MDtmPmU7ZSsrKWc9TWF0aC5tYXgoZyxrLmVxKGUpLmhlaWdodCgpKTtrLmNzcyh7aGVpZ2h0Omd9KX1iLmVxdWFsaXplV2lkdGgmJihqPWMuJGRyb3Bkb3duX2NvbnRlbnQuaW5uZXJXaWR0aCgpLWQoKSxoPU1hdGgucm91bmQoai9mKSxrLmNzcyh7d2lkdGg6aH0pLGY+MSYmKGk9ai1oKihmLTEpLGsuZXEoZi0xKS5jc3Moe3dpZHRoOml9KSkpfX07KGIuZXF1YWxpemVIZWlnaHR8fGIuZXF1YWxpemVXaWR0aCkmJihDLmFmdGVyKHRoaXMsInBvc2l0aW9uRHJvcGRvd24iLGUpLEMuYWZ0ZXIodGhpcywicmVmcmVzaE9wdGlvbnMiLGUpKX0pLEwuZGVmaW5lKCJyZW1vdmVfYnV0dG9uIixmdW5jdGlvbihiKXtpZigic2luZ2xlIiE9PXRoaXMuc2V0dGluZ3MubW9kZSl7Yj1hLmV4dGVuZCh7bGFiZWw6IiZ0aW1lczsiLHRpdGxlOiJSZW1vdmUiLGNsYXNzTmFtZToicmVtb3ZlIixhcHBlbmQ6ITB9LGIpO3ZhciBjPXRoaXMsZD0nPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBjbGFzcz0iJytiLmNsYXNzTmFtZSsnIiB0YWJpbmRleD0iLTEiIHRpdGxlPSInK0EoYi50aXRsZSkrJyI+JytiLmxhYmVsKyI8L2E+IixlPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zZWFyY2goLyg8XC9bXj5dKz5ccyopJC8pO3JldHVybiBhLnN1YnN0cmluZygwLGMpK2IrYS5zdWJzdHJpbmcoYyl9O3RoaXMuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZj1jLnNldHVwO3JldHVybiBmdW5jdGlvbigpe2lmKGIuYXBwZW5kKXt2YXIgZz1jLnNldHRpbmdzLnJlbmRlci5pdGVtO2Muc2V0dGluZ3MucmVuZGVyLml0ZW09ZnVuY3Rpb24oKXtyZXR1cm4gZShnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkKX19Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy4kY29udHJvbC5vbigiY2xpY2siLCIuIitiLmNsYXNzTmFtZSxmdW5jdGlvbihiKXtpZihiLnByZXZlbnREZWZhdWx0KCksIWMuaXNMb2NrZWQpe3ZhciBkPWEoYi5jdXJyZW50VGFyZ2V0KS5wYXJlbnQoKTtjLnNldEFjdGl2ZUl0ZW0oZCksYy5kZWxldGVTZWxlY3Rpb24oKSYmYy5zZXRDYXJldChjLml0ZW1zLmxlbmd0aCl9fSl9fSgpfX0pLEwuZGVmaW5lKCJyZXN0b3JlX29uX2JhY2tzcGFjZSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthLnRleHQ9YS50ZXh0fHxmdW5jdGlvbihhKXtyZXR1cm4gYVt0aGlzLnNldHRpbmdzLmxhYmVsRmllbGRdfSx0aGlzLm9uS2V5RG93bj1mdW5jdGlvbigpe3ZhciBjPWIub25LZXlEb3duO3JldHVybiBmdW5jdGlvbihiKXt2YXIgZCxlO3JldHVybiBiLmtleUNvZGU9PT1wJiYiIj09PXRoaXMuJGNvbnRyb2xfaW5wdXQudmFsKCkmJiF0aGlzLiRhY3RpdmVJdGVtcy5sZW5ndGgmJihkPXRoaXMuY2FyZXRQb3MtMSxkPj0wJiZkPHRoaXMuaXRlbXMubGVuZ3RoKT8oZT10aGlzLm9wdGlvbnNbdGhpcy5pdGVtc1tkXV0sdGhpcy5kZWxldGVTZWxlY3Rpb24oYikmJih0aGlzLnNldFRleHRib3hWYWx1ZShhLnRleHQuYXBwbHkodGhpcyxbZV0pKSx0aGlzLnJlZnJlc2hPcHRpb25zKCEwKSksdm9pZCBiLnByZXZlbnREZWZhdWx0KCkpOmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0pLEx9KTs="></script>
<link href="data:text/css,%0A%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20%2D30px%3B%0Amargin%2Dright%3A%20%2D30px%3B%0Awhite%2Dspace%3A%20normal%3B%0A%7D%0A%0Abody%20%3E%20%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20auto%3B%0Amargin%2Dright%3A%20auto%3B%0A%7D%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%2Dright%3A%2012px%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A480px%29%20%7B%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20block%3B%0Apadding%2Dright%3A%20inherit%3B%0A%7D%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA=="></script>
<link rel="stylesheet" href="data:text/css,%40font%2Dface%7Bfont%2Dfamily%3A%22Open%20Sans%22%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bsrc%3Alocal%28%22Open%20Sans%22%29%2Clocal%28%22OpenSans%22%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%22Open%20Sans%22%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A700%3Bsrc%3Alocal%28%22Open%20Sans%20Bold%22%29%2Clocal%28%22OpenSans%2DBold%22%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%2Epage%2Dheader%20%3Alast%2Dchild%7Bmargin%2Dbottom%3A%2E5rem%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Epage%2Dheader%7Bpadding%3A1rem%201rem%7D%7D%2Eproject%2Dname%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A%2E1rem%3Bfont%2Dsize%3A2rem%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Eproject%2Dname%7Bfont%2Dsize%3A1%2E75rem%7D%7D%2Eproject%2Dtagline%7Bmargin%2Dbottom%3A2rem%3Bfont%2Dweight%3A400%3Bopacity%3A%2E7%3Bfont%2Dsize%3A1%2E5rem%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Eproject%2Dtagline%7Bfont%2Dsize%3A1%2E2rem%7D%7D%2Eproject%2Dauthor%2C%2Eproject%2Ddate%7Bfont%2Dweight%3A400%3Bopacity%3A%2E7%3Bfont%2Dsize%3A1%2E2rem%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Eproject%2Dauthor%2C%2Eproject%2Ddate%7Bfont%2Dsize%3A1rem%7D%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%20%2Etoc%2Dbox%7Bpadding%3A1%2E5rem%3Bbackground%2Dcolor%3A%23f3f6fa%3Bborder%3Asolid%201px%20%23dce6f0%3Bborder%2Dradius%3A%2E3rem%7D%2Etoc%20%2Etoc%2Dbox%20%2Etoc%2Dtitle%7Bmargin%3A0%200%20%2E5rem%3Btext%2Dalign%3Acenter%7D%2Etoc%20%2Etoc%2Dbox%3Eul%7Bmargin%3A0%3Bpadding%2Dleft%3A1%2E5rem%7D%40media%20screen%20and%20%28min%2Dwidth%3A42em%29%20and%20%28max%2Dwidth%3A64em%29%7B%2Etoc%7Bpadding%3A2rem%202rem%200%7D%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Etoc%7Bpadding%3A2rem%201rem%200%3Bfont%2Dsize%3A1rem%7D%7D%2Emain%2Dcontent%20%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%40media%20screen%20and%20%28min%2Dwidth%3A42em%29%20and%20%28max%2Dwidth%3A64em%29%7B%2Emain%2Dcontent%7Bpadding%3A2rem%7D%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Emain%2Dcontent%7Bpadding%3A2rem%201rem%3Bfont%2Dsize%3A1rem%7D%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%23567482%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%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Emain%2Dcontent%20pre%7Bfont%2Dsize%3A%2E9rem%7D%7D%2Emain%2Dcontent%20pre%3Ecode%7Bpadding%3A0%3Bmargin%3A0%3Bcolor%3A%23567482%3Bword%2Dbreak%3Anormal%3Bwhite%2Dspace%3Apre%3Bbackground%3A0%200%3Bborder%3A0%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Emain%2Dcontent%20pre%3Ecode%7Bfont%2Dsize%3A%2E9rem%7D%7D%2Emain%2Dcontent%20pre%20code%2C%2Emain%2Dcontent%20pre%20tt%7Bdisplay%3Ainline%3Bmax%2Dwidth%3Ainitial%3Bpadding%3A0%3Bmargin%3A0%3Boverflow%3Ainitial%3Bline%2Dheight%3Ainherit%3Bword%2Dwrap%3Anormal%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Emain%2Dcontent%20pre%20code%3Aafter%2C%2Emain%2Dcontent%20pre%20code%3Abefore%2C%2Emain%2Dcontent%20pre%20tt%3Aafter%2C%2Emain%2Dcontent%20pre%20tt%3Abefore%7Bcontent%3Anormal%7D%2Emain%2Dcontent%20ol%2C%2Emain%2Dcontent%20ul%7Bmargin%2Dtop%3A0%7D%2Emain%2Dcontent%20blockquote%7Bpadding%3A0%201rem%3Bmargin%2Dleft%3A0%3Bcolor%3A%23819198%3Bborder%2Dleft%3A%2E3rem%20solid%20%23dce6f0%3Bfont%2Dsize%3A1%2E2rem%7D%2Emain%2Dcontent%20blockquote%3E%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%2Emain%2Dcontent%20blockquote%3E%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%40media%20screen%20and%20%28max%2Dwidth%3A42em%29%7B%2Emain%2Dcontent%20blockquote%7Bfont%2Dsize%3A1%2E1rem%7D%7D%2Emain%2Dcontent%20table%7Bwidth%3A100%25%3Boverflow%3Aauto%3Bword%2Dbreak%3Anormal%3Bword%2Dbreak%3Akeep%2Dall%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Bborder%2Dcollapse%3Acollapse%3Bborder%2Dspacing%3A0%3Bmargin%3A1rem%200%7D%2Emain%2Dcontent%20table%20th%7Bfont%2Dweight%3A700%3Bbackground%2Dcolor%3A%23159957%3Bcolor%3A%23fff%7D%2Emain%2Dcontent%20table%20td%2C%2Emain%2Dcontent%20table%20th%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%7Bheight%3A2px%3Bpadding%3A0%3Bmargin%3A1rem%200%3Bbackground%2Dcolor%3A%23eff0f1%3Bborder%3A0%7Dcode%20span%2Ekw%20%7B%20color%3A%20%23a71d5d%3B%20font%2Dweight%3A%20normal%3B%20%7D%20%0Acode%20span%2Edt%20%7B%20color%3A%20%23795da3%3B%20%7D%20%0Acode%20span%2Edv%20%7B%20color%3A%20%230086b3%3B%20%7D%20%0Acode%20span%2Ebn%20%7B%20color%3A%20%230086b3%3B%20%7D%20%0Acode%20span%2Efl%20%7B%20color%3A%20%230086b3%3B%20%7D%20%0Acode%20span%2Ech%20%7B%20color%3A%20%234070a0%3B%20%7D%20%0Acode%20span%2Est%20%7B%20color%3A%20%23183691%3B%20%7D%20%0Acode%20span%2Eco%20%7B%20color%3A%20%23969896%3B%20font%2Dstyle%3A%20italic%3B%20%7D%20%0Acode%20span%2Eot%20%7B%20color%3A%20%23007020%3B%20%7D%20%0A" type="text/css" />
</head>
<body>
<section class="page-header">
<h1 class="title toc-ignore project-name">A股资本市场数据与投资策略支持</h1>
<h4 class="author project-author">纵横资本</h4>
<h4 class="date project-date">2021-07-18</h4>
</section>
<section class="main-content">
<div id="股市认知" class="section level2">
<h2>股市认知</h2>
<div id="a股市场的改革之路" class="section level3">
<h3>A股市场的改革之路</h3>
<p>A股在过去的30年中不断的改革中蜿蜒前进,相比于美股,日本股市,国内市场存在制度上,公司财务造假,大股东巨额减持套现,股权高质押等等不确定性较强的因素,导致这个市场散户亏钱效应明显.但在指数化上,A股的重要指数走出了美股指数的走势,而且过去国家对于指数的不断调整,不断把指数成分股革新,这样指数出现了漂亮的上证50,科创50,创业板指数.当然改革中二八效应依然是很明显的,对于短期利益追逐者长期追涨杀跌,对于价值投资者,长期投资者回报相当比较可可观! 改革短期看会回到原点,但正如丁元英所说,改革就是利益的重新划分,你需要躲过衙门的快刀,也需要躲过黑庄的死手,虎口夺食.</p>
</div>
<div id="投资的境界" class="section level3">
<h3>投资的境界</h3>
<p>投资的第一境界应该就是追求短期的追涨杀跌的收益,也就是赚波段收益;投资的第二境界懂得追求价值投资,长远收益,追求长期持有30%<sub>50%的收益;投资的第三境界应该是买在无人问津的价值低估周期,卖在门庭若市的价格泡沫周期,这时候追求的就是翻2</sub>4倍; 当你过了荷尔蒙周期,你就会减少操作的频率,选择耐心的持有!巴菲特懂得用时间和耐力来证明自己的选择,当初他投资比亚迪也是在这样.</p>
</div>
</div>
<div id="价格维度高价vs低价" class="section level2">
<h2>价格维度—高价VS低价</h2>
<p>在2020年的上涨行情中,高价股持续上涨不断新高,在这一波行情中高价股投资者赚的盆满钵满,随着时间到了2021年,持有煤炭,钢铁,造纸,有色,玻璃等传统行业上涨的过程中,低价股不断的翻倍.</p>
<div id="低价活跃个股" class="section level3">
<h3>低价活跃个股</h3>
<div id="htmlwidget-eb797ed21a807479f048" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-eb797ed21a807479f048">{"x":{"filter":"top","filterHTML":"<tr>\n <td><\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2\" data-max=\"9.98\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2.0033\" data-max=\"19.9492\" data-scale=\"4\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"9719.24\" data-max=\"11394304.8\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"0.06\" data-max=\"1.57\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n<\/tr>","data":[["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"],["300376.SZ","300325.SZ","300281.SZ","002454.SZ","002598.SZ","601101.SH","002580.SZ","000612.SZ","600348.SH","002249.SZ","000506.SZ","002276.SZ","000683.SZ","603889.SH","300237.SZ","600481.SH","002285.SZ","600210.SH","603067.SH","000159.SZ","300159.SZ","600398.SH","300343.SZ","002533.SZ","601126.SH","000825.SZ","000488.SZ","002588.SZ","600165.SH","600715.SH","002053.SZ","002042.SZ","002266.SZ","601898.SH","603077.SH","002011.SZ","600707.SH","300129.SZ","600711.SH","000697.SZ","000822.SZ","000040.SZ","603669.SH","000659.SZ","600063.SH","600381.SH","600200.SH","002506.SZ","600654.SH","600971.SH","600290.SH","000687.SZ","603918.SH","000591.SZ","000737.SZ","000820.SZ","002147.SZ","002774.SZ","600506.SH","000982.SZ","600146.SH","600078.SH","600608.SH","600581.SH","002656.SZ","000611.SZ","600870.SH","002175.SZ","600405.SH","002122.SZ","300269.SZ","002355.SZ","000835.SZ","002196.SZ","600890.SH","300569.SZ","002068.SZ","600256.SH","600751.SH","300405.SZ","603333.SH","600808.SH","000731.SZ","002622.SZ","601020.SH","000100.SZ","603227.SH","600167.SH","600301.SH","000782.SZ","300241.SZ","601600.SH","000426.SZ","600075.SH","000790.SZ","000912.SZ","300389.SZ","002783.SZ","300048.SZ","600889.SH","300029.SZ","601568.SH","002171.SZ","300198.SZ","002586.SZ","002374.SZ","600152.SH","002263.SZ","600478.SH","300088.SZ","000707.SZ","002105.SZ","002206.SZ","002121.SZ","601003.SH","300061.SZ","300336.SZ","002441.SZ","600115.SH","603399.SH","000983.SZ","000932.SZ","600343.SH","600284.SH","002748.SZ","600986.SH","300228.SZ","600501.SH","002602.SZ","002457.SZ","300209.SZ","002442.SZ","600326.SH","300067.SZ","002411.SZ","300160.SZ","002753.SZ","600816.SH","002090.SZ","002006.SZ","002208.SZ","600755.SH","300089.SZ","002640.SZ","600185.SH","300167.SZ","300064.SZ","600470.SH","000695.SZ","000609.SZ","600273.SH","000980.SZ","600331.SH","600068.SH","000936.SZ","000901.SZ","601001.SH","600879.SH","600500.SH","600325.SH","002172.SZ","002259.SZ","600395.SH","601618.SH","603687.SH","300213.SZ","603996.SH","300128.SZ","600463.SH","600462.SH","603779.SH","600400.SH","601678.SH","002013.SZ","002114.SZ","600300.SH","603299.SH","600929.SH","300477.SZ","300446.SZ","600151.SH","600178.SH","600123.SH","000949.SZ","300072.SZ","600552.SH","300366.SZ","002350.SZ","300304.SZ","600590.SH","002342.SZ","600039.SH","603377.SH","300277.SZ","300217.SZ","600740.SH","600997.SH","002559.SZ","600497.SH","300135.SZ","600425.SH","000725.SZ","601918.SH","600716.SH","000989.SZ","601890.SH","300184.SZ","600620.SH","002692.SZ","600546.SH","002328.SZ","600242.SH","000559.SZ","600029.SH","002766.SZ","601117.SH","002632.SZ","600642.SH","000153.SZ","002283.SZ","002660.SZ","600508.SH","002465.SZ","002110.SZ","002211.SZ","300051.SZ","002154.SZ","601598.SH","603002.SH","600084.SH","000056.SZ","002882.SZ","002307.SZ","000678.SZ","600869.SH","600219.SH","300178.SZ","600209.SH","002170.SZ","002492.SZ","002297.SZ","002532.SZ","000507.SZ","000561.SZ","300107.SZ","002361.SZ","603183.SH","600490.SH","000598.SZ","300320.SZ","601111.SH","002545.SZ","000570.SZ","000922.SZ","600153.SH","002016.SZ","002334.SZ"],["易事特","*ST德威","金明精机","松芝股份","山东章鼓","昊华能源","圣阳股份","焦作万方","华阳股份","大洋电机","中润资源","万马股份","远兴能源","新澳股份","美晨生态","双良节能","世联行","紫江企业","振华股份","国际实业","新研股份","海澜之家","联创股份","金杯电工","四方股份","太钢不锈","晨鸣纸业","史丹利","新日恒力","文投控股","云南能投","华孚时尚","浙富控股","中煤能源","和邦生物","盾安环境","彩虹股份","泰胜风能","盛屯矿业","炼石航空","山东海化","东旭蓝天","灵康药业","珠海中富","皖维高新","青海春天","江苏吴中","协鑫集成","ST中安","恒源煤电","ST华仪","*ST华讯","金桥信息","太阳能","南风化工","*ST节能","*ST新光","快意电梯","*ST香梨","中银绒业","*ST环球","*ST澄星","ST沪科","八一钢铁","ST摩登","*ST天首","*ST厦华","*ST东网","动力源","ST天马","ST联建","兴民智通","*ST长动","方正电机","*ST中房","天能重工","黑猫股份","广汇能源","海航科技","科隆股份","尚纬股份","马钢股份","四川美丰","融钰集团","ST华钰","TCL科技","雪峰科技","联美控股","*ST南化","美达股份","瑞丰光电","中国铝业","兴业矿业","新疆天业","华神科技","泸天化","艾比森","凯龙股份","合康新能","南京化纤","*ST天龙","北元集团","楚江新材","纳川股份","*ST围海","中锐股份","维科技术","大东南","科力远","长信科技","*ST双环","信隆健康","海利得","科陆电子","柳钢股份","旗天科技","新文化","众业达","中国东航","吉翔股份","山西焦煤","华菱钢铁","航天动力","浦东建设","世龙实业","浙文互联","富瑞特装","航天晨光","世纪华通","青龙管业","天泽信息","龙星化工","西藏天路","安诺其","延安必康","秀强股份","永东股份","ST安信","金智科技","精功科技","合肥城建","厦门国贸","文化长城","*ST跨境","格力地产","迪威迅","*ST金刚","六国化工","滨海能源","*ST中迪","嘉化能源","*ST众泰","宏达股份","葛洲坝","华西股份","航天科技","晋控煤业","航天电子","中化国际","华发股份","澳洋健康","*ST升达","盘江股份","中国中冶","大胜达","佳讯飞鸿","*ST中新","锦富技术","空港股份","ST九有","ST威龙","红豆股份","滨化股份","中航机电","罗平锌电","ST维维","苏盐井神","雪天盐业","合纵科技","*ST乐材","航天机电","东安动力","兰花科创","新乡化纤","三聚环保","凯盛科技","创意信息","北京科锐","云意电气","泰豪科技","巨力索具","四川路桥","东方时尚","海联讯","东方电热","山西焦化","开滦股份","亚威股份","驰宏锌锗","宝利国际","青松建化","京东方A","新集能源","凤凰股份","九芝堂","亚星锚链","力源信息","天宸股份","ST远程","山煤国际","新朋股份","ST中昌","万向钱潮","南方航空","*ST索菱","中国化学","道明光学","申能股份","丰原药业","天润工业","茂硕电源","上海能源","海格通信","三钢闽光","宏达新材","ST三五","报喜鸟","中国外运","宏昌电子","*ST中葡","皇庭国际","金龙羽","北新路桥","襄阳轴承","远东股份","南山铝业","*ST腾邦","*ST罗顿","芭田股份","恒基达鑫","博云新材","天山铝业","珠海港","烽火电子","建新股份","神剑股份","建研院","鹏欣资源","兴蓉环境","海达股份","中国国航","东方铁塔","苏常柴A","佳电股份","建发股份","世荣兆业","英威腾"],["电气设备","塑料","专用机械","汽车配件","机械基件","煤炭开采","电气设备","铝","煤炭开采","电气设备","黄金","电气设备","化工原料","纺织","建筑工程","环境保护","房产服务","广告包装","化工原料","石油贸易","航空","服饰","互联网","电气设备","电气设备","特种钢","造纸","农药化肥","化工原料","影视音像","食品","纺织","环境保护","煤炭开采","化工原料","工程机械","元器件","电气设备","小金属","航空","化工原料","新型电力","化学制药","广告包装","化纤","医疗保健","化学制药","电气设备","软件服务","煤炭开采","电气设备","通信设备","软件服务","新型电力","日用化工","环境保护","区域地产","运输设备","种植业","纺织","服饰","化工原料","钢加工","普钢","服饰","纺织","家用电器","电器仪表","电气设备","机械基件","半导体","汽车配件","影视音像","纺织机械","区域地产","专用机械","化工原料","石油开采","软件服务","化工原料","电气设备","普钢","农药化肥","综合类","铅锌","元器件","化工原料","供气供热","商贸代理","化纤","半导体","铝","铅锌","化工原料","中成药","农药化肥","半导体","化工原料","电气设备","化纤","电气设备","化工原料","铜","塑料","建筑工程","建筑工程","电气设备","塑料","元器件","元器件","化工原料","文教休闲","化纤","电器仪表","普钢","互联网","影视音像","批发业","空运","小金属","煤炭开采","普钢","航空","建筑工程","化工原料","互联网","化工机械","汽车配件","互联网","塑料","软件服务","化工原料","水泥","染料涂料","化学制药","玻璃","化工原料","多元金融","软件服务","专用机械","区域地产","商贸代理","文教休闲","互联网","区域地产","软件服务","矿物制品","农药化肥","广告包装","区域地产","化工原料","汽车配件","铅锌","建筑工程","化纤","汽车配件","煤炭开采","航空","商贸代理","区域地产","化纤","供气供热","煤炭开采","建筑工程","广告包装","通信设备","家用电器","元器件","园区开发","广告包装","红黄酒","服饰","化工原料","航空","铅锌","软饮料","食品","食品","电气设备","化工原料","汽车配件","汽车配件","煤炭开采","化纤","环境保护","玻璃","软件服务","电气设备","汽车配件","电气设备","机械基件","建筑工程","汽车服务","软件服务","电器仪表","焦炭加工","煤炭开采","机床制造","铅锌","化工原料","水泥","元器件","煤炭开采","区域地产","中成药","船舶","元器件","综合类","电气设备","煤炭开采","汽车配件","软件服务","汽车配件","空运","汽车配件","建筑工程","化工原料","火力发电","化学制药","汽车配件","电气设备","煤炭开采","通信设备","普钢","橡胶","互联网","服饰","仓储物流","化工原料","红黄酒","房产服务","电气设备","建筑工程","机械基件","电气设备","铝","旅游服务","装修装饰","农药化肥","仓储物流","矿物制品","铝","港口","通信设备","化工原料","化工原料","建筑工程","铜","水务","橡胶","空运","钢加工","机械基件","电气设备","商贸代理","区域地产","电气设备"],[9.44,3.08,6.41,6,8.11,6.03,9,8.57,8.48,6.29,2.98,7.41,6.9,6.92,2.92,8.81,7.35,5.96,8.87,7.28,3.64,7.76,8.54,6.15,9,9.13,8.88,6.19,8.03,3.73,8.3,5.75,5.43,7.98,2.38,6.08,9.94,6.55,9.4,8.26,9.13,2.9,9.69,4.34,5.93,9.71,9.2,4.01,2.01,6.84,2.63,2.43,7.98,6.76,9.43,3.49,4.57,7.69,8.11,2.51,2.72,3.35,7.12,7.55,3.15,4.42,4.64,2.96,6.38,2.78,3.43,6.66,3.44,9.35,2.83,8.52,8.12,3.53,2.9,9.38,6.29,4.52,6.41,5.33,8.59,8.37,5.77,9.47,7.7,4.01,8.8,5.82,8.4,7.92,6.14,4.71,9.73,9.04,5.07,6.73,5.97,8.96,9.26,3.27,3,2.73,8.76,3.02,6.07,8.69,5.09,8.5,7.15,4.6,6.64,8.95,2.9,8.15,4.97,5.59,8.26,7.39,9.48,7.42,6.88,4.24,7.27,9.1,6.14,9.88,6.21,8.41,7.49,4.37,8.14,8.79,9.8,2.53,8.87,9.19,8.26,8.3,6.09,2.57,7.41,5.51,2.27,5.92,6.25,3.3,9.25,6.66,2.36,8.15,7.14,8.53,7.88,7.24,7.95,6.28,4.93,3.53,7.43,3.19,7.82,6.44,3.22,3.97,6.16,2.9,8.02,2.92,8.43,9.91,7.35,4.06,8.15,6.68,9.68,7.85,9.35,7.91,8.67,7.92,6.47,7.28,9.26,5.43,5.82,7,4.7,7.05,9.81,8.67,3.55,5.13,7.5,7.12,4.75,2.78,3.6,6.48,4.87,4.07,9.77,5.7,6.12,7.36,2.9,7.54,5.04,2.95,5.5,5.96,4.26,8.98,7.28,6,9.97,6.1,7.86,9.69,9.26,8.39,4.86,3.54,6.2,5.32,7.17,4.05,2.72,9.1,4.56,5.04,5.5,4.62,3.24,4.63,4.17,5.56,8.44,8.91,6.1,6.57,5.65,5.18,5.68,4.3,5.29,6.8,7.38,7.88,6,7.01,7.6,6.59,6.11],[19.9492,17.1103,13.4513,10.0917,10.0407,10.0365,10.0244,10.0128,9.987,9.965,9.9631,9.9407,9.8726,9.8413,9.7744,9.3052,9.0504,7.971,7.7764,7.0588,7.0588,7.0345,7.0175,6.9565,6.8884,6.7836,6.7308,6.7241,6.6401,6.5714,6.5469,6.2847,6.2622,6.2583,6.25,6.1082,6.0832,5.9871,5.9752,5.8974,5.7937,5.4545,5.4407,5.3398,5.3286,5.3145,5.2632,5.2493,5.2356,5.2308,5.2,5.1948,5.1383,5.1322,5.1282,5.1205,5.0575,5.0546,5.0518,5.0209,5.0193,5.0157,5.0147,5.007,5,4.9881,4.9774,4.9645,4.9342,4.9057,4.893,4.8819,4.878,4.8206,4.8148,4.797,4.7742,4.7478,4.6931,4.6875,4.6589,4.6296,4.5677,4.5098,4.3742,4.3641,4.34,4.2952,4.1949,4.1558,4.142,4.1145,4.0892,4.0736,4.0678,3.9735,3.953,3.908,3.8934,3.858,3.8261,3.8239,3.8117,3.8095,3.8062,3.8023,3.7915,3.7801,3.7607,3.6993,3.666,3.6585,3.6232,3.6036,3.5881,3.588,3.5714,3.5578,3.5417,3.5185,3.5088,3.5014,3.4934,3.4868,3.4586,3.4146,3.4139,3.4091,3.367,3.3473,3.3278,3.317,3.3103,3.3097,3.2995,3.2902,3.2666,3.2653,3.2596,3.2584,3.25,3.2338,3.2203,3.2129,3.2033,3.1835,3.1818,3.1359,3.1353,3.125,3.1215,3.096,3.0568,3.0341,3.0303,3.0193,3.0065,2.9872,2.9793,2.9508,2.9228,2.9155,2.9086,2.9032,2.8947,2.8754,2.8754,2.8497,2.8381,2.8369,2.8205,2.8169,2.8049,2.8008,2.7972,2.7848,2.7743,2.7692,2.7601,2.7487,2.7473,2.7273,2.7251,2.7237,2.6984,2.6798,2.6608,2.6465,2.6455,2.6393,2.6201,2.6201,2.6151,2.6036,2.6012,2.6,2.5992,2.5937,2.5918,2.583,2.5641,2.5316,2.5263,2.5189,2.5184,2.518,2.5126,2.507,2.4735,2.4457,2.439,2.4306,2.4209,2.4055,2.4038,2.3945,2.391,2.3891,2.3614,2.349,2.3438,2.3231,2.3204,2.3171,2.3158,2.3121,2.3102,2.3077,2.2825,2.2727,2.2556,2.2472,2.2422,2.2312,2.2305,2.2124,2.2082,2.2075,2.2059,2.2059,2.1792,2.1789,2.1776,2.1773,2.17,2.1696,2.1583,2.1378,2.1236,2.1021,2.0747,2.0725,2.0408,2.0378,2.0134,2.0124,2.0033],[1561807.5,967939.68,469932.32,177136.47,149572.65,569954.66,292337.63,880262.21,1208832.95,1641570.71,549786.29,369858.34,2086232.74,149746.1,1606671.39,826233.25,927710.81,1503068.01,298502.9,539017.99,1193687.32,604012.98,2697386.34,398073.58,276748.03,3367537.76,1469980.16,469213.98,248906.06,567677.59,128237.84,402412.49,773796.79,643025.31,3636863.84,245928.88,1150647.32,578368.15,4114006.83,126155.76,716360.85,1001402.73,165847.3,366186.18,1147444.5,474714.17,784403.3,4101924.41,158388.69,507440.06,194493,255443.8,230901.02,2221836.5,123232.74,19149,246376.32,294321.83,28768.02,2997552.05,236630.09,440525.95,54446.08,1628929.43,9719.24,81174.74,87694.58,191557.93,826962.94,45966.08,279807.7,195329.36,141532.77,377397.41,117707,248578.33,562599.32,2045035.56,833419.58,219498.13,107273.57,1804464.57,493933.89,828194.49,254004.87,8137564,233052,181051.4,21781.1,160435.59,495301.14,3570097.39,374679.05,929358.75,562189.59,361104.76,130296.33,102765.87,228421.98,189763.6,79002.68,220773.07,468233.97,316974.41,71886.48,182854.8,178615.36,952980.24,620610.45,1037227.16,137007.65,114864.01,373329.61,231951.46,248897.28,683046.72,177259.2,78469.96,438754.1,240942.84,1123426.17,2061006.29,120825.2,1266389.33,21363.1,218928.91,319183.02,115756.65,523142.88,241365.13,150616.7,1059315.59,480704.5,234893.89,1789353.72,595179.52,95408.66,196627.36,59723.94,138714.99,258137.88,1372319.94,141836,1435111.9,423836.74,265149.41,423355.85,582175.84,41441.01,58630.94,374256.83,407780.53,886922.58,562647.64,354290.19,172411.28,410033.83,676863.14,430531.05,318354.53,688236.88,27338.02,254142.26,2350439.86,34908.32,113308.54,96642.7,342875.91,14447,54613,45118,235514.75,620190.66,718181.5,179174.75,1337218.65,162000.39,144646,984913.96,23781.17,301254.87,126671.51,563481.3,616537.59,282065.26,230408.87,191075.02,116649.06,336307.28,228008.75,514050.24,446960.6,141433.48,66658.7,524300.66,816476.48,426775.18,104487.19,1268433.46,277866.88,197725.65,11394304.8,1151162.66,111413.81,272806.97,186253.38,690256.76,41878.71,29611.86,987859.18,204485.99,86727.19,358381.37,475074.89,17796.64,1113451.42,149120.08,148354.43,115898.81,331697.51,90327.01,98965.01,218359.33,934550.62,141900.24,59662.27,654330.52,438898.57,184195.25,92329,112619.6,35848.1,79314.7,34097,454602.97,2620068.98,229949.89,22382.22,319807,64993.35,375855.57,963300.69,161848.85,45301.72,70020.99,232818.03,52652.79,914042.55,178269.55,283742.57,510516.56,131654.06,162927.29,43485.17,197714.18,48814.21,615242.38],[1.57,0.45,0.76,0.55,0.74,0.55,0.82,0.78,0.77,0.57,0.27,0.67,0.62,0.62,0.26,0.75,0.61,0.44,0.64,0.48,0.24,0.51,0.56,0.4,0.58,0.58,0.56,0.39,0.5,0.23,0.51,0.34,0.32,0.47,0.14,0.35,0.57,0.37,0.53,0.46,0.5,0.15,0.5,0.22,0.3,0.49,0.46,0.2,0.1,0.34,0.13,0.12,0.39,0.33,0.46,0.17,0.22,0.37,0.39,0.12,0.13,0.16,0.34,0.36,0.15,0.21,0.22,0.14,0.3,0.13,0.16,0.31,0.16,0.43,0.13,0.39,0.37,0.16,0.13,0.42,0.28,0.2,0.28,0.23,0.36,0.35,0.24,0.39,0.31,0.16,0.35,0.23,0.33,0.31,0.24,0.18,0.37,0.34,0.19,0.25,0.22,0.33,0.34,0.12,0.11,0.1,0.32,0.11,0.22,0.31,0.18,0.3,0.25,0.16,0.23,0.31,0.1,0.28,0.17,0.19,0.28,0.25,0.32,0.25,0.23,0.14,0.24,0.3,0.2,0.32,0.2,0.27,0.24,0.14,0.26,0.28,0.31,0.08,0.28,0.29,0.26,0.26,0.19,0.08,0.23,0.17,0.07,0.18,0.19,0.1,0.28,0.2,0.07,0.24,0.21,0.25,0.23,0.21,0.23,0.18,0.14,0.1,0.21,0.09,0.22,0.18,0.09,0.11,0.17,0.08,0.22,0.08,0.23,0.27,0.2,0.11,0.22,0.18,0.26,0.21,0.25,0.21,0.23,0.21,0.17,0.19,0.24,0.14,0.15,0.18,0.12,0.18,0.25,0.22,0.09,0.13,0.19,0.18,0.12,0.07,0.09,0.16,0.12,0.1,0.24,0.14,0.15,0.18,0.07,0.18,0.12,0.07,0.13,0.14,0.1,0.21,0.17,0.14,0.23,0.14,0.18,0.22,0.21,0.19,0.11,0.08,0.14,0.12,0.16,0.09,0.06,0.2,0.1,0.11,0.12,0.1,0.07,0.1,0.09,0.12,0.18,0.19,0.13,0.14,0.12,0.11,0.12,0.09,0.11,0.14,0.15,0.16,0.12,0.14,0.15,0.13,0.12]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>代码<\/th>\n <th>公司名称<\/th>\n <th>行业<\/th>\n <th>收盘价<\/th>\n <th>涨跌幅<\/th>\n <th>交易量<\/th>\n <th>价格变化<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":15,"autoWidth":true,"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0}],"order":[],"orderClasses":false,"orderCellsTop":true,"lengthMenu":[10,15,25,50,100],"rowCallback":"function(row, data, displayNum, displayIndex, dataIndex) {\nvar value=data[4]; $(this.api().cell(row, 4).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 12.5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 100 ? \"green\" : value <= 600 ? \"blue\" : \"red\"});\nvar value=data[5]; $(this.api().cell(row, 5).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 0 ? \"green\" : value <= 5 ? \"blue\" : \"red\"});\nvar value=data[6]; $(this.api().cell(row, 6).node()).css({'color':isNaN(parseFloat(value)) ? '' : value <= 5000 ? \"green\" : value <= 100000 ? \"blue\" : \"red\",'background-color':isNaN(parseFloat(value)) ? '' : value <= 10000 ? \"gray\" : \"yellow\"});\n}"}},"evals":["options.rowCallback"],"jsHooks":[]}</script>
</div>
<div id="高价活跃个股" class="section level3">
<h3>高价活跃个股</h3>
<div id="htmlwidget-12cd9f2c30fbf190f56d" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-12cd9f2c30fbf190f56d">{"x":{"filter":"top","filterHTML":"<tr>\n <td><\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"107.1\" data-max=\"520.49\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2.1528\" data-max=\"19.9983\" data-scale=\"4\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"6456.9\" data-max=\"201757.74\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2.54\" data-max=\"39.29\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n<\/tr>","data":[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],["300672.SZ","301031.SZ","688059.SH","603444.SH","688037.SH","688789.SH","002304.SZ","688002.SH","603267.SH","300841.SZ","300919.SZ","002049.SZ","688699.SH","688408.SH","688357.SH","688333.SH","300724.SZ","688636.SH","688682.SH"],["国科微","C中熔","华锐精密","吉比特","芯源微","宏华数科","洋河股份","睿创微纳","鸿远电子","康华生物","中伟股份","紫光国微","明微电子","中信博","建龙微纳","铂力特","捷佳伟创","智明达","霍莱沃"],["半导体","电气设备","机械基件","互联网","半导体","专用机械","白酒","通信设备","元器件","生物制药","化工原料","元器件","半导体","电气设备","化工原料","机械基件","专用机械","元器件","软件服务"],[144.19,143.86,180.52,520.49,194.99,239.5,206.41,107.1,148.79,245.14,152,165.27,335,231.79,150.72,171,131.55,114.85,160.38],[19.9983,12.2941,8.4204,8.165,6.9024,6.4492,5.3919,4.6921,4.436,3.9786,3.6411,3.2421,3.0452,2.5166,2.5027,2.4566,2.2621,2.2616,2.1529],[117641.04,95387.26,6456.9,18960.46,25705.25,17381.68,201757.74,46898.84,52897.55,12273.68,36554.09,125488.91,20651.93,7712.7,8441.4,9857.22,85571.65,7317.7,7421.13],[24.03,15.75,14.02,39.29,12.59,14.51,10.56,4.8,6.32,9.38,5.34,5.19,9.9,5.69,3.68,4.1,2.91,2.54,3.38]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>代码<\/th>\n <th>公司名称<\/th>\n <th>行业<\/th>\n <th>收盘价<\/th>\n <th>涨跌幅<\/th>\n <th>交易量<\/th>\n <th>价格变化<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":15,"autoWidth":true,"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0}],"order":[],"orderClasses":false,"orderCellsTop":true,"lengthMenu":[10,15,25,50,100],"rowCallback":"function(row, data, displayNum, displayIndex, dataIndex) {\nvar value=data[4]; $(this.api().cell(row, 4).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 12.5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 100 ? \"green\" : value <= 600 ? \"blue\" : \"red\"});\nvar value=data[5]; $(this.api().cell(row, 5).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 0 ? \"green\" : value <= 5 ? \"blue\" : \"red\"});\nvar value=data[6]; $(this.api().cell(row, 6).node()).css({'color':isNaN(parseFloat(value)) ? '' : value <= 5000 ? \"green\" : value <= 100000 ? \"blue\" : \"red\",'background-color':isNaN(parseFloat(value)) ? '' : value <= 10000 ? \"gray\" : \"yellow\"});\n}"}},"evals":["options.rowCallback"],"jsHooks":[]}</script>
</div>
</div>
<div id="时间维度-新股vs旧股" class="section level2">
<h2>时间维度-新股VS旧股</h2>
<div id="次新股" class="section level3">
<h3>次新股</h3>
<p>在IPO的进程中,次新股代表新型经济特征的公司,尤其是服务业,科技创新行业的公司不断的上市,这对于过去的投资者来说因为IPO数量不断的增多,对于市场上公司的认知存在很大的挑战!</p>
<div id="htmlwidget-b0227b54c03c60fe73b3" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-b0227b54c03c60fe73b3">{"x":{"filter":"top","filterHTML":"<tr>\n <td><\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"3.74\" data-max=\"773.19\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"-13.887\" data-max=\"440.4881\" data-scale=\"4\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"886.24\" data-max=\"8938059.14\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"-40.9\" data-max=\"79.42\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n<\/tr>","data":[["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","349","350","351","352","353","354","355","356","357","358","359","360","361","362","363","364","365","366","367","368","369","370","371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387","388","389","390","391","392","393","394","395","396","397","398","399","400","401","402","403","404","405","406","407","408","409","410","411","412","413","414","415","416","417","418","419","420","421","422","423","424","425","426","427","428","429","430","431","432","433","434","435","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","457","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","479","480","481","482","483","484","485","486","487","488","489","490","491","492","493","494","495","496"],["301026.SZ","688501.SH","688595.SH","688590.SH","301031.SZ","688308.SH","605162.SH","003043.SZ","605028.SH","603565.SH","605011.SH","605020.SH","688685.SH","688663.SH","688059.SH","688386.SH","688789.SH","300922.SZ","688819.SH","688510.SH","300876.SZ","001203.SZ","605336.SH","688127.SH","601568.SH","605006.SH","300919.SZ","301002.SZ","688359.SH","002996.SZ","300890.SZ","688529.SH","605377.SH","688699.SH","003009.SZ","300900.SZ","301005.SZ","688408.SH","601995.SH","688135.SH","605376.SH","003000.SZ","300965.SZ","688636.SH","300862.SZ","688682.SH","300875.SZ","688630.SH","605005.SH","603324.SH","688160.SH","688345.SH","688597.SH","688551.SH","688669.SH","688639.SH","605499.SH","688378.SH","688660.SH","003038.SZ","688239.SH","300899.SZ","688093.SH","605268.SH","688070.SH","688698.SH","688328.SH","300926.SZ","688533.SH","605300.SH","689009.SH","688611.SH","601156.SH","301015.SZ","605081.SH","688625.SH","605358.SH","688338.SH","688577.SH","300910.SZ","605055.SH","001201.SZ","300893.SZ","688219.SH","300985.SZ","688383.SH","688379.SH","605198.SH","300988.SZ","300917.SZ","301007.SZ","605208.SH","300990.SZ","688136.SH","688608.SH","601702.SH","688229.SH","003006.SZ","605169.SH","003005.SZ","688097.SH","300887.SZ","001205.SZ","300992.SZ","688578.SH","688569.SH","605333.SH","003013.SZ","003019.SZ","600905.SH","688286.SH","605116.SH","003040.SZ","605100.SH","300891.SZ","688618.SH","003017.SZ","003031.SZ","605289.SH","688513.SH","003007.SZ","301023.SZ","003021.SZ","688557.SH","688092.SH","300978.SZ","300989.SZ","300909.SZ","003002.SZ","605151.SH","605277.SH","688678.SH","601956.SH","002992.SZ","300972.SZ","300912.SZ","688038.SH","301019.SZ","688221.SH","688113.SH","688658.SH","605368.SH","300915.SZ","300940.SZ","605060.SH","688521.SH","605007.SH","688788.SH","301018.SZ","300949.SZ","300976.SZ","300863.SZ","300968.SZ","601686.SH","605089.SH","688425.SH","688538.SH","688616.SH","300975.SZ","605066.SH","688606.SH","603112.SH","603155.SH","603759.SH","688793.SH","003030.SZ","300971.SZ","688317.SH","605018.SH","605128.SH","300860.SZ","300929.SZ","688628.SH","300935.SZ","605155.SH","300878.SZ","688313.SH","300941.SZ","003001.SZ","300983.SZ","688661.SH","605500.SH","688517.SH","300880.SZ","300980.SZ","002997.SZ","688055.SH","688393.SH","002995.SZ","688662.SH","688633.SH","300933.SZ","688619.SH","003025.SZ","688215.SH","605090.SH","605218.SH","300969.SZ","688585.SH","003035.SZ","300998.SZ","605488.SH","605189.SH","300951.SZ","300923.SZ","300907.SZ","300918.SZ","603529.SH","688129.SH","688626.SH","605178.SH","688571.SH","605050.SH","688621.SH","688395.SH","300886.SZ","605398.SH","301000.SZ","605180.SH","300897.SZ","688217.SH","688668.SH","300906.SZ","605179.SH","605122.SH","688681.SH","605228.SH","002999.SZ","300973.SZ","605158.SH","300916.SZ","688330.SH","605123.SH","688156.SH","688468.SH","688687.SH","603836.SH","605088.SH","300868.SZ","603931.SH","688556.SH","688057.SH","003003.SZ","300991.SZ","605133.SH","688677.SH","688679.SH","688655.SH","003008.SZ","300955.SZ","688559.SH","003004.SZ","601279.SH","300905.SZ","003011.SZ","301022.SZ","605003.SH","301008.SZ","605016.SH","003023.SZ","603511.SH","003027.SZ","300884.SZ","688676.SH","300959.SZ","300928.SZ","300920.SZ","688565.SH","688216.SH","605177.SH","688079.SH","605186.SH","300932.SZ","605303.SH","605058.SH","003018.SZ","300947.SZ","300902.SZ","688367.SH","688201.SH","688550.SH","300961.SZ","300966.SZ","003012.SZ","688700.SH","688696.SH","688355.SH","300937.SZ","003010.SZ","300956.SZ","300883.SZ","605259.SH","688013.SH","688335.SH","003033.SZ","605077.SH","300903.SZ","003015.SZ","301017.SZ","300901.SZ","605255.SH","605298.SH","300882.SZ","605318.SH","688083.SH","301001.SZ","300950.SZ","688067.SH","300938.SZ","300995.SZ","605286.SH","688667.SH","300987.SZ","300993.SZ","300885.SZ","300861.SZ","003020.SZ","300877.SZ","003032.SZ","003037.SZ","300943.SZ","300889.SZ","301016.SZ","605366.SH","300952.SZ","688456.SH","300948.SZ","300898.SZ","003028.SZ","600032.SH","688087.SH","300960.SZ","688607.SH","003016.SZ","688109.SH","001202.SZ","003036.SZ","601963.SH","605008.SH","605339.SH","301003.SZ","688665.SH","605296.SH","601187.SH","300867.SZ","003039.SZ","688065.SH","300953.SZ","688131.SH","605068.SH","605099.SH","003026.SZ","300925.SZ","300881.SZ","300873.SZ","688260.SH","301012.SZ","688659.SH","003041.SZ","600906.SH","605183.SH","300977.SZ","688323.SH","300872.SZ","300986.SZ","300894.SZ","688095.SH","688613.SH","688276.SH","300946.SZ","300958.SZ","002998.SZ","688777.SH","301004.SZ","688617.SH","300984.SZ","605009.SH","688289.SH","688601.SH","688195.SH","300865.SZ","688689.SH","301010.SZ","300930.SZ","605338.SH","605136.SH","688315.SH","605369.SH","600916.SH","003029.SZ","300864.SZ","688560.SH","300879.SZ","688161.SH","688316.SH","300908.SZ","001206.SZ","300967.SZ","300927.SZ","002984.SZ","605258.SH","688301.SH","605388.SH","300942.SZ","300999.SZ","605299.SH","605266.SH","688609.SH","300869.SZ","605337.SH","300892.SZ","605117.SH","300982.SZ","605319.SH","688314.SH","688350.SH","688390.SH","688519.SH","688179.SH","003042.SZ","300888.SZ","605399.SH","605086.SH","605196.SH","301039.SZ","605080.SH","688017.SH","002993.SZ","300979.SZ","688656.SH","688799.SH","300939.SZ","688339.SH","688183.SH","300896.SZ","300921.SZ","001207.SZ","300963.SZ","300870.SZ","301009.SZ","300871.SZ","688319.SH","300895.SZ","301011.SZ","688117.SH","605378.SH","688575.SH","300970.SZ","605098.SH","601665.SH","300866.SZ","688076.SH","300962.SZ","605111.SH","300945.SZ","300957.SZ","003022.SZ","688226.SH","300936.SZ","601528.SH","300981.SZ","688269.SH","605389.SH","605287.SH","300913.SZ","300997.SZ","688329.SH","688056.SH","688191.SH","688686.SH","300859.SZ","688185.SH","001208.SZ","688680.SH","688596.SH","301013.SZ","605305.SH","688305.SH","688690.SH","688526.SH","688063.SH","300911.SZ","301021.SZ","688536.SH","688683.SH","688133.SH","300931.SZ","301020.SZ","688155.SH","301006.SZ","603171.SH","300996.SZ","688356.SH","688499.SH","300614.SZ","301027.SZ"],["N浩通","N青达","芯海科技","新致软件","C中熔","欧科亿","新中港","华亚智能","世茂能源","中谷物流","杭州热电","永和股份","迈信林","新风光","华锐精密","泛亚微透","宏华数科","天秦装备","天能股份","航亚科技","蒙泰高新","大中矿业","帅丰电器","蓝特光学","北元集团","山东玻纤","中伟股份","崧盛股份","三孚新科","顺博合金","翔丰华","豪森股份","华旺科技","明微电子","中天火箭","广联航空","超捷股份","中信博","中金公司","利扬芯片","博迁新材","劲仔食品","恒宇信通","智明达","蓝盾光电","霍莱沃","捷强装备","芯碁微装","合兴股份","盛剑环境","步科股份","博力威","煜邦电力","科威尔","聚石化学","华恒生物","东鹏饮料","奥来德","电气风电","鑫铂股份","航宇科技","上海凯鑫","世华科技","王力安防","纵横股份","伟创电气","深科达","博俊科技","上声电子","佳禾食品","九号公司-WD","杭州柯林","东航物流","百洋医药","太和水","呈和科技","立昂微","赛科希德","浙海德曼","瑞丰新材","迎丰股份","东瑞股份","松原股份","会通股份","致远新能","新益昌","华光新材","德利股份","津荣天宇","特发服务","德迈仕","永茂泰","同飞股份","科兴制药","恒玄科技","华峰铝业","博睿数据","百亚股份","洪通燃气","竞业达","博众精工","谱尼测试","盛航股份","泰福泵业","艾力斯-U","铁科轨道","沪光股份","地铁设计","宸展光电","三峡能源","敏芯股份","奥锐特","楚天龙","华丰股份","惠云钛业","三旺通信","大洋生物","中瓷电子","罗曼股份","苑东生物","直真科技","江南奕帆","兆威机电","兰剑智能","爱科科技","东箭科技","蕾奥规划","汇创达","壶化股份","西上海","新亚电子","福立旺","东贝集团","宝明科技","万辰生物","凯龙高科","中科通达","宁波色母","前沿生物-U","联测科技","悦康药业","蓝天燃气","海融科技","南极光","联德股份","芯原股份-U","五洲特纸","科思科技","申菱环境","奥雅设计","达瑞电子","卡倍亿","格林精密","友发集团","味知香","铁建重工","和辉光电-U","西力科技","商络电子","天正电气","奥泰生物","华翔股份","新亚强","海天股份","倍轻松","祖名股份","博亚精工","之江生物","长华股份","上海沿浦","锋尚文化","华骐环保","优利德","盈建科","西大门","维康药业","仕佳光子","创识科技","中岩大地","尤安设计","和林微纳","森林包装","金冠电气","迦南智能","祥源新材","瑞鹄模具","龙腾光电","安必平","天地在线","富信科技","星球石墨","中辰股份","罗普特","思进智能","瑞晟智能","九丰能源","伟时电子","恒帅股份","上纬新材","南网能源","宁波方正","福莱新材","富春染织","博硕科技","研奥股份","康平科技","南山智尚","爱玛科技","东来技术","翔宇医疗","时空科技","杭华股份","福然德","阳光诺和","正弦电气","华业香料","新炬网络","肇民科技","华生科技","山科智能","睿昂基因","鼎通科技","日月明","一鸣食品","四方新材","科汇股份","神通科技","天禾股份","立高食品","华达新材","朗特智能","宏力达","派克新材","路德环境","科美诊断","凯因科技","海程邦达","冠盛股份","杰美特","格林达","高测股份","金达莱","天元股份","创益通","嵘泰股份","海泰新光","通源环境","迅捷兴","开普检测","嘉亨家化","海目星","声迅股份","英利汽车","宝丽迪","海象新材","海泰科","众望布艺","宏昌科技","百龙创园","彩虹集团","爱慕股份","同兴环保","狄耐克","金盘科技","线上线下","华安鑫创","润阳科技","力源科技","气派科技","东亚药业","美迪凯","健麾信息","三友联众","园林股份","澳弘电子","金富科技","德必集团","国安达","工大高科","信安世纪","瑞联新材","深水海纳","共同药业","东鹏控股","东威科技","极米科技","明志科技","药易购","若羽臣","英力股份","龙利得","绿田机械","天臣医疗","复洁环保","征和工业","华康股份","科翔股份","日久光电","漱玉平民","中胤时尚","天普股份","必得科技","万胜智能","法狮龙","中望软件","凯淳股份","德固特","爱威科技","信测标准","奇德新材","同力日升","菱电电控","川网传媒","玉马遮阳","海昌新材","美畅股份","立方制药","金春股份","传智教育","三和管桩","春晖智控","爱克股份","雷尔伟","宏柏新材","恒辉安防","有研粉材","冠中生态","熊猫乳品","振邦智能","浙江新能","英科再生","通业科技","康众医疗","欣贺股份","品茗股份","炬申股份","泰坦股份","重庆银行","长鸿高科","南侨食品","江苏博云","四方光电","神农集团","厦门银行","圣元环保","顺控发展","凯赛生物","震裕科技","皓元医药","明新旭腾","共创草坪","中晶科技","法本信息","盛德鑫泰","海晨股份","昀冢科技","扬电科技","元琛科技","真爱美家","财达证券","确成股份","深圳瑞捷","瑞华泰","天阳科技","志特新材","火星人","福昕软件","奥精医疗","百克生物","恒而达","建工修复","优彩资源","中控技术","嘉益股份","惠泰医疗","金沃股份","豪悦护理","圣湘生物","力芯微","腾景科技","大宏立","银河微电","晶雪节能","屹通新材","巴比食品","丽人丽妆","诺禾致源","拱东医疗","中国黄金","吉大正元","南大环境","明冠新材","大叶股份","威高骨科","青云科技-U","仲景食品","依依股份","晓鸣股份","江天化学","森麒麟","协和电子","奕瑞科技","均瑶健康","易瑞生物","金龙鱼","舒华体育","健之佳","九联科技","康泰医学","李子园","品渥食品","德业股份","苏文电能","无锡振华","康拓医疗","富淼科技","固德威","南亚新材","阿拉丁","中农联合","稳健医疗","晨光新材","龙高股份","华通线缆","中集车辆","浙江自然","绿的谐波","奥海科技","华利集团","浩欧博","华纳药厂","秋田微","亿华通-U","生益电子","爱美客","南凌科技","联科科技","中洲特材","欧陆通","可靠股份","回盛生物","欧林生物","铜牛信息","华立科技","圣诺生物","野马电池","亚辉龙","华绿生物","行动教育","齐鲁银行","安克创新","诺泰生物","中金辐照","新洁能","曼卡龙","贝泰妮","联泓新科","威腾电气","中英科技","瑞丰银行","中红医疗","凯立新材","长龄液压","德才股份","兆龙互连","欢乐家","艾隆科技","莱伯泰科","智洋创新","奥普特","*ST西域","康希诺-U","华菱线缆","海优新材","正帆科技","利和兴","中际联合","科德数控","纳微科技","科前生物","派能科技","亿田智能","英诺激光","思瑞浦","莱尔科技","泰坦科技","通用电梯","密封科技","先惠技术","迈拓股份","税友股份","普联软件","键凯科技","利元亨","百川畅银","C华蓝"],["小金属","环境保护","半导体","软件服务","电气设备","机械基件","供气供热","专用机械","供气供热","仓储物流","供气供热","化工原料","航空","电气设备","机械基件","化工原料","专用机械","专用机械","电气设备","航空","化纤","普钢","家用电器","元器件","化工原料","玻璃","化工原料","电气设备","化工原料","铝","矿物制品","汽车配件","造纸","半导体","航空","航空","汽车配件","电气设备","证券","半导体","小金属","食品","元器件","元器件","电器仪表","软件服务","专用机械","专用机械","汽车配件","环境保护","电器仪表","电气设备","电器仪表","专用机械","化工原料","化工原料","软饮料","专用机械","电气设备","铝","航空","环境保护","化工原料","家居用品","航空","电气设备","元器件","汽车配件","元器件","食品","摩托车","电气设备","空运","医药商业","环境保护","化工原料","半导体","医疗保健","机床制造","化工原料","纺织","农业综合","汽车配件","塑料","汽车配件","专用机械","小金属","软饮料","机械基件","房产服务","汽车配件","汽车配件","专用机械","生物制药","半导体","铝","软件服务","造纸","供气供热","软件服务","专用机械","综合类","水运","专用机械","化学制药","运输设备","汽车配件","建筑工程","元器件","新型电力","元器件","化学制药","元器件","机械基件","化工原料","通信设备","化工原料","元器件","建筑工程","化学制药","软件服务","电气设备","元器件","专用机械","专用机械","汽车配件","建筑工程","元器件","化工原料","汽车配件","电气设备","元器件","机械基件","元器件","种植业","环境保护","软件服务","塑料","生物制药","专用机械","化学制药","供气供热","食品","元器件","机械基件","半导体","造纸","通信设备","专用机械","建筑工程","元器件","汽车配件","元器件","钢加工","食品","专用机械","半导体","电器仪表","元器件","电气设备","生物制药","机械基件","化工原料","水务","家居用品","食品","机械基件","生物制药","汽车配件","汽车配件","文教休闲","环境保护","电器仪表","软件服务","化工原料","中成药","通信设备","软件服务","建筑工程","建筑工程","元器件","造纸","电气设备","电器仪表","塑料","汽车配件","元器件","医疗保健","互联网","半导体","专用机械","电气设备","软件服务","机械基件","专用机械","供气供热","元器件","汽车配件","化工原料","新型电力","汽车配件","塑料","纺织","元器件","运输设备","电气设备","纺织","摩托车","染料涂料","医疗保健","装修装饰","染料涂料","仓储物流","医疗保健","电气设备","化工原料","软件服务","塑料","塑料","电器仪表","生物制药","元器件","专用机械","乳制品","其他建材","电气设备","汽车配件","批发业","食品","钢加工","元器件","电气设备","钢加工","环境保护","医疗保健","生物制药","仓储物流","汽车配件","通信设备","化工原料","专用机械","环境保护","广告包装","元器件","汽车配件","医疗保健","环境保护","元器件","电气设备","塑料","专用机械","软件服务","汽车配件","塑料","家居用品","专用机械","纺织","电气设备","食品","家用电器","服饰","环境保护","通信设备","电气设备","通信设备","汽车配件","塑料","环境保护","半导体","化学制药","半导体","医疗保健","元器件","建筑工程","元器件","塑料","综合类","专用机械","软件服务","通信设备","化工原料","环境保护","化学制药","陶瓷","专用机械","IT设备","机械基件","医药商业","互联网","IT设备","造纸","农用机械","医疗保健","环境保护","机械基件","食品","元器件","元器件","医药商业","服饰","汽车配件","运输设备","电器仪表","装修装饰","软件服务","互联网","专用机械","医疗保健","综合类","塑料","运输设备","汽车配件","互联网","化工原料","机械基件","矿物制品","化学制药","纺织","文教休闲","水泥","机械基件","电气设备","运输设备","化工原料","纺织","铜","环境保护","乳制品","元器件","新型电力","环境保护","运输设备","医疗保健","服饰","软件服务","仓储物流","纺织机械","银行","塑料","食品","塑料","电器仪表","农业综合","银行","环境保护","水务","化纤","机械基件","化学制药","汽车配件","文教休闲","半导体","软件服务","钢加工","仓储物流","元器件","电气设备","环境保护","纺织","证券","化工原料","建筑工程","塑料","软件服务","铝","家用电器","软件服务","医疗保健","生物制药","机械基件","环境保护","化纤","软件服务","家居用品","医疗保健","机械基件","造纸","医疗保健","半导体","元器件","专用机械","元器件","其他建材","小金属","食品","其他商业","医疗保健","医疗保健","黄金","软件服务","环境保护","电气设备","农用机械","医疗保健","软件服务","食品","造纸","农业综合","化工原料","汽车配件","元器件","医疗保健","软饮料","生物制药","食品","文教休闲","医药商业","通信设备","医疗保健","乳制品","乳制品","家用电器","建筑工程","汽车配件","医疗保健","化工原料","电气设备","元器件","化学制药","农药化肥","医疗保健","化工原料","矿物制品","电气设备","汽车整车","纺织","机械基件","元器件","服饰","生物制药","化学制药","元器件","汽车配件","元器件","医疗保健","互联网","化工原料","小金属","元器件","造纸","农业综合","生物制药","软件服务","文教休闲","生物制药","电气设备","医疗保健","种植业","文教休闲","银行","元器件","生物制药","综合类","半导体","服饰","日用化工","化工原料","电气设备","元器件","银行","医疗保健","化工原料","机械基件","装修装饰","电气设备","软饮料","医疗保健","电器仪表","软件服务","电器仪表","旅游服务","生物制药","电气设备","塑料","专用机械","专用机械","专用机械","机床制造","化工原料","农业综合","电气设备","家用电器","元器件","半导体","化工原料","化工原料","运输设备","机械基件","专用机械","电器仪表","软件服务","软件服务","化学制药","专用机械","环境保护","建筑工程"],[97.45,24.83,90.32,23.88,143.86,83.19,17.03,57.49,29.9,30.67,27.86,16.08,27.73,25.82,180.52,67.95,239.5,34.7,45.83,23.72,38,22.84,30.96,26.81,8.96,14.92,152,90.99,42.77,17.91,58.77,26.22,18.3,335,52.63,32.7,55.6,231.79,58.48,47.52,86.3,12.81,79.05,114.85,38.27,160.38,68.01,73.6,15.58,49.45,42.92,73.14,12.8,50,34.05,56.26,246.7,72.2,9.7,30.01,44.5,40.9,38.57,12.87,33.19,23.39,43.74,21.33,21.5,29.58,64.33,46.2,21,32.99,38.23,52.82,123.16,52.26,48.8,81.89,9.02,38.75,21.95,19.8,29.48,118,24.09,21.85,37.05,25.69,19.14,22.65,74.82,34.38,276.6,7.12,72.8,22.32,14.01,36.28,33.55,81.01,28.02,28.34,31,18.4,13.41,19.98,25.83,6.61,129.68,13.79,27.67,40.4,18.69,38.8,38.99,52.62,26.62,45,18.44,77.26,59.91,32.26,32.67,17.26,46.12,40.85,11.94,18.29,20.24,22.03,7.49,15.02,16.22,34.84,27.2,47.63,19.19,67.75,21.88,13.68,59.54,45.05,15.57,63.92,18.95,129.85,24.65,50.77,88.11,74.61,15.55,10.98,80.7,5.54,3.74,14.2,17.65,13.21,140.75,10.63,49.8,19.34,171,27.64,34.3,58.72,13.13,38.95,51,29.54,34.59,68.3,21.54,47.23,14.93,48.55,23.62,90.62,89.7,17.81,13.35,21.99,40.92,16.03,7.33,36.28,28.72,33.99,57.01,9.98,26.72,26.64,41.07,31.09,13.73,35.45,10.16,9.77,29.3,28.43,23.2,83.7,29.21,28.13,9.85,51.85,18.6,76,36.5,8.9,10.67,81.39,28,29.7,41.26,69.78,35.4,33.5,85.39,46.02,34.69,17.17,24.92,18.23,8.99,7.38,143,8.03,61.45,74.79,71.02,18.21,20.44,27.94,20.29,15.17,28.89,32.39,22.18,29.48,13.3,33.78,20,109.13,12.87,18.71,32.37,44.71,42.4,26.28,9.1,27.98,31.23,40.13,24.46,47.24,28.82,28.37,32.82,26.62,23.47,16.11,58.16,49.99,34.14,17.53,61.9,31.86,16.79,39.57,31.26,17.69,22.81,11.13,31.66,22.2,22.19,62.68,90.15,23.55,46.15,15.01,57,618.39,24.91,53.55,24.66,23.8,11.01,31.75,30.11,32.72,28.84,43.7,28.96,12.3,22.83,15.37,14.55,18.7,15.18,14.3,527,35.89,40.3,31.27,46.2,28.53,18.85,90.86,31.4,24.46,21.25,76.5,49.62,34.03,28.57,12.32,22.12,22.38,27.47,11.88,26.1,29.3,29.85,35.85,41.3,10.92,109,23.38,49.88,16.03,72.87,18.33,14.12,9.9,21.2,38.59,56.95,110.14,43.92,8.92,30.17,38.51,112.11,105.48,328,32.83,37.41,82.98,24.48,30.41,41.52,18.75,34.72,13.27,25.13,15.28,17.88,71.25,35.28,36.11,46.4,74.48,219.8,85.5,104,54.99,33.3,10.67,96.81,21.8,402,44.02,66.41,87,152.99,20.43,27.78,31.2,25.5,25.22,31.67,27.73,41,117,15.45,24.73,51.76,32.99,21.46,92.5,66.36,60.95,58.19,15.24,32.19,33.39,29.5,312,20.01,29.5,80.6,16.86,81.84,15.16,62.12,54.57,44.41,134.98,63.38,16.18,100.26,24.52,348.98,37.73,118.6,25.32,105.44,24.03,25.15,10.93,12.58,60,125.11,38.1,99.96,71.85,56.55,53.73,278.98,15.15,773.19,25.28,24.46,32.69,54.3,30.01,34.67,36.42,34.48,56.1,42.75,39.37,41.25,22.24,58.2,7.85,127.9,56.88,21.3,150.44,19.75,259.29,33.54,15.67,44.13,12.85,110.9,123,53.83,34.05,25,20.47,62,54.36,18.68,329,23.89,598.88,11.86,249.36,21.21,26.6,49.9,103.56,105,32.6,209.6,62.27,46.31,536.01,16.02,268.99,12.66,25.81,131,28.16,49.45,34.86,204.9,223,59.11,25.3],[440.4881,134.9101,19.9947,13.4981,12.2941,11.5895,10.0129,10.0077,10.0074,10.0072,9.9882,9.9863,9.7783,8.5786,8.4204,7.1598,6.4492,6.4417,4.8741,4.7703,4.5392,4.3876,4.2775,4.157,3.8239,3.6831,3.6411,3.3742,3.3341,3.2872,3.2139,3.1471,3.0986,3.0452,2.9538,2.8302,2.7536,2.5166,2.5066,2.458,2.4576,2.3981,2.3433,2.2616,2.1896,2.1529,2.0711,2.038,1.9634,1.9588,1.9477,1.9373,1.9108,1.8953,1.8851,1.736,1.69,1.6758,1.5707,1.5567,1.5518,1.5392,1.4733,1.3386,1.2817,1.2554,1.2266,1.186,1.1765,1.1628,1.1001,1.072,1.0587,1.0413,1.0307,1.0136,1.0088,1.005,0.9725,0.9368,0.8949,0.8852,0.8732,0.866,0.8553,0.8461,0.795,0.7377,0.7067,0.6661,0.6309,0.6219,0.6186,0.5851,0.5818,0.565,0.5525,0.5405,0.5022,0.4708,0.4491,0.4464,0.4301,0.4252,0.3886,0.3819,0.3743,0.3516,0.3497,0.3035,0.3016,0.2909,0.29,0.273,0.2682,0.2325,0.2314,0.2286,0.2259,0.2227,0.2174,0.2075,0.2007,0.1863,0.184,0.1741,0.1738,0.1717,0.1678,0.1643,0.1484,0.1364,0.1337,0.1333,0.1235,0.1149,0.1104,0.1051,0.1043,0.1034,0.0915,0.0732,0.0672,0.0666,0.0643,0.0626,0.0528,0.0462,0.0406,0.0394,0.0227,0.0134,0,0,0,0,0,0,-0.0566,-0.0756,-0.0923,-0.094,-0.1003,-0.1033,-0.1052,-0.1084,-0.1165,-0.1361,-0.1521,-0.1538,-0.1566,-0.169,-0.1732,-0.1754,-0.1854,-0.1902,-0.2005,-0.2055,-0.2112,-0.2202,-0.2225,-0.2241,-0.2242,-0.2269,-0.2438,-0.2489,-0.2721,-0.2749,-0.2778,-0.2933,-0.2973,-0.2997,-0.3357,-0.3367,-0.3397,-0.3526,-0.3628,-0.3654,-0.3922,-0.4077,-0.4079,-0.4203,-0.4719,-0.4756,-0.477,-0.4952,-0.5051,-0.518,-0.5348,-0.5366,-0.545,-0.5587,-0.5592,-0.562,-0.5682,-0.5691,-0.5783,-0.5841,-0.5897,-0.5935,-0.5937,-0.6262,-0.6302,-0.6366,-0.638,-0.654,-0.663,-0.6729,-0.6944,-0.7417,-0.743,-0.7432,-0.7546,-0.7629,-0.7767,-0.7813,-0.7824,-0.7848,-0.7898,-0.7963,-0.805,-0.8075,-0.8203,-0.8221,-0.8428,-0.845,-0.8475,-0.8479,-0.8576,-0.8647,-0.8651,-0.8676,-0.8715,-0.8856,-0.8886,-0.8891,-0.8914,-0.9228,-0.9282,-0.9427,-0.9656,-0.9673,-0.9705,-0.9834,-1.0043,-1.0099,-1.0148,-1.0164,-1.055,-1.0559,-1.0607,-1.075,-1.1072,-1.1179,-1.127,-1.1545,-1.1552,-1.1576,-1.1581,-1.1668,-1.173,-1.175,-1.1777,-1.185,-1.2132,-1.2157,-1.2292,-1.2357,-1.2415,-1.2448,-1.2556,-1.2749,-1.2787,-1.2971,-1.3005,-1.3098,-1.3288,-1.3633,-1.3823,-1.4112,-1.4228,-1.4233,-1.4286,-1.4473,-1.453,-1.4552,-1.467,-1.4808,-1.5135,-1.5188,-1.5666,-1.5921,-1.5982,-1.609,-1.6204,-1.633,-1.6452,-1.6474,-1.6523,-1.676,-1.6889,-1.7128,-1.7174,-1.737,-1.7689,-1.7767,-1.7769,-1.7808,-1.7836,-1.7986,-1.8018,-1.806,-1.811,-1.8371,-1.8454,-1.8737,-1.8763,-1.8831,-1.8973,-1.9065,-1.9118,-1.9496,-1.9643,-1.978,-1.9818,-1.9852,-2.0017,-2.0158,-2.0281,-2.0292,-2.0681,-2.1347,-2.1583,-2.1872,-2.1908,-2.1909,-2.1972,-2.2108,-2.2179,-2.2393,-2.2417,-2.2634,-2.2715,-2.2733,-2.2746,-2.2829,-2.3111,-2.3192,-2.3291,-2.3615,-2.3747,-2.3788,-2.3798,-2.4172,-2.4248,-2.4379,-2.4673,-2.4773,-2.4796,-2.4821,-2.4921,-2.5,-2.5229,-2.5502,-2.5538,-2.565,-2.5665,-2.5812,-2.5851,-2.5994,-2.6152,-2.6269,-2.6757,-2.6828,-2.7122,-2.729,-2.7411,-2.7441,-2.7492,-2.7948,-2.8007,-2.8189,-2.8641,-2.8647,-2.8799,-2.8802,-2.9181,-2.9449,-2.9527,-3.0039,-3.0138,-3.0455,-3.0739,-3.1138,-3.1304,-3.1596,-3.166,-3.2068,-3.2074,-3.285,-3.2927,-3.2998,-3.3436,-3.3599,-3.3794,-3.3972,-3.4347,-3.4954,-3.5228,-3.557,-3.5806,-3.6233,-3.6239,-3.626,-3.6619,-3.6952,-3.7008,-3.7397,-3.7746,-3.8141,-3.9612,-4.0316,-4.0356,-4.0369,-4.0404,-4.0458,-4.0698,-4.0966,-4.1502,-4.1514,-4.1804,-4.2424,-4.2697,-4.2698,-4.312,-4.3634,-4.39,-4.5094,-4.5219,-4.5319,-4.5447,-4.6512,-4.7257,-4.7552,-4.7982,-4.835,-4.9517,-5.1309,-5.1777,-5.1873,-5.236,-5.239,-5.3472,-5.3662,-5.7333,-5.774,-5.8313,-5.8545,-6.0823,-6.3218,-6.8444,-6.9486,-7.008,-7.0895,-7.1304,-7.1488,-7.1848,-7.4247,-7.4793,-8.5417,-9.7298,-10.1778,-10.3047,-10.359,-11.9207,-13.887],[198214.78,155370.95,53936.33,151881.38,95387.26,15726,14390.4,45737,2440.6,36500.93,271238.11,3409.44,62979.58,62746.99,6456.9,10153.57,17381.68,40511.52,78762.42,41393.74,54025.18,436078.27,70311.28,29254.38,220773.07,177638.21,36554.09,14896.05,13959.95,86247.31,34293.82,15534.68,72414.71,20651.93,29327.51,36014.5,14943,7712.7,300480.2,25507.75,17441.1,22041.92,8037.5,7317.7,21939.12,7421.13,5355.88,30773.57,22689,47630.29,11690.5,20830.67,22541.79,13435.06,6194.44,8382.28,23287.06,4488.02,621620.95,34429.23,73809.04,19377.62,13239.89,20596.77,9721.59,66335.57,21589.2,20754.27,25419.74,34950.88,10497.73,5465.85,75014.26,77837.28,3758.67,21031.2,65535.18,2270.63,886.24,11416.24,64779.25,19029.27,13698.97,58575.56,17727.86,9281.87,4566.78,4941,14164.68,5078.11,28402.73,27003.66,4914.66,10132.33,13674.97,122099.59,1819.53,11173.11,10368.2,2972.49,12759.17,16822.11,22993.92,16065.18,16533.34,3447.9,6928,11675.75,3069.8,8938059.14,4209.25,5175,65980.14,4979.82,203187.32,3163.35,2454,12687.14,4726.67,2732.37,6126.1,6397.5,14590.49,2951.65,5199.05,13948.56,2288.1,5524.03,8930.32,10369.36,6224,11526.41,30620.36,7523.89,9661.46,8553.87,67132.18,13064.18,15631.98,7658.6,9843.7,16653,12282.22,18525.43,7265.39,20621.85,7864.99,7064,173026.12,2695.5,13335.12,5677.05,29910.88,17746.63,14394.33,345993.51,640960.98,10945.42,22970.41,7214.4,2436.34,8606,20658.98,23343.61,56977.93,5977.88,8806.54,10611.03,19735,5542.23,5870.1,8893.06,13110.47,3936.26,9720.99,6920.66,14862.14,20244.82,8302.79,4410.62,15512.79,13396.71,9168.79,8579.23,7986.85,13557,72397.78,5105.91,2367.6,16573.7,7747.33,28778.72,15718.31,7237.45,1169.07,20257.97,11452,5882.31,14291.34,364987.1,15565.78,25835.74,17550.76,5463.43,5043,4443.51,28690.4,48683.23,9456.82,22762.77,5239,18813.95,7959,6746.36,8750.57,5370.62,3518,3741.96,16103.66,3021.77,3920.7,12650.14,6105.95,21533.78,7928.6,10025.07,21092.17,17809.66,8393.67,14635.7,4423.5,3309.82,7542,2001.12,13519.9,8171.39,15168.29,5991.99,7666.59,20440.57,16912.9,5742.15,13660,10356.45,8597.94,5032.3,4881.64,15254.95,4521.36,11201.44,28813.28,4973.12,78486.47,11480.1,6106.51,11188.23,4686.25,5728.33,15749.13,4378.1,36803.41,10008.25,16375.05,12572.96,6889.75,20445.54,6143.16,10441.25,22312.42,7940.53,27988.81,16446.06,7748.85,16494.09,11006,13750.93,5346.76,7202.16,12147.3,11837.35,3315.14,16580.85,28988.04,43202.98,19636.22,5711.29,12836.63,16412.86,7067,11731.34,26549,15159.9,3869.15,1991.13,8584.47,6585.6,15697.81,12453,53670.57,18546.95,9679.75,6572.2,12728.94,6464.21,2849.24,9879.2,17451.44,8377.76,7572.91,9694,17460.24,4942.57,24191.66,24571.93,19285.97,20590.72,6396,10425.58,66152.15,23961,11084.63,12890.72,23193.37,35756.09,14604.16,14198.27,64466.48,13932.14,15790.66,210619.32,29998.35,9444.48,9381.82,83135.32,6755.95,12663.38,29479.03,151235.57,40899.98,33012.72,8102,6915.84,18097.29,141499.54,24788.87,71063.28,11616.36,17670.94,6319.46,5102.35,9338,29358.22,36988.89,30504.45,9011.79,10916.47,37160.94,22325.06,13218.69,742018.22,44119,12891.55,19710.65,30604.68,29609.74,22181.14,2470.2,6591.5,10328.19,9891.55,44017.21,63745.58,10222.35,26212.31,2769.29,6165,10666.7,7940.28,11795.73,11023.73,12122.32,30988.26,52116.35,14917.47,12648,24308.95,18739.63,9222,112168.86,29594.93,14241.18,54320.97,16784.75,29128.91,2976.06,14898.86,13114.88,29812.05,22393.57,15153.58,11936.86,3393.6,43321,37195.7,143262.04,47157.38,6049.45,110019.07,18983.8,26644.54,10299.76,18789.09,22417.7,41422.49,6845.94,16975.61,13329.53,13653.44,11274.84,17808.89,20321.14,71593.63,33991.51,76006.92,324057.7,11934.92,12509.39,30500.75,20805.12,7847.06,55236.36,16298,3339.42,71250,22634.32,27579.5,68153.47,34398.65,8351,49305.55,17951.75,19730.4,34004.06,52542.02,12128.99,59936.34,11647.6,38774.35,11152.66,905316.61,21690.51,19119.49,56718.97,47143.37,58913.13,19467.85,154643.72,48467.83,16488.15,596922.58,31087.12,11359.91,21972.57,47907.28,35624.1,152175.49,12552.14,7629.69,21977.94,7982.05,34761.38,15352.42,418005.5,8765.22,39922.49,73908.33,11787.19,26790.22,31360.57,46154.4,30494.25,17508.48,96491,3472.19,36397.78,11754.29,82912.88,96387.33,10353.76,19162.51,216972.63,59305.63,15971.76,35583.97,99602.52,164527.44],[79.42,14.26,15.05,2.84,15.75,8.64,1.55,5.23,2.72,2.79,2.53,1.46,2.47,2.04,14.02,4.54,14.51,2.1,2.13,1.08,1.65,0.96,1.27,1.07,0.33,0.53,5.34,2.97,1.38,0.57,1.83,0.8,0.55,9.9,1.51,0.9,1.49,5.69,1.43,1.14,2.07,0.3,1.81,2.54,0.82,3.38,1.38,1.47,0.3,0.95,0.82,1.39,0.24,0.93,0.63,0.96,4.1,1.19,0.15,0.46,0.68,0.62,0.56,0.17,0.42,0.29,0.53,0.25,0.25,0.34,0.7,0.49,0.22,0.34,0.39,0.53,1.23,0.52,0.47,0.76,0.08,0.34,0.19,0.17,0.25,0.99,0.19,0.16,0.26,0.17,0.12,0.14,0.46,0.2,1.6,0.04,0.4,0.12,0.07,0.17,0.15,0.36,0.12,0.12,0.12,0.07,0.05,0.07,0.09,0.02,0.39,0.04,0.08,0.11,0.05,0.09,0.09,0.12,0.06,0.1,0.04,0.16,0.12,0.06,0.06,0.03,0.08,0.07,0.02,0.03,0.03,0.03,0.01,0.02,0.02,0.04,0.03,0.05,0.02,0.07,0.02,0.01,0.04,0.03,0.01,0.04,0.01,0.06,0.01,0.02,0.02,0.01,0,0,0,0,0,0,-0.01,-0.01,-0.13,-0.01,-0.05,-0.02,-0.18,-0.03,-0.04,-0.08,-0.02,-0.06,-0.08,-0.05,-0.06,-0.12,-0.04,-0.09,-0.03,-0.1,-0.05,-0.2,-0.2,-0.04,-0.03,-0.05,-0.1,-0.04,-0.02,-0.1,-0.08,-0.1,-0.17,-0.03,-0.09,-0.09,-0.14,-0.11,-0.05,-0.13,-0.04,-0.04,-0.12,-0.12,-0.11,-0.4,-0.14,-0.14,-0.05,-0.27,-0.1,-0.41,-0.2,-0.05,-0.06,-0.46,-0.16,-0.17,-0.24,-0.41,-0.21,-0.2,-0.51,-0.29,-0.22,-0.11,-0.16,-0.12,-0.06,-0.05,-1,-0.06,-0.46,-0.56,-0.54,-0.14,-0.16,-0.22,-0.16,-0.12,-0.23,-0.26,-0.18,-0.24,-0.11,-0.28,-0.17,-0.93,-0.11,-0.16,-0.28,-0.39,-0.37,-0.23,-0.08,-0.25,-0.28,-0.36,-0.22,-0.44,-0.27,-0.27,-0.32,-0.26,-0.23,-0.16,-0.59,-0.51,-0.35,-0.18,-0.66,-0.34,-0.18,-0.43,-0.35,-0.2,-0.26,-0.13,-0.37,-0.26,-0.26,-0.74,-1.07,-0.28,-0.55,-0.18,-0.7,-7.61,-0.31,-0.67,-0.31,-0.3,-0.14,-0.41,-0.39,-0.43,-0.38,-0.58,-0.39,-0.17,-0.32,-0.22,-0.21,-0.27,-0.22,-0.21,-7.77,-0.53,-0.6,-0.47,-0.71,-0.44,-0.3,-1.47,-0.51,-0.4,-0.35,-1.27,-0.83,-0.57,-0.48,-0.21,-0.38,-0.39,-0.48,-0.21,-0.47,-0.53,-0.54,-0.65,-0.75,-0.2,-2,-0.43,-0.92,-0.3,-1.37,-0.35,-0.27,-0.19,-0.41,-0.75,-1.11,-2.19,-0.88,-0.18,-0.61,-0.78,-2.29,-2.17,-6.79,-0.68,-0.79,-1.81,-0.54,-0.68,-0.93,-0.42,-0.78,-0.3,-0.57,-0.35,-0.41,-1.65,-0.82,-0.84,-1.08,-1.74,-5.2,-2.03,-2.48,-1.33,-0.81,-0.26,-2.36,-0.54,-9.99,-1.1,-1.68,-2.21,-3.89,-0.52,-0.71,-0.8,-0.66,-0.66,-0.83,-0.73,-1.08,-3.1,-0.41,-0.66,-1.39,-0.89,-0.59,-2.55,-1.85,-1.71,-1.64,-0.43,-0.91,-0.96,-0.85,-9.05,-0.59,-0.87,-2.39,-0.5,-2.46,-0.46,-1.89,-1.69,-1.38,-4.24,-2.01,-0.52,-3.24,-0.8,-11.41,-1.25,-3.93,-0.86,-3.59,-0.82,-0.87,-0.38,-0.44,-2.11,-4.45,-1.38,-3.65,-2.65,-2.1,-2.02,-10.49,-0.57,-29.39,-0.97,-0.94,-1.27,-2.13,-1.19,-1.43,-1.53,-1.45,-2.36,-1.8,-1.66,-1.75,-0.95,-2.52,-0.34,-5.58,-2.52,-0.95,-6.71,-0.89,-11.83,-1.54,-0.74,-2.09,-0.61,-5.28,-6,-2.67,-1.7,-1.26,-1.04,-3.23,-2.94,-1.02,-18,-1.32,-33.11,-0.67,-14.14,-1.29,-1.63,-3.09,-6.44,-6.8,-2.2,-15.4,-4.65,-3.49,-40.9,-1.23,-20.71,-0.98,-2.07,-10.59,-2.63,-5.33,-3.95,-23.54,-25.77,-8,-4.08]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>代码<\/th>\n <th>公司名称<\/th>\n <th>行业<\/th>\n <th>收盘价<\/th>\n <th>涨跌幅<\/th>\n <th>交易量<\/th>\n <th>价格变化<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":15,"autoWidth":true,"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0}],"order":[],"orderClasses":false,"orderCellsTop":true,"lengthMenu":[10,15,25,50,100],"rowCallback":"function(row, data, displayNum, displayIndex, dataIndex) {\nvar value=data[4]; $(this.api().cell(row, 4).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 12.5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 100 ? \"green\" : value <= 600 ? \"blue\" : \"red\"});\nvar value=data[5]; $(this.api().cell(row, 5).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 0 ? \"green\" : value <= 5 ? \"blue\" : \"red\"});\nvar value=data[6]; $(this.api().cell(row, 6).node()).css({'color':isNaN(parseFloat(value)) ? '' : value <= 5000 ? \"green\" : value <= 100000 ? \"blue\" : \"red\",'background-color':isNaN(parseFloat(value)) ? '' : value <= 10000 ? \"gray\" : \"yellow\"});\n}"}},"evals":["options.rowCallback"],"jsHooks":[]}</script>
</div>
<div id="热门老股" class="section level3">
<h3>热门老股</h3>
<p>过去呈现出大盘牛的特征,而现在呈现出的特点指数牛,板块牛的行情,一个板块一旦坐在了风口浪尖,那么这个板块的股票将出现持续性较强的拉升周期!</p>
<div id="htmlwidget-85be649161a2b923d267" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-85be649161a2b923d267">{"x":{"filter":"top","filterHTML":"<tr>\n <td><\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"3.06\" data-max=\"1955.9\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"-5.239\" data-max=\"9.6142\" data-scale=\"4\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2436.34\" data-max=\"828341.42\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"-42.09\" data-max=\"10.56\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n<\/tr>","data":[["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"],["300142.SZ","300357.SZ","002304.SZ","300841.SZ","000534.SZ","688336.SH","002581.SZ","300009.SZ","002646.SZ","603718.SH","002332.SZ","688136.SH","300683.SZ","002550.SZ","600779.SH","688221.SH","300485.SZ","600702.SH","300149.SZ","600645.SH","688606.SH","688317.SH","688488.SH","688098.SH","688177.SH","688278.SH","688520.SH","000518.SZ","600867.SH","688217.SH","688687.SH","300122.SZ","300289.SZ","002038.SZ","300239.SZ","600721.SH","300583.SZ","000931.SZ","600809.SH","603369.SH","000858.SZ","688180.SH","000504.SZ","002252.SZ","300601.SZ","600199.SH","300255.SZ","002007.SZ","600519.SH","600197.SH","300294.SZ","603025.SH","000860.SZ","002030.SZ","688276.SH","603198.SH","000596.SZ","688363.SH","600559.SH","000568.SZ","603919.SH","300381.SZ","603589.SH","603087.SH","300942.SZ","300204.SZ","000661.SZ","688656.SH","002821.SZ","000799.SZ","000403.SZ","002880.SZ","688366.SH","688319.SH","688117.SH","603566.SH","688076.SH","000995.SZ","300685.SZ","600161.SH","000806.SZ","688185.SH"],["沃森生物","我武生物","洋河股份","康华生物","万泽股份","三生国健","未名医药","安科生物","青青稞酒","海利生物","仙琚制药","科兴制药","海特生物","千红制药","水井坊","前沿生物-U","赛升药业","舍得酒业","睿智医药","中源协和","奥泰生物","之江生物","艾迪药业","申联生物","百奥泰-U","特宝生物","神州细胞-U","四环生物","通化东宝","睿昂基因","凯因科技","智飞生物","利德曼","双鹭药业","东宝生物","*ST百花","赛托生物","中关村","山西汾酒","今世缘","五粮液","君实生物-U","南华生物","上海莱士","康泰生物","金种子酒","常山药业","华兰生物","贵州茅台","伊力特","博雅生物","大豪科技","顺鑫农业","达安基因","百克生物","迎驾贡酒","古井贡酒","华熙生物","老白干酒","泸州老窖","金徽酒","溢多利","口子窖","甘李药业","易瑞生物","舒泰神","长春高新","浩欧博","凯莱英","酒鬼酒","派林生物","卫光生物","昊海生科","欧林生物","圣诺生物","普莱柯","诺泰生物","皇台酒业","艾德生物","天坛生物","ST银河","康希诺-U"],["生物制药","生物制药","白酒","生物制药","生物制药","生物制药","生物制药","生物制药","白酒","生物制药","生物制药","生物制药","生物制药","生物制药","白酒","生物制药","生物制药","白酒","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","白酒","白酒","白酒","生物制药","生物制药","生物制药","生物制药","白酒","生物制药","生物制药","白酒","白酒","生物制药","白酒","白酒","生物制药","生物制药","白酒","白酒","生物制药","白酒","白酒","白酒","生物制药","白酒","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","白酒","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","生物制药","白酒","生物制药","生物制药","生物制药","生物制药"],[73.88,71,206.41,245.14,13.16,19.14,17.39,16.17,24.36,14.68,12.1,34.38,39.82,4.1,145.88,19.19,11.97,244.8,16.33,21.2,140.75,58.72,22.09,13.26,23.66,40,60.29,3.42,11.82,85.39,27.94,186.5,6.16,9.81,6.15,5,22.56,6.56,370.11,58.23,277.52,65.22,20.77,7.48,147.2,16.31,6.39,37.03,1955.9,28.5,40.34,37.16,38.07,19.11,104,39.75,227.91,299,24.75,222.2,42.77,9.81,69.26,87,29.5,11.55,379.7,71.85,353.78,244.6,36.6,38.31,261.99,36.42,42.75,24.15,56.88,26.56,91.75,41.64,3.06,598.88],[9.6142,7.1051,5.3919,3.9786,3.9494,3.292,1.9941,1.5704,1.1208,0.9629,0.8333,0.5851,0.5556,0.4902,0.3784,0.1043,0.0836,0.0204,0,-0.0471,-0.0923,-0.1361,-0.2709,-0.3757,-0.4209,-0.448,-0.528,-0.5814,-0.5887,-0.5937,-0.7813,-0.7979,-0.8052,-0.9091,-0.9662,-0.9901,-1.0526,-1.0558,-1.0798,-1.1711,-1.1786,-1.1818,-1.5173,-1.5789,-1.5845,-1.6285,-1.8433,-1.9333,-2.1066,-2.1627,-2.2061,-2.2105,-2.2342,-2.2506,-2.3291,-2.454,-2.4567,-2.4756,-2.4823,-2.5909,-2.6627,-2.6786,-2.6837,-2.7933,-2.8647,-3.0227,-3.2044,-3.557,-3.6547,-3.6629,-3.836,-3.9609,-3.9978,-4.0316,-4.0404,-4.1286,-4.2424,-4.3572,-4.4271,-4.714,-4.9689,-5.239],[828341.42,84756.45,201757.74,12273.68,30984.15,20997.82,301229.03,332005.53,314943.37,51502.02,107143.99,10132.33,4059,34845.71,155147.01,15631.98,23406.21,148979.67,28054.85,39423.77,2436.34,10611.03,10554.36,9475.29,7715.66,12533.73,19669.41,49211.26,87665.13,3920.7,8171.39,97388.78,40682,63787.09,104214.02,11140,6250,29598.63,69481.23,110670.51,151513.98,129386.75,15547.18,272951.6,51236.12,358454.65,97290.13,172459.81,35407.64,178086.78,122874.26,169175.76,80196.44,265677.35,10328.19,86701.11,28648.91,29658.69,368725.91,97284.97,124406.21,64629.53,148140.31,52957.92,37195.7,71406.2,40685.19,7847.06,23458.34,78966.96,46406.06,26530.31,17963.83,19730.4,12128.99,40580.58,19119.49,203319.77,20222.81,196727.84,40697,15352.42],[6.48,4.71,10.56,9.38,0.5,0.61,0.34,0.25,0.27,0.14,0.1,0.2,0.22,0.02,0.55,0.02,0.01,0.05,0,-0.01,-0.13,-0.08,-0.06,-0.05,-0.1,-0.18,-0.32,-0.02,-0.07,-0.51,-0.22,-1.5,-0.05,-0.09,-0.06,-0.05,-0.24,-0.07,-4.04,-0.69,-3.31,-0.78,-0.32,-0.12,-2.37,-0.27,-0.12,-0.73,-42.09,-0.63,-0.91,-0.84,-0.87,-0.44,-2.48,-1,-5.74,-7.59,-0.63,-5.91,-1.17,-0.27,-1.91,-2.5,-0.87,-0.36,-12.57,-2.65,-13.42,-9.3,-1.46,-1.58,-10.91,-1.53,-1.8,-1.04,-2.52,-1.21,-4.25,-2.06,-0.16,-33.11]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>代码<\/th>\n <th>公司名称<\/th>\n <th>行业<\/th>\n <th>收盘价<\/th>\n <th>涨跌幅<\/th>\n <th>交易量<\/th>\n <th>价格变化<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":15,"autoWidth":true,"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0}],"order":[],"orderClasses":false,"orderCellsTop":true,"lengthMenu":[10,15,25,50,100],"rowCallback":"function(row, data, displayNum, displayIndex, dataIndex) {\nvar value=data[4]; $(this.api().cell(row, 4).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 12.5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 100 ? \"green\" : value <= 600 ? \"blue\" : \"red\"});\nvar value=data[5]; $(this.api().cell(row, 5).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 0 ? \"green\" : value <= 5 ? \"blue\" : \"red\"});\nvar value=data[6]; $(this.api().cell(row, 6).node()).css({'color':isNaN(parseFloat(value)) ? '' : value <= 5000 ? \"green\" : value <= 100000 ? \"blue\" : \"red\",'background-color':isNaN(parseFloat(value)) ? '' : value <= 10000 ? \"gray\" : \"yellow\"});\n}"}},"evals":["options.rowCallback"],"jsHooks":[]}</script>
</div>
</div>
<div id="板块维度-20涨跌幅vs10涨跌幅" class="section level2">
<h2>板块维度— 20%涨跌幅VS10%涨跌幅</h2>
<p>对于板块的认知,科创板个股上市以来出现了持续的夭折,并且不断的新低,但正如博弈论中所说,这种均衡状态是不会持续太久的,如果100%的人都不赚钱,那么总有一天会打破这种均衡!</p>
<div id="科创板个股" class="section level3">
<h3>科创板个股</h3>
<div id="htmlwidget-d5696fed19e166a7276b" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-d5696fed19e166a7276b">{"x":{"filter":"top","filterHTML":"<tr>\n <td><\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"17.52\" data-max=\"335\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2.0169\" data-max=\"134.9101\" data-scale=\"4\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"5694.07\" data-max=\"321028\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"0.41\" data-max=\"15.05\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n<\/tr>","data":[["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"],["688501.SH","688595.SH","688590.SH","688081.SH","688308.SH","688288.SH","688685.SH","688663.SH","688059.SH","688508.SH","688311.SH","688128.SH","688386.SH","688037.SH","688789.SH","688505.SH","688819.SH","688510.SH","688002.SH","688122.SH","688127.SH","688586.SH","688011.SH","688020.SH","688359.SH","688336.SH","688123.SH","688529.SH","688699.SH","688158.SH","688408.SH","688357.SH","688101.SH","688135.SH","688333.SH","688599.SH","688636.SH","688033.SH","688682.SH","688630.SH","688568.SH"],["N青达","芯海科技","新致软件","兴图新科","欧科亿","鸿泉物联","迈信林","新风光","华锐精密","芯朋微","盟升电子","中国电研","泛亚微透","芯源微","宏华数科","复旦张江","天能股份","航亚科技","睿创微纳","西部超导","蓝特光学","江航装备","新光光电","方邦股份","三孚新科","三生国健","聚辰股份","豪森股份","明微电子","优刻得-W","中信博","建龙微纳","三达膜","利扬芯片","铂力特","天合光能","智明达","天宜上佳","霍莱沃","芯碁微装","中科星图"],["环境保护","半导体","软件服务","软件服务","机械基件","汽车配件","航空","电气设备","机械基件","半导体","元器件","专用机械","化工原料","半导体","专用机械","化学制药","电气设备","航空","通信设备","小金属","元器件","航空","元器件","元器件","化工原料","生物制药","半导体","汽车配件","半导体","互联网","电气设备","化工原料","环境保护","半导体","机械基件","电气设备","元器件","运输设备","软件服务","专用机械","软件服务"],[24.83,90.32,23.88,32.3,83.19,51.17,27.73,25.82,180.52,98.97,78.1,28.99,67.95,194.99,239.5,17.52,45.83,23.72,107.1,66.92,26.81,27.1,38.91,88.4,42.77,19.14,46.46,26.22,335,39.54,231.79,150.72,22.61,47.52,171,36.33,114.85,19.08,160.38,73.6,62.72],[134.9101,19.9947,13.4981,13.2936,11.5895,11.0942,9.7783,8.5786,8.4204,8.0459,7.8729,7.6095,7.1598,6.9024,6.4492,6.3107,4.8741,4.7703,4.6921,4.2043,4.157,4.1507,3.484,3.4523,3.3341,3.292,3.1986,3.1471,3.0452,2.6213,2.5166,2.5027,2.4932,2.458,2.4566,2.338,2.2616,2.196,2.1529,2.038,2.0169],[155370.95,53936.33,151881.38,34561.39,15726,23768.88,62979.58,62746.99,6456.9,35769.06,26947.97,162923.89,10153.57,25705.25,17381.68,96918.32,78762.42,41393.74,46898.84,84542.56,29254.38,50398.62,10675.8,5694.07,13959.95,20997.82,22195.89,15534.68,20651.93,15869.66,7712.7,8441.4,112424.31,25507.75,9857.22,321028,7317.7,99515.52,7421.13,30773.57,6820.38],[14.26,15.05,2.84,3.79,8.64,5.11,2.47,2.04,14.02,7.37,5.7,2.05,4.54,12.59,14.51,1.04,2.13,1.08,4.8,2.7,1.07,1.08,1.31,2.95,1.38,0.61,1.44,0.8,9.9,1.01,5.69,3.68,0.55,1.14,4.1,0.83,2.54,0.41,3.38,1.47,1.24]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>代码<\/th>\n <th>公司名称<\/th>\n <th>行业<\/th>\n <th>收盘价<\/th>\n <th>涨跌幅<\/th>\n <th>交易量<\/th>\n <th>价格变化<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":15,"autoWidth":true,"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0}],"order":[],"orderClasses":false,"orderCellsTop":true,"lengthMenu":[10,15,25,50,100],"rowCallback":"function(row, data, displayNum, displayIndex, dataIndex) {\nvar value=data[4]; $(this.api().cell(row, 4).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 12.5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 100 ? \"green\" : value <= 600 ? \"blue\" : \"red\"});\nvar value=data[5]; $(this.api().cell(row, 5).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 0 ? \"green\" : value <= 5 ? \"blue\" : \"red\"});\nvar value=data[6]; $(this.api().cell(row, 6).node()).css({'color':isNaN(parseFloat(value)) ? '' : value <= 5000 ? \"green\" : value <= 100000 ? \"blue\" : \"red\",'background-color':isNaN(parseFloat(value)) ? '' : value <= 10000 ? \"gray\" : \"yellow\"});\n}"}},"evals":["options.rowCallback"],"jsHooks":[]}</script>
</div>
<div id="创业板个股" class="section level3">
<h3>创业板个股</h3>
<div id="htmlwidget-47d24ad7a7333aab8306" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-47d24ad7a7333aab8306">{"x":{"filter":"top","filterHTML":"<tr>\n <td><\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2.92\" data-max=\"144.19\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"4.0095\" data-max=\"440.4881\" data-scale=\"4\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"5455\" data-max=\"2697386.34\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"0.16\" data-max=\"79.42\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n<\/tr>","data":[["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"],["301026.SZ","300672.SZ","300376.SZ","300325.SZ","300101.SZ","300045.SZ","300281.SZ","300141.SZ","301031.SZ","300007.SZ","300582.SZ","300237.SZ","300142.SZ","300353.SZ","300581.SZ","300062.SZ","300311.SZ","300354.SZ","300777.SZ","300590.SZ","300489.SZ","300357.SZ","300159.SZ","300343.SZ","300424.SZ","300775.SZ","300803.SZ","300922.SZ","300726.SZ","300397.SZ","300129.SZ","300610.SZ","300034.SZ","300082.SZ","300041.SZ","300520.SZ","300631.SZ","300609.SZ","300269.SZ","300569.SZ","300405.SZ","300876.SZ","300553.SZ","300589.SZ","300738.SZ","300241.SZ","300280.SZ","300722.SZ"],["N浩通","国科微","易事特","*ST德威","振芯科技","华力创通","金明精机","和顺电气","C中熔","汉威科技","英飞特","美晨生态","沃森生物","东土科技","晨曦航空","中能电气","任子行","东华测试","中简科技","移为通信","中飞股份","我武生物","新研股份","联创股份","航新科技","三角防务","指南针","天秦装备","宏达电子","天和防务","泰胜风能","晨化股份","钢研高纳","奥克股份","回天新材","科大国创","久吾高科","汇纳科技","ST联建","天能重工","科隆股份","蒙泰高新","集智股份","江龙船艇","奥飞数据","瑞丰光电","紫天科技","新余国科"],["小金属","半导体","电气设备","塑料","通信设备","IT设备","专用机械","电气设备","电气设备","电器仪表","半导体","建筑工程","生物制药","通信设备","航空","电气设备","软件服务","电器仪表","化纤","通信设备","铝","生物制药","航空","互联网","航空","航空","软件服务","专用机械","元器件","通信设备","电气设备","化工原料","小金属","化工原料","化工原料","软件服务","环境保护","互联网","半导体","专用机械","化工原料","化纤","电器仪表","船舶","电信运营","半导体","广告包装","专用机械"],[97.45,144.19,9.44,3.08,23.72,12.56,6.41,11.96,143.86,20.8,30.12,2.92,73.88,10.19,41.1,11.36,10.48,29.58,48.87,20.85,24.02,71,3.64,8.54,15.87,36.22,37.8,34.7,89.2,18.55,6.55,13.97,36.8,14.13,17.59,21.16,43.15,17.22,3.43,8.52,9.38,38,31.9,28.43,22.62,8.8,36.79,52.66],[440.4881,19.9983,19.9492,17.1103,16.4458,16.2963,13.4513,12.3005,12.2941,11.8881,10.3297,9.7744,9.6142,8.5197,8.5005,8.3969,7.93,7.6419,7.4066,7.3083,7.28,7.1051,7.0588,7.0175,7.0128,6.7492,6.4489,6.4417,6.279,6.2428,5.9871,5.9136,5.656,5.3691,5.3293,5.2736,5.2182,5.1924,4.893,4.797,4.6875,4.5392,4.3165,4.2538,4.2396,4.142,4.0736,4.0095],[198214.78,117641.04,1561807.5,967939.68,588598.51,1120388.14,469932.32,417329.64,95387.26,363216.02,311590.25,1606671.39,828341.42,419425.67,491339.65,468185.08,2035004.78,111467.59,127399.98,128512.69,63597.8,84756.45,1193687.32,2697386.34,188745.78,179430.15,128674.77,40511.52,70352.22,350433.05,578368.15,143035.45,136773.23,482876.25,310643.03,101702.6,269412.36,54007.46,279807.7,248578.33,219498.13,54025.18,5455,135331.16,81901.47,495301.14,42231.62,94530.85],[79.42,24.03,1.57,0.45,3.35,1.76,0.76,1.31,15.75,2.21,2.82,0.26,6.48,0.8,3.22,0.88,0.77,2.1,3.37,1.42,1.63,4.71,0.24,0.56,1.04,2.29,2.29,2.1,5.27,1.09,0.37,0.78,1.97,0.72,0.89,1.06,2.14,0.85,0.16,0.39,0.42,1.65,1.32,1.16,0.92,0.35,1.44,2.03]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>代码<\/th>\n <th>公司名称<\/th>\n <th>行业<\/th>\n <th>收盘价<\/th>\n <th>涨跌幅<\/th>\n <th>交易量<\/th>\n <th>价格变化<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":15,"autoWidth":true,"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0}],"order":[],"orderClasses":false,"orderCellsTop":true,"lengthMenu":[10,15,25,50,100],"rowCallback":"function(row, data, displayNum, displayIndex, dataIndex) {\nvar value=data[4]; $(this.api().cell(row, 4).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 12.5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 100 ? \"green\" : value <= 600 ? \"blue\" : \"red\"});\nvar value=data[5]; $(this.api().cell(row, 5).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 0 ? \"green\" : value <= 5 ? \"blue\" : \"red\"});\nvar value=data[6]; $(this.api().cell(row, 6).node()).css({'color':isNaN(parseFloat(value)) ? '' : value <= 5000 ? \"green\" : value <= 100000 ? \"blue\" : \"red\",'background-color':isNaN(parseFloat(value)) ? '' : value <= 10000 ? \"gray\" : \"yellow\"});\n}"}},"evals":["options.rowCallback"],"jsHooks":[]}</script>
</div>
<div id="主板个股" class="section level3">
<h3>主板个股</h3>
<div id="htmlwidget-8bd3f1369291629abd2c" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-8bd3f1369291629abd2c">{"x":{"filter":"top","filterHTML":"<tr>\n <td><\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"character\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2\" data-max=\"520.49\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"3.0035\" data-max=\"10.0917\" data-scale=\"4\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"2440.6\" data-max=\"8137564\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n <td data-type=\"number\" style=\"vertical-align: top;\">\n <div class=\"form-group has-feedback\" style=\"margin-bottom: auto;\">\n <input type=\"search\" placeholder=\"All\" class=\"form-control\" style=\"width: 100%;\"/>\n <span class=\"glyphicon glyphicon-remove-circle form-control-feedback\"><\/span>\n <\/div>\n <div style=\"display: none; position: absolute; width: 200px;\">\n <div data-min=\"0.07\" data-max=\"39.29\" data-scale=\"2\"><\/div>\n <span style=\"float: left;\"><\/span>\n <span style=\"float: right;\"><\/span>\n <\/div>\n <\/td>\n<\/tr>","data":[["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"],["002454.SZ","002598.SZ","601101.SH","002286.SZ","002201.SZ","002580.SZ","002364.SZ","605162.SH","000612.SZ","600391.SH","000762.SZ","600055.SH","003043.SZ","605028.SH","603565.SH","600893.SH","603507.SH","603217.SH","002529.SZ","600096.SH","600230.SH","600378.SH","000768.SZ","603020.SH","002643.SZ","603867.SH","002140.SZ","000422.SZ","605011.SH","603822.SH","600348.SH","605020.SH","002249.SZ","000506.SZ","002276.SZ","000683.SZ","603889.SH","600481.SH","000733.SZ","002285.SZ","600771.SH","002651.SZ","603444.SH","002273.SZ","000519.SZ","600210.SH","600418.SH","603067.SH","603108.SH","600316.SH","605288.SH","600765.SH","002428.SZ","002845.SZ","000159.SZ","600398.SH","002623.SZ","603728.SH","002533.SZ","002236.SZ","002785.SZ","601126.SH","000635.SZ","000825.SZ","600966.SH","600196.SH","000488.SZ","002588.SZ","603380.SH","600328.SH","600165.SH","603776.SH","600715.SH","002053.SZ","600338.SH","600295.SH","603069.SH","603612.SH","002042.SZ","002266.SZ","601898.SH","603077.SH","600251.SH","601038.SH","000738.SZ","603678.SH","002011.SZ","600707.SH","600876.SH","603688.SH","600392.SH","600141.SH","600711.SH","002326.SZ","603809.SH","000697.SZ","000933.SZ","000822.SZ","000807.SZ","603628.SH","600877.SH","002455.SZ","600862.SH","600216.SH","600060.SH","000040.SZ","603669.SH","600372.SH","603348.SH","603159.SH","002304.SZ","600621.SH","002176.SZ","000938.SZ","000659.SZ","600063.SH","600381.SH","600200.SH","002506.SZ","002169.SZ","600654.SH","600971.SH","002274.SZ","002803.SZ","600290.SH","000687.SZ","600610.SH","002906.SZ","603918.SH","000591.SZ","000737.SZ","000820.SZ","002147.SZ","002774.SZ","600506.SH","000982.SZ","600146.SH","600078.SH","600608.SH","600581.SH","603823.SH","002656.SZ","603032.SH","000611.SZ","600306.SH","600870.SH","002175.SZ","603396.SH","600405.SH","002386.SZ","002493.SZ","600089.SH","002079.SZ","002122.SZ","002355.SZ","000835.SZ","600389.SH","603301.SH","002196.SZ","600890.SH","000960.SZ","002068.SZ","600256.SH","000902.SZ","601311.SH","600751.SH","002938.SZ","603333.SH","002827.SZ","002933.SZ","600808.SH","600409.SH","000731.SZ","002622.SZ","002389.SZ","000048.SZ","603267.SH","600188.SH","002870.SZ","001203.SZ","601020.SH","000100.SZ","603227.SH","002674.SZ","600167.SH","002867.SZ","605336.SH","600258.SH","000301.SZ","600301.SH","600760.SH","002258.SZ","000782.SZ","000532.SZ","603738.SH","002817.SZ","601600.SH","600993.SH","000426.SZ","002064.SZ","600075.SH","000790.SZ","002625.SZ","002346.SZ","000912.SZ","000830.SZ","000534.SZ","600456.SH","002783.SZ","600889.SH","600596.SH","600773.SH","601568.SH","002174.SZ","002171.SZ","002586.SZ","600861.SH","002374.SZ","600152.SH","600884.SH","002149.SZ","002263.SZ","002151.SZ","600038.SH","600478.SH","603068.SH","603897.SH","600399.SH","605006.SH","000707.SZ","002105.SZ","603633.SH","002206.SZ","603214.SH","002121.SZ","600958.SH","601003.SH","002441.SZ","600115.SH","600812.SH","603399.SH","603266.SH","000983.SZ","000932.SZ","002865.SZ","600343.SH","600352.SH","600284.SH","002748.SZ","600143.SH","600416.SH","600986.SH","600501.SH","600211.SH","002819.SZ","002602.SZ","002111.SZ","002457.SZ","002245.SZ","002442.SZ","600326.SH","002411.SZ","002996.SZ","002753.SZ","600816.SH","002090.SZ","002719.SZ","603098.SH","002006.SZ","002208.SZ","002049.SZ","603896.SH","600755.SH","002179.SZ","000547.SZ","002640.SZ","603308.SH","600185.SH","600586.SH","000408.SZ","600422.SH","600470.SH","000695.SZ","000609.SZ","600273.SH","002139.SZ","605377.SH","000980.SZ","002806.SZ","002123.SZ","600331.SH","002878.SZ","600068.SH","000936.SZ","000901.SZ","603655.SH","601001.SH","600557.SH"],["松芝股份","山东章鼓","昊华能源","保龄宝","九鼎新材","圣阳股份","中恒电气","新中港","焦作万方","航发科技","西藏矿业","万东医疗","华亚智能","世茂能源","中谷物流","航发动力","振江股份","元利科技","海源复材","云天化","沧州大化","昊华科技","中航西飞","爱普股份","万润股份","新化股份","东华科技","湖北宜化","杭州热电","嘉澳环保","华阳股份","永和股份","大洋电机","中润资源","万马股份","远兴能源","新澳股份","双良节能","振华科技","世联行","广誉远","利君股份","吉比特","水晶光电","中兵红箭","紫江企业","江淮汽车","振华股份","润达医疗","洪都航空","凯迪股份","中航重机","云南锗业","同兴达","国际实业","海澜之家","亚玛顿","鸣志电器","金杯电工","大华股份","万里石","四方股份","英力特","太钢不锈","博汇纸业","复星医药","晨鸣纸业","史丹利","易德龙","中盐化工","新日恒力","永安行","文投控股","云南能投","西藏珠峰","鄂尔多斯","海汽集团","索通发展","华孚时尚","浙富控股","中煤能源","和邦生物","冠农股份","一拖股份","航发控制","火炬电子","盾安环境","彩虹股份","洛阳玻璃","石英股份","盛和资源","兴发集团","盛屯矿业","永太科技","豪能股份","炼石航空","神火股份","山东海化","云铝股份","清源股份","电能股份","百川股份","中航高科","浙江医药","海信视像","东旭蓝天","灵康药业","中航电子","文灿股份","上海亚虹","洋河股份","华鑫股份","江特电机","紫光股份","珠海中富","皖维高新","青海春天","江苏吴中","协鑫集成","智光电气","ST中安","恒源煤电","华昌化工","吉宏股份","ST华仪","*ST华讯","中毅达","华阳集团","金桥信息","太阳能","南风化工","*ST节能","*ST新光","快意电梯","*ST香梨","中银绒业","*ST环球","*ST澄星","ST沪科","八一钢铁","百合花","ST摩登","*ST德新","*ST天首","*ST商城","*ST厦华","*ST东网","金辰股份","动力源","天原股份","荣盛石化","特变电工","苏州固锝","ST天马","兴民智通","*ST长动","江山股份","振德医疗","方正电机","*ST中房","锡业股份","黑猫股份","广汇能源","新洋丰","骆驼股份","海航科技","鹏鼎控股","尚纬股份","高争民爆","新兴装备","马钢股份","三友化工","四川美丰","融钰集团","航天彩虹","京基智农","鸿远电子","兖州煤业","香山股份","大中矿业","ST华钰","TCL科技","雪峰科技","兴业科技","联美控股","周大生","帅丰电器","首旅酒店","东方盛虹","*ST南化","中航沈飞","利尔化学","美达股份","华金资本","泰晶科技","黄山胶囊","中国铝业","马应龙","兴业矿业","华峰化学","新疆天业","华神科技","光启技术","柘中股份","泸天化","鲁西化工","万泽股份","宝钛股份","凯龙股份","南京化纤","新安股份","西藏城投","北元集团","游族网络","楚江新材","*ST围海","北京城乡","中锐股份","维科技术","杉杉股份","西部材料","大东南","北斗星通","中直股份","科力远","博通集成","长城科技","抚顺特钢","山东玻纤","*ST双环","信隆健康","徕木股份","海利得","爱婴室","科陆电子","东方证券","柳钢股份","众业达","中国东航","华北制药","吉翔股份","天龙股份","山西焦煤","华菱钢铁","钧达股份","航天动力","浙江龙盛","浦东建设","世龙实业","金发科技","湘电股份","浙文互联","航天晨光","西藏药业","东方中科","世纪华通","威海广泰","青龙管业","蔚蓝锂芯","龙星化工","西藏天路","延安必康","顺博合金","永东股份","ST安信","金智科技","*ST麦趣","森特股份","精功科技","合肥城建","紫光国微","寿仙谷","厦门国贸","中航光电","航天发展","*ST跨境","应流股份","格力地产","金晶科技","藏格控股","昆药集团","六国化工","滨海能源","*ST中迪","嘉化能源","拓邦股份","华旺科技","*ST众泰","华锋股份","梦网科技","宏达股份","元隆雅图","葛洲坝","华西股份","航天科技","朗博科技","晋控煤业","康缘药业"],["汽车配件","机械基件","煤炭开采","食品","玻璃","电气设备","电气设备","供气供热","铝","航空","小金属","医疗保健","专用机械","供气供热","仓储物流","航空","钢加工","化工原料","专用机械","农药化肥","农药化肥","化工原料","航空","食品","化工原料","化工原料","建筑工程","农药化肥","供气供热","环境保护","煤炭开采","化工原料","电气设备","黄金","电气设备","化工原料","纺织","环境保护","元器件","房产服务","中成药","专用机械","互联网","元器件","专用机械","广告包装","汽车整车","化工原料","医药商业","航空","电气设备","航空","小金属","元器件","石油贸易","服饰","玻璃","电气设备","电气设备","电器仪表","其他建材","电气设备","化工原料","特种钢","造纸","化学制药","造纸","农药化肥","元器件","化工原料","化工原料","公共交通","影视音像","食品","铅锌","小金属","公路","矿物制品","纺织","环境保护","煤炭开采","化工原料","农业综合","农用机械","航空","元器件","工程机械","元器件","玻璃","矿物制品","小金属","化工原料","小金属","化工原料","汽车配件","航空","铝","化工原料","铝","电气设备","电气设备","化工原料","航空","化学制药","家用电器","新型电力","化学制药","航空","汽车配件","专用机械","白酒","证券","电气设备","软件服务","广告包装","化纤","医疗保健","化学制药","电气设备","电气设备","软件服务","煤炭开采","农药化肥","互联网","电气设备","通信设备","化工原料","汽车配件","软件服务","新型电力","日用化工","环境保护","区域地产","运输设备","种植业","纺织","服饰","化工原料","钢加工","普钢","染料涂料","服饰","公共交通","纺织","百货","家用电器","电器仪表","专用机械","电气设备","化工原料","化纤","电气设备","半导体","机械基件","汽车配件","影视音像","农药化肥","医疗保健","纺织机械","区域地产","小金属","化工原料","石油开采","农药化肥","电气设备","软件服务","元器件","电气设备","化工原料","航空","普钢","化工原料","农药化肥","综合类","元器件","饲料","元器件","煤炭开采","汽车配件","普钢","铅锌","元器件","化工原料","纺织","供气供热","服饰","家用电器","酒店餐饮","化纤","商贸代理","航空","农药化肥","化纤","多元金融","元器件","化学制药","铝","中成药","铅锌","化纤","化工原料","中成药","汽车配件","电气设备","农药化肥","农药化肥","生物制药","小金属","化工原料","化纤","化工原料","区域地产","化工原料","互联网","铜","建筑工程","百货","建筑工程","电气设备","综合类","小金属","塑料","通信设备","航空","元器件","半导体","电气设备","特种钢","玻璃","化工原料","文教休闲","元器件","化纤","百货","电器仪表","证券","普钢","批发业","空运","化学制药","小金属","塑料","煤炭开采","普钢","汽车配件","航空","染料涂料","建筑工程","化工原料","塑料","电气设备","互联网","汽车配件","中成药","电器仪表","互联网","航空","塑料","仓储物流","化工原料","水泥","化学制药","铝","化工原料","多元金融","软件服务","乳制品","装修装饰","专用机械","区域地产","元器件","中成药","商贸代理","元器件","通信设备","互联网","专用机械","区域地产","玻璃","农药化肥","中成药","农药化肥","广告包装","区域地产","化工原料","元器件","造纸","汽车配件","元器件","互联网","铅锌","文教休闲","建筑工程","化纤","汽车配件","汽车配件","煤炭开采","中成药"],[6,8.11,6.03,11.3,19.31,9,10.43,17.03,8.57,21.21,38.8,26.71,57.49,29.9,30.67,54.09,23.97,37.17,13.53,17.6,19.25,27.83,26.3,18.38,17.61,35.55,12.11,10.79,27.86,35.68,8.48,16.08,6.29,2.98,7.41,6.9,6.92,8.81,73,7.35,44.66,12.55,520.49,15.57,12.58,5.96,16.72,8.87,11.55,41.76,77.32,23.4,13.99,34.11,7.28,7.76,45.89,17.75,6.15,22.31,20.17,9,12.97,9.13,12.78,73.74,8.88,6.19,27.51,19.09,8.03,19.13,3.73,8.3,23.35,24.22,20.9,18.92,5.75,5.43,7.98,2.38,11.77,16.57,21.25,79.66,6.08,9.94,27.58,26.99,24.82,26.07,9.4,24.48,17,8.26,11.56,9.13,14.2,12.09,14.39,10.28,31.88,17.08,15.61,2.9,9.69,16.35,30.8,16,206.41,16.67,12.76,25.8,4.34,5.93,9.71,9.2,4.01,12.26,2.01,6.84,12.68,26.07,2.63,2.43,16.82,36.61,7.98,6.76,9.43,3.49,4.57,7.69,8.11,2.51,2.72,3.35,7.12,7.55,16.36,3.15,19.77,4.42,12.65,4.64,2.96,67.15,6.38,11.7,20.47,15.57,12.18,2.78,6.66,3.44,34.01,45.43,9.35,2.83,17.88,8.12,3.53,21.05,13.3,2.9,39.1,6.29,11.95,29.8,4.52,12.96,6.41,5.33,21.36,19.98,148.79,17.9,34.01,22.84,8.59,8.37,5.77,13.82,9.47,20.72,30.96,23.47,26.25,7.7,67.2,27.51,4.01,16.61,52.19,11.37,5.82,29.36,8.4,15.53,7.92,6.14,22.38,20.5,4.71,22,13.16,47.18,9.04,6.73,21.63,18.12,8.96,15.75,9.26,3,18.56,2.73,8.76,33.47,17.29,3.02,41.89,51.55,6.07,80,27.52,19.68,14.92,5.09,8.5,11.92,7.15,21.25,4.6,10.65,6.64,8.15,4.97,10.86,5.59,12.68,8.26,7.39,26.63,9.48,13.05,7.42,6.88,21.6,13.61,4.24,9.1,60.06,32.65,6.14,14.19,9.88,22.05,8.41,7.49,8.14,17.91,9.8,2.53,8.87,11.09,42.78,9.19,8.26,165.27,40.19,8.3,83.44,18.26,2.57,21.58,7.41,10.38,26.94,10.1,5.92,6.25,3.3,9.25,17.93,18.3,6.66,11.35,21.07,2.36,18.67,8.15,7.14,8.53,19.17,7.88,11.66],[10.0917,10.0407,10.0365,10.0292,10.0285,10.0244,10.0211,10.0129,10.0128,10.0104,10.0085,10.0082,10.0077,10.0074,10.0072,10.0061,10.0046,10.003,10,10,10,10,9.9958,9.994,9.9938,9.9938,9.9909,9.9898,9.9882,9.9877,9.987,9.9863,9.965,9.9631,9.9407,9.8726,9.8413,9.3052,9.1834,9.0504,8.5825,8.4702,8.165,8.125,7.9828,7.971,7.9406,7.7764,7.7425,7.6011,7.5682,7.3394,7.2853,7.0621,7.0588,7.0345,7.0196,6.9922,6.9565,6.9511,6.8892,6.8884,6.8369,6.7836,6.7669,6.7613,6.7308,6.7241,6.7106,6.648,6.6401,6.5738,6.5714,6.5469,6.5237,6.5084,6.3072,6.2921,6.2847,6.2622,6.2583,6.25,6.2274,6.2179,6.1969,6.185,6.1082,6.0832,6.0769,6.0511,6.0231,6.0187,5.9752,5.974,5.919,5.8974,5.8608,5.7937,5.6548,5.5895,5.5759,5.5441,5.528,5.4972,5.473,5.4545,5.4407,5.4159,5.4073,5.4018,5.3919,5.3729,5.3675,5.3491,5.3398,5.3286,5.3145,5.2632,5.2493,5.2361,5.2356,5.2308,5.2282,5.2058,5.2,5.1948,5.1907,5.1407,5.1383,5.1322,5.1282,5.1205,5.0575,5.0546,5.0518,5.0209,5.0193,5.0157,5.0147,5.007,5.0064,5,4.992,4.9881,4.9793,4.9774,4.9645,4.9383,4.9342,4.9327,4.9206,4.9191,4.9096,4.9057,4.8819,4.878,4.872,4.8223,4.8206,4.8148,4.8066,4.7742,4.7478,4.7264,4.7244,4.6931,4.6854,4.6589,4.641,4.6348,4.6296,4.6005,4.5677,4.5098,4.501,4.4433,4.436,4.4341,4.4212,4.3876,4.3742,4.3641,4.34,4.3019,4.2952,4.2778,4.2775,4.2185,4.208,4.1949,4.186,4.1651,4.1558,4.1379,4.1301,4.1209,4.1145,4.1135,4.0892,4.0885,4.0736,4.0678,4.0446,4.0081,3.9735,3.9698,3.9494,3.9207,3.908,3.858,3.8406,3.8395,3.8239,3.8233,3.8117,3.8062,3.8031,3.8023,3.7915,3.7829,3.7815,3.7801,3.7652,3.7641,3.7607,3.6941,3.6925,3.6881,3.6831,3.666,3.6585,3.6522,3.6232,3.608,3.6036,3.5992,3.5881,3.5578,3.5417,3.5272,3.5185,3.5102,3.5088,3.5014,3.4979,3.4934,3.4893,3.4868,3.4586,3.4483,3.4195,3.4146,3.4091,3.3913,3.3882,3.367,3.3503,3.3473,3.3271,3.317,3.3103,3.2995,3.2872,3.2666,3.2653,3.2596,3.2588,3.2585,3.2584,3.25,3.2421,3.2366,3.2338,3.229,3.2222,3.2129,3.2042,3.2033,3.1809,3.1789,3.1665,3.1359,3.1353,3.125,3.1215,3.1052,3.0986,3.096,3.0881,3.0822,3.0568,3.0353,3.0341,3.0303,3.0193,3.0091,3.0065,3.0035],[177136.47,149572.65,569954.66,384582.89,259692.42,292337.63,236766.71,14390.4,880262.21,194498.09,950758.58,332879.88,45737,2440.6,36500.93,785255.83,10079.74,65686.02,433473.36,1871233.26,237277.7,159099.96,961526.95,97411,118806.9,95989.7,875802.09,672370.39,271238.11,32455.99,1208832.95,3409.44,1641570.71,549786.29,369858.34,2086232.74,149746.1,826233.25,246326.56,927710.81,656426.96,213450.69,18960.46,1185020.4,2074119.24,1503068.01,3140436.93,298502.9,152026.49,681604.29,16282.12,535588.49,676701.02,411947.57,539017.99,604012.98,134063.86,51425.89,398073.58,907622.76,124177.45,276748.03,150407.74,3367537.76,418806.59,762101.63,1469980.16,469213.98,40998.75,853385.46,248906.06,79933.39,567677.59,128237.84,889723.19,380161.45,249078,297639.07,402412.49,773796.79,643025.31,3636863.84,493939.61,451010.49,377915.39,131133.34,245928.88,1150647.32,228749.81,111723.16,2901615.04,640848.46,4114006.83,972139.34,111000.87,126155.76,1324197,716360.85,1177038.62,163668.72,132170.26,802827.26,277368.37,682561.98,348936.92,1001402.73,165847.3,254320.81,69213.18,33760.75,201757.74,954607.55,2647859.33,764822.43,366186.18,1147444.5,474714.17,784403.3,4101924.41,872289.11,158388.69,507440.06,671643.14,187889.06,194493,255443.8,212589.28,184914.21,230901.02,2221836.5,123232.74,19149,246376.32,294321.83,28768.02,2997552.05,236630.09,440525.95,54446.08,1628929.43,60903.6,9719.24,18395.6,81174.74,17841.1,87694.58,191557.93,93482.17,826962.94,1004726.4,1059124.97,2269189.14,628242.41,45966.08,195329.36,141532.77,71828.67,49564.66,377397.41,117707,912196.25,562599.32,2045035.56,489931.71,579054.21,833419.58,241381.5,107273.57,97872.5,40335.33,1804464.57,886665.69,493933.89,828194.49,303324.24,49208.8,52897.55,396489.19,26141.7,436078.27,254004.87,8137564,233052,51953,181051.4,353392.87,70311.28,142585.65,553080.46,21781.1,550751.61,216257.98,160435.59,203638.75,97492.02,46342.99,3570097.39,250843.81,374679.05,713820.22,929358.75,562189.59,551055.91,209504.24,361104.76,642342.25,30984.15,199309.67,102765.87,189763.6,519775.71,712709.33,220773.07,266590.6,468233.97,71886.48,86703.01,182854.8,178615.36,712506.59,381637.89,952980.24,119961.41,100938.76,620610.45,38871.17,40854.05,349672.08,177638.21,137007.65,114864.01,187665.16,373329.61,24517,231951.46,2065429.88,248897.28,78469.96,438754.1,165418.55,240942.84,43904.72,1123426.17,2061006.29,63378.07,120825.2,604737.22,1266389.33,21363.1,1259610.36,138442.03,218928.91,115756.65,64678.51,14334.7,523142.88,97472.24,241365.13,485923.9,1059315.59,480704.5,1789353.72,86247.31,95408.66,196627.36,59723.94,48236.19,156024.56,138714.99,258137.88,125488.91,16879.1,1372319.94,118112.28,328759.34,1435111.9,96011.02,423836.74,1095574.56,597359.96,286180.79,582175.84,41441.01,58630.94,374256.83,474706.7,72414.71,407780.53,64492.32,839085.13,886922.58,57413.9,562647.64,354290.19,172411.28,17148.67,410033.83,73584.59],[0.55,0.74,0.55,1.03,1.76,0.82,0.95,1.55,0.78,1.93,3.53,2.43,5.23,2.72,2.79,4.92,2.18,3.38,1.23,1.6,1.75,2.53,2.39,1.67,1.6,3.23,1.1,0.98,2.53,3.24,0.77,1.46,0.57,0.27,0.67,0.62,0.62,0.75,6.14,0.61,3.53,0.98,39.29,1.17,0.93,0.44,1.23,0.64,0.83,2.95,5.44,1.6,0.95,2.25,0.48,0.51,3.01,1.16,0.4,1.45,1.3,0.58,0.83,0.58,0.81,4.67,0.56,0.39,1.73,1.19,0.5,1.18,0.23,0.51,1.43,1.48,1.24,1.12,0.34,0.32,0.47,0.14,0.69,0.97,1.24,4.64,0.35,0.57,1.58,1.54,1.41,1.48,0.53,1.38,0.95,0.46,0.64,0.5,0.76,0.64,0.76,0.54,1.67,0.89,0.81,0.15,0.5,0.84,1.58,0.82,10.56,0.85,0.65,1.31,0.22,0.3,0.49,0.46,0.2,0.61,0.1,0.34,0.63,1.29,0.13,0.12,0.83,1.79,0.39,0.33,0.46,0.17,0.22,0.37,0.39,0.12,0.13,0.16,0.34,0.36,0.78,0.15,0.94,0.21,0.6,0.22,0.14,3.16,0.3,0.55,0.96,0.73,0.57,0.13,0.31,0.16,1.58,2.09,0.43,0.13,0.82,0.37,0.16,0.95,0.6,0.13,1.75,0.28,0.53,1.32,0.2,0.57,0.28,0.23,0.92,0.85,6.32,0.76,1.44,0.96,0.36,0.35,0.24,0.57,0.39,0.85,1.27,0.95,1.06,0.31,2.7,1.1,0.16,0.66,2.07,0.45,0.23,1.16,0.33,0.61,0.31,0.24,0.87,0.79,0.18,0.84,0.5,1.78,0.34,0.25,0.8,0.67,0.33,0.58,0.34,0.11,0.68,0.1,0.32,1.22,0.63,0.11,1.52,1.87,0.22,2.85,0.98,0.7,0.53,0.18,0.3,0.42,0.25,0.74,0.16,0.37,0.23,0.28,0.17,0.37,0.19,0.43,0.28,0.25,0.9,0.32,0.44,0.25,0.23,0.72,0.45,0.14,0.3,1.97,1.07,0.2,0.46,0.32,0.71,0.27,0.24,0.26,0.57,0.31,0.08,0.28,0.35,1.35,0.29,0.26,5.19,1.26,0.26,2.61,0.57,0.08,0.67,0.23,0.32,0.83,0.31,0.18,0.19,0.1,0.28,0.54,0.55,0.2,0.34,0.63,0.07,0.55,0.24,0.21,0.25,0.56,0.23,0.34]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>代码<\/th>\n <th>公司名称<\/th>\n <th>行业<\/th>\n <th>收盘价<\/th>\n <th>涨跌幅<\/th>\n <th>交易量<\/th>\n <th>价格变化<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":15,"autoWidth":true,"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0}],"order":[],"orderClasses":false,"orderCellsTop":true,"lengthMenu":[10,15,25,50,100],"rowCallback":"function(row, data, displayNum, displayIndex, dataIndex) {\nvar value=data[4]; $(this.api().cell(row, 4).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 12.5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 100 ? \"green\" : value <= 600 ? \"blue\" : \"red\"});\nvar value=data[5]; $(this.api().cell(row, 5).node()).css({'font-weight':isNaN(parseFloat(value)) ? '' : value <= 5 ? \"normal\" : \"bold\",'color':isNaN(parseFloat(value)) ? '' : value <= 0 ? \"green\" : value <= 5 ? \"blue\" : \"red\"});\nvar value=data[6]; $(this.api().cell(row, 6).node()).css({'color':isNaN(parseFloat(value)) ? '' : value <= 5000 ? \"green\" : value <= 100000 ? \"blue\" : \"red\",'background-color':isNaN(parseFloat(value)) ? '' : value <= 10000 ? \"gray\" : \"yellow\"});\n}"}},"evals":["options.rowCallback"],"jsHooks":[]}</script>
<p>温馨提示投资有风险,投资需要谨慎!</p>
<p>更多内容点击 <a href="http://wulixin.github.io//QuandlFinance//home.html">QuandlFinance</a> footnotes<a href="#fn1" class="footnote-ref" id="fnref1"><sup>1</sup></a></p>
</div>
</div>
<div class="footnotes">
<hr />
<ol>
<li id="fn1"><p>内心的强大才是真的强大<a href="#fnref1" class="footnote-back">↩︎</a></p></li>
</ol>
</div>
</section>
<!-- code folding -->
<!-- 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>