@sidhujag/sysweb3-keyring 1.0.544 → 1.0.547

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/coverage/clover.xml +2875 -0
  2. package/coverage/coverage-final.json +29468 -0
  3. package/coverage/lcov-report/base.css +354 -0
  4. package/coverage/lcov-report/block-navigation.js +85 -0
  5. package/coverage/lcov-report/favicon.png +0 -0
  6. package/coverage/lcov-report/index.html +320 -0
  7. package/coverage/lcov-report/prettify.css +101 -0
  8. package/coverage/lcov-report/prettify.js +1008 -0
  9. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  10. package/coverage/lcov-report/sorter.js +191 -0
  11. package/coverage/lcov-report/src/index.html +276 -0
  12. package/coverage/lcov-report/src/index.ts.html +114 -0
  13. package/coverage/lcov-report/src/initial-state.ts.html +558 -0
  14. package/coverage/lcov-report/src/keyring-manager.ts.html +6279 -0
  15. package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +178 -0
  16. package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +144 -0
  17. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +1560 -0
  18. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +276 -0
  19. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +495 -0
  20. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +1138 -0
  21. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +363 -0
  22. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +289 -0
  23. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +486 -0
  24. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +240 -0
  25. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +342 -0
  26. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +2388 -0
  27. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +453 -0
  28. package/coverage/lcov-report/src/ledger/consts.ts.html +177 -0
  29. package/coverage/lcov-report/src/ledger/index.html +216 -0
  30. package/coverage/lcov-report/src/ledger/index.ts.html +1371 -0
  31. package/coverage/lcov-report/src/ledger/utils.ts.html +102 -0
  32. package/coverage/lcov-report/src/signers.ts.html +591 -0
  33. package/coverage/lcov-report/src/storage.ts.html +198 -0
  34. package/coverage/lcov-report/src/transactions/ethereum.ts.html +5826 -0
  35. package/coverage/lcov-report/src/transactions/index.html +216 -0
  36. package/coverage/lcov-report/src/transactions/index.ts.html +93 -0
  37. package/coverage/lcov-report/src/transactions/syscoin.ts.html +1521 -0
  38. package/coverage/lcov-report/src/trezor/index.html +176 -0
  39. package/coverage/lcov-report/src/trezor/index.ts.html +2655 -0
  40. package/coverage/lcov-report/src/types.ts.html +1443 -0
  41. package/coverage/lcov-report/src/utils/derivation-paths.ts.html +486 -0
  42. package/coverage/lcov-report/src/utils/index.html +196 -0
  43. package/coverage/lcov-report/src/utils/psbt.ts.html +159 -0
  44. package/coverage/lcov-report/test/helpers/constants.ts.html +627 -0
  45. package/coverage/lcov-report/test/helpers/index.html +176 -0
  46. package/coverage/lcov.info +4832 -0
  47. package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/appClient.js +1 -124
  48. package/dist/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  49. package/{cjs → dist/cjs}/transactions/ethereum.js +24 -11
  50. package/dist/cjs/transactions/ethereum.js.map +1 -0
  51. package/dist/package.json +50 -0
  52. package/{types → dist/types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -6
  53. package/examples/basic-usage.js +140 -0
  54. package/jest.config.js +32 -0
  55. package/package.json +31 -13
  56. package/readme.md +201 -0
  57. package/src/declare.d.ts +7 -0
  58. package/src/errorUtils.ts +83 -0
  59. package/src/hardware-wallet-manager.ts +655 -0
  60. package/src/index.ts +12 -0
  61. package/src/initial-state.ts +108 -0
  62. package/src/keyring-manager.ts +2698 -0
  63. package/src/ledger/bitcoin_client/index.ts +19 -0
  64. package/src/ledger/bitcoin_client/lib/appClient.ts +405 -0
  65. package/src/ledger/bitcoin_client/lib/bip32.ts +61 -0
  66. package/src/ledger/bitcoin_client/lib/buffertools.ts +134 -0
  67. package/src/ledger/bitcoin_client/lib/clientCommands.ts +356 -0
  68. package/src/ledger/bitcoin_client/lib/constants.ts +12 -0
  69. package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +65 -0
  70. package/src/ledger/bitcoin_client/lib/merkle.ts +136 -0
  71. package/src/ledger/bitcoin_client/lib/merkleMap.ts +49 -0
  72. package/src/ledger/bitcoin_client/lib/policy.ts +91 -0
  73. package/src/ledger/bitcoin_client/lib/psbtv2.ts +768 -0
  74. package/src/ledger/bitcoin_client/lib/varint.ts +120 -0
  75. package/src/ledger/consts.ts +3 -0
  76. package/src/ledger/index.ts +685 -0
  77. package/src/ledger/types.ts +74 -0
  78. package/src/network-utils.ts +99 -0
  79. package/src/providers.ts +345 -0
  80. package/src/signers.ts +158 -0
  81. package/src/storage.ts +63 -0
  82. package/src/transactions/__tests__/integration.test.ts +303 -0
  83. package/src/transactions/__tests__/syscoin.test.ts +409 -0
  84. package/src/transactions/ethereum.ts +2503 -0
  85. package/src/transactions/index.ts +2 -0
  86. package/src/transactions/syscoin.ts +542 -0
  87. package/src/trezor/index.ts +1050 -0
  88. package/src/types.ts +366 -0
  89. package/src/utils/derivation-paths.ts +133 -0
  90. package/src/utils/psbt.ts +24 -0
  91. package/src/utils.ts +191 -0
  92. package/test/README.md +158 -0
  93. package/test/__mocks__/ledger-mock.js +20 -0
  94. package/test/__mocks__/trezor-mock.js +75 -0
  95. package/test/cleanup-summary.md +167 -0
  96. package/test/helpers/README.md +78 -0
  97. package/test/helpers/constants.ts +79 -0
  98. package/test/helpers/setup.ts +714 -0
  99. package/test/integration/import-validation.spec.ts +588 -0
  100. package/test/unit/hardware/ledger.spec.ts +869 -0
  101. package/test/unit/hardware/trezor.spec.ts +828 -0
  102. package/test/unit/keyring-manager/account-management.spec.ts +970 -0
  103. package/test/unit/keyring-manager/import-watchonly.spec.ts +181 -0
  104. package/test/unit/keyring-manager/import-wif.spec.ts +126 -0
  105. package/test/unit/keyring-manager/initialization.spec.ts +782 -0
  106. package/test/unit/keyring-manager/key-derivation.spec.ts +996 -0
  107. package/test/unit/keyring-manager/security.spec.ts +505 -0
  108. package/test/unit/keyring-manager/state-management.spec.ts +375 -0
  109. package/test/unit/network/network-management.spec.ts +372 -0
  110. package/test/unit/transactions/ethereum-transactions.spec.ts +382 -0
  111. package/test/unit/transactions/syscoin-transactions.spec.ts +615 -0
  112. package/tsconfig.json +14 -0
  113. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +0 -1
  114. package/cjs/transactions/ethereum.js.map +0 -1
  115. /package/{README.md → dist/README.md} +0 -0
  116. /package/{cjs → dist/cjs}/errorUtils.js +0 -0
  117. /package/{cjs → dist/cjs}/errorUtils.js.map +0 -0
  118. /package/{cjs → dist/cjs}/hardware-wallet-manager.js +0 -0
  119. /package/{cjs → dist/cjs}/hardware-wallet-manager.js.map +0 -0
  120. /package/{cjs → dist/cjs}/index.js +0 -0
  121. /package/{cjs → dist/cjs}/index.js.map +0 -0
  122. /package/{cjs → dist/cjs}/initial-state.js +0 -0
  123. /package/{cjs → dist/cjs}/initial-state.js.map +0 -0
  124. /package/{cjs → dist/cjs}/keyring-manager.js +0 -0
  125. /package/{cjs → dist/cjs}/keyring-manager.js.map +0 -0
  126. /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js +0 -0
  127. /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js.map +0 -0
  128. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
  129. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
  130. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
  131. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
  132. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
  133. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
  134. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
  135. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
  136. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
  137. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
  138. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
  139. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
  140. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
  141. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
  142. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
  143. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
  144. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
  145. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
  146. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
  147. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
  148. /package/{cjs → dist/cjs}/ledger/consts.js +0 -0
  149. /package/{cjs → dist/cjs}/ledger/consts.js.map +0 -0
  150. /package/{cjs → dist/cjs}/ledger/index.js +0 -0
  151. /package/{cjs → dist/cjs}/ledger/index.js.map +0 -0
  152. /package/{cjs → dist/cjs}/ledger/types.js +0 -0
  153. /package/{cjs → dist/cjs}/ledger/types.js.map +0 -0
  154. /package/{cjs → dist/cjs}/network-utils.js +0 -0
  155. /package/{cjs → dist/cjs}/network-utils.js.map +0 -0
  156. /package/{cjs → dist/cjs}/providers.js +0 -0
  157. /package/{cjs → dist/cjs}/providers.js.map +0 -0
  158. /package/{cjs → dist/cjs}/signers.js +0 -0
  159. /package/{cjs → dist/cjs}/signers.js.map +0 -0
  160. /package/{cjs → dist/cjs}/storage.js +0 -0
  161. /package/{cjs → dist/cjs}/storage.js.map +0 -0
  162. /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js +0 -0
  163. /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js.map +0 -0
  164. /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js +0 -0
  165. /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
  166. /package/{cjs → dist/cjs}/transactions/index.js +0 -0
  167. /package/{cjs → dist/cjs}/transactions/index.js.map +0 -0
  168. /package/{cjs → dist/cjs}/transactions/syscoin.js +0 -0
  169. /package/{cjs → dist/cjs}/transactions/syscoin.js.map +0 -0
  170. /package/{cjs → dist/cjs}/trezor/index.js +0 -0
  171. /package/{cjs → dist/cjs}/trezor/index.js.map +0 -0
  172. /package/{cjs → dist/cjs}/types.js +0 -0
  173. /package/{cjs → dist/cjs}/types.js.map +0 -0
  174. /package/{cjs → dist/cjs}/utils/derivation-paths.js +0 -0
  175. /package/{cjs → dist/cjs}/utils/derivation-paths.js.map +0 -0
  176. /package/{cjs → dist/cjs}/utils/psbt.js +0 -0
  177. /package/{cjs → dist/cjs}/utils/psbt.js.map +0 -0
  178. /package/{cjs → dist/cjs}/utils.js +0 -0
  179. /package/{cjs → dist/cjs}/utils.js.map +0 -0
  180. /package/{types → dist/types}/errorUtils.d.ts +0 -0
  181. /package/{types → dist/types}/hardware-wallet-manager.d.ts +0 -0
  182. /package/{types → dist/types}/index.d.ts +0 -0
  183. /package/{types → dist/types}/initial-state.d.ts +0 -0
  184. /package/{types → dist/types}/keyring-manager.d.ts +0 -0
  185. /package/{types → dist/types}/ledger/bitcoin_client/index.d.ts +0 -0
  186. /package/{types → dist/types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
  187. /package/{types → dist/types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
  188. /package/{types → dist/types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
  189. /package/{types → dist/types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
  190. /package/{types → dist/types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
  191. /package/{types → dist/types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
  192. /package/{types → dist/types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
  193. /package/{types → dist/types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
  194. /package/{types → dist/types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
  195. /package/{types → dist/types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
  196. /package/{types → dist/types}/ledger/consts.d.ts +0 -0
  197. /package/{types → dist/types}/ledger/index.d.ts +0 -0
  198. /package/{types → dist/types}/ledger/types.d.ts +0 -0
  199. /package/{types → dist/types}/network-utils.d.ts +0 -0
  200. /package/{types → dist/types}/providers.d.ts +0 -0
  201. /package/{types → dist/types}/signers.d.ts +0 -0
  202. /package/{types → dist/types}/storage.d.ts +0 -0
  203. /package/{types → dist/types}/transactions/__tests__/integration.test.d.ts +0 -0
  204. /package/{types → dist/types}/transactions/__tests__/syscoin.test.d.ts +0 -0
  205. /package/{types → dist/types}/transactions/ethereum.d.ts +0 -0
  206. /package/{types → dist/types}/transactions/index.d.ts +0 -0
  207. /package/{types → dist/types}/transactions/syscoin.d.ts +0 -0
  208. /package/{types → dist/types}/trezor/index.d.ts +0 -0
  209. /package/{types → dist/types}/types.d.ts +0 -0
  210. /package/{types → dist/types}/utils/derivation-paths.d.ts +0 -0
  211. /package/{types → dist/types}/utils/psbt.d.ts +0 -0
  212. /package/{types → dist/types}/utils.d.ts +0 -0
@@ -0,0 +1,2655 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Code coverage report for src/trezor/index.ts</title>
5
+ <meta charset="utf-8" />
6
+ <link rel="stylesheet" href="../../prettify.css" />
7
+ <link rel="stylesheet" href="../../base.css" />
8
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
9
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
10
+ <style type="text/css">
11
+ .coverage-summary .sorter {
12
+ background-image: url(../../sort-arrow-sprite.png);
13
+ }
14
+ </style>
15
+ </head>
16
+
17
+ <body>
18
+ <div class="wrapper">
19
+ <div class="pad1">
20
+ <h1>
21
+ <a href="../../index.html">All files</a> /
22
+ <a href="index.html">src/trezor</a> index.ts
23
+ </h1>
24
+ <div class="clearfix">
25
+ <div class="fl pad1y space-right2">
26
+ <span class="strong">16.23% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class="fraction">38/234</span>
29
+ </div>
30
+
31
+ <div class="fl pad1y space-right2">
32
+ <span class="strong">4.16% </span>
33
+ <span class="quiet">Branches</span>
34
+ <span class="fraction">4/96</span>
35
+ </div>
36
+
37
+ <div class="fl pad1y space-right2">
38
+ <span class="strong">7.89% </span>
39
+ <span class="quiet">Functions</span>
40
+ <span class="fraction">3/38</span>
41
+ </div>
42
+
43
+ <div class="fl pad1y space-right2">
44
+ <span class="strong">16.88% </span>
45
+ <span class="quiet">Lines</span>
46
+ <span class="fraction">38/225</span>
47
+ </div>
48
+ </div>
49
+ <p class="quiet">
50
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block,
51
+ <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
52
+ </p>
53
+ <template id="filterTemplate">
54
+ <div class="quiet">
55
+ Filter:
56
+ <input type="search" id="fileSearch" />
57
+ </div>
58
+ </template>
59
+ </div>
60
+ <div class="status-line low"></div>
61
+ <pre><table class="coverage">
62
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
63
+ <a name='L2'></a><a href='#L2'>2</a>
64
+ <a name='L3'></a><a href='#L3'>3</a>
65
+ <a name='L4'></a><a href='#L4'>4</a>
66
+ <a name='L5'></a><a href='#L5'>5</a>
67
+ <a name='L6'></a><a href='#L6'>6</a>
68
+ <a name='L7'></a><a href='#L7'>7</a>
69
+ <a name='L8'></a><a href='#L8'>8</a>
70
+ <a name='L9'></a><a href='#L9'>9</a>
71
+ <a name='L10'></a><a href='#L10'>10</a>
72
+ <a name='L11'></a><a href='#L11'>11</a>
73
+ <a name='L12'></a><a href='#L12'>12</a>
74
+ <a name='L13'></a><a href='#L13'>13</a>
75
+ <a name='L14'></a><a href='#L14'>14</a>
76
+ <a name='L15'></a><a href='#L15'>15</a>
77
+ <a name='L16'></a><a href='#L16'>16</a>
78
+ <a name='L17'></a><a href='#L17'>17</a>
79
+ <a name='L18'></a><a href='#L18'>18</a>
80
+ <a name='L19'></a><a href='#L19'>19</a>
81
+ <a name='L20'></a><a href='#L20'>20</a>
82
+ <a name='L21'></a><a href='#L21'>21</a>
83
+ <a name='L22'></a><a href='#L22'>22</a>
84
+ <a name='L23'></a><a href='#L23'>23</a>
85
+ <a name='L24'></a><a href='#L24'>24</a>
86
+ <a name='L25'></a><a href='#L25'>25</a>
87
+ <a name='L26'></a><a href='#L26'>26</a>
88
+ <a name='L27'></a><a href='#L27'>27</a>
89
+ <a name='L28'></a><a href='#L28'>28</a>
90
+ <a name='L29'></a><a href='#L29'>29</a>
91
+ <a name='L30'></a><a href='#L30'>30</a>
92
+ <a name='L31'></a><a href='#L31'>31</a>
93
+ <a name='L32'></a><a href='#L32'>32</a>
94
+ <a name='L33'></a><a href='#L33'>33</a>
95
+ <a name='L34'></a><a href='#L34'>34</a>
96
+ <a name='L35'></a><a href='#L35'>35</a>
97
+ <a name='L36'></a><a href='#L36'>36</a>
98
+ <a name='L37'></a><a href='#L37'>37</a>
99
+ <a name='L38'></a><a href='#L38'>38</a>
100
+ <a name='L39'></a><a href='#L39'>39</a>
101
+ <a name='L40'></a><a href='#L40'>40</a>
102
+ <a name='L41'></a><a href='#L41'>41</a>
103
+ <a name='L42'></a><a href='#L42'>42</a>
104
+ <a name='L43'></a><a href='#L43'>43</a>
105
+ <a name='L44'></a><a href='#L44'>44</a>
106
+ <a name='L45'></a><a href='#L45'>45</a>
107
+ <a name='L46'></a><a href='#L46'>46</a>
108
+ <a name='L47'></a><a href='#L47'>47</a>
109
+ <a name='L48'></a><a href='#L48'>48</a>
110
+ <a name='L49'></a><a href='#L49'>49</a>
111
+ <a name='L50'></a><a href='#L50'>50</a>
112
+ <a name='L51'></a><a href='#L51'>51</a>
113
+ <a name='L52'></a><a href='#L52'>52</a>
114
+ <a name='L53'></a><a href='#L53'>53</a>
115
+ <a name='L54'></a><a href='#L54'>54</a>
116
+ <a name='L55'></a><a href='#L55'>55</a>
117
+ <a name='L56'></a><a href='#L56'>56</a>
118
+ <a name='L57'></a><a href='#L57'>57</a>
119
+ <a name='L58'></a><a href='#L58'>58</a>
120
+ <a name='L59'></a><a href='#L59'>59</a>
121
+ <a name='L60'></a><a href='#L60'>60</a>
122
+ <a name='L61'></a><a href='#L61'>61</a>
123
+ <a name='L62'></a><a href='#L62'>62</a>
124
+ <a name='L63'></a><a href='#L63'>63</a>
125
+ <a name='L64'></a><a href='#L64'>64</a>
126
+ <a name='L65'></a><a href='#L65'>65</a>
127
+ <a name='L66'></a><a href='#L66'>66</a>
128
+ <a name='L67'></a><a href='#L67'>67</a>
129
+ <a name='L68'></a><a href='#L68'>68</a>
130
+ <a name='L69'></a><a href='#L69'>69</a>
131
+ <a name='L70'></a><a href='#L70'>70</a>
132
+ <a name='L71'></a><a href='#L71'>71</a>
133
+ <a name='L72'></a><a href='#L72'>72</a>
134
+ <a name='L73'></a><a href='#L73'>73</a>
135
+ <a name='L74'></a><a href='#L74'>74</a>
136
+ <a name='L75'></a><a href='#L75'>75</a>
137
+ <a name='L76'></a><a href='#L76'>76</a>
138
+ <a name='L77'></a><a href='#L77'>77</a>
139
+ <a name='L78'></a><a href='#L78'>78</a>
140
+ <a name='L79'></a><a href='#L79'>79</a>
141
+ <a name='L80'></a><a href='#L80'>80</a>
142
+ <a name='L81'></a><a href='#L81'>81</a>
143
+ <a name='L82'></a><a href='#L82'>82</a>
144
+ <a name='L83'></a><a href='#L83'>83</a>
145
+ <a name='L84'></a><a href='#L84'>84</a>
146
+ <a name='L85'></a><a href='#L85'>85</a>
147
+ <a name='L86'></a><a href='#L86'>86</a>
148
+ <a name='L87'></a><a href='#L87'>87</a>
149
+ <a name='L88'></a><a href='#L88'>88</a>
150
+ <a name='L89'></a><a href='#L89'>89</a>
151
+ <a name='L90'></a><a href='#L90'>90</a>
152
+ <a name='L91'></a><a href='#L91'>91</a>
153
+ <a name='L92'></a><a href='#L92'>92</a>
154
+ <a name='L93'></a><a href='#L93'>93</a>
155
+ <a name='L94'></a><a href='#L94'>94</a>
156
+ <a name='L95'></a><a href='#L95'>95</a>
157
+ <a name='L96'></a><a href='#L96'>96</a>
158
+ <a name='L97'></a><a href='#L97'>97</a>
159
+ <a name='L98'></a><a href='#L98'>98</a>
160
+ <a name='L99'></a><a href='#L99'>99</a>
161
+ <a name='L100'></a><a href='#L100'>100</a>
162
+ <a name='L101'></a><a href='#L101'>101</a>
163
+ <a name='L102'></a><a href='#L102'>102</a>
164
+ <a name='L103'></a><a href='#L103'>103</a>
165
+ <a name='L104'></a><a href='#L104'>104</a>
166
+ <a name='L105'></a><a href='#L105'>105</a>
167
+ <a name='L106'></a><a href='#L106'>106</a>
168
+ <a name='L107'></a><a href='#L107'>107</a>
169
+ <a name='L108'></a><a href='#L108'>108</a>
170
+ <a name='L109'></a><a href='#L109'>109</a>
171
+ <a name='L110'></a><a href='#L110'>110</a>
172
+ <a name='L111'></a><a href='#L111'>111</a>
173
+ <a name='L112'></a><a href='#L112'>112</a>
174
+ <a name='L113'></a><a href='#L113'>113</a>
175
+ <a name='L114'></a><a href='#L114'>114</a>
176
+ <a name='L115'></a><a href='#L115'>115</a>
177
+ <a name='L116'></a><a href='#L116'>116</a>
178
+ <a name='L117'></a><a href='#L117'>117</a>
179
+ <a name='L118'></a><a href='#L118'>118</a>
180
+ <a name='L119'></a><a href='#L119'>119</a>
181
+ <a name='L120'></a><a href='#L120'>120</a>
182
+ <a name='L121'></a><a href='#L121'>121</a>
183
+ <a name='L122'></a><a href='#L122'>122</a>
184
+ <a name='L123'></a><a href='#L123'>123</a>
185
+ <a name='L124'></a><a href='#L124'>124</a>
186
+ <a name='L125'></a><a href='#L125'>125</a>
187
+ <a name='L126'></a><a href='#L126'>126</a>
188
+ <a name='L127'></a><a href='#L127'>127</a>
189
+ <a name='L128'></a><a href='#L128'>128</a>
190
+ <a name='L129'></a><a href='#L129'>129</a>
191
+ <a name='L130'></a><a href='#L130'>130</a>
192
+ <a name='L131'></a><a href='#L131'>131</a>
193
+ <a name='L132'></a><a href='#L132'>132</a>
194
+ <a name='L133'></a><a href='#L133'>133</a>
195
+ <a name='L134'></a><a href='#L134'>134</a>
196
+ <a name='L135'></a><a href='#L135'>135</a>
197
+ <a name='L136'></a><a href='#L136'>136</a>
198
+ <a name='L137'></a><a href='#L137'>137</a>
199
+ <a name='L138'></a><a href='#L138'>138</a>
200
+ <a name='L139'></a><a href='#L139'>139</a>
201
+ <a name='L140'></a><a href='#L140'>140</a>
202
+ <a name='L141'></a><a href='#L141'>141</a>
203
+ <a name='L142'></a><a href='#L142'>142</a>
204
+ <a name='L143'></a><a href='#L143'>143</a>
205
+ <a name='L144'></a><a href='#L144'>144</a>
206
+ <a name='L145'></a><a href='#L145'>145</a>
207
+ <a name='L146'></a><a href='#L146'>146</a>
208
+ <a name='L147'></a><a href='#L147'>147</a>
209
+ <a name='L148'></a><a href='#L148'>148</a>
210
+ <a name='L149'></a><a href='#L149'>149</a>
211
+ <a name='L150'></a><a href='#L150'>150</a>
212
+ <a name='L151'></a><a href='#L151'>151</a>
213
+ <a name='L152'></a><a href='#L152'>152</a>
214
+ <a name='L153'></a><a href='#L153'>153</a>
215
+ <a name='L154'></a><a href='#L154'>154</a>
216
+ <a name='L155'></a><a href='#L155'>155</a>
217
+ <a name='L156'></a><a href='#L156'>156</a>
218
+ <a name='L157'></a><a href='#L157'>157</a>
219
+ <a name='L158'></a><a href='#L158'>158</a>
220
+ <a name='L159'></a><a href='#L159'>159</a>
221
+ <a name='L160'></a><a href='#L160'>160</a>
222
+ <a name='L161'></a><a href='#L161'>161</a>
223
+ <a name='L162'></a><a href='#L162'>162</a>
224
+ <a name='L163'></a><a href='#L163'>163</a>
225
+ <a name='L164'></a><a href='#L164'>164</a>
226
+ <a name='L165'></a><a href='#L165'>165</a>
227
+ <a name='L166'></a><a href='#L166'>166</a>
228
+ <a name='L167'></a><a href='#L167'>167</a>
229
+ <a name='L168'></a><a href='#L168'>168</a>
230
+ <a name='L169'></a><a href='#L169'>169</a>
231
+ <a name='L170'></a><a href='#L170'>170</a>
232
+ <a name='L171'></a><a href='#L171'>171</a>
233
+ <a name='L172'></a><a href='#L172'>172</a>
234
+ <a name='L173'></a><a href='#L173'>173</a>
235
+ <a name='L174'></a><a href='#L174'>174</a>
236
+ <a name='L175'></a><a href='#L175'>175</a>
237
+ <a name='L176'></a><a href='#L176'>176</a>
238
+ <a name='L177'></a><a href='#L177'>177</a>
239
+ <a name='L178'></a><a href='#L178'>178</a>
240
+ <a name='L179'></a><a href='#L179'>179</a>
241
+ <a name='L180'></a><a href='#L180'>180</a>
242
+ <a name='L181'></a><a href='#L181'>181</a>
243
+ <a name='L182'></a><a href='#L182'>182</a>
244
+ <a name='L183'></a><a href='#L183'>183</a>
245
+ <a name='L184'></a><a href='#L184'>184</a>
246
+ <a name='L185'></a><a href='#L185'>185</a>
247
+ <a name='L186'></a><a href='#L186'>186</a>
248
+ <a name='L187'></a><a href='#L187'>187</a>
249
+ <a name='L188'></a><a href='#L188'>188</a>
250
+ <a name='L189'></a><a href='#L189'>189</a>
251
+ <a name='L190'></a><a href='#L190'>190</a>
252
+ <a name='L191'></a><a href='#L191'>191</a>
253
+ <a name='L192'></a><a href='#L192'>192</a>
254
+ <a name='L193'></a><a href='#L193'>193</a>
255
+ <a name='L194'></a><a href='#L194'>194</a>
256
+ <a name='L195'></a><a href='#L195'>195</a>
257
+ <a name='L196'></a><a href='#L196'>196</a>
258
+ <a name='L197'></a><a href='#L197'>197</a>
259
+ <a name='L198'></a><a href='#L198'>198</a>
260
+ <a name='L199'></a><a href='#L199'>199</a>
261
+ <a name='L200'></a><a href='#L200'>200</a>
262
+ <a name='L201'></a><a href='#L201'>201</a>
263
+ <a name='L202'></a><a href='#L202'>202</a>
264
+ <a name='L203'></a><a href='#L203'>203</a>
265
+ <a name='L204'></a><a href='#L204'>204</a>
266
+ <a name='L205'></a><a href='#L205'>205</a>
267
+ <a name='L206'></a><a href='#L206'>206</a>
268
+ <a name='L207'></a><a href='#L207'>207</a>
269
+ <a name='L208'></a><a href='#L208'>208</a>
270
+ <a name='L209'></a><a href='#L209'>209</a>
271
+ <a name='L210'></a><a href='#L210'>210</a>
272
+ <a name='L211'></a><a href='#L211'>211</a>
273
+ <a name='L212'></a><a href='#L212'>212</a>
274
+ <a name='L213'></a><a href='#L213'>213</a>
275
+ <a name='L214'></a><a href='#L214'>214</a>
276
+ <a name='L215'></a><a href='#L215'>215</a>
277
+ <a name='L216'></a><a href='#L216'>216</a>
278
+ <a name='L217'></a><a href='#L217'>217</a>
279
+ <a name='L218'></a><a href='#L218'>218</a>
280
+ <a name='L219'></a><a href='#L219'>219</a>
281
+ <a name='L220'></a><a href='#L220'>220</a>
282
+ <a name='L221'></a><a href='#L221'>221</a>
283
+ <a name='L222'></a><a href='#L222'>222</a>
284
+ <a name='L223'></a><a href='#L223'>223</a>
285
+ <a name='L224'></a><a href='#L224'>224</a>
286
+ <a name='L225'></a><a href='#L225'>225</a>
287
+ <a name='L226'></a><a href='#L226'>226</a>
288
+ <a name='L227'></a><a href='#L227'>227</a>
289
+ <a name='L228'></a><a href='#L228'>228</a>
290
+ <a name='L229'></a><a href='#L229'>229</a>
291
+ <a name='L230'></a><a href='#L230'>230</a>
292
+ <a name='L231'></a><a href='#L231'>231</a>
293
+ <a name='L232'></a><a href='#L232'>232</a>
294
+ <a name='L233'></a><a href='#L233'>233</a>
295
+ <a name='L234'></a><a href='#L234'>234</a>
296
+ <a name='L235'></a><a href='#L235'>235</a>
297
+ <a name='L236'></a><a href='#L236'>236</a>
298
+ <a name='L237'></a><a href='#L237'>237</a>
299
+ <a name='L238'></a><a href='#L238'>238</a>
300
+ <a name='L239'></a><a href='#L239'>239</a>
301
+ <a name='L240'></a><a href='#L240'>240</a>
302
+ <a name='L241'></a><a href='#L241'>241</a>
303
+ <a name='L242'></a><a href='#L242'>242</a>
304
+ <a name='L243'></a><a href='#L243'>243</a>
305
+ <a name='L244'></a><a href='#L244'>244</a>
306
+ <a name='L245'></a><a href='#L245'>245</a>
307
+ <a name='L246'></a><a href='#L246'>246</a>
308
+ <a name='L247'></a><a href='#L247'>247</a>
309
+ <a name='L248'></a><a href='#L248'>248</a>
310
+ <a name='L249'></a><a href='#L249'>249</a>
311
+ <a name='L250'></a><a href='#L250'>250</a>
312
+ <a name='L251'></a><a href='#L251'>251</a>
313
+ <a name='L252'></a><a href='#L252'>252</a>
314
+ <a name='L253'></a><a href='#L253'>253</a>
315
+ <a name='L254'></a><a href='#L254'>254</a>
316
+ <a name='L255'></a><a href='#L255'>255</a>
317
+ <a name='L256'></a><a href='#L256'>256</a>
318
+ <a name='L257'></a><a href='#L257'>257</a>
319
+ <a name='L258'></a><a href='#L258'>258</a>
320
+ <a name='L259'></a><a href='#L259'>259</a>
321
+ <a name='L260'></a><a href='#L260'>260</a>
322
+ <a name='L261'></a><a href='#L261'>261</a>
323
+ <a name='L262'></a><a href='#L262'>262</a>
324
+ <a name='L263'></a><a href='#L263'>263</a>
325
+ <a name='L264'></a><a href='#L264'>264</a>
326
+ <a name='L265'></a><a href='#L265'>265</a>
327
+ <a name='L266'></a><a href='#L266'>266</a>
328
+ <a name='L267'></a><a href='#L267'>267</a>
329
+ <a name='L268'></a><a href='#L268'>268</a>
330
+ <a name='L269'></a><a href='#L269'>269</a>
331
+ <a name='L270'></a><a href='#L270'>270</a>
332
+ <a name='L271'></a><a href='#L271'>271</a>
333
+ <a name='L272'></a><a href='#L272'>272</a>
334
+ <a name='L273'></a><a href='#L273'>273</a>
335
+ <a name='L274'></a><a href='#L274'>274</a>
336
+ <a name='L275'></a><a href='#L275'>275</a>
337
+ <a name='L276'></a><a href='#L276'>276</a>
338
+ <a name='L277'></a><a href='#L277'>277</a>
339
+ <a name='L278'></a><a href='#L278'>278</a>
340
+ <a name='L279'></a><a href='#L279'>279</a>
341
+ <a name='L280'></a><a href='#L280'>280</a>
342
+ <a name='L281'></a><a href='#L281'>281</a>
343
+ <a name='L282'></a><a href='#L282'>282</a>
344
+ <a name='L283'></a><a href='#L283'>283</a>
345
+ <a name='L284'></a><a href='#L284'>284</a>
346
+ <a name='L285'></a><a href='#L285'>285</a>
347
+ <a name='L286'></a><a href='#L286'>286</a>
348
+ <a name='L287'></a><a href='#L287'>287</a>
349
+ <a name='L288'></a><a href='#L288'>288</a>
350
+ <a name='L289'></a><a href='#L289'>289</a>
351
+ <a name='L290'></a><a href='#L290'>290</a>
352
+ <a name='L291'></a><a href='#L291'>291</a>
353
+ <a name='L292'></a><a href='#L292'>292</a>
354
+ <a name='L293'></a><a href='#L293'>293</a>
355
+ <a name='L294'></a><a href='#L294'>294</a>
356
+ <a name='L295'></a><a href='#L295'>295</a>
357
+ <a name='L296'></a><a href='#L296'>296</a>
358
+ <a name='L297'></a><a href='#L297'>297</a>
359
+ <a name='L298'></a><a href='#L298'>298</a>
360
+ <a name='L299'></a><a href='#L299'>299</a>
361
+ <a name='L300'></a><a href='#L300'>300</a>
362
+ <a name='L301'></a><a href='#L301'>301</a>
363
+ <a name='L302'></a><a href='#L302'>302</a>
364
+ <a name='L303'></a><a href='#L303'>303</a>
365
+ <a name='L304'></a><a href='#L304'>304</a>
366
+ <a name='L305'></a><a href='#L305'>305</a>
367
+ <a name='L306'></a><a href='#L306'>306</a>
368
+ <a name='L307'></a><a href='#L307'>307</a>
369
+ <a name='L308'></a><a href='#L308'>308</a>
370
+ <a name='L309'></a><a href='#L309'>309</a>
371
+ <a name='L310'></a><a href='#L310'>310</a>
372
+ <a name='L311'></a><a href='#L311'>311</a>
373
+ <a name='L312'></a><a href='#L312'>312</a>
374
+ <a name='L313'></a><a href='#L313'>313</a>
375
+ <a name='L314'></a><a href='#L314'>314</a>
376
+ <a name='L315'></a><a href='#L315'>315</a>
377
+ <a name='L316'></a><a href='#L316'>316</a>
378
+ <a name='L317'></a><a href='#L317'>317</a>
379
+ <a name='L318'></a><a href='#L318'>318</a>
380
+ <a name='L319'></a><a href='#L319'>319</a>
381
+ <a name='L320'></a><a href='#L320'>320</a>
382
+ <a name='L321'></a><a href='#L321'>321</a>
383
+ <a name='L322'></a><a href='#L322'>322</a>
384
+ <a name='L323'></a><a href='#L323'>323</a>
385
+ <a name='L324'></a><a href='#L324'>324</a>
386
+ <a name='L325'></a><a href='#L325'>325</a>
387
+ <a name='L326'></a><a href='#L326'>326</a>
388
+ <a name='L327'></a><a href='#L327'>327</a>
389
+ <a name='L328'></a><a href='#L328'>328</a>
390
+ <a name='L329'></a><a href='#L329'>329</a>
391
+ <a name='L330'></a><a href='#L330'>330</a>
392
+ <a name='L331'></a><a href='#L331'>331</a>
393
+ <a name='L332'></a><a href='#L332'>332</a>
394
+ <a name='L333'></a><a href='#L333'>333</a>
395
+ <a name='L334'></a><a href='#L334'>334</a>
396
+ <a name='L335'></a><a href='#L335'>335</a>
397
+ <a name='L336'></a><a href='#L336'>336</a>
398
+ <a name='L337'></a><a href='#L337'>337</a>
399
+ <a name='L338'></a><a href='#L338'>338</a>
400
+ <a name='L339'></a><a href='#L339'>339</a>
401
+ <a name='L340'></a><a href='#L340'>340</a>
402
+ <a name='L341'></a><a href='#L341'>341</a>
403
+ <a name='L342'></a><a href='#L342'>342</a>
404
+ <a name='L343'></a><a href='#L343'>343</a>
405
+ <a name='L344'></a><a href='#L344'>344</a>
406
+ <a name='L345'></a><a href='#L345'>345</a>
407
+ <a name='L346'></a><a href='#L346'>346</a>
408
+ <a name='L347'></a><a href='#L347'>347</a>
409
+ <a name='L348'></a><a href='#L348'>348</a>
410
+ <a name='L349'></a><a href='#L349'>349</a>
411
+ <a name='L350'></a><a href='#L350'>350</a>
412
+ <a name='L351'></a><a href='#L351'>351</a>
413
+ <a name='L352'></a><a href='#L352'>352</a>
414
+ <a name='L353'></a><a href='#L353'>353</a>
415
+ <a name='L354'></a><a href='#L354'>354</a>
416
+ <a name='L355'></a><a href='#L355'>355</a>
417
+ <a name='L356'></a><a href='#L356'>356</a>
418
+ <a name='L357'></a><a href='#L357'>357</a>
419
+ <a name='L358'></a><a href='#L358'>358</a>
420
+ <a name='L359'></a><a href='#L359'>359</a>
421
+ <a name='L360'></a><a href='#L360'>360</a>
422
+ <a name='L361'></a><a href='#L361'>361</a>
423
+ <a name='L362'></a><a href='#L362'>362</a>
424
+ <a name='L363'></a><a href='#L363'>363</a>
425
+ <a name='L364'></a><a href='#L364'>364</a>
426
+ <a name='L365'></a><a href='#L365'>365</a>
427
+ <a name='L366'></a><a href='#L366'>366</a>
428
+ <a name='L367'></a><a href='#L367'>367</a>
429
+ <a name='L368'></a><a href='#L368'>368</a>
430
+ <a name='L369'></a><a href='#L369'>369</a>
431
+ <a name='L370'></a><a href='#L370'>370</a>
432
+ <a name='L371'></a><a href='#L371'>371</a>
433
+ <a name='L372'></a><a href='#L372'>372</a>
434
+ <a name='L373'></a><a href='#L373'>373</a>
435
+ <a name='L374'></a><a href='#L374'>374</a>
436
+ <a name='L375'></a><a href='#L375'>375</a>
437
+ <a name='L376'></a><a href='#L376'>376</a>
438
+ <a name='L377'></a><a href='#L377'>377</a>
439
+ <a name='L378'></a><a href='#L378'>378</a>
440
+ <a name='L379'></a><a href='#L379'>379</a>
441
+ <a name='L380'></a><a href='#L380'>380</a>
442
+ <a name='L381'></a><a href='#L381'>381</a>
443
+ <a name='L382'></a><a href='#L382'>382</a>
444
+ <a name='L383'></a><a href='#L383'>383</a>
445
+ <a name='L384'></a><a href='#L384'>384</a>
446
+ <a name='L385'></a><a href='#L385'>385</a>
447
+ <a name='L386'></a><a href='#L386'>386</a>
448
+ <a name='L387'></a><a href='#L387'>387</a>
449
+ <a name='L388'></a><a href='#L388'>388</a>
450
+ <a name='L389'></a><a href='#L389'>389</a>
451
+ <a name='L390'></a><a href='#L390'>390</a>
452
+ <a name='L391'></a><a href='#L391'>391</a>
453
+ <a name='L392'></a><a href='#L392'>392</a>
454
+ <a name='L393'></a><a href='#L393'>393</a>
455
+ <a name='L394'></a><a href='#L394'>394</a>
456
+ <a name='L395'></a><a href='#L395'>395</a>
457
+ <a name='L396'></a><a href='#L396'>396</a>
458
+ <a name='L397'></a><a href='#L397'>397</a>
459
+ <a name='L398'></a><a href='#L398'>398</a>
460
+ <a name='L399'></a><a href='#L399'>399</a>
461
+ <a name='L400'></a><a href='#L400'>400</a>
462
+ <a name='L401'></a><a href='#L401'>401</a>
463
+ <a name='L402'></a><a href='#L402'>402</a>
464
+ <a name='L403'></a><a href='#L403'>403</a>
465
+ <a name='L404'></a><a href='#L404'>404</a>
466
+ <a name='L405'></a><a href='#L405'>405</a>
467
+ <a name='L406'></a><a href='#L406'>406</a>
468
+ <a name='L407'></a><a href='#L407'>407</a>
469
+ <a name='L408'></a><a href='#L408'>408</a>
470
+ <a name='L409'></a><a href='#L409'>409</a>
471
+ <a name='L410'></a><a href='#L410'>410</a>
472
+ <a name='L411'></a><a href='#L411'>411</a>
473
+ <a name='L412'></a><a href='#L412'>412</a>
474
+ <a name='L413'></a><a href='#L413'>413</a>
475
+ <a name='L414'></a><a href='#L414'>414</a>
476
+ <a name='L415'></a><a href='#L415'>415</a>
477
+ <a name='L416'></a><a href='#L416'>416</a>
478
+ <a name='L417'></a><a href='#L417'>417</a>
479
+ <a name='L418'></a><a href='#L418'>418</a>
480
+ <a name='L419'></a><a href='#L419'>419</a>
481
+ <a name='L420'></a><a href='#L420'>420</a>
482
+ <a name='L421'></a><a href='#L421'>421</a>
483
+ <a name='L422'></a><a href='#L422'>422</a>
484
+ <a name='L423'></a><a href='#L423'>423</a>
485
+ <a name='L424'></a><a href='#L424'>424</a>
486
+ <a name='L425'></a><a href='#L425'>425</a>
487
+ <a name='L426'></a><a href='#L426'>426</a>
488
+ <a name='L427'></a><a href='#L427'>427</a>
489
+ <a name='L428'></a><a href='#L428'>428</a>
490
+ <a name='L429'></a><a href='#L429'>429</a>
491
+ <a name='L430'></a><a href='#L430'>430</a>
492
+ <a name='L431'></a><a href='#L431'>431</a>
493
+ <a name='L432'></a><a href='#L432'>432</a>
494
+ <a name='L433'></a><a href='#L433'>433</a>
495
+ <a name='L434'></a><a href='#L434'>434</a>
496
+ <a name='L435'></a><a href='#L435'>435</a>
497
+ <a name='L436'></a><a href='#L436'>436</a>
498
+ <a name='L437'></a><a href='#L437'>437</a>
499
+ <a name='L438'></a><a href='#L438'>438</a>
500
+ <a name='L439'></a><a href='#L439'>439</a>
501
+ <a name='L440'></a><a href='#L440'>440</a>
502
+ <a name='L441'></a><a href='#L441'>441</a>
503
+ <a name='L442'></a><a href='#L442'>442</a>
504
+ <a name='L443'></a><a href='#L443'>443</a>
505
+ <a name='L444'></a><a href='#L444'>444</a>
506
+ <a name='L445'></a><a href='#L445'>445</a>
507
+ <a name='L446'></a><a href='#L446'>446</a>
508
+ <a name='L447'></a><a href='#L447'>447</a>
509
+ <a name='L448'></a><a href='#L448'>448</a>
510
+ <a name='L449'></a><a href='#L449'>449</a>
511
+ <a name='L450'></a><a href='#L450'>450</a>
512
+ <a name='L451'></a><a href='#L451'>451</a>
513
+ <a name='L452'></a><a href='#L452'>452</a>
514
+ <a name='L453'></a><a href='#L453'>453</a>
515
+ <a name='L454'></a><a href='#L454'>454</a>
516
+ <a name='L455'></a><a href='#L455'>455</a>
517
+ <a name='L456'></a><a href='#L456'>456</a>
518
+ <a name='L457'></a><a href='#L457'>457</a>
519
+ <a name='L458'></a><a href='#L458'>458</a>
520
+ <a name='L459'></a><a href='#L459'>459</a>
521
+ <a name='L460'></a><a href='#L460'>460</a>
522
+ <a name='L461'></a><a href='#L461'>461</a>
523
+ <a name='L462'></a><a href='#L462'>462</a>
524
+ <a name='L463'></a><a href='#L463'>463</a>
525
+ <a name='L464'></a><a href='#L464'>464</a>
526
+ <a name='L465'></a><a href='#L465'>465</a>
527
+ <a name='L466'></a><a href='#L466'>466</a>
528
+ <a name='L467'></a><a href='#L467'>467</a>
529
+ <a name='L468'></a><a href='#L468'>468</a>
530
+ <a name='L469'></a><a href='#L469'>469</a>
531
+ <a name='L470'></a><a href='#L470'>470</a>
532
+ <a name='L471'></a><a href='#L471'>471</a>
533
+ <a name='L472'></a><a href='#L472'>472</a>
534
+ <a name='L473'></a><a href='#L473'>473</a>
535
+ <a name='L474'></a><a href='#L474'>474</a>
536
+ <a name='L475'></a><a href='#L475'>475</a>
537
+ <a name='L476'></a><a href='#L476'>476</a>
538
+ <a name='L477'></a><a href='#L477'>477</a>
539
+ <a name='L478'></a><a href='#L478'>478</a>
540
+ <a name='L479'></a><a href='#L479'>479</a>
541
+ <a name='L480'></a><a href='#L480'>480</a>
542
+ <a name='L481'></a><a href='#L481'>481</a>
543
+ <a name='L482'></a><a href='#L482'>482</a>
544
+ <a name='L483'></a><a href='#L483'>483</a>
545
+ <a name='L484'></a><a href='#L484'>484</a>
546
+ <a name='L485'></a><a href='#L485'>485</a>
547
+ <a name='L486'></a><a href='#L486'>486</a>
548
+ <a name='L487'></a><a href='#L487'>487</a>
549
+ <a name='L488'></a><a href='#L488'>488</a>
550
+ <a name='L489'></a><a href='#L489'>489</a>
551
+ <a name='L490'></a><a href='#L490'>490</a>
552
+ <a name='L491'></a><a href='#L491'>491</a>
553
+ <a name='L492'></a><a href='#L492'>492</a>
554
+ <a name='L493'></a><a href='#L493'>493</a>
555
+ <a name='L494'></a><a href='#L494'>494</a>
556
+ <a name='L495'></a><a href='#L495'>495</a>
557
+ <a name='L496'></a><a href='#L496'>496</a>
558
+ <a name='L497'></a><a href='#L497'>497</a>
559
+ <a name='L498'></a><a href='#L498'>498</a>
560
+ <a name='L499'></a><a href='#L499'>499</a>
561
+ <a name='L500'></a><a href='#L500'>500</a>
562
+ <a name='L501'></a><a href='#L501'>501</a>
563
+ <a name='L502'></a><a href='#L502'>502</a>
564
+ <a name='L503'></a><a href='#L503'>503</a>
565
+ <a name='L504'></a><a href='#L504'>504</a>
566
+ <a name='L505'></a><a href='#L505'>505</a>
567
+ <a name='L506'></a><a href='#L506'>506</a>
568
+ <a name='L507'></a><a href='#L507'>507</a>
569
+ <a name='L508'></a><a href='#L508'>508</a>
570
+ <a name='L509'></a><a href='#L509'>509</a>
571
+ <a name='L510'></a><a href='#L510'>510</a>
572
+ <a name='L511'></a><a href='#L511'>511</a>
573
+ <a name='L512'></a><a href='#L512'>512</a>
574
+ <a name='L513'></a><a href='#L513'>513</a>
575
+ <a name='L514'></a><a href='#L514'>514</a>
576
+ <a name='L515'></a><a href='#L515'>515</a>
577
+ <a name='L516'></a><a href='#L516'>516</a>
578
+ <a name='L517'></a><a href='#L517'>517</a>
579
+ <a name='L518'></a><a href='#L518'>518</a>
580
+ <a name='L519'></a><a href='#L519'>519</a>
581
+ <a name='L520'></a><a href='#L520'>520</a>
582
+ <a name='L521'></a><a href='#L521'>521</a>
583
+ <a name='L522'></a><a href='#L522'>522</a>
584
+ <a name='L523'></a><a href='#L523'>523</a>
585
+ <a name='L524'></a><a href='#L524'>524</a>
586
+ <a name='L525'></a><a href='#L525'>525</a>
587
+ <a name='L526'></a><a href='#L526'>526</a>
588
+ <a name='L527'></a><a href='#L527'>527</a>
589
+ <a name='L528'></a><a href='#L528'>528</a>
590
+ <a name='L529'></a><a href='#L529'>529</a>
591
+ <a name='L530'></a><a href='#L530'>530</a>
592
+ <a name='L531'></a><a href='#L531'>531</a>
593
+ <a name='L532'></a><a href='#L532'>532</a>
594
+ <a name='L533'></a><a href='#L533'>533</a>
595
+ <a name='L534'></a><a href='#L534'>534</a>
596
+ <a name='L535'></a><a href='#L535'>535</a>
597
+ <a name='L536'></a><a href='#L536'>536</a>
598
+ <a name='L537'></a><a href='#L537'>537</a>
599
+ <a name='L538'></a><a href='#L538'>538</a>
600
+ <a name='L539'></a><a href='#L539'>539</a>
601
+ <a name='L540'></a><a href='#L540'>540</a>
602
+ <a name='L541'></a><a href='#L541'>541</a>
603
+ <a name='L542'></a><a href='#L542'>542</a>
604
+ <a name='L543'></a><a href='#L543'>543</a>
605
+ <a name='L544'></a><a href='#L544'>544</a>
606
+ <a name='L545'></a><a href='#L545'>545</a>
607
+ <a name='L546'></a><a href='#L546'>546</a>
608
+ <a name='L547'></a><a href='#L547'>547</a>
609
+ <a name='L548'></a><a href='#L548'>548</a>
610
+ <a name='L549'></a><a href='#L549'>549</a>
611
+ <a name='L550'></a><a href='#L550'>550</a>
612
+ <a name='L551'></a><a href='#L551'>551</a>
613
+ <a name='L552'></a><a href='#L552'>552</a>
614
+ <a name='L553'></a><a href='#L553'>553</a>
615
+ <a name='L554'></a><a href='#L554'>554</a>
616
+ <a name='L555'></a><a href='#L555'>555</a>
617
+ <a name='L556'></a><a href='#L556'>556</a>
618
+ <a name='L557'></a><a href='#L557'>557</a>
619
+ <a name='L558'></a><a href='#L558'>558</a>
620
+ <a name='L559'></a><a href='#L559'>559</a>
621
+ <a name='L560'></a><a href='#L560'>560</a>
622
+ <a name='L561'></a><a href='#L561'>561</a>
623
+ <a name='L562'></a><a href='#L562'>562</a>
624
+ <a name='L563'></a><a href='#L563'>563</a>
625
+ <a name='L564'></a><a href='#L564'>564</a>
626
+ <a name='L565'></a><a href='#L565'>565</a>
627
+ <a name='L566'></a><a href='#L566'>566</a>
628
+ <a name='L567'></a><a href='#L567'>567</a>
629
+ <a name='L568'></a><a href='#L568'>568</a>
630
+ <a name='L569'></a><a href='#L569'>569</a>
631
+ <a name='L570'></a><a href='#L570'>570</a>
632
+ <a name='L571'></a><a href='#L571'>571</a>
633
+ <a name='L572'></a><a href='#L572'>572</a>
634
+ <a name='L573'></a><a href='#L573'>573</a>
635
+ <a name='L574'></a><a href='#L574'>574</a>
636
+ <a name='L575'></a><a href='#L575'>575</a>
637
+ <a name='L576'></a><a href='#L576'>576</a>
638
+ <a name='L577'></a><a href='#L577'>577</a>
639
+ <a name='L578'></a><a href='#L578'>578</a>
640
+ <a name='L579'></a><a href='#L579'>579</a>
641
+ <a name='L580'></a><a href='#L580'>580</a>
642
+ <a name='L581'></a><a href='#L581'>581</a>
643
+ <a name='L582'></a><a href='#L582'>582</a>
644
+ <a name='L583'></a><a href='#L583'>583</a>
645
+ <a name='L584'></a><a href='#L584'>584</a>
646
+ <a name='L585'></a><a href='#L585'>585</a>
647
+ <a name='L586'></a><a href='#L586'>586</a>
648
+ <a name='L587'></a><a href='#L587'>587</a>
649
+ <a name='L588'></a><a href='#L588'>588</a>
650
+ <a name='L589'></a><a href='#L589'>589</a>
651
+ <a name='L590'></a><a href='#L590'>590</a>
652
+ <a name='L591'></a><a href='#L591'>591</a>
653
+ <a name='L592'></a><a href='#L592'>592</a>
654
+ <a name='L593'></a><a href='#L593'>593</a>
655
+ <a name='L594'></a><a href='#L594'>594</a>
656
+ <a name='L595'></a><a href='#L595'>595</a>
657
+ <a name='L596'></a><a href='#L596'>596</a>
658
+ <a name='L597'></a><a href='#L597'>597</a>
659
+ <a name='L598'></a><a href='#L598'>598</a>
660
+ <a name='L599'></a><a href='#L599'>599</a>
661
+ <a name='L600'></a><a href='#L600'>600</a>
662
+ <a name='L601'></a><a href='#L601'>601</a>
663
+ <a name='L602'></a><a href='#L602'>602</a>
664
+ <a name='L603'></a><a href='#L603'>603</a>
665
+ <a name='L604'></a><a href='#L604'>604</a>
666
+ <a name='L605'></a><a href='#L605'>605</a>
667
+ <a name='L606'></a><a href='#L606'>606</a>
668
+ <a name='L607'></a><a href='#L607'>607</a>
669
+ <a name='L608'></a><a href='#L608'>608</a>
670
+ <a name='L609'></a><a href='#L609'>609</a>
671
+ <a name='L610'></a><a href='#L610'>610</a>
672
+ <a name='L611'></a><a href='#L611'>611</a>
673
+ <a name='L612'></a><a href='#L612'>612</a>
674
+ <a name='L613'></a><a href='#L613'>613</a>
675
+ <a name='L614'></a><a href='#L614'>614</a>
676
+ <a name='L615'></a><a href='#L615'>615</a>
677
+ <a name='L616'></a><a href='#L616'>616</a>
678
+ <a name='L617'></a><a href='#L617'>617</a>
679
+ <a name='L618'></a><a href='#L618'>618</a>
680
+ <a name='L619'></a><a href='#L619'>619</a>
681
+ <a name='L620'></a><a href='#L620'>620</a>
682
+ <a name='L621'></a><a href='#L621'>621</a>
683
+ <a name='L622'></a><a href='#L622'>622</a>
684
+ <a name='L623'></a><a href='#L623'>623</a>
685
+ <a name='L624'></a><a href='#L624'>624</a>
686
+ <a name='L625'></a><a href='#L625'>625</a>
687
+ <a name='L626'></a><a href='#L626'>626</a>
688
+ <a name='L627'></a><a href='#L627'>627</a>
689
+ <a name='L628'></a><a href='#L628'>628</a>
690
+ <a name='L629'></a><a href='#L629'>629</a>
691
+ <a name='L630'></a><a href='#L630'>630</a>
692
+ <a name='L631'></a><a href='#L631'>631</a>
693
+ <a name='L632'></a><a href='#L632'>632</a>
694
+ <a name='L633'></a><a href='#L633'>633</a>
695
+ <a name='L634'></a><a href='#L634'>634</a>
696
+ <a name='L635'></a><a href='#L635'>635</a>
697
+ <a name='L636'></a><a href='#L636'>636</a>
698
+ <a name='L637'></a><a href='#L637'>637</a>
699
+ <a name='L638'></a><a href='#L638'>638</a>
700
+ <a name='L639'></a><a href='#L639'>639</a>
701
+ <a name='L640'></a><a href='#L640'>640</a>
702
+ <a name='L641'></a><a href='#L641'>641</a>
703
+ <a name='L642'></a><a href='#L642'>642</a>
704
+ <a name='L643'></a><a href='#L643'>643</a>
705
+ <a name='L644'></a><a href='#L644'>644</a>
706
+ <a name='L645'></a><a href='#L645'>645</a>
707
+ <a name='L646'></a><a href='#L646'>646</a>
708
+ <a name='L647'></a><a href='#L647'>647</a>
709
+ <a name='L648'></a><a href='#L648'>648</a>
710
+ <a name='L649'></a><a href='#L649'>649</a>
711
+ <a name='L650'></a><a href='#L650'>650</a>
712
+ <a name='L651'></a><a href='#L651'>651</a>
713
+ <a name='L652'></a><a href='#L652'>652</a>
714
+ <a name='L653'></a><a href='#L653'>653</a>
715
+ <a name='L654'></a><a href='#L654'>654</a>
716
+ <a name='L655'></a><a href='#L655'>655</a>
717
+ <a name='L656'></a><a href='#L656'>656</a>
718
+ <a name='L657'></a><a href='#L657'>657</a>
719
+ <a name='L658'></a><a href='#L658'>658</a>
720
+ <a name='L659'></a><a href='#L659'>659</a>
721
+ <a name='L660'></a><a href='#L660'>660</a>
722
+ <a name='L661'></a><a href='#L661'>661</a>
723
+ <a name='L662'></a><a href='#L662'>662</a>
724
+ <a name='L663'></a><a href='#L663'>663</a>
725
+ <a name='L664'></a><a href='#L664'>664</a>
726
+ <a name='L665'></a><a href='#L665'>665</a>
727
+ <a name='L666'></a><a href='#L666'>666</a>
728
+ <a name='L667'></a><a href='#L667'>667</a>
729
+ <a name='L668'></a><a href='#L668'>668</a>
730
+ <a name='L669'></a><a href='#L669'>669</a>
731
+ <a name='L670'></a><a href='#L670'>670</a>
732
+ <a name='L671'></a><a href='#L671'>671</a>
733
+ <a name='L672'></a><a href='#L672'>672</a>
734
+ <a name='L673'></a><a href='#L673'>673</a>
735
+ <a name='L674'></a><a href='#L674'>674</a>
736
+ <a name='L675'></a><a href='#L675'>675</a>
737
+ <a name='L676'></a><a href='#L676'>676</a>
738
+ <a name='L677'></a><a href='#L677'>677</a>
739
+ <a name='L678'></a><a href='#L678'>678</a>
740
+ <a name='L679'></a><a href='#L679'>679</a>
741
+ <a name='L680'></a><a href='#L680'>680</a>
742
+ <a name='L681'></a><a href='#L681'>681</a>
743
+ <a name='L682'></a><a href='#L682'>682</a>
744
+ <a name='L683'></a><a href='#L683'>683</a>
745
+ <a name='L684'></a><a href='#L684'>684</a>
746
+ <a name='L685'></a><a href='#L685'>685</a>
747
+ <a name='L686'></a><a href='#L686'>686</a>
748
+ <a name='L687'></a><a href='#L687'>687</a>
749
+ <a name='L688'></a><a href='#L688'>688</a>
750
+ <a name='L689'></a><a href='#L689'>689</a>
751
+ <a name='L690'></a><a href='#L690'>690</a>
752
+ <a name='L691'></a><a href='#L691'>691</a>
753
+ <a name='L692'></a><a href='#L692'>692</a>
754
+ <a name='L693'></a><a href='#L693'>693</a>
755
+ <a name='L694'></a><a href='#L694'>694</a>
756
+ <a name='L695'></a><a href='#L695'>695</a>
757
+ <a name='L696'></a><a href='#L696'>696</a>
758
+ <a name='L697'></a><a href='#L697'>697</a>
759
+ <a name='L698'></a><a href='#L698'>698</a>
760
+ <a name='L699'></a><a href='#L699'>699</a>
761
+ <a name='L700'></a><a href='#L700'>700</a>
762
+ <a name='L701'></a><a href='#L701'>701</a>
763
+ <a name='L702'></a><a href='#L702'>702</a>
764
+ <a name='L703'></a><a href='#L703'>703</a>
765
+ <a name='L704'></a><a href='#L704'>704</a>
766
+ <a name='L705'></a><a href='#L705'>705</a>
767
+ <a name='L706'></a><a href='#L706'>706</a>
768
+ <a name='L707'></a><a href='#L707'>707</a>
769
+ <a name='L708'></a><a href='#L708'>708</a>
770
+ <a name='L709'></a><a href='#L709'>709</a>
771
+ <a name='L710'></a><a href='#L710'>710</a>
772
+ <a name='L711'></a><a href='#L711'>711</a>
773
+ <a name='L712'></a><a href='#L712'>712</a>
774
+ <a name='L713'></a><a href='#L713'>713</a>
775
+ <a name='L714'></a><a href='#L714'>714</a>
776
+ <a name='L715'></a><a href='#L715'>715</a>
777
+ <a name='L716'></a><a href='#L716'>716</a>
778
+ <a name='L717'></a><a href='#L717'>717</a>
779
+ <a name='L718'></a><a href='#L718'>718</a>
780
+ <a name='L719'></a><a href='#L719'>719</a>
781
+ <a name='L720'></a><a href='#L720'>720</a>
782
+ <a name='L721'></a><a href='#L721'>721</a>
783
+ <a name='L722'></a><a href='#L722'>722</a>
784
+ <a name='L723'></a><a href='#L723'>723</a>
785
+ <a name='L724'></a><a href='#L724'>724</a>
786
+ <a name='L725'></a><a href='#L725'>725</a>
787
+ <a name='L726'></a><a href='#L726'>726</a>
788
+ <a name='L727'></a><a href='#L727'>727</a>
789
+ <a name='L728'></a><a href='#L728'>728</a>
790
+ <a name='L729'></a><a href='#L729'>729</a>
791
+ <a name='L730'></a><a href='#L730'>730</a>
792
+ <a name='L731'></a><a href='#L731'>731</a>
793
+ <a name='L732'></a><a href='#L732'>732</a>
794
+ <a name='L733'></a><a href='#L733'>733</a>
795
+ <a name='L734'></a><a href='#L734'>734</a>
796
+ <a name='L735'></a><a href='#L735'>735</a>
797
+ <a name='L736'></a><a href='#L736'>736</a>
798
+ <a name='L737'></a><a href='#L737'>737</a>
799
+ <a name='L738'></a><a href='#L738'>738</a>
800
+ <a name='L739'></a><a href='#L739'>739</a>
801
+ <a name='L740'></a><a href='#L740'>740</a>
802
+ <a name='L741'></a><a href='#L741'>741</a>
803
+ <a name='L742'></a><a href='#L742'>742</a>
804
+ <a name='L743'></a><a href='#L743'>743</a>
805
+ <a name='L744'></a><a href='#L744'>744</a>
806
+ <a name='L745'></a><a href='#L745'>745</a>
807
+ <a name='L746'></a><a href='#L746'>746</a>
808
+ <a name='L747'></a><a href='#L747'>747</a>
809
+ <a name='L748'></a><a href='#L748'>748</a>
810
+ <a name='L749'></a><a href='#L749'>749</a>
811
+ <a name='L750'></a><a href='#L750'>750</a>
812
+ <a name='L751'></a><a href='#L751'>751</a>
813
+ <a name='L752'></a><a href='#L752'>752</a>
814
+ <a name='L753'></a><a href='#L753'>753</a>
815
+ <a name='L754'></a><a href='#L754'>754</a>
816
+ <a name='L755'></a><a href='#L755'>755</a>
817
+ <a name='L756'></a><a href='#L756'>756</a>
818
+ <a name='L757'></a><a href='#L757'>757</a>
819
+ <a name='L758'></a><a href='#L758'>758</a>
820
+ <a name='L759'></a><a href='#L759'>759</a>
821
+ <a name='L760'></a><a href='#L760'>760</a>
822
+ <a name='L761'></a><a href='#L761'>761</a>
823
+ <a name='L762'></a><a href='#L762'>762</a>
824
+ <a name='L763'></a><a href='#L763'>763</a>
825
+ <a name='L764'></a><a href='#L764'>764</a>
826
+ <a name='L765'></a><a href='#L765'>765</a>
827
+ <a name='L766'></a><a href='#L766'>766</a>
828
+ <a name='L767'></a><a href='#L767'>767</a>
829
+ <a name='L768'></a><a href='#L768'>768</a>
830
+ <a name='L769'></a><a href='#L769'>769</a>
831
+ <a name='L770'></a><a href='#L770'>770</a>
832
+ <a name='L771'></a><a href='#L771'>771</a>
833
+ <a name='L772'></a><a href='#L772'>772</a>
834
+ <a name='L773'></a><a href='#L773'>773</a>
835
+ <a name='L774'></a><a href='#L774'>774</a>
836
+ <a name='L775'></a><a href='#L775'>775</a>
837
+ <a name='L776'></a><a href='#L776'>776</a>
838
+ <a name='L777'></a><a href='#L777'>777</a>
839
+ <a name='L778'></a><a href='#L778'>778</a>
840
+ <a name='L779'></a><a href='#L779'>779</a>
841
+ <a name='L780'></a><a href='#L780'>780</a>
842
+ <a name='L781'></a><a href='#L781'>781</a>
843
+ <a name='L782'></a><a href='#L782'>782</a>
844
+ <a name='L783'></a><a href='#L783'>783</a>
845
+ <a name='L784'></a><a href='#L784'>784</a>
846
+ <a name='L785'></a><a href='#L785'>785</a>
847
+ <a name='L786'></a><a href='#L786'>786</a>
848
+ <a name='L787'></a><a href='#L787'>787</a>
849
+ <a name='L788'></a><a href='#L788'>788</a>
850
+ <a name='L789'></a><a href='#L789'>789</a>
851
+ <a name='L790'></a><a href='#L790'>790</a>
852
+ <a name='L791'></a><a href='#L791'>791</a>
853
+ <a name='L792'></a><a href='#L792'>792</a>
854
+ <a name='L793'></a><a href='#L793'>793</a>
855
+ <a name='L794'></a><a href='#L794'>794</a>
856
+ <a name='L795'></a><a href='#L795'>795</a>
857
+ <a name='L796'></a><a href='#L796'>796</a>
858
+ <a name='L797'></a><a href='#L797'>797</a>
859
+ <a name='L798'></a><a href='#L798'>798</a>
860
+ <a name='L799'></a><a href='#L799'>799</a>
861
+ <a name='L800'></a><a href='#L800'>800</a>
862
+ <a name='L801'></a><a href='#L801'>801</a>
863
+ <a name='L802'></a><a href='#L802'>802</a>
864
+ <a name='L803'></a><a href='#L803'>803</a>
865
+ <a name='L804'></a><a href='#L804'>804</a>
866
+ <a name='L805'></a><a href='#L805'>805</a>
867
+ <a name='L806'></a><a href='#L806'>806</a>
868
+ <a name='L807'></a><a href='#L807'>807</a>
869
+ <a name='L808'></a><a href='#L808'>808</a>
870
+ <a name='L809'></a><a href='#L809'>809</a>
871
+ <a name='L810'></a><a href='#L810'>810</a>
872
+ <a name='L811'></a><a href='#L811'>811</a>
873
+ <a name='L812'></a><a href='#L812'>812</a>
874
+ <a name='L813'></a><a href='#L813'>813</a>
875
+ <a name='L814'></a><a href='#L814'>814</a>
876
+ <a name='L815'></a><a href='#L815'>815</a>
877
+ <a name='L816'></a><a href='#L816'>816</a>
878
+ <a name='L817'></a><a href='#L817'>817</a>
879
+ <a name='L818'></a><a href='#L818'>818</a>
880
+ <a name='L819'></a><a href='#L819'>819</a>
881
+ <a name='L820'></a><a href='#L820'>820</a>
882
+ <a name='L821'></a><a href='#L821'>821</a>
883
+ <a name='L822'></a><a href='#L822'>822</a>
884
+ <a name='L823'></a><a href='#L823'>823</a>
885
+ <a name='L824'></a><a href='#L824'>824</a>
886
+ <a name='L825'></a><a href='#L825'>825</a>
887
+ <a name='L826'></a><a href='#L826'>826</a>
888
+ <a name='L827'></a><a href='#L827'>827</a>
889
+ <a name='L828'></a><a href='#L828'>828</a>
890
+ <a name='L829'></a><a href='#L829'>829</a>
891
+ <a name='L830'></a><a href='#L830'>830</a>
892
+ <a name='L831'></a><a href='#L831'>831</a>
893
+ <a name='L832'></a><a href='#L832'>832</a>
894
+ <a name='L833'></a><a href='#L833'>833</a>
895
+ <a name='L834'></a><a href='#L834'>834</a>
896
+ <a name='L835'></a><a href='#L835'>835</a>
897
+ <a name='L836'></a><a href='#L836'>836</a>
898
+ <a name='L837'></a><a href='#L837'>837</a>
899
+ <a name='L838'></a><a href='#L838'>838</a>
900
+ <a name='L839'></a><a href='#L839'>839</a>
901
+ <a name='L840'></a><a href='#L840'>840</a>
902
+ <a name='L841'></a><a href='#L841'>841</a>
903
+ <a name='L842'></a><a href='#L842'>842</a>
904
+ <a name='L843'></a><a href='#L843'>843</a>
905
+ <a name='L844'></a><a href='#L844'>844</a>
906
+ <a name='L845'></a><a href='#L845'>845</a>
907
+ <a name='L846'></a><a href='#L846'>846</a>
908
+ <a name='L847'></a><a href='#L847'>847</a>
909
+ <a name='L848'></a><a href='#L848'>848</a>
910
+ <a name='L849'></a><a href='#L849'>849</a>
911
+ <a name='L850'></a><a href='#L850'>850</a>
912
+ <a name='L851'></a><a href='#L851'>851</a>
913
+ <a name='L852'></a><a href='#L852'>852</a>
914
+ <a name='L853'></a><a href='#L853'>853</a>
915
+ <a name='L854'></a><a href='#L854'>854</a>
916
+ <a name='L855'></a><a href='#L855'>855</a>
917
+ <a name='L856'></a><a href='#L856'>856</a>
918
+ <a name='L857'></a><a href='#L857'>857</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-yes">2x</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
926
+ <span class="cline-any cline-yes">2x</span>
927
+ <span class="cline-any cline-yes">2x</span>
928
+ <span class="cline-any cline-yes">2x</span>
929
+ <span class="cline-any cline-yes">2x</span>
930
+ <span class="cline-any cline-yes">2x</span>
931
+ <span class="cline-any cline-yes">2x</span>
932
+ <span class="cline-any cline-neutral">&nbsp;</span>
933
+ <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-yes">2x</span>
935
+ <span class="cline-any cline-neutral">&nbsp;</span>
936
+ <span class="cline-any cline-neutral">&nbsp;</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-yes">2x</span>
942
+ <span class="cline-any cline-yes">2x</span>
943
+ <span class="cline-any cline-yes">2x</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-yes">2x</span>
946
+ <span class="cline-any cline-yes">2x</span>
947
+ <span class="cline-any cline-yes">2x</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
950
+ <span class="cline-any cline-neutral">&nbsp;</span>
951
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-neutral">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-neutral">&nbsp;</span>
958
+ <span class="cline-any cline-neutral">&nbsp;</span>
959
+ <span class="cline-any cline-neutral">&nbsp;</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-neutral">&nbsp;</span>
965
+ <span class="cline-any cline-neutral">&nbsp;</span>
966
+ <span class="cline-any cline-neutral">&nbsp;</span>
967
+ <span class="cline-any cline-neutral">&nbsp;</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-neutral">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-yes">2x</span>
973
+ <span class="cline-any cline-yes">129x</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-yes">129x</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-yes">129x</span>
990
+ <span class="cline-any cline-yes">129x</span>
991
+ <span class="cline-any cline-yes">129x</span>
992
+ <span class="cline-any cline-yes">129x</span>
993
+ <span class="cline-any cline-yes">129x</span>
994
+ <span class="cline-any cline-yes">129x</span>
995
+ <span class="cline-any cline-no">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-neutral">&nbsp;</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-no">&nbsp;</span>
1010
+ <span class="cline-any cline-no">&nbsp;</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-neutral">&nbsp;</span>
1014
+ <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-neutral">&nbsp;</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-no">&nbsp;</span>
1019
+ <span class="cline-any cline-neutral">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-no">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-neutral">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-neutral">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-neutral">&nbsp;</span>
1042
+ <span class="cline-any cline-neutral">&nbsp;</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
+ <span class="cline-any cline-neutral">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-neutral">&nbsp;</span>
1052
+ <span class="cline-any cline-neutral">&nbsp;</span>
1053
+ <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-no">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-neutral">&nbsp;</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-no">&nbsp;</span>
1066
+ <span class="cline-any cline-neutral">&nbsp;</span>
1067
+ <span class="cline-any cline-neutral">&nbsp;</span>
1068
+ <span class="cline-any cline-no">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-no">&nbsp;</span>
1072
+ <span class="cline-any cline-no">&nbsp;</span>
1073
+ <span class="cline-any cline-neutral">&nbsp;</span>
1074
+ <span class="cline-any cline-neutral">&nbsp;</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-neutral">&nbsp;</span>
1078
+ <span class="cline-any cline-neutral">&nbsp;</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-neutral">&nbsp;</span>
1082
+ <span class="cline-any cline-neutral">&nbsp;</span>
1083
+ <span class="cline-any cline-neutral">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-neutral">&nbsp;</span>
1087
+ <span class="cline-any cline-neutral">&nbsp;</span>
1088
+ <span class="cline-any cline-neutral">&nbsp;</span>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-neutral">&nbsp;</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1094
+ <span class="cline-any cline-neutral">&nbsp;</span>
1095
+ <span class="cline-any cline-neutral">&nbsp;</span>
1096
+ <span class="cline-any cline-neutral">&nbsp;</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-neutral">&nbsp;</span>
1099
+ <span class="cline-any cline-yes">2x</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-yes">2x</span>
1102
+ <span class="cline-any cline-neutral">&nbsp;</span>
1103
+ <span class="cline-any cline-yes">2x</span>
1104
+ <span class="cline-any cline-neutral">&nbsp;</span>
1105
+ <span class="cline-any cline-neutral">&nbsp;</span>
1106
+ <span class="cline-any cline-neutral">&nbsp;</span>
1107
+ <span class="cline-any cline-neutral">&nbsp;</span>
1108
+ <span class="cline-any cline-yes">2x</span>
1109
+ <span class="cline-any cline-yes">2x</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-no">&nbsp;</span>
1112
+ <span class="cline-any cline-neutral">&nbsp;</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-neutral">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-neutral">&nbsp;</span>
1121
+ <span class="cline-any cline-no">&nbsp;</span>
1122
+ <span class="cline-any cline-neutral">&nbsp;</span>
1123
+ <span class="cline-any cline-neutral">&nbsp;</span>
1124
+ <span class="cline-any cline-neutral">&nbsp;</span>
1125
+ <span class="cline-any cline-neutral">&nbsp;</span>
1126
+ <span class="cline-any cline-neutral">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-neutral">&nbsp;</span>
1131
+ <span class="cline-any cline-no">&nbsp;</span>
1132
+ <span class="cline-any cline-neutral">&nbsp;</span>
1133
+ <span class="cline-any cline-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-neutral">&nbsp;</span>
1136
+ <span class="cline-any cline-neutral">&nbsp;</span>
1137
+ <span class="cline-any cline-neutral">&nbsp;</span>
1138
+ <span class="cline-any cline-neutral">&nbsp;</span>
1139
+ <span class="cline-any cline-neutral">&nbsp;</span>
1140
+ <span class="cline-any cline-neutral">&nbsp;</span>
1141
+ <span class="cline-any cline-neutral">&nbsp;</span>
1142
+ <span class="cline-any cline-neutral">&nbsp;</span>
1143
+ <span class="cline-any cline-neutral">&nbsp;</span>
1144
+ <span class="cline-any cline-neutral">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-neutral">&nbsp;</span>
1147
+ <span class="cline-any cline-neutral">&nbsp;</span>
1148
+ <span class="cline-any cline-neutral">&nbsp;</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-neutral">&nbsp;</span>
1152
+ <span class="cline-any cline-neutral">&nbsp;</span>
1153
+ <span class="cline-any cline-neutral">&nbsp;</span>
1154
+ <span class="cline-any cline-neutral">&nbsp;</span>
1155
+ <span class="cline-any cline-no">&nbsp;</span>
1156
+ <span class="cline-any cline-no">&nbsp;</span>
1157
+ <span class="cline-any cline-no">&nbsp;</span>
1158
+ <span class="cline-any cline-neutral">&nbsp;</span>
1159
+ <span class="cline-any cline-no">&nbsp;</span>
1160
+ <span class="cline-any cline-no">&nbsp;</span>
1161
+ <span class="cline-any cline-neutral">&nbsp;</span>
1162
+ <span class="cline-any cline-no">&nbsp;</span>
1163
+ <span class="cline-any cline-neutral">&nbsp;</span>
1164
+ <span class="cline-any cline-neutral">&nbsp;</span>
1165
+ <span class="cline-any cline-no">&nbsp;</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-neutral">&nbsp;</span>
1168
+ <span class="cline-any cline-neutral">&nbsp;</span>
1169
+ <span class="cline-any cline-neutral">&nbsp;</span>
1170
+ <span class="cline-any cline-neutral">&nbsp;</span>
1171
+ <span class="cline-any cline-neutral">&nbsp;</span>
1172
+ <span class="cline-any cline-no">&nbsp;</span>
1173
+ <span class="cline-any cline-no">&nbsp;</span>
1174
+ <span class="cline-any cline-neutral">&nbsp;</span>
1175
+ <span class="cline-any cline-no">&nbsp;</span>
1176
+ <span class="cline-any cline-neutral">&nbsp;</span>
1177
+ <span class="cline-any cline-no">&nbsp;</span>
1178
+ <span class="cline-any cline-neutral">&nbsp;</span>
1179
+ <span class="cline-any cline-neutral">&nbsp;</span>
1180
+ <span class="cline-any cline-neutral">&nbsp;</span>
1181
+ <span class="cline-any cline-neutral">&nbsp;</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-neutral">&nbsp;</span>
1184
+ <span class="cline-any cline-neutral">&nbsp;</span>
1185
+ <span class="cline-any cline-neutral">&nbsp;</span>
1186
+ <span class="cline-any cline-neutral">&nbsp;</span>
1187
+ <span class="cline-any cline-neutral">&nbsp;</span>
1188
+ <span class="cline-any cline-neutral">&nbsp;</span>
1189
+ <span class="cline-any cline-neutral">&nbsp;</span>
1190
+ <span class="cline-any cline-neutral">&nbsp;</span>
1191
+ <span class="cline-any cline-neutral">&nbsp;</span>
1192
+ <span class="cline-any cline-neutral">&nbsp;</span>
1193
+ <span class="cline-any cline-neutral">&nbsp;</span>
1194
+ <span class="cline-any cline-neutral">&nbsp;</span>
1195
+ <span class="cline-any cline-neutral">&nbsp;</span>
1196
+ <span class="cline-any cline-neutral">&nbsp;</span>
1197
+ <span class="cline-any cline-neutral">&nbsp;</span>
1198
+ <span class="cline-any cline-neutral">&nbsp;</span>
1199
+ <span class="cline-any cline-neutral">&nbsp;</span>
1200
+ <span class="cline-any cline-neutral">&nbsp;</span>
1201
+ <span class="cline-any cline-neutral">&nbsp;</span>
1202
+ <span class="cline-any cline-yes">1x</span>
1203
+ <span class="cline-any cline-neutral">&nbsp;</span>
1204
+ <span class="cline-any cline-yes">1x</span>
1205
+ <span class="cline-any cline-neutral">&nbsp;</span>
1206
+ <span class="cline-any cline-yes">1x</span>
1207
+ <span class="cline-any cline-yes">1x</span>
1208
+ <span class="cline-any cline-neutral">&nbsp;</span>
1209
+ <span class="cline-any cline-neutral">&nbsp;</span>
1210
+ <span class="cline-any cline-neutral">&nbsp;</span>
1211
+ <span class="cline-any cline-neutral">&nbsp;</span>
1212
+ <span class="cline-any cline-yes">1x</span>
1213
+ <span class="cline-any cline-yes">1x</span>
1214
+ <span class="cline-any cline-neutral">&nbsp;</span>
1215
+ <span class="cline-any cline-yes">1x</span>
1216
+ <span class="cline-any cline-yes">1x</span>
1217
+ <span class="cline-any cline-neutral">&nbsp;</span>
1218
+ <span class="cline-any cline-yes">1x</span>
1219
+ <span class="cline-any cline-neutral">&nbsp;</span>
1220
+ <span class="cline-any cline-neutral">&nbsp;</span>
1221
+ <span class="cline-any cline-neutral">&nbsp;</span>
1222
+ <span class="cline-any cline-neutral">&nbsp;</span>
1223
+ <span class="cline-any cline-neutral">&nbsp;</span>
1224
+ <span class="cline-any cline-no">&nbsp;</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-no">&nbsp;</span>
1227
+ <span class="cline-any cline-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-neutral">&nbsp;</span>
1229
+ <span class="cline-any cline-neutral">&nbsp;</span>
1230
+ <span class="cline-any cline-neutral">&nbsp;</span>
1231
+ <span class="cline-any cline-no">&nbsp;</span>
1232
+ <span class="cline-any cline-neutral">&nbsp;</span>
1233
+ <span class="cline-any cline-neutral">&nbsp;</span>
1234
+ <span class="cline-any cline-neutral">&nbsp;</span>
1235
+ <span class="cline-any cline-neutral">&nbsp;</span>
1236
+ <span class="cline-any cline-neutral">&nbsp;</span>
1237
+ <span class="cline-any cline-neutral">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-neutral">&nbsp;</span>
1240
+ <span class="cline-any cline-neutral">&nbsp;</span>
1241
+ <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-neutral">&nbsp;</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-no">&nbsp;</span>
1245
+ <span class="cline-any cline-no">&nbsp;</span>
1246
+ <span class="cline-any cline-neutral">&nbsp;</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-neutral">&nbsp;</span>
1249
+ <span class="cline-any cline-no">&nbsp;</span>
1250
+ <span class="cline-any cline-no">&nbsp;</span>
1251
+ <span class="cline-any cline-no">&nbsp;</span>
1252
+ <span class="cline-any cline-no">&nbsp;</span>
1253
+ <span class="cline-any cline-no">&nbsp;</span>
1254
+ <span class="cline-any cline-neutral">&nbsp;</span>
1255
+ <span class="cline-any cline-neutral">&nbsp;</span>
1256
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
+ <span class="cline-any cline-no">&nbsp;</span>
1258
+ <span class="cline-any cline-neutral">&nbsp;</span>
1259
+ <span class="cline-any cline-neutral">&nbsp;</span>
1260
+ <span class="cline-any cline-neutral">&nbsp;</span>
1261
+ <span class="cline-any cline-neutral">&nbsp;</span>
1262
+ <span class="cline-any cline-neutral">&nbsp;</span>
1263
+ <span class="cline-any cline-no">&nbsp;</span>
1264
+ <span class="cline-any cline-neutral">&nbsp;</span>
1265
+ <span class="cline-any cline-no">&nbsp;</span>
1266
+ <span class="cline-any cline-no">&nbsp;</span>
1267
+ <span class="cline-any cline-no">&nbsp;</span>
1268
+ <span class="cline-any cline-neutral">&nbsp;</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-no">&nbsp;</span>
1271
+ <span class="cline-any cline-neutral">&nbsp;</span>
1272
+ <span class="cline-any cline-no">&nbsp;</span>
1273
+ <span class="cline-any cline-neutral">&nbsp;</span>
1274
+ <span class="cline-any cline-no">&nbsp;</span>
1275
+ <span class="cline-any cline-neutral">&nbsp;</span>
1276
+ <span class="cline-any cline-neutral">&nbsp;</span>
1277
+ <span class="cline-any cline-no">&nbsp;</span>
1278
+ <span class="cline-any cline-neutral">&nbsp;</span>
1279
+ <span class="cline-any cline-neutral">&nbsp;</span>
1280
+ <span class="cline-any cline-neutral">&nbsp;</span>
1281
+ <span class="cline-any cline-neutral">&nbsp;</span>
1282
+ <span class="cline-any cline-no">&nbsp;</span>
1283
+ <span class="cline-any cline-neutral">&nbsp;</span>
1284
+ <span class="cline-any cline-no">&nbsp;</span>
1285
+ <span class="cline-any cline-neutral">&nbsp;</span>
1286
+ <span class="cline-any cline-no">&nbsp;</span>
1287
+ <span class="cline-any cline-neutral">&nbsp;</span>
1288
+ <span class="cline-any cline-no">&nbsp;</span>
1289
+ <span class="cline-any cline-no">&nbsp;</span>
1290
+ <span class="cline-any cline-no">&nbsp;</span>
1291
+ <span class="cline-any cline-neutral">&nbsp;</span>
1292
+ <span class="cline-any cline-no">&nbsp;</span>
1293
+ <span class="cline-any cline-neutral">&nbsp;</span>
1294
+ <span class="cline-any cline-neutral">&nbsp;</span>
1295
+ <span class="cline-any cline-neutral">&nbsp;</span>
1296
+ <span class="cline-any cline-no">&nbsp;</span>
1297
+ <span class="cline-any cline-neutral">&nbsp;</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-no">&nbsp;</span>
1300
+ <span class="cline-any cline-no">&nbsp;</span>
1301
+ <span class="cline-any cline-no">&nbsp;</span>
1302
+ <span class="cline-any cline-no">&nbsp;</span>
1303
+ <span class="cline-any cline-neutral">&nbsp;</span>
1304
+ <span class="cline-any cline-no">&nbsp;</span>
1305
+ <span class="cline-any cline-no">&nbsp;</span>
1306
+ <span class="cline-any cline-neutral">&nbsp;</span>
1307
+ <span class="cline-any cline-neutral">&nbsp;</span>
1308
+ <span class="cline-any cline-no">&nbsp;</span>
1309
+ <span class="cline-any cline-no">&nbsp;</span>
1310
+ <span class="cline-any cline-no">&nbsp;</span>
1311
+ <span class="cline-any cline-neutral">&nbsp;</span>
1312
+ <span class="cline-any cline-no">&nbsp;</span>
1313
+ <span class="cline-any cline-no">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-neutral">&nbsp;</span>
1316
+ <span class="cline-any cline-no">&nbsp;</span>
1317
+ <span class="cline-any cline-neutral">&nbsp;</span>
1318
+ <span class="cline-any cline-neutral">&nbsp;</span>
1319
+ <span class="cline-any cline-neutral">&nbsp;</span>
1320
+ <span class="cline-any cline-no">&nbsp;</span>
1321
+ <span class="cline-any cline-no">&nbsp;</span>
1322
+ <span class="cline-any cline-no">&nbsp;</span>
1323
+ <span class="cline-any cline-no">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-no">&nbsp;</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-neutral">&nbsp;</span>
1329
+ <span class="cline-any cline-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-no">&nbsp;</span>
1331
+ <span class="cline-any cline-no">&nbsp;</span>
1332
+ <span class="cline-any cline-no">&nbsp;</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-no">&nbsp;</span>
1335
+ <span class="cline-any cline-neutral">&nbsp;</span>
1336
+ <span class="cline-any cline-neutral">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-no">&nbsp;</span>
1339
+ <span class="cline-any cline-neutral">&nbsp;</span>
1340
+ <span class="cline-any cline-no">&nbsp;</span>
1341
+ <span class="cline-any cline-neutral">&nbsp;</span>
1342
+ <span class="cline-any cline-neutral">&nbsp;</span>
1343
+ <span class="cline-any cline-neutral">&nbsp;</span>
1344
+ <span class="cline-any cline-no">&nbsp;</span>
1345
+ <span class="cline-any cline-no">&nbsp;</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-no">&nbsp;</span>
1348
+ <span class="cline-any cline-no">&nbsp;</span>
1349
+ <span class="cline-any cline-no">&nbsp;</span>
1350
+ <span class="cline-any cline-no">&nbsp;</span>
1351
+ <span class="cline-any cline-neutral">&nbsp;</span>
1352
+ <span class="cline-any cline-no">&nbsp;</span>
1353
+ <span class="cline-any cline-no">&nbsp;</span>
1354
+ <span class="cline-any cline-no">&nbsp;</span>
1355
+ <span class="cline-any cline-no">&nbsp;</span>
1356
+ <span class="cline-any cline-no">&nbsp;</span>
1357
+ <span class="cline-any cline-no">&nbsp;</span>
1358
+ <span class="cline-any cline-no">&nbsp;</span>
1359
+ <span class="cline-any cline-no">&nbsp;</span>
1360
+ <span class="cline-any cline-no">&nbsp;</span>
1361
+ <span class="cline-any cline-no">&nbsp;</span>
1362
+ <span class="cline-any cline-neutral">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</span>
1364
+ <span class="cline-any cline-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-neutral">&nbsp;</span>
1366
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-neutral">&nbsp;</span>
1369
+ <span class="cline-any cline-no">&nbsp;</span>
1370
+ <span class="cline-any cline-no">&nbsp;</span>
1371
+ <span class="cline-any cline-neutral">&nbsp;</span>
1372
+ <span class="cline-any cline-no">&nbsp;</span>
1373
+ <span class="cline-any cline-neutral">&nbsp;</span>
1374
+ <span class="cline-any cline-no">&nbsp;</span>
1375
+ <span class="cline-any cline-no">&nbsp;</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-no">&nbsp;</span>
1378
+ <span class="cline-any cline-no">&nbsp;</span>
1379
+ <span class="cline-any cline-neutral">&nbsp;</span>
1380
+ <span class="cline-any cline-no">&nbsp;</span>
1381
+ <span class="cline-any cline-neutral">&nbsp;</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-neutral">&nbsp;</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-neutral">&nbsp;</span>
1387
+ <span class="cline-any cline-no">&nbsp;</span>
1388
+ <span class="cline-any cline-neutral">&nbsp;</span>
1389
+ <span class="cline-any cline-no">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-neutral">&nbsp;</span>
1392
+ <span class="cline-any cline-no">&nbsp;</span>
1393
+ <span class="cline-any cline-no">&nbsp;</span>
1394
+ <span class="cline-any cline-no">&nbsp;</span>
1395
+ <span class="cline-any cline-no">&nbsp;</span>
1396
+ <span class="cline-any cline-no">&nbsp;</span>
1397
+ <span class="cline-any cline-no">&nbsp;</span>
1398
+ <span class="cline-any cline-no">&nbsp;</span>
1399
+ <span class="cline-any cline-neutral">&nbsp;</span>
1400
+ <span class="cline-any cline-no">&nbsp;</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-no">&nbsp;</span>
1403
+ <span class="cline-any cline-no">&nbsp;</span>
1404
+ <span class="cline-any cline-neutral">&nbsp;</span>
1405
+ <span class="cline-any cline-neutral">&nbsp;</span>
1406
+ <span class="cline-any cline-neutral">&nbsp;</span>
1407
+ <span class="cline-any cline-neutral">&nbsp;</span>
1408
+ <span class="cline-any cline-no">&nbsp;</span>
1409
+ <span class="cline-any cline-neutral">&nbsp;</span>
1410
+ <span class="cline-any cline-no">&nbsp;</span>
1411
+ <span class="cline-any cline-neutral">&nbsp;</span>
1412
+ <span class="cline-any cline-neutral">&nbsp;</span>
1413
+ <span class="cline-any cline-no">&nbsp;</span>
1414
+ <span class="cline-any cline-neutral">&nbsp;</span>
1415
+ <span class="cline-any cline-neutral">&nbsp;</span>
1416
+ <span class="cline-any cline-neutral">&nbsp;</span>
1417
+ <span class="cline-any cline-neutral">&nbsp;</span>
1418
+ <span class="cline-any cline-neutral">&nbsp;</span>
1419
+ <span class="cline-any cline-neutral">&nbsp;</span>
1420
+ <span class="cline-any cline-no">&nbsp;</span>
1421
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
+ <span class="cline-any cline-no">&nbsp;</span>
1423
+ <span class="cline-any cline-neutral">&nbsp;</span>
1424
+ <span class="cline-any cline-no">&nbsp;</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-neutral">&nbsp;</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-neutral">&nbsp;</span>
1436
+ <span class="cline-any cline-neutral">&nbsp;</span>
1437
+ <span class="cline-any cline-neutral">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-neutral">&nbsp;</span>
1443
+ <span class="cline-any cline-neutral">&nbsp;</span>
1444
+ <span class="cline-any cline-neutral">&nbsp;</span>
1445
+ <span class="cline-any cline-no">&nbsp;</span>
1446
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
+ <span class="cline-any cline-no">&nbsp;</span>
1448
+ <span class="cline-any cline-neutral">&nbsp;</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-neutral">&nbsp;</span>
1451
+ <span class="cline-any cline-neutral">&nbsp;</span>
1452
+ <span class="cline-any cline-neutral">&nbsp;</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-no">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-neutral">&nbsp;</span>
1458
+ <span class="cline-any cline-neutral">&nbsp;</span>
1459
+ <span class="cline-any cline-neutral">&nbsp;</span>
1460
+ <span class="cline-any cline-no">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-neutral">&nbsp;</span>
1463
+ <span class="cline-any cline-no">&nbsp;</span>
1464
+ <span class="cline-any cline-neutral">&nbsp;</span>
1465
+ <span class="cline-any cline-no">&nbsp;</span>
1466
+ <span class="cline-any cline-neutral">&nbsp;</span>
1467
+ <span class="cline-any cline-neutral">&nbsp;</span>
1468
+ <span class="cline-any cline-neutral">&nbsp;</span>
1469
+ <span class="cline-any cline-neutral">&nbsp;</span>
1470
+ <span class="cline-any cline-neutral">&nbsp;</span>
1471
+ <span class="cline-any cline-neutral">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-neutral">&nbsp;</span>
1474
+ <span class="cline-any cline-neutral">&nbsp;</span>
1475
+ <span class="cline-any cline-neutral">&nbsp;</span>
1476
+ <span class="cline-any cline-neutral">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-neutral">&nbsp;</span>
1479
+ <span class="cline-any cline-neutral">&nbsp;</span>
1480
+ <span class="cline-any cline-neutral">&nbsp;</span>
1481
+ <span class="cline-any cline-neutral">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-neutral">&nbsp;</span>
1486
+ <span class="cline-any cline-neutral">&nbsp;</span>
1487
+ <span class="cline-any cline-neutral">&nbsp;</span>
1488
+ <span class="cline-any cline-neutral">&nbsp;</span>
1489
+ <span class="cline-any cline-neutral">&nbsp;</span>
1490
+ <span class="cline-any cline-neutral">&nbsp;</span>
1491
+ <span class="cline-any cline-neutral">&nbsp;</span>
1492
+ <span class="cline-any cline-neutral">&nbsp;</span>
1493
+ <span class="cline-any cline-no">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-neutral">&nbsp;</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span>
1497
+ <span class="cline-any cline-neutral">&nbsp;</span>
1498
+ <span class="cline-any cline-neutral">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-neutral">&nbsp;</span>
1501
+ <span class="cline-any cline-no">&nbsp;</span>
1502
+ <span class="cline-any cline-no">&nbsp;</span>
1503
+ <span class="cline-any cline-neutral">&nbsp;</span>
1504
+ <span class="cline-any cline-no">&nbsp;</span>
1505
+ <span class="cline-any cline-neutral">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-neutral">&nbsp;</span>
1508
+ <span class="cline-any cline-neutral">&nbsp;</span>
1509
+ <span class="cline-any cline-neutral">&nbsp;</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-neutral">&nbsp;</span>
1513
+ <span class="cline-any cline-neutral">&nbsp;</span>
1514
+ <span class="cline-any cline-no">&nbsp;</span>
1515
+ <span class="cline-any cline-no">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-neutral">&nbsp;</span>
1519
+ <span class="cline-any cline-neutral">&nbsp;</span>
1520
+ <span class="cline-any cline-neutral">&nbsp;</span>
1521
+ <span class="cline-any cline-no">&nbsp;</span>
1522
+ <span class="cline-any cline-no">&nbsp;</span>
1523
+ <span class="cline-any cline-neutral">&nbsp;</span>
1524
+ <span class="cline-any cline-no">&nbsp;</span>
1525
+ <span class="cline-any cline-neutral">&nbsp;</span>
1526
+ <span class="cline-any cline-no">&nbsp;</span>
1527
+ <span class="cline-any cline-neutral">&nbsp;</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span>
1531
+ <span class="cline-any cline-neutral">&nbsp;</span>
1532
+ <span class="cline-any cline-neutral">&nbsp;</span>
1533
+ <span class="cline-any cline-neutral">&nbsp;</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-neutral">&nbsp;</span>
1536
+ <span class="cline-any cline-no">&nbsp;</span>
1537
+ <span class="cline-any cline-no">&nbsp;</span>
1538
+ <span class="cline-any cline-no">&nbsp;</span>
1539
+ <span class="cline-any cline-neutral">&nbsp;</span>
1540
+ <span class="cline-any cline-no">&nbsp;</span>
1541
+ <span class="cline-any cline-neutral">&nbsp;</span>
1542
+ <span class="cline-any cline-neutral">&nbsp;</span>
1543
+ <span class="cline-any cline-neutral">&nbsp;</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-neutral">&nbsp;</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-no">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-neutral">&nbsp;</span>
1553
+ <span class="cline-any cline-neutral">&nbsp;</span>
1554
+ <span class="cline-any cline-no">&nbsp;</span>
1555
+ <span class="cline-any cline-no">&nbsp;</span>
1556
+ <span class="cline-any cline-neutral">&nbsp;</span>
1557
+ <span class="cline-any cline-neutral">&nbsp;</span>
1558
+ <span class="cline-any cline-neutral">&nbsp;</span>
1559
+ <span class="cline-any cline-neutral">&nbsp;</span>
1560
+ <span class="cline-any cline-no">&nbsp;</span>
1561
+ <span class="cline-any cline-neutral">&nbsp;</span>
1562
+ <span class="cline-any cline-no">&nbsp;</span>
1563
+ <span class="cline-any cline-no">&nbsp;</span>
1564
+ <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-no">&nbsp;</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-neutral">&nbsp;</span>
1568
+ <span class="cline-any cline-neutral">&nbsp;</span>
1569
+ <span class="cline-any cline-neutral">&nbsp;</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-no">&nbsp;</span>
1573
+ <span class="cline-any cline-neutral">&nbsp;</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-no">&nbsp;</span>
1576
+ <span class="cline-any cline-neutral">&nbsp;</span>
1577
+ <span class="cline-any cline-neutral">&nbsp;</span>
1578
+ <span class="cline-any cline-neutral">&nbsp;</span>
1579
+ <span class="cline-any cline-neutral">&nbsp;</span>
1580
+ <span class="cline-any cline-neutral">&nbsp;</span>
1581
+ <span class="cline-any cline-neutral">&nbsp;</span>
1582
+ <span class="cline-any cline-neutral">&nbsp;</span>
1583
+ <span class="cline-any cline-no">&nbsp;</span>
1584
+ <span class="cline-any cline-neutral">&nbsp;</span>
1585
+ <span class="cline-any cline-no">&nbsp;</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1587
+ <span class="cline-any cline-neutral">&nbsp;</span>
1588
+ <span class="cline-any cline-neutral">&nbsp;</span>
1589
+ <span class="cline-any cline-no">&nbsp;</span>
1590
+ <span class="cline-any cline-neutral">&nbsp;</span>
1591
+ <span class="cline-any cline-neutral">&nbsp;</span>
1592
+ <span class="cline-any cline-neutral">&nbsp;</span>
1593
+ <span class="cline-any cline-no">&nbsp;</span>
1594
+ <span class="cline-any cline-neutral">&nbsp;</span>
1595
+ <span class="cline-any cline-neutral">&nbsp;</span>
1596
+ <span class="cline-any cline-no">&nbsp;</span>
1597
+ <span class="cline-any cline-neutral">&nbsp;</span>
1598
+ <span class="cline-any cline-neutral">&nbsp;</span>
1599
+ <span class="cline-any cline-no">&nbsp;</span>
1600
+ <span class="cline-any cline-neutral">&nbsp;</span>
1601
+ <span class="cline-any cline-neutral">&nbsp;</span>
1602
+ <span class="cline-any cline-neutral">&nbsp;</span>
1603
+ <span class="cline-any cline-yes">129x</span>
1604
+ <span class="cline-any cline-neutral">&nbsp;</span>
1605
+ <span class="cline-any cline-neutral">&nbsp;</span>
1606
+ <span class="cline-any cline-neutral">&nbsp;</span>
1607
+ <span class="cline-any cline-no">&nbsp;</span>
1608
+ <span class="cline-any cline-no">&nbsp;</span>
1609
+ <span class="cline-any cline-neutral">&nbsp;</span>
1610
+ <span class="cline-any cline-neutral">&nbsp;</span>
1611
+ <span class="cline-any cline-neutral">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-no">&nbsp;</span>
1614
+ <span class="cline-any cline-neutral">&nbsp;</span>
1615
+ <span class="cline-any cline-no">&nbsp;</span>
1616
+ <span class="cline-any cline-neutral">&nbsp;</span>
1617
+ <span class="cline-any cline-neutral">&nbsp;</span>
1618
+ <span class="cline-any cline-neutral">&nbsp;</span>
1619
+ <span class="cline-any cline-neutral">&nbsp;</span>
1620
+ <span class="cline-any cline-neutral">&nbsp;</span>
1621
+ <span class="cline-any cline-neutral">&nbsp;</span>
1622
+ <span class="cline-any cline-no">&nbsp;</span>
1623
+ <span class="cline-any cline-neutral">&nbsp;</span>
1624
+ <span class="cline-any cline-no">&nbsp;</span>
1625
+ <span class="cline-any cline-no">&nbsp;</span>
1626
+ <span class="cline-any cline-neutral">&nbsp;</span>
1627
+ <span class="cline-any cline-neutral">&nbsp;</span>
1628
+ <span class="cline-any cline-neutral">&nbsp;</span>
1629
+ <span class="cline-any cline-neutral">&nbsp;</span>
1630
+ <span class="cline-any cline-neutral">&nbsp;</span>
1631
+ <span class="cline-any cline-neutral">&nbsp;</span>
1632
+ <span class="cline-any cline-neutral">&nbsp;</span>
1633
+ <span class="cline-any cline-no">&nbsp;</span>
1634
+ <span class="cline-any cline-neutral">&nbsp;</span>
1635
+ <span class="cline-any cline-neutral">&nbsp;</span>
1636
+ <span class="cline-any cline-neutral">&nbsp;</span>
1637
+ <span class="cline-any cline-neutral">&nbsp;</span>
1638
+ <span class="cline-any cline-neutral">&nbsp;</span>
1639
+ <span class="cline-any cline-neutral">&nbsp;</span>
1640
+ <span class="cline-any cline-neutral">&nbsp;</span>
1641
+ <span class="cline-any cline-neutral">&nbsp;</span>
1642
+ <span class="cline-any cline-neutral">&nbsp;</span>
1643
+ <span class="cline-any cline-neutral">&nbsp;</span>
1644
+ <span class="cline-any cline-neutral">&nbsp;</span>
1645
+ <span class="cline-any cline-neutral">&nbsp;</span>
1646
+ <span class="cline-any cline-neutral">&nbsp;</span>
1647
+ <span class="cline-any cline-neutral">&nbsp;</span>
1648
+ <span class="cline-any cline-neutral">&nbsp;</span>
1649
+ <span class="cline-any cline-neutral">&nbsp;</span>
1650
+ <span class="cline-any cline-neutral">&nbsp;</span>
1651
+ <span class="cline-any cline-neutral">&nbsp;</span>
1652
+ <span class="cline-any cline-neutral">&nbsp;</span>
1653
+ <span class="cline-any cline-neutral">&nbsp;</span>
1654
+ <span class="cline-any cline-neutral">&nbsp;</span>
1655
+ <span class="cline-any cline-no">&nbsp;</span>
1656
+ <span class="cline-any cline-no">&nbsp;</span>
1657
+ <span class="cline-any cline-neutral">&nbsp;</span>
1658
+ <span class="cline-any cline-neutral">&nbsp;</span>
1659
+ <span class="cline-any cline-neutral">&nbsp;</span>
1660
+ <span class="cline-any cline-neutral">&nbsp;</span>
1661
+ <span class="cline-any cline-neutral">&nbsp;</span>
1662
+ <span class="cline-any cline-neutral">&nbsp;</span>
1663
+ <span class="cline-any cline-neutral">&nbsp;</span>
1664
+ <span class="cline-any cline-neutral">&nbsp;</span>
1665
+ <span class="cline-any cline-neutral">&nbsp;</span>
1666
+ <span class="cline-any cline-neutral">&nbsp;</span>
1667
+ <span class="cline-any cline-neutral">&nbsp;</span>
1668
+ <span class="cline-any cline-no">&nbsp;</span>
1669
+ <span class="cline-any cline-neutral">&nbsp;</span>
1670
+ <span class="cline-any cline-neutral">&nbsp;</span>
1671
+ <span class="cline-any cline-neutral">&nbsp;</span>
1672
+ <span class="cline-any cline-neutral">&nbsp;</span>
1673
+ <span class="cline-any cline-no">&nbsp;</span>
1674
+ <span class="cline-any cline-neutral">&nbsp;</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-neutral">&nbsp;</span>
1677
+ <span class="cline-any cline-neutral">&nbsp;</span>
1678
+ <span class="cline-any cline-neutral">&nbsp;</span>
1679
+ <span class="cline-any cline-neutral">&nbsp;</span>
1680
+ <span class="cline-any cline-neutral">&nbsp;</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1682
+ <span class="cline-any cline-neutral">&nbsp;</span>
1683
+ <span class="cline-any cline-neutral">&nbsp;</span>
1684
+ <span class="cline-any cline-neutral">&nbsp;</span>
1685
+ <span class="cline-any cline-neutral">&nbsp;</span>
1686
+ <span class="cline-any cline-neutral">&nbsp;</span>
1687
+ <span class="cline-any cline-neutral">&nbsp;</span>
1688
+ <span class="cline-any cline-neutral">&nbsp;</span>
1689
+ <span class="cline-any cline-neutral">&nbsp;</span>
1690
+ <span class="cline-any cline-no">&nbsp;</span>
1691
+ <span class="cline-any cline-no">&nbsp;</span>
1692
+ <span class="cline-any cline-no">&nbsp;</span>
1693
+ <span class="cline-any cline-neutral">&nbsp;</span>
1694
+ <span class="cline-any cline-no">&nbsp;</span>
1695
+ <span class="cline-any cline-neutral">&nbsp;</span>
1696
+ <span class="cline-any cline-neutral">&nbsp;</span>
1697
+ <span class="cline-any cline-no">&nbsp;</span>
1698
+ <span class="cline-any cline-neutral">&nbsp;</span>
1699
+ <span class="cline-any cline-neutral">&nbsp;</span>
1700
+ <span class="cline-any cline-neutral">&nbsp;</span>
1701
+ <span class="cline-any cline-neutral">&nbsp;</span>
1702
+ <span class="cline-any cline-neutral">&nbsp;</span>
1703
+ <span class="cline-any cline-neutral">&nbsp;</span>
1704
+ <span class="cline-any cline-neutral">&nbsp;</span>
1705
+ <span class="cline-any cline-neutral">&nbsp;</span>
1706
+ <span class="cline-any cline-neutral">&nbsp;</span>
1707
+ <span class="cline-any cline-neutral">&nbsp;</span>
1708
+ <span class="cline-any cline-neutral">&nbsp;</span>
1709
+ <span class="cline-any cline-neutral">&nbsp;</span>
1710
+ <span class="cline-any cline-neutral">&nbsp;</span>
1711
+ <span class="cline-any cline-neutral">&nbsp;</span>
1712
+ <span class="cline-any cline-neutral">&nbsp;</span>
1713
+ <span class="cline-any cline-neutral">&nbsp;</span>
1714
+ <span class="cline-any cline-neutral">&nbsp;</span>
1715
+ <span class="cline-any cline-neutral">&nbsp;</span>
1716
+ <span class="cline-any cline-neutral">&nbsp;</span>
1717
+ <span class="cline-any cline-neutral">&nbsp;</span>
1718
+ <span class="cline-any cline-neutral">&nbsp;</span>
1719
+ <span class="cline-any cline-neutral">&nbsp;</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-no">&nbsp;</span>
1722
+ <span class="cline-any cline-neutral">&nbsp;</span>
1723
+ <span class="cline-any cline-neutral">&nbsp;</span>
1724
+ <span class="cline-any cline-neutral">&nbsp;</span>
1725
+ <span class="cline-any cline-neutral">&nbsp;</span>
1726
+ <span class="cline-any cline-neutral">&nbsp;</span>
1727
+ <span class="cline-any cline-neutral">&nbsp;</span>
1728
+ <span class="cline-any cline-neutral">&nbsp;</span>
1729
+ <span class="cline-any cline-no">&nbsp;</span>
1730
+ <span class="cline-any cline-no">&nbsp;</span>
1731
+ <span class="cline-any cline-neutral">&nbsp;</span>
1732
+ <span class="cline-any cline-neutral">&nbsp;</span>
1733
+ <span class="cline-any cline-neutral">&nbsp;</span>
1734
+ <span class="cline-any cline-no">&nbsp;</span>
1735
+ <span class="cline-any cline-no">&nbsp;</span>
1736
+ <span class="cline-any cline-neutral">&nbsp;</span>
1737
+ <span class="cline-any cline-neutral">&nbsp;</span>
1738
+ <span class="cline-any cline-no">&nbsp;</span>
1739
+ <span class="cline-any cline-neutral">&nbsp;</span>
1740
+ <span class="cline-any cline-neutral">&nbsp;</span>
1741
+ <span class="cline-any cline-neutral">&nbsp;</span>
1742
+ <span class="cline-any cline-neutral">&nbsp;</span>
1743
+ <span class="cline-any cline-neutral">&nbsp;</span>
1744
+ <span class="cline-any cline-neutral">&nbsp;</span>
1745
+ <span class="cline-any cline-neutral">&nbsp;</span>
1746
+ <span class="cline-any cline-neutral">&nbsp;</span>
1747
+ <span class="cline-any cline-neutral">&nbsp;</span>
1748
+ <span class="cline-any cline-neutral">&nbsp;</span>
1749
+ <span class="cline-any cline-neutral">&nbsp;</span>
1750
+ <span class="cline-any cline-neutral">&nbsp;</span>
1751
+ <span class="cline-any cline-neutral">&nbsp;</span>
1752
+ <span class="cline-any cline-neutral">&nbsp;</span>
1753
+ <span class="cline-any cline-no">&nbsp;</span>
1754
+ <span class="cline-any cline-no">&nbsp;</span>
1755
+ <span class="cline-any cline-no">&nbsp;</span>
1756
+ <span class="cline-any cline-neutral">&nbsp;</span>
1757
+ <span class="cline-any cline-neutral">&nbsp;</span>
1758
+ <span class="cline-any cline-neutral">&nbsp;</span>
1759
+ <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-neutral">&nbsp;</span>
1761
+ <span class="cline-any cline-neutral">&nbsp;</span>
1762
+ <span class="cline-any cline-neutral">&nbsp;</span>
1763
+ <span class="cline-any cline-neutral">&nbsp;</span>
1764
+ <span class="cline-any cline-neutral">&nbsp;</span>
1765
+ <span class="cline-any cline-neutral">&nbsp;</span>
1766
+ <span class="cline-any cline-no">&nbsp;</span>
1767
+ <span class="cline-any cline-no">&nbsp;</span>
1768
+ <span class="cline-any cline-neutral">&nbsp;</span>
1769
+ <span class="cline-any cline-neutral">&nbsp;</span>
1770
+ <span class="cline-any cline-no">&nbsp;</span>
1771
+ <span class="cline-any cline-neutral">&nbsp;</span>
1772
+ <span class="cline-any cline-neutral">&nbsp;</span>
1773
+ <span class="cline-any cline-neutral">&nbsp;</span>
1774
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable camelcase */
1775
+ import TrezorConnect, {
1776
+ AccountInfo,
1777
+ DEVICE_EVENT,
1778
+ EthereumTransaction,
1779
+ EthereumTransactionEIP1559,
1780
+ // @ts-ignore
1781
+ } from '@trezor/connect-webextension';
1782
+ import { address } from '@trezor/utxo-lib';
1783
+ import bitcoinops from 'bitcoin-ops';
1784
+ import { Transaction, payments, script } from 'bitcoinjs-lib';
1785
+ import { Buffer } from 'buffer';
1786
+ import { TypedDataUtils, TypedMessage, Version } from 'eth-sig-util';
1787
+ import Web3 from 'web3';
1788
+ &nbsp;
1789
+ import { SyscoinHDSigner } from '../signers';
1790
+ import {
1791
+ getAccountDerivationPath,
1792
+ getAddressDerivationPath,
1793
+ getPublicKeyDerivationPath,
1794
+ isEvmCoin,
1795
+ } from '../utils/derivation-paths';
1796
+ &nbsp;
1797
+ const { p2wsh } = payments;
1798
+ const { decompile } = script;
1799
+ const { fromBase58Check, fromBech32 } = address;
1800
+ &nbsp;
1801
+ const initialHDPath = `m/44'/60'/0'/0/0`;
1802
+ const DELAY_BETWEEN_POPUPS = 1000;
1803
+ const TREZOR_CONNECT_MANIFEST = {
1804
+ appUrl: 'https://paliwallet.com/',
1805
+ email: 'pali@pollum.io',
1806
+ };
1807
+ &nbsp;
1808
+ export interface TrezorControllerState {
1809
+ hdPath: string;
1810
+ paths: Record&lt;string, number&gt;;
1811
+ }
1812
+ &nbsp;
1813
+ interface MessageTypeProperty {
1814
+ name: string;
1815
+ type: string;
1816
+ }
1817
+ interface MessageTypes {
1818
+ [additionalProperties: string]: MessageTypeProperty[];
1819
+ EIP712Domain: MessageTypeProperty[];
1820
+ }
1821
+ &nbsp;
1822
+ declare global {
1823
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1824
+ interface Window {
1825
+ TrezorConnect: any;
1826
+ }
1827
+ }
1828
+ export class TrezorKeyring {
1829
+ public hdPath: string = initialHDPath;
1830
+ public publicKey: Buffer;
1831
+ public chainCode: Buffer;
1832
+ public paths: Record&lt;string, number&gt; = {};
1833
+ public model?: string;
1834
+ private getSigner: () =&gt; {
1835
+ hd: SyscoinHDSigner;
1836
+ main: any;
1837
+ };
1838
+ &nbsp;
1839
+ constructor(
1840
+ getSyscoinSigner: () =&gt; {
1841
+ hd: SyscoinHDSigner;
1842
+ main: any;
1843
+ }
1844
+ ) {
1845
+ this.publicKey = Buffer.from('', 'hex');
1846
+ this.chainCode = Buffer.from('', 'hex');
1847
+ this.hdPath = '';
1848
+ this.paths = {};
1849
+ this.getSigner = getSyscoinSigner;
1850
+ TrezorConnect.on(DEVICE_EVENT, <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {
1851
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (event.payload.features) {</span>
1852
+ <span class="cstat-no" title="statement not covered" > this.model = event.payload.features.model;</span>
1853
+ }
1854
+ });
1855
+ }
1856
+ &nbsp;
1857
+ /**
1858
+ * Initialize Trezor script.
1859
+ *
1860
+ * Trezor Connect raises an error that reads "Manifest not set" if manifest is not provided. It can be either set via manifest method or passed as a param in init method.
1861
+ * @returns true, if trezor was initialized successfully and false, if some error happen
1862
+ */
1863
+ &nbsp;
1864
+ public <span class="fstat-no" title="function not covered" >async </span>init() {
1865
+ <span class="cstat-no" title="statement not covered" > try {</span>
1866
+ <span class="cstat-no" title="statement not covered" > await TrezorConnect.init({</span>
1867
+ manifest: TREZOR_CONNECT_MANIFEST,
1868
+ lazyLoad: true,
1869
+ popup: true,
1870
+ connectSrc: 'https://connect.trezor.io/9/',
1871
+ _extendWebextensionLifetime: true,
1872
+ transports: ['BridgeTransport', 'WebUsbTransport'], // Transport protocols to be used
1873
+ });
1874
+ <span class="cstat-no" title="statement not covered" > return true;</span>
1875
+ } catch (error) {
1876
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
1877
+ error.message.includes('TrezorConnect has been already initialized')
1878
+ ) {
1879
+ <span class="cstat-no" title="statement not covered" > return true;</span>
1880
+ }
1881
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1882
+ }
1883
+ }
1884
+ &nbsp;
1885
+ /**
1886
+ * This return derivated account info based in params provided.
1887
+ *
1888
+ * @param index - index of account for path derivation
1889
+ * @param slip44 - network slip44 number
1890
+ * @param bip - BIP for derivation. Example: 44, 49, 84
1891
+ * @param coin - network symbol. Example: eth, sys, btc
1892
+ * @returns derivated account info or error
1893
+ */
1894
+ &nbsp;
1895
+ public <span class="fstat-no" title="function not covered" >async </span>deriveAccount({
1896
+ index,
1897
+ slip44,
1898
+ bip,
1899
+ coin,
1900
+ }: {
1901
+ bip: number;
1902
+ coin: string;
1903
+ index: number;
1904
+ slip44: number;
1905
+ }): Promise&lt;
1906
+ | AccountInfo
1907
+ | {
1908
+ code?: string;
1909
+ error: string;
1910
+ }
1911
+ &gt; {
1912
+ const keypath = <span class="cstat-no" title="statement not covered" >`m/${bip}'/${slip44}'/0'/0/${index}`;</span>
1913
+ &nbsp;
1914
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1915
+ <span class="cstat-no" title="statement not covered" > TrezorConnect.getAccountInfo({</span>
1916
+ path: keypath,
1917
+ coin: coin,
1918
+ })
1919
+ .then(<span class="fstat-no" title="function not covered" >(r</span>esponse: any) =&gt; {
1920
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (response.success) {</span>
1921
+ <span class="cstat-no" title="statement not covered" > resolve(response.payload);</span>
1922
+ }
1923
+ // @ts-ignore
1924
+ <span class="cstat-no" title="statement not covered" > reject(response.payload.error);</span>
1925
+ })
1926
+ .catch(<span class="fstat-no" title="function not covered" >(e</span>rror: any) =&gt; {
1927
+ <span class="cstat-no" title="statement not covered" > console.error('TrezorConnectError', error);</span>
1928
+ <span class="cstat-no" title="statement not covered" > reject(error);</span>
1929
+ });
1930
+ });
1931
+ }
1932
+ &nbsp;
1933
+ /**
1934
+ * This return account info based in params provided.
1935
+ *
1936
+ * @param coin - network symbol. Example: eth, sys, btc
1937
+ * @param slip44 - network slip44 number
1938
+ * @param hdPath - path derivation. Example: m/44'/57'/0'/0/0
1939
+ * @param index - index of account for path derivation
1940
+ * @returns derivated account info or error
1941
+ */
1942
+ &nbsp;
1943
+ public async getAccountInfo({
1944
+ coin,
1945
+ slip44,
1946
+ hdPath,
1947
+ index,
1948
+ }: {
1949
+ coin: string;
1950
+ hdPath?: string;
1951
+ index?: number;
1952
+ slip44: number;
1953
+ }): Promise&lt;AccountInfo&gt; {
1954
+ // Use dynamic path generation instead of hardcoded switch
1955
+ this.hdPath = getAccountDerivationPath(coin, slip44, index);
1956
+ &nbsp;
1957
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (hdPath) <span class="cstat-no" title="statement not covered" >this.hdPath = hdPath;</span>
1958
+ &nbsp;
1959
+ const response = await TrezorConnect.getAccountInfo({
1960
+ coin,
1961
+ path: this.hdPath,
1962
+ });
1963
+ &nbsp;
1964
+ if (response.success) {
1965
+ return response.payload;
1966
+ }
1967
+ <span class="cstat-no" title="statement not covered" > return response.payload as any;</span>
1968
+ }
1969
+ &nbsp;
1970
+ /**
1971
+ * Gets the model, if known.
1972
+ * This may be `undefined` if the model hasn't been loaded yet.
1973
+ *
1974
+ * @returns
1975
+ */
1976
+ public <span class="fstat-no" title="function not covered" >getModel(</span>): string | undefined {
1977
+ <span class="cstat-no" title="statement not covered" > return this.model;</span>
1978
+ }
1979
+ &nbsp;
1980
+ /**
1981
+ * This removes the Trezor Connect iframe from the DOM
1982
+ *
1983
+ * @returns void
1984
+ */
1985
+ &nbsp;
1986
+ public <span class="fstat-no" title="function not covered" >dispose(</span>) {
1987
+ <span class="cstat-no" title="statement not covered" > TrezorConnect.dispose();</span>
1988
+ }
1989
+ &nbsp;
1990
+ /**
1991
+ * This verify if message is valid or not.
1992
+ *
1993
+ * @param coin - network symbol. Example: eth, sys, btc
1994
+ * @param address - account address that signed message
1995
+ * @param message - message to be verified. Example: 'Test message'
1996
+ * @param signature - signature received in sign method. Example: I6BrpivjCwZmScZ6BMAHWGQPo+JjX2kzKXU5LcGVfEgvFb2VfJuKo3g6eSQcykQZiILoWNUDn5rDHkwJg3EcvuY=
1997
+ * @returns derivated account info or error
1998
+ */
1999
+ &nbsp;
2000
+ public <span class="fstat-no" title="function not covered" >async </span>verifyMessage({
2001
+ coin,
2002
+ address,
2003
+ message,
2004
+ signature,
2005
+ }: {
2006
+ address: string;
2007
+ coin: string;
2008
+ message: string;
2009
+ signature: string;
2010
+ }) {
2011
+ <span class="cstat-no" title="statement not covered" > try {</span>
2012
+ let method = <span class="cstat-no" title="statement not covered" >'';</span>
2013
+ <span class="cstat-no" title="statement not covered" > switch (coin) {</span>
2014
+ case 'eth':
2015
+ <span class="cstat-no" title="statement not covered" > method = 'ethereumVerifyMessage';</span>
2016
+ <span class="cstat-no" title="statement not covered" > break;</span>
2017
+ default:
2018
+ <span class="cstat-no" title="statement not covered" > method = 'verifyMessage';</span>
2019
+ }
2020
+ // @ts-ignore
2021
+ const { success, payload } = <span class="cstat-no" title="statement not covered" >await TrezorConnect[method]({</span>
2022
+ coin,
2023
+ address,
2024
+ message,
2025
+ signature,
2026
+ });
2027
+ &nbsp;
2028
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (success) {</span>
2029
+ <span class="cstat-no" title="statement not covered" > return { success, payload };</span>
2030
+ }
2031
+ <span class="cstat-no" title="statement not covered" > return { success: false, payload };</span>
2032
+ } catch (error) {
2033
+ <span class="cstat-no" title="statement not covered" > return { error };</span>
2034
+ }
2035
+ }
2036
+ &nbsp;
2037
+ /**
2038
+ * This return account public key.
2039
+ *
2040
+ * @param coin - network symbol. Example: eth, sys, btc
2041
+ * @param slip44 - network slip44 number
2042
+ * @param hdPath - path derivation. Example: m/44'/57'/0'/0/0
2043
+ * @returns publicKey and chainCode
2044
+ */
2045
+ &nbsp;
2046
+ public async getPublicKey({
2047
+ coin,
2048
+ slip44,
2049
+ hdPath,
2050
+ index,
2051
+ }: {
2052
+ coin: string;
2053
+ hdPath?: string;
2054
+ index?: number;
2055
+ slip44: number;
2056
+ }) {
2057
+ // Use dynamic path generation instead of hardcoded switch
2058
+ this.hdPath = getPublicKeyDerivationPath(coin, slip44, index || 0);
2059
+ &nbsp;
2060
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (hdPath) <span class="cstat-no" title="statement not covered" >this.hdPath = hdPath;</span>
2061
+ &nbsp;
2062
+ try {
2063
+ const { success, payload } = await TrezorConnect.getPublicKey({
2064
+ coin: coin,
2065
+ path: this.hdPath,
2066
+ });
2067
+ &nbsp;
2068
+ if (success) {
2069
+ const { publicKey, chainCode } = payload;
2070
+ &nbsp;
2071
+ this.publicKey = Buffer.from(publicKey, 'hex');
2072
+ this.chainCode = Buffer.from(chainCode, 'hex');
2073
+ &nbsp;
2074
+ return {
2075
+ publicKey: `0x${this.publicKey.toString('hex')}`,
2076
+ chainCode: `0x${this.chainCode.toString('hex')}`,
2077
+ };
2078
+ }
2079
+ &nbsp;
2080
+ <span class="cstat-no" title="statement not covered" > return { success: false, payload };</span>
2081
+ } catch (error) {
2082
+ <span class="cstat-no" title="statement not covered" > return error;</span>
2083
+ }
2084
+ }
2085
+ &nbsp;
2086
+ public <span class="fstat-no" title="function not covered" >range(</span>n: number) {
2087
+ <span class="cstat-no" title="statement not covered" > return [...Array(n).keys()];</span>
2088
+ }
2089
+ &nbsp;
2090
+ /**
2091
+ * This sign UTXO tx.
2092
+ *
2093
+ * @param coin - network symbol. Example: eth, sys, btc
2094
+ * @param inputs - utxo transaction inputs
2095
+ * @param outputs - utxo transaction outputs
2096
+ * @returns signature object
2097
+ */
2098
+ &nbsp;
2099
+ public <span class="fstat-no" title="function not covered" >async </span>signUtxoTransaction(utxoTransaction: any, psbt: any) {
2100
+ <span class="cstat-no" title="statement not covered" > try {</span>
2101
+ const { payload, success } = <span class="cstat-no" title="statement not covered" >await TrezorConnect.signTransaction(</span>
2102
+ utxoTransaction
2103
+ );
2104
+ &nbsp;
2105
+ <span class="cstat-no" title="statement not covered" > if (success) {</span>
2106
+ const tx = <span class="cstat-no" title="statement not covered" >Transaction.fromHex(payload.serializedTx);</span>
2107
+ <span class="cstat-no" title="statement not covered" > for (const i of this.range(psbt.data.inputs.length)) {</span>
2108
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (tx.ins[i].witness == null) {</span>
2109
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
2110
+ 'Please move your funds to a Segwit address: https://wiki.trezor.io/Account'
2111
+ );
2112
+ }
2113
+ const partialSig = <span class="cstat-no" title="statement not covered" >[</span>
2114
+ {
2115
+ pubkey: tx.ins[i].witness[1],
2116
+ signature: tx.ins[i].witness[0],
2117
+ },
2118
+ ];
2119
+ <span class="cstat-no" title="statement not covered" > psbt.updateInput(i, { partialSig });</span>
2120
+ }
2121
+ <span class="cstat-no" title="statement not covered" > try {</span>
2122
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (psbt.validateSignaturesOfAllInputs()) {</span>
2123
+ <span class="cstat-no" title="statement not covered" > psbt.finalizeAllInputs();</span>
2124
+ }
2125
+ } catch (err) {
2126
+ <span class="cstat-no" title="statement not covered" > console.log(err);</span>
2127
+ }
2128
+ <span class="cstat-no" title="statement not covered" > return psbt;</span>
2129
+ } else {
2130
+ <span class="cstat-no" title="statement not covered" > throw new Error('Trezor sign failed: ' + payload.error);</span>
2131
+ }
2132
+ } catch (error) {
2133
+ <span class="cstat-no" title="statement not covered" > return { error };</span>
2134
+ }
2135
+ }
2136
+ &nbsp;
2137
+ public <span class="fstat-no" title="function not covered" >convertToAddressNFormat(</span>path: string) {
2138
+ const pathArray = <span class="cstat-no" title="statement not covered" >path.replace(/'/g, '').split('/');</span>
2139
+ &nbsp;
2140
+ <span class="cstat-no" title="statement not covered" > pathArray.shift();</span>
2141
+ &nbsp;
2142
+ const addressN: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2143
+ &nbsp;
2144
+ <span class="cstat-no" title="statement not covered" > for (const index in pathArray) {</span>
2145
+ <span class="cstat-no" title="statement not covered" > if (Number(index) &lt;= 2 &amp;&amp; Number(index) &gt;= 0) {</span>
2146
+ <span class="cstat-no" title="statement not covered" > addressN[Number(index)] = Number(pathArray[index]) | 0x80000000;</span>
2147
+ } else {
2148
+ <span class="cstat-no" title="statement not covered" > addressN[Number(index)] = Number(pathArray[index]);</span>
2149
+ }
2150
+ }
2151
+ &nbsp;
2152
+ <span class="cstat-no" title="statement not covered" > return addressN;</span>
2153
+ }
2154
+ public <span class="fstat-no" title="function not covered" >isScriptHash(</span>address: string, networkInfo: any) {
2155
+ <span class="cstat-no" title="statement not covered" > if (!this.isBech32(address)) {</span>
2156
+ const decoded = <span class="cstat-no" title="statement not covered" >fromBase58Check(address);</span>
2157
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (decoded.version === networkInfo.pubKeyHash) {</span>
2158
+ <span class="cstat-no" title="statement not covered" > return false;</span>
2159
+ }
2160
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (decoded.version === networkInfo.scriptHash) {</span>
2161
+ <span class="cstat-no" title="statement not covered" > return true;</span>
2162
+ }
2163
+ } else {
2164
+ const decoded = <span class="cstat-no" title="statement not covered" >fromBech32(address);</span>
2165
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (decoded.data.length === 20) {</span>
2166
+ <span class="cstat-no" title="statement not covered" > return false;</span>
2167
+ }
2168
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (decoded.data.length === 32) {</span>
2169
+ <span class="cstat-no" title="statement not covered" > return true;</span>
2170
+ }
2171
+ }
2172
+ <span class="cstat-no" title="statement not covered" > throw new Error('isScriptHash: Unknown address type');</span>
2173
+ }
2174
+ &nbsp;
2175
+ public <span class="fstat-no" title="function not covered" >isPaymentFactory(</span>payment: any) {
2176
+ <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >(s</span>cript: any) =&gt; {</span>
2177
+ <span class="cstat-no" title="statement not covered" > try {</span>
2178
+ <span class="cstat-no" title="statement not covered" > payment({ output: script });</span>
2179
+ <span class="cstat-no" title="statement not covered" > return true;</span>
2180
+ } catch (err) {
2181
+ <span class="cstat-no" title="statement not covered" > return false;</span>
2182
+ }
2183
+ };
2184
+ }
2185
+ public <span class="fstat-no" title="function not covered" >isBech32(</span>address: string) {
2186
+ <span class="cstat-no" title="statement not covered" > try {</span>
2187
+ <span class="cstat-no" title="statement not covered" > fromBech32(address);</span>
2188
+ <span class="cstat-no" title="statement not covered" > return true;</span>
2189
+ } catch (e) {
2190
+ <span class="cstat-no" title="statement not covered" > return false;</span>
2191
+ }
2192
+ }
2193
+ public <span class="fstat-no" title="function not covered" >isP2WSHScript(</span>script: any) {
2194
+ <span class="cstat-no" title="statement not covered" > this.isPaymentFactory(p2wsh)(script);</span>
2195
+ &nbsp;
2196
+ <span class="cstat-no" title="statement not covered" > return false;</span>
2197
+ }
2198
+ &nbsp;
2199
+ public <span class="fstat-no" title="function not covered" >convertToTrezorFormat(</span>{ psbt, pathIn, coin }: any) {
2200
+ const { hd } = <span class="cstat-no" title="statement not covered" >this.getSigner();</span>
2201
+ const trezortx: any = <span class="cstat-no" title="statement not covered" >{};</span>
2202
+ &nbsp;
2203
+ <span class="cstat-no" title="statement not covered" > trezortx.coin = coin;</span>
2204
+ <span class="cstat-no" title="statement not covered" > trezortx.version = psbt.version;</span>
2205
+ <span class="cstat-no" title="statement not covered" > trezortx.inputs = [];</span>
2206
+ <span class="cstat-no" title="statement not covered" > trezortx.outputs = [];</span>
2207
+ &nbsp;
2208
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; psbt.txInputs.length; i++) {</span>
2209
+ const scriptTypes = <span class="cstat-no" title="statement not covered" >psbt.getInputType(i);</span>
2210
+ const input = <span class="cstat-no" title="statement not covered" >psbt.txInputs[i];</span>
2211
+ const inputItem: any = <span class="cstat-no" title="statement not covered" >{};</span>
2212
+ <span class="cstat-no" title="statement not covered" > inputItem.prev_index = input.index;</span>
2213
+ <span class="cstat-no" title="statement not covered" > inputItem.prev_hash = input.hash.reverse().toString('hex');</span>
2214
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (input.sequence) <span class="cstat-no" title="statement not covered" >inputItem.sequence = input.sequence;</span></span>
2215
+ const dataInput = <span class="cstat-no" title="statement not covered" >psbt.data.inputs[i];</span>
2216
+ let path = <span class="cstat-no" title="statement not covered" >'';</span>
2217
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
2218
+ pathIn ||
2219
+ (dataInput.unknownKeyVals &amp;&amp;
2220
+ dataInput.unknownKeyVals.length &gt; 1 &amp;&amp;
2221
+ dataInput.unknownKeyVals[1].key.equals(Buffer.from('path')) &amp;&amp;
2222
+ (!dataInput.bip32Derivation ||
2223
+ dataInput.bip32Derivation.length === 0))
2224
+ ) {
2225
+ <span class="cstat-no" title="statement not covered" > path = pathIn || dataInput.unknownKeyVals[1].value.toString();</span>
2226
+ <span class="cstat-no" title="statement not covered" > inputItem.address_n = this.convertToAddressNFormat(path);</span>
2227
+ }
2228
+ <span class="cstat-no" title="statement not covered" > switch (scriptTypes) {</span>
2229
+ case 'multisig':
2230
+ <span class="cstat-no" title="statement not covered" > inputItem.script_type = 'SPENDMULTISIG';</span>
2231
+ <span class="cstat-no" title="statement not covered" > break;</span>
2232
+ case 'witnesspubkeyhash':
2233
+ <span class="cstat-no" title="statement not covered" > inputItem.script_type = 'SPENDWITNESS';</span>
2234
+ <span class="cstat-no" title="statement not covered" > break;</span>
2235
+ default:
2236
+ <span class="cstat-no" title="statement not covered" > inputItem.script_type = this.isP2WSHScript(</span>
2237
+ psbt.data.inputs[i].witnessUtxo.script
2238
+ ? psbt.data.inputs[i].witnessUtxo.script
2239
+ : ''
2240
+ )
2241
+ ? 'SPENDP2SHWITNESS'
2242
+ : 'SPENDADDRESS';
2243
+ <span class="cstat-no" title="statement not covered" > break;</span>
2244
+ }
2245
+ <span class="cstat-no" title="statement not covered" > trezortx.inputs.push(inputItem);</span>
2246
+ }
2247
+ &nbsp;
2248
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; psbt.txOutputs.length; i++) {</span>
2249
+ const output = <span class="cstat-no" title="statement not covered" >psbt.txOutputs[i];</span>
2250
+ const outputItem: any = <span class="cstat-no" title="statement not covered" >{};</span>
2251
+ const chunks = <span class="cstat-no" title="statement not covered" >decompile(output.script);</span>
2252
+ <span class="cstat-no" title="statement not covered" > outputItem.amount = output.value.toString();</span>
2253
+ <span class="cstat-no" title="statement not covered" > if (chunks &amp;&amp; chunks[0] === bitcoinops.OP_RETURN) {</span>
2254
+ <span class="cstat-no" title="statement not covered" > outputItem.script_type = 'PAYTOOPRETURN';</span>
2255
+ // @ts-ignore
2256
+ <span class="cstat-no" title="statement not covered" > outputItem.op_return_data = chunks[1].toString('hex');</span>
2257
+ } else {
2258
+ <span class="cstat-no" title="statement not covered" > if (output &amp;&amp; this.isBech32(output.address)) {</span>
2259
+ <span class="cstat-no" title="statement not covered" > if (</span>
2260
+ output.script.length === 34 &amp;&amp;
2261
+ output.script[0] === 0 &amp;&amp;
2262
+ output.script[1] === 0x20
2263
+ ) {
2264
+ <span class="cstat-no" title="statement not covered" > outputItem.script_type = 'PAYTOP2SHWITNESS';</span>
2265
+ } else {
2266
+ <span class="cstat-no" title="statement not covered" > outputItem.script_type = 'PAYTOWITNESS';</span>
2267
+ }
2268
+ } else {
2269
+ <span class="cstat-no" title="statement not covered" > outputItem.script_type = this.isScriptHash(</span>
2270
+ output.address,
2271
+ hd.Signer.network
2272
+ )
2273
+ ? 'PAYTOSCRIPTHASH'
2274
+ : 'PAYTOADDRESS';
2275
+ }
2276
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (output.address) <span class="cstat-no" title="statement not covered" >outputItem.address = output.address;</span></span>
2277
+ }
2278
+ <span class="cstat-no" title="statement not covered" > trezortx.outputs.push(outputItem);</span>
2279
+ }
2280
+ <span class="cstat-no" title="statement not covered" > return trezortx;</span>
2281
+ }
2282
+ &nbsp;
2283
+ /**
2284
+ * This sign EVM tx.
2285
+ *
2286
+ * @param index - index of account for path derivation
2287
+ * @param tx - ethereum tx object
2288
+ * @returns signature object
2289
+ */
2290
+ public <span class="fstat-no" title="function not covered" >async </span>signEthTransaction({
2291
+ tx,
2292
+ index,
2293
+ coin,
2294
+ slip44,
2295
+ }: {
2296
+ index: string;
2297
+ tx: EthereumTransaction | EthereumTransactionEIP1559;
2298
+ coin: string;
2299
+ slip44: number;
2300
+ }) {
2301
+ <span class="cstat-no" title="statement not covered" > try {</span>
2302
+ // Use dynamic path generation based on actual network parameters
2303
+ const derivationPath = <span class="cstat-no" title="statement not covered" >getAddressDerivationPath(</span>
2304
+ coin,
2305
+ slip44,
2306
+ 0,
2307
+ false,
2308
+ Number(index)
2309
+ );
2310
+ &nbsp;
2311
+ const { success, payload } = <span class="cstat-no" title="statement not covered" >await TrezorConnect.ethereumSignTransaction({</span>
2312
+ path: derivationPath,
2313
+ transaction: tx,
2314
+ });
2315
+ &nbsp;
2316
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (success) {</span>
2317
+ <span class="cstat-no" title="statement not covered" > return { success, payload };</span>
2318
+ }
2319
+ <span class="cstat-no" title="statement not covered" > return { success: false, payload };</span>
2320
+ } catch (error) {
2321
+ <span class="cstat-no" title="statement not covered" > return { success: false, payload: error };</span>
2322
+ }
2323
+ }
2324
+ &nbsp;
2325
+ /**
2326
+ * This sign message.
2327
+ *
2328
+ * @param coin - network symbol. Example: eth, sys, btc
2329
+ * @param slip44 - network slip44 number
2330
+ * @param message - message to be signed. Example: 'Test message'
2331
+ * @param index - index of account for path derivation
2332
+ * @returns signature object
2333
+ */
2334
+ &nbsp;
2335
+ public <span class="fstat-no" title="function not covered" >async </span>signMessage({
2336
+ index,
2337
+ message,
2338
+ coin,
2339
+ slip44,
2340
+ address,
2341
+ }: {
2342
+ address: string;
2343
+ coin: string;
2344
+ index?: number;
2345
+ message?: string;
2346
+ slip44: number; // Required, not optional
2347
+ }) {
2348
+ // Use dynamic path generation instead of hardcoded switch
2349
+ <span class="cstat-no" title="statement not covered" > this.hdPath = getAddressDerivationPath(</span>
2350
+ coin,
2351
+ slip44, // Now guaranteed to be a number
2352
+ 0,
2353
+ false,
2354
+ index || 0
2355
+ );
2356
+ &nbsp;
2357
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isEvmCoin(coin, slip44) &amp;&amp; `${index ? index : 0}` &amp;&amp; message) {</span>
2358
+ <span class="cstat-no" title="statement not covered" > return this._signEthPersonalMessage(Number(index), message, address);</span>
2359
+ }
2360
+ <span class="cstat-no" title="statement not covered" > return this._signUtxoPersonalMessage({ coin, hdPath: this.hdPath });</span>
2361
+ }
2362
+ &nbsp;
2363
+ private <span class="fstat-no" title="function not covered" >async </span>_signUtxoPersonalMessage({
2364
+ coin,
2365
+ hdPath,
2366
+ }: {
2367
+ coin: string;
2368
+ hdPath: string;
2369
+ }) {
2370
+ <span class="cstat-no" title="statement not covered" > try {</span>
2371
+ const { success, payload } = <span class="cstat-no" title="statement not covered" >await TrezorConnect.signMessage({</span>
2372
+ path: hdPath,
2373
+ coin: coin,
2374
+ message: 'UTXO example message',
2375
+ });
2376
+ &nbsp;
2377
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (success) {</span>
2378
+ <span class="cstat-no" title="statement not covered" > return { success, payload };</span>
2379
+ }
2380
+ <span class="cstat-no" title="statement not covered" > return { success: false, payload };</span>
2381
+ } catch (error) {
2382
+ <span class="cstat-no" title="statement not covered" > return { error };</span>
2383
+ }
2384
+ }
2385
+ &nbsp;
2386
+ // For personal_sign, we need to prefix the message:
2387
+ private <span class="fstat-no" title="function not covered" >async </span>_signEthPersonalMessage(
2388
+ index: number,
2389
+ message: string,
2390
+ address: string
2391
+ ) {
2392
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
2393
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >async </span>() =&gt; {</span>
2394
+ <span class="cstat-no" title="statement not covered" > try {</span>
2395
+ // Use dynamic path generation for ETH (EVM) - this is always ETH for personal message signing
2396
+ const derivationPath = <span class="cstat-no" title="statement not covered" >getAddressDerivationPath(</span>
2397
+ 'eth',
2398
+ 60,
2399
+ 0,
2400
+ false,
2401
+ index
2402
+ );
2403
+ &nbsp;
2404
+ <span class="cstat-no" title="statement not covered" > TrezorConnect.ethereumSignMessage({</span>
2405
+ path: derivationPath,
2406
+ message: Web3.utils.stripHexPrefix(message),
2407
+ hex: true,
2408
+ })
2409
+ .then(<span class="fstat-no" title="function not covered" >(r</span>esponse: any) =&gt; {
2410
+ <span class="cstat-no" title="statement not covered" > if (response.success) {</span>
2411
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
2412
+ address &amp;&amp;
2413
+ response.payload.address.toLowerCase() !==
2414
+ address.toLowerCase()
2415
+ ) {
2416
+ <span class="cstat-no" title="statement not covered" > reject(new Error('signature doesnt match the right address'));</span>
2417
+ }
2418
+ const signature = <span class="cstat-no" title="statement not covered" >`0x${response.payload.signature}`;</span>
2419
+ <span class="cstat-no" title="statement not covered" > resolve({ signature, success: true });</span>
2420
+ } else {
2421
+ <span class="cstat-no" title="statement not covered" > reject(</span>
2422
+ // @ts-ignore
2423
+ new Error(response.payload.error || 'Unknown error')
2424
+ );
2425
+ }
2426
+ })
2427
+ .catch(<span class="fstat-no" title="function not covered" >(e</span>: any) =&gt; {
2428
+ <span class="cstat-no" title="statement not covered" > reject(new Error(e.toString() || 'Unknown error'));</span>
2429
+ });
2430
+ } catch (error) {
2431
+ <span class="cstat-no" title="statement not covered" > reject(error);</span>
2432
+ }
2433
+ // This is necessary to avoid popup collision
2434
+ // between the unlock &amp; sign trezor popups
2435
+ }, DELAY_BETWEEN_POPUPS);
2436
+ });
2437
+ }
2438
+ private <span class="fstat-no" title="function not covered" >_sanitizeData(</span>data: any): any {
2439
+ <span class="cstat-no" title="statement not covered" > switch (Object.prototype.toString.call(data)) {</span>
2440
+ case '[object Object]': {
2441
+ const entries = <span class="cstat-no" title="statement not covered" >Object.keys(data).map(<span class="fstat-no" title="function not covered" >(k</span>) =&gt; <span class="cstat-no" title="statement not covered" >[</span></span>
2442
+ k,
2443
+ this._sanitizeData(data[k]),
2444
+ ]);
2445
+ <span class="cstat-no" title="statement not covered" > return Object.fromEntries(entries);</span>
2446
+ }
2447
+ &nbsp;
2448
+ case '[object Array]':
2449
+ <span class="cstat-no" title="statement not covered" > return data.map(<span class="fstat-no" title="function not covered" >(v</span>: any[]) =&gt; <span class="cstat-no" title="statement not covered" >this._sanitizeData(v))</span>;</span>
2450
+ &nbsp;
2451
+ case '[object BigInt]':
2452
+ <span class="cstat-no" title="statement not covered" > return data.toString();</span>
2453
+ &nbsp;
2454
+ default:
2455
+ <span class="cstat-no" title="statement not covered" > return data;</span>
2456
+ }
2457
+ }
2458
+ &nbsp;
2459
+ private _transformTypedData = <span class="fstat-no" title="function not covered" >&lt;T extends MessageTypes&gt;(</span>
2460
+ data: TypedMessage&lt;T&gt;,
2461
+ metamask_v4_compat: boolean
2462
+ ) =&gt; {
2463
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!metamask_v4_compat) {</span>
2464
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
2465
+ 'Trezor: Only version 4 of typed data signing is supported'
2466
+ );
2467
+ }
2468
+ &nbsp;
2469
+ const { types, primaryType, domain, message } = <span class="cstat-no" title="statement not covered" >this._sanitizeData(data);</span>
2470
+ &nbsp;
2471
+ const domainSeparatorHash = <span class="cstat-no" title="statement not covered" >TypedDataUtils.hashStruct(</span>
2472
+ 'EIP712Domain',
2473
+ this._sanitizeData(domain),
2474
+ types,
2475
+ true
2476
+ ).toString('hex');
2477
+ &nbsp;
2478
+ let messageHash: string | null = <span class="cstat-no" title="statement not covered" >null;</span>
2479
+ &nbsp;
2480
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (primaryType !== 'EIP712Domain') {</span>
2481
+ <span class="cstat-no" title="statement not covered" > messageHash = TypedDataUtils.hashStruct(</span>
2482
+ primaryType as string,
2483
+ this._sanitizeData(message),
2484
+ types,
2485
+ true
2486
+ ).toString('hex');
2487
+ }
2488
+ &nbsp;
2489
+ <span class="cstat-no" title="statement not covered" > return {</span>
2490
+ domain_separator_hash: domainSeparatorHash,
2491
+ message_hash: messageHash,
2492
+ ...data,
2493
+ };
2494
+ };
2495
+ &nbsp;
2496
+ /**
2497
+ * EIP-712 Sign Typed Data
2498
+ */
2499
+ public <span class="fstat-no" title="function not covered" >async </span>signTypedData({
2500
+ version,
2501
+ address,
2502
+ data,
2503
+ index,
2504
+ }: {
2505
+ address: string;
2506
+ data: any;
2507
+ index: number;
2508
+ version: Version;
2509
+ }) {
2510
+ // Use dynamic path generation for ETH (EVM) - typed data is only used for EVM
2511
+ const derivationPath = <span class="cstat-no" title="statement not covered" >getAddressDerivationPath('eth', 60, 0, false, index);</span>
2512
+ const dataWithHashes = <span class="cstat-no" title="statement not covered" >this._transformTypedData(data, version === 'V4');</span>
2513
+ &nbsp;
2514
+ // set default values for signTypedData
2515
+ // Trezor is stricter than @metamask/eth-sig-util in what it accepts
2516
+ const {
2517
+ types,
2518
+ message = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
2519
+ domain = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
2520
+ primaryType,
2521
+ // snake_case since Trezor uses Protobuf naming conventions here
2522
+ domain_separator_hash, // eslint-disable-line camelcase
2523
+ message_hash, // eslint-disable-line camelcase
2524
+ } = <span class="cstat-no" title="statement not covered" >dataWithHashes;</span>
2525
+ &nbsp;
2526
+ // This is necessary to avoid popup collision
2527
+ // between the unlock &amp; sign trezor popups
2528
+ &nbsp;
2529
+ const response = <span class="cstat-no" title="statement not covered" >await TrezorConnect.ethereumSignTypedData({</span>
2530
+ path: derivationPath,
2531
+ data: {
2532
+ types: {
2533
+ ...types,
2534
+ EIP712Domain: types.EIP712Domain ? types.EIP712Domain : [],
2535
+ },
2536
+ message,
2537
+ domain,
2538
+ primaryType: primaryType as any,
2539
+ },
2540
+ metamask_v4_compat: true,
2541
+ // Trezor 1 only supports blindly signing hashes
2542
+ domain_separator_hash,
2543
+ message_hash: message_hash ? message_hash : '',
2544
+ });
2545
+ &nbsp;
2546
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (response.success) {</span>
2547
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (address !== response.payload.address) {</span>
2548
+ <span class="cstat-no" title="statement not covered" > throw new Error('signature doesnt match the right address');</span>
2549
+ }
2550
+ <span class="cstat-no" title="statement not covered" > return response.payload.signature;</span>
2551
+ }
2552
+ // @ts-ignore
2553
+ <span class="cstat-no" title="statement not covered" > throw new Error(response.payload.error || 'Unknown error');</span>
2554
+ }
2555
+ &nbsp;
2556
+ /**
2557
+ * Gets account address based in index of account in path derivation.
2558
+ *
2559
+ * @param coin - network symbol. Example: eth, sys, btc
2560
+ * @param slip44 - network slip44 number
2561
+ * @param index - index of account for path derivation
2562
+ * @returns account address
2563
+ */
2564
+ &nbsp;
2565
+ public <span class="fstat-no" title="function not covered" >async </span>getAddress({
2566
+ coin,
2567
+ slip44,
2568
+ index,
2569
+ isChangeAddress,
2570
+ }: {
2571
+ coin: string;
2572
+ index: string | number;
2573
+ isChangeAddress?: boolean;
2574
+ slip44: number; // Required, not optional
2575
+ }): Promise&lt;string | undefined&gt; {
2576
+ // Use dynamic path generation instead of hardcoded switch
2577
+ const fullPath = <span class="cstat-no" title="statement not covered" >getAddressDerivationPath(</span>
2578
+ coin,
2579
+ slip44,
2580
+ 0,
2581
+ isChangeAddress,
2582
+ Number(index)
2583
+ );
2584
+ &nbsp;
2585
+ <span class="cstat-no" title="statement not covered" > try {</span>
2586
+ const { payload, success } = <span class="cstat-no" title="statement not covered" >await TrezorConnect.getAddress({</span>
2587
+ path: fullPath,
2588
+ coin,
2589
+ });
2590
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (success) {</span>
2591
+ <span class="cstat-no" title="statement not covered" > return payload.address;</span>
2592
+ }
2593
+ } catch (error) {
2594
+ <span class="cstat-no" title="statement not covered" > return error;</span>
2595
+ }
2596
+ }
2597
+ &nbsp;
2598
+ public <span class="fstat-no" title="function not covered" >async </span>getMultipleAddress({
2599
+ coin,
2600
+ slip44,
2601
+ indexArray,
2602
+ isChangeAddress,
2603
+ }: {
2604
+ coin: string;
2605
+ indexArray: string[] | number[];
2606
+ isChangeAddress?: boolean;
2607
+ slip44: number; // Required, not optional
2608
+ }): Promise&lt;string[] | undefined&gt; {
2609
+ <span class="cstat-no" title="statement not covered" > try {</span>
2610
+ const { payload, success } = <span class="cstat-no" title="statement not covered" >await TrezorConnect.getAddress({</span>
2611
+ bundle: indexArray.map(<span class="fstat-no" title="function not covered" >(i</span>ndex) =&gt; (<span class="cstat-no" title="statement not covered" >{</span>
2612
+ path: getAddressDerivationPath(
2613
+ coin,
2614
+ slip44,
2615
+ 0,
2616
+ isChangeAddress,
2617
+ Number(index)
2618
+ ),
2619
+ coin,
2620
+ })),
2621
+ });
2622
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (success) {</span>
2623
+ <span class="cstat-no" title="statement not covered" > return payload.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >item.address)</span>;</span>
2624
+ }
2625
+ } catch (error) {
2626
+ <span class="cstat-no" title="statement not covered" > return error;</span>
2627
+ }
2628
+ }
2629
+ }
2630
+ &nbsp;</pre></td></tr></table></pre>
2631
+
2632
+ <div class="push"></div>
2633
+ <!-- for sticky footer -->
2634
+ </div>
2635
+ <!-- /wrapper -->
2636
+ <div class="footer quiet pad2 space-top1 center small">
2637
+ Code coverage generated by
2638
+ <a
2639
+ href="https://istanbul.js.org/"
2640
+ target="_blank"
2641
+ rel="noopener noreferrer"
2642
+ >istanbul</a
2643
+ >
2644
+ at 2025-06-20T17:45:56.456Z
2645
+ </div>
2646
+ <script src="../../prettify.js"></script>
2647
+ <script>
2648
+ window.onload = function () {
2649
+ prettyPrint();
2650
+ };
2651
+ </script>
2652
+ <script src="../../sorter.js"></script>
2653
+ <script src="../../block-navigation.js"></script>
2654
+ </body>
2655
+ </html>