@gearbox-protocol/sdk 0.0.2

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 (640) hide show
  1. package/.idea/gearbox-sdk.iml +12 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/vcs.xml +6 -0
  4. package/.prettierrc +10 -0
  5. package/README.md +4 -0
  6. package/lib/config.d.ts +1 -0
  7. package/lib/config.js +4 -0
  8. package/lib/core/constants.d.ts +17 -0
  9. package/lib/core/constants.js +36 -0
  10. package/lib/core/contracts.d.ts +64 -0
  11. package/lib/core/contracts.js +104 -0
  12. package/lib/core/contractsRegister.d.ts +2 -0
  13. package/lib/core/contractsRegister.js +43 -0
  14. package/lib/core/creditAccount.d.ts +35 -0
  15. package/lib/core/creditAccount.js +98 -0
  16. package/lib/core/creditCard.d.ts +13 -0
  17. package/lib/core/creditCard.js +2 -0
  18. package/lib/core/creditManager.d.ts +37 -0
  19. package/lib/core/creditManager.js +118 -0
  20. package/lib/core/creditOperation.d.ts +9 -0
  21. package/lib/core/creditOperation.js +2 -0
  22. package/lib/core/creditSession.d.ts +26 -0
  23. package/lib/core/creditSession.js +44 -0
  24. package/lib/core/errors.d.ts +26 -0
  25. package/lib/core/errors.js +74 -0
  26. package/lib/core/event.d.ts +42 -0
  27. package/lib/core/event.js +2 -0
  28. package/lib/core/eventOrTx.d.ts +36 -0
  29. package/lib/core/eventOrTx.js +97 -0
  30. package/lib/core/events.d.ts +369 -0
  31. package/lib/core/events.js +730 -0
  32. package/lib/core/history.d.ts +42 -0
  33. package/lib/core/history.js +2 -0
  34. package/lib/core/operations.d.ts +22 -0
  35. package/lib/core/operations.js +20 -0
  36. package/lib/core/oracles.d.ts +6 -0
  37. package/lib/core/oracles.js +2 -0
  38. package/lib/core/pool.d.ts +28 -0
  39. package/lib/core/pool.js +32 -0
  40. package/lib/core/swap.d.ts +4 -0
  41. package/lib/core/swap.js +8 -0
  42. package/lib/core/token.d.ts +3 -0
  43. package/lib/core/token.js +229 -0
  44. package/lib/core/tokenData.d.ts +28 -0
  45. package/lib/core/tokenData.js +58 -0
  46. package/lib/core/tokenDistributor.d.ts +12 -0
  47. package/lib/core/tokenDistributor.js +9 -0
  48. package/lib/core/trade.d.ts +35 -0
  49. package/lib/core/trade.js +62 -0
  50. package/lib/core/transactions.d.ts +127 -0
  51. package/lib/core/transactions.js +306 -0
  52. package/lib/index.d.ts +33 -0
  53. package/lib/index.js +47 -0
  54. package/lib/payload/creditAccount.d.ts +26 -0
  55. package/lib/payload/creditAccount.js +2 -0
  56. package/lib/payload/creditManager.d.ts +43 -0
  57. package/lib/payload/creditManager.js +2 -0
  58. package/lib/payload/creditSession.d.ts +23 -0
  59. package/lib/payload/creditSession.js +2 -0
  60. package/lib/payload/graphPayload.d.ts +9 -0
  61. package/lib/payload/graphPayload.js +2 -0
  62. package/lib/payload/pool.d.ts +17 -0
  63. package/lib/payload/pool.js +3 -0
  64. package/lib/payload/token.d.ts +5 -0
  65. package/lib/payload/token.js +2 -0
  66. package/lib/types/ACL.d.ts +491 -0
  67. package/lib/types/ACLTrait.d.ts +148 -0
  68. package/lib/types/ACLTraitTest.d.ts +209 -0
  69. package/lib/types/AbstractAccountMiner.d.ts +143 -0
  70. package/lib/types/AccountFactory.d.ts +716 -0
  71. package/lib/types/AccountMinerAuction.d.ts +391 -0
  72. package/lib/types/AccountMinerMock.d.ts +241 -0
  73. package/lib/types/AccountMinerNonReceivableTest.d.ts +127 -0
  74. package/lib/types/AccountMinerOwnFunds.d.ts +218 -0
  75. package/lib/types/AccountMining.d.ts +222 -0
  76. package/lib/types/AdaptersDeployer.d.ts +262 -0
  77. package/lib/types/AddressProvider.d.ts +912 -0
  78. package/lib/types/AggregatorV3Interface.d.ts +234 -0
  79. package/lib/types/ChainlinkPriceFeedMock.d.ts +215 -0
  80. package/lib/types/ContractsRegister.d.ts +398 -0
  81. package/lib/types/CoreDeployer.d.ts +394 -0
  82. package/lib/types/CreditAccount.d.ts +443 -0
  83. package/lib/types/CreditFilter.d.ts +1609 -0
  84. package/lib/types/CreditFilterMock.d.ts +1687 -0
  85. package/lib/types/CreditManager.d.ts +1285 -0
  86. package/lib/types/CreditManagerMockForFilter.d.ts +605 -0
  87. package/lib/types/CreditManagerMockForPoolTest.d.ts +204 -0
  88. package/lib/types/CurveMock.d.ts +298 -0
  89. package/lib/types/CurveV1Adapter.d.ts +349 -0
  90. package/lib/types/DataCompressor.d.ts +1331 -0
  91. package/lib/types/Deployer.d.ts +224 -0
  92. package/lib/types/DieselToken.d.ts +567 -0
  93. package/lib/types/ERC165.d.ts +116 -0
  94. package/lib/types/ERC20.d.ts +411 -0
  95. package/lib/types/ERC20BlockingMock.d.ts +568 -0
  96. package/lib/types/ERC721.d.ts +625 -0
  97. package/lib/types/Errors.d.ts +1854 -0
  98. package/lib/types/ExecutorMock.d.ts +140 -0
  99. package/lib/types/FlashLoanAttacker.d.ts +170 -0
  100. package/lib/types/FuzzHarness.d.ts +124 -0
  101. package/lib/types/GearBeta.d.ts +745 -0
  102. package/lib/types/GearToken.d.ts +888 -0
  103. package/lib/types/GenesisDeployer.d.ts +282 -0
  104. package/lib/types/IAccountFactory.d.ts +317 -0
  105. package/lib/types/IAccountMiner.d.ts +124 -0
  106. package/lib/types/IAppAddressProvider.d.ts +198 -0
  107. package/lib/types/IAppCreditManager.d.ts +408 -0
  108. package/lib/types/IAppERC20.d.ts +309 -0
  109. package/lib/types/IAppPoolService.d.ts +166 -0
  110. package/lib/types/ICreditAccount.d.ts +430 -0
  111. package/lib/types/ICreditAccountData.d.ts +347 -0
  112. package/lib/types/ICreditFilter.d.ts +1162 -0
  113. package/lib/types/ICreditManager.d.ts +971 -0
  114. package/lib/types/ICurvePool.d.ts +298 -0
  115. package/lib/types/IDataCompressor.d.ts +1231 -0
  116. package/lib/types/IERC165.d.ts +116 -0
  117. package/lib/types/IERC20.d.ts +294 -0
  118. package/lib/types/IERC721.d.ts +472 -0
  119. package/lib/types/IERC721Enumerable.d.ts +564 -0
  120. package/lib/types/IERC721Metadata.d.ts +523 -0
  121. package/lib/types/IERC721Receiver.d.ts +132 -0
  122. package/lib/types/IGearToken.d.ts +527 -0
  123. package/lib/types/IInterestRateModel.d.ts +121 -0
  124. package/lib/types/IMerkleDistributor.d.ts +190 -0
  125. package/lib/types/IPoolService.d.ts +772 -0
  126. package/lib/types/IPriceOracle.d.ts +211 -0
  127. package/lib/types/IQuoter.d.ts +269 -0
  128. package/lib/types/ISwapRouter.d.ts +404 -0
  129. package/lib/types/IUniswapV2Migrator.d.ts +134 -0
  130. package/lib/types/IUniswapV2Router01.d.ts +1119 -0
  131. package/lib/types/IUniswapV2Router02.d.ts +1432 -0
  132. package/lib/types/IUniswapV3SwapCallback.d.ts +127 -0
  133. package/lib/types/IWETH.d.ts +169 -0
  134. package/lib/types/IWETHGateway.d.ts +335 -0
  135. package/lib/types/IYVault.d.ts +558 -0
  136. package/lib/types/LeveragedActions.d.ts +772 -0
  137. package/lib/types/LinearInterestRateModel.d.ts +279 -0
  138. package/lib/types/MockPoolService.d.ts +1271 -0
  139. package/lib/types/Multicall2.d.ts +449 -0
  140. package/lib/types/Ownable.d.ts +169 -0
  141. package/lib/types/PathFinder.d.ts +379 -0
  142. package/lib/types/Pausable.d.ts +105 -0
  143. package/lib/types/PercentageMathTest.d.ts +154 -0
  144. package/lib/types/PoolDeployer.d.ts +282 -0
  145. package/lib/types/PoolService.d.ts +1174 -0
  146. package/lib/types/PriceOracle.d.ts +387 -0
  147. package/lib/types/Proxy.d.ts +78 -0
  148. package/lib/types/StepVesting.d.ts +411 -0
  149. package/lib/types/TestPoolService.d.ts +1294 -0
  150. package/lib/types/TokenDistributor.d.ts +640 -0
  151. package/lib/types/TokenFeeMock.d.ts +544 -0
  152. package/lib/types/TokenMock.d.ts +531 -0
  153. package/lib/types/TreasuryMock.d.ts +86 -0
  154. package/lib/types/UniswapRouterMock.d.ts +1520 -0
  155. package/lib/types/UniswapV2Adapter.d.ts +1463 -0
  156. package/lib/types/UniswapV3Adapter.d.ts +455 -0
  157. package/lib/types/VestingDeployer.d.ts +247 -0
  158. package/lib/types/WETHGateway.d.ts +376 -0
  159. package/lib/types/WETHMock.d.ts +433 -0
  160. package/lib/types/WadRayMathTest.d.ts +316 -0
  161. package/lib/types/YearnAdapter.d.ts +609 -0
  162. package/lib/types/YearnMock.d.ts +795 -0
  163. package/lib/types/YearnPriceFeed.d.ts +399 -0
  164. package/lib/types/commons.d.ts +16 -0
  165. package/lib/types/commons.js +5 -0
  166. package/lib/types/factories/ACLTraitTest__factory.d.ts +52 -0
  167. package/lib/types/factories/ACLTraitTest__factory.js +138 -0
  168. package/lib/types/factories/ACLTrait__factory.d.ts +31 -0
  169. package/lib/types/factories/ACLTrait__factory.js +75 -0
  170. package/lib/types/factories/ACL__factory.d.ts +45 -0
  171. package/lib/types/factories/ACL__factory.js +317 -0
  172. package/lib/types/factories/AbstractAccountMiner__factory.d.ts +30 -0
  173. package/lib/types/factories/AbstractAccountMiner__factory.js +61 -0
  174. package/lib/types/factories/AccountFactory__factory.d.ts +72 -0
  175. package/lib/types/factories/AccountFactory__factory.js +508 -0
  176. package/lib/types/factories/AccountMinerAuction__factory.js +304 -0
  177. package/lib/types/factories/AccountMinerMock__factory.js +196 -0
  178. package/lib/types/factories/AccountMinerNonReceivableTest__factory.js +84 -0
  179. package/lib/types/factories/AccountMinerOwnFunds__factory.js +181 -0
  180. package/lib/types/factories/AccountMining__factory.d.ts +56 -0
  181. package/lib/types/factories/AccountMining__factory.js +192 -0
  182. package/lib/types/factories/AdaptersDeployer__factory.d.ts +85 -0
  183. package/lib/types/factories/AdaptersDeployer__factory.js +202 -0
  184. package/lib/types/factories/AddressProvider__factory.d.ts +52 -0
  185. package/lib/types/factories/AddressProvider__factory.js +582 -0
  186. package/lib/types/factories/AggregatorV3Interface__factory.d.ts +22 -0
  187. package/lib/types/factories/AggregatorV3Interface__factory.js +133 -0
  188. package/lib/types/factories/ChainlinkPriceFeedMock__factory.d.ts +42 -0
  189. package/lib/types/factories/ChainlinkPriceFeedMock__factory.js +193 -0
  190. package/lib/types/factories/ContractsRegister__factory.d.ts +56 -0
  191. package/lib/types/factories/ContractsRegister__factory.js +310 -0
  192. package/lib/types/factories/CoreDeployer__factory.js +331 -0
  193. package/lib/types/factories/CreditAccount__factory.d.ts +32 -0
  194. package/lib/types/factories/CreditAccount__factory.js +262 -0
  195. package/lib/types/factories/CreditFilterMock__factory.d.ts +56 -0
  196. package/lib/types/factories/CreditFilterMock__factory.js +1083 -0
  197. package/lib/types/factories/CreditFilter__factory.d.ts +56 -0
  198. package/lib/types/factories/CreditFilter__factory.js +1047 -0
  199. package/lib/types/factories/CreditManagerMockForFilter__factory.d.ts +38 -0
  200. package/lib/types/factories/CreditManagerMockForFilter__factory.js +324 -0
  201. package/lib/types/factories/CreditManagerMockForPoolTest__factory.d.ts +48 -0
  202. package/lib/types/factories/CreditManagerMockForPoolTest__factory.js +131 -0
  203. package/lib/types/factories/CreditManager__factory.d.ts +77 -0
  204. package/lib/types/factories/CreditManager__factory.js +1030 -0
  205. package/lib/types/factories/CurveMock__factory.d.ts +42 -0
  206. package/lib/types/factories/CurveMock__factory.js +210 -0
  207. package/lib/types/factories/CurveV1Adapter__factory.d.ts +42 -0
  208. package/lib/types/factories/CurveV1Adapter__factory.js +254 -0
  209. package/lib/types/factories/DataCompressor__factory.d.ts +71 -0
  210. package/lib/types/factories/DataCompressor__factory.js +944 -0
  211. package/lib/types/factories/Deployer__factory.js +248 -0
  212. package/lib/types/factories/DieselToken__factory.d.ts +56 -0
  213. package/lib/types/factories/DieselToken__factory.js +432 -0
  214. package/lib/types/factories/ERC165__factory.d.ts +22 -0
  215. package/lib/types/factories/ERC165__factory.js +41 -0
  216. package/lib/types/factories/ERC20BlockingMock__factory.d.ts +56 -0
  217. package/lib/types/factories/ERC20BlockingMock__factory.js +429 -0
  218. package/lib/types/factories/ERC20__factory.d.ts +56 -0
  219. package/lib/types/factories/ERC20__factory.js +339 -0
  220. package/lib/types/factories/ERC721__factory.d.ts +56 -0
  221. package/lib/types/factories/ERC721__factory.js +468 -0
  222. package/lib/types/factories/Errors__factory.d.ts +28 -0
  223. package/lib/types/factories/Errors__factory.js +1015 -0
  224. package/lib/types/factories/ExecutorMock__factory.d.ts +38 -0
  225. package/lib/types/factories/ExecutorMock__factory.js +103 -0
  226. package/lib/types/factories/FlashLoanAttacker__factory.d.ts +48 -0
  227. package/lib/types/factories/FlashLoanAttacker__factory.js +117 -0
  228. package/lib/types/factories/FuzzHarness__factory.d.ts +38 -0
  229. package/lib/types/factories/FuzzHarness__factory.js +92 -0
  230. package/lib/types/factories/GearBeta__factory.d.ts +52 -0
  231. package/lib/types/factories/GearBeta__factory.js +527 -0
  232. package/lib/types/factories/GearToken__factory.d.ts +56 -0
  233. package/lib/types/factories/GearToken__factory.js +708 -0
  234. package/lib/types/factories/GenesisDeployer__factory.d.ts +108 -0
  235. package/lib/types/factories/GenesisDeployer__factory.js +231 -0
  236. package/lib/types/factories/IAccountFactory__factory.d.ts +35 -0
  237. package/lib/types/factories/IAccountFactory__factory.js +226 -0
  238. package/lib/types/factories/IAccountMiner__factory.d.ts +28 -0
  239. package/lib/types/factories/IAccountMiner__factory.js +48 -0
  240. package/lib/types/factories/IAppAddressProvider__factory.d.ts +18 -0
  241. package/lib/types/factories/IAppAddressProvider__factory.js +100 -0
  242. package/lib/types/factories/IAppCreditManager__factory.d.ts +42 -0
  243. package/lib/types/factories/IAppCreditManager__factory.js +204 -0
  244. package/lib/types/factories/IAppERC20__factory.d.ts +22 -0
  245. package/lib/types/factories/IAppERC20__factory.js +194 -0
  246. package/lib/types/factories/IAppPoolService__factory.d.ts +22 -0
  247. package/lib/types/factories/IAppPoolService__factory.js +69 -0
  248. package/lib/types/factories/ICreditAccountData__factory.d.ts +35 -0
  249. package/lib/types/factories/ICreditAccountData__factory.js +216 -0
  250. package/lib/types/factories/ICreditAccount__factory.d.ts +22 -0
  251. package/lib/types/factories/ICreditAccount__factory.js +218 -0
  252. package/lib/types/factories/ICreditFilter__factory.d.ts +35 -0
  253. package/lib/types/factories/ICreditFilter__factory.js +700 -0
  254. package/lib/types/factories/ICreditManager__factory.d.ts +56 -0
  255. package/lib/types/factories/ICreditManager__factory.js +720 -0
  256. package/lib/types/factories/ICurvePool__factory.d.ts +22 -0
  257. package/lib/types/factories/ICurvePool__factory.js +168 -0
  258. package/lib/types/factories/IDataCompressor__factory.d.ts +51 -0
  259. package/lib/types/factories/IDataCompressor__factory.js +826 -0
  260. package/lib/types/factories/IERC165__factory.d.ts +22 -0
  261. package/lib/types/factories/IERC165__factory.js +41 -0
  262. package/lib/types/factories/IERC20__factory.d.ts +35 -0
  263. package/lib/types/factories/IERC20__factory.js +205 -0
  264. package/lib/types/factories/IERC721Enumerable__factory.d.ts +35 -0
  265. package/lib/types/factories/IERC721Enumerable__factory.js +363 -0
  266. package/lib/types/factories/IERC721Metadata__factory.d.ts +35 -0
  267. package/lib/types/factories/IERC721Metadata__factory.js +352 -0
  268. package/lib/types/factories/IERC721Receiver__factory.d.ts +22 -0
  269. package/lib/types/factories/IERC721Receiver__factory.js +56 -0
  270. package/lib/types/factories/IERC721__factory.d.ts +35 -0
  271. package/lib/types/factories/IERC721__factory.js +307 -0
  272. package/lib/types/factories/IGearToken__factory.d.ts +35 -0
  273. package/lib/types/factories/IGearToken__factory.js +342 -0
  274. package/lib/types/factories/IInterestRateModel__factory.d.ts +22 -0
  275. package/lib/types/factories/IInterestRateModel__factory.js +46 -0
  276. package/lib/types/factories/IMerkleDistributor__factory.d.ts +35 -0
  277. package/lib/types/factories/IMerkleDistributor__factory.js +109 -0
  278. package/lib/types/factories/IPoolService__factory.d.ts +35 -0
  279. package/lib/types/factories/IPoolService__factory.js +580 -0
  280. package/lib/types/factories/IPriceOracle__factory.d.ts +35 -0
  281. package/lib/types/factories/IPriceOracle__factory.js +112 -0
  282. package/lib/types/factories/IQuoter__factory.d.ts +22 -0
  283. package/lib/types/factories/IQuoter__factory.js +148 -0
  284. package/lib/types/factories/ISwapRouter__factory.d.ts +27 -0
  285. package/lib/types/factories/ISwapRouter__factory.js +236 -0
  286. package/lib/types/factories/IUniswapV2Migrator__factory.d.ts +18 -0
  287. package/lib/types/factories/IUniswapV2Migrator__factory.js +55 -0
  288. package/lib/types/factories/IUniswapV2Router01__factory.d.ts +22 -0
  289. package/lib/types/factories/IUniswapV2Router01__factory.js +771 -0
  290. package/lib/types/factories/IUniswapV2Router02__factory.d.ts +22 -0
  291. package/lib/types/factories/IUniswapV2Router02__factory.js +973 -0
  292. package/lib/types/factories/IUniswapV3SwapCallback__factory.d.ts +18 -0
  293. package/lib/types/factories/IUniswapV3SwapCallback__factory.js +45 -0
  294. package/lib/types/factories/IWETHGateway__factory.d.ts +18 -0
  295. package/lib/types/factories/IWETHGateway__factory.js +150 -0
  296. package/lib/types/factories/IWETH__factory.d.ts +22 -0
  297. package/lib/types/factories/IWETH__factory.js +66 -0
  298. package/lib/types/factories/IYVault__factory.d.ts +35 -0
  299. package/lib/types/factories/IYVault__factory.js +411 -0
  300. package/lib/types/factories/LeveragedActions__factory.d.ts +84 -0
  301. package/lib/types/factories/LeveragedActions__factory.js +569 -0
  302. package/lib/types/factories/LinearInterestRateModel__factory.d.ts +42 -0
  303. package/lib/types/factories/LinearInterestRateModel__factory.js +209 -0
  304. package/lib/types/factories/MockPoolService__factory.d.ts +56 -0
  305. package/lib/types/factories/MockPoolService__factory.js +889 -0
  306. package/lib/types/factories/Multicall2__factory.d.ts +52 -0
  307. package/lib/types/factories/Multicall2__factory.js +364 -0
  308. package/lib/types/factories/Ownable__factory.d.ts +42 -0
  309. package/lib/types/factories/Ownable__factory.js +74 -0
  310. package/lib/types/factories/PathFinder__factory.d.ts +61 -0
  311. package/lib/types/factories/PathFinder__factory.js +302 -0
  312. package/lib/types/factories/Pausable__factory.d.ts +31 -0
  313. package/lib/types/factories/Pausable__factory.js +61 -0
  314. package/lib/types/factories/PercentageMathTest__factory.d.ts +32 -0
  315. package/lib/types/factories/PercentageMathTest__factory.js +101 -0
  316. package/lib/types/factories/PoolDeployer__factory.d.ts +113 -0
  317. package/lib/types/factories/PoolDeployer__factory.js +257 -0
  318. package/lib/types/factories/PoolService__factory.d.ts +56 -0
  319. package/lib/types/factories/PoolService__factory.js +873 -0
  320. package/lib/types/factories/PriceOracle__factory.d.ts +56 -0
  321. package/lib/types/factories/PriceOracle__factory.js +290 -0
  322. package/lib/types/factories/Proxy__factory.d.ts +13 -0
  323. package/lib/types/factories/Proxy__factory.js +30 -0
  324. package/lib/types/factories/StepVesting__factory.d.ts +52 -0
  325. package/lib/types/factories/StepVesting__factory.js +296 -0
  326. package/lib/types/factories/TestPoolService__factory.d.ts +56 -0
  327. package/lib/types/factories/TestPoolService__factory.js +932 -0
  328. package/lib/types/factories/TokenDistributor__factory.d.ts +82 -0
  329. package/lib/types/factories/TokenDistributor__factory.js +481 -0
  330. package/lib/types/factories/TokenFeeMock__factory.d.ts +56 -0
  331. package/lib/types/factories/TokenFeeMock__factory.js +427 -0
  332. package/lib/types/factories/TokenMock__factory.d.ts +56 -0
  333. package/lib/types/factories/TokenMock__factory.js +409 -0
  334. package/lib/types/factories/TreasuryMock__factory.d.ts +35 -0
  335. package/lib/types/factories/TreasuryMock__factory.js +70 -0
  336. package/lib/types/factories/UniswapRouterMock__factory.d.ts +32 -0
  337. package/lib/types/factories/UniswapRouterMock__factory.js +1046 -0
  338. package/lib/types/factories/UniswapV2Adapter__factory.d.ts +42 -0
  339. package/lib/types/factories/UniswapV2Adapter__factory.js +1059 -0
  340. package/lib/types/factories/UniswapV3Adapter__factory.d.ts +47 -0
  341. package/lib/types/factories/UniswapV3Adapter__factory.js +322 -0
  342. package/lib/types/factories/VestingDeployer__factory.js +216 -0
  343. package/lib/types/factories/WETHGateway__factory.d.ts +70 -0
  344. package/lib/types/factories/WETHGateway__factory.js +241 -0
  345. package/lib/types/factories/WETHMock__factory.d.ts +52 -0
  346. package/lib/types/factories/WETHMock__factory.js +355 -0
  347. package/lib/types/factories/WadRayMathTest__factory.d.ts +32 -0
  348. package/lib/types/factories/WadRayMathTest__factory.js +239 -0
  349. package/lib/types/factories/YearnAdapter__factory.d.ts +56 -0
  350. package/lib/types/factories/YearnAdapter__factory.js +497 -0
  351. package/lib/types/factories/YearnMock__factory.d.ts +56 -0
  352. package/lib/types/factories/YearnMock__factory.js +598 -0
  353. package/lib/types/factories/YearnPriceFeed__factory.d.ts +56 -0
  354. package/lib/types/factories/YearnPriceFeed__factory.js +350 -0
  355. package/lib/types/hardhat.d.ts +343 -0
  356. package/lib/types/index.d.ts +152 -0
  357. package/lib/types/index.js +156 -0
  358. package/lib/utils/events.d.ts +2 -0
  359. package/lib/utils/events.js +13 -0
  360. package/lib/utils/formatter.d.ts +13 -0
  361. package/lib/utils/formatter.js +125 -0
  362. package/lib/utils/loading.d.ts +1 -0
  363. package/lib/utils/loading.js +17 -0
  364. package/lib/utils/math.d.ts +6 -0
  365. package/lib/utils/math.js +44 -0
  366. package/lib/utils/multicall.d.ts +15 -0
  367. package/lib/utils/multicall.js +84 -0
  368. package/lib/utils/repeater.d.ts +1 -0
  369. package/lib/utils/repeater.js +72 -0
  370. package/lib/utils/validate.d.ts +1 -0
  371. package/lib/utils/validate.js +13 -0
  372. package/package.json +27 -0
  373. package/src/abi/adapters/YearnV2.sol/YearnAdapter.dbg.json +4 -0
  374. package/src/abi/adapters/YearnV2.sol/YearnAdapter.json +455 -0
  375. package/src/abi/core/ACL.sol/ACL.dbg.json +4 -0
  376. package/src/abi/core/ACL.sol/ACL.json +262 -0
  377. package/src/abi/core/ACLTrait.sol/ACLTrait.dbg.json +4 -0
  378. package/src/abi/core/ACLTrait.sol/ACLTrait.json +64 -0
  379. package/src/abi/core/AccountMining.sol/AccountMining.dbg.json +4 -0
  380. package/src/abi/core/AccountMining.sol/AccountMining.json +150 -0
  381. package/src/abi/core/AddressProvider.sol/AddressProvider.dbg.json +4 -0
  382. package/src/abi/core/AddressProvider.sol/AddressProvider.json +496 -0
  383. package/src/abi/core/ContractsRegister.sol/ContractsRegister.dbg.json +4 -0
  384. package/src/abi/core/ContractsRegister.sol/ContractsRegister.json +255 -0
  385. package/src/abi/credit/LeverageActions.sol/LeveragedActions.dbg.json +4 -0
  386. package/src/abi/credit/LeverageActions.sol/LeveragedActions.json +514 -0
  387. package/src/abi/deployer/AdaptersDeployer.sol/AdaptersDeployer.dbg.json +4 -0
  388. package/src/abi/deployer/AdaptersDeployer.sol/AdaptersDeployer.json +160 -0
  389. package/src/abi/deployer/GenesisDeployer.sol/GenesisDeployer.dbg.json +4 -0
  390. package/src/abi/deployer/GenesisDeployer.sol/GenesisDeployer.json +189 -0
  391. package/src/abi/deployer/PoolDeployer.sol/PoolDeployer.dbg.json +4 -0
  392. package/src/abi/deployer/PoolDeployer.sol/PoolDeployer.json +215 -0
  393. package/src/abi/fuzzing/FuzzHarness.sol/FuzzHarness.dbg.json +4 -0
  394. package/src/abi/fuzzing/FuzzHarness.sol/FuzzHarness.json +50 -0
  395. package/src/abi/integrations/yearn/IYVault.sol/IYVault.dbg.json +4 -0
  396. package/src/abi/integrations/yearn/IYVault.sol/IYVault.json +400 -0
  397. package/src/abi/interfaces/IGearToken.sol/IGearToken.dbg.json +4 -0
  398. package/src/abi/interfaces/IGearToken.sol/IGearToken.json +331 -0
  399. package/src/abi/interfaces/IMerkleDistributor.sol/IMerkleDistributor.dbg.json +4 -0
  400. package/src/abi/interfaces/IMerkleDistributor.sol/IMerkleDistributor.json +98 -0
  401. package/src/abi/mocks/core/ACLTraitTest.sol/ACLTraitTest.dbg.json +4 -0
  402. package/src/abi/mocks/core/ACLTraitTest.sol/ACLTraitTest.json +96 -0
  403. package/src/abi/mocks/credit/ExecutorMock.sol/ExecutorMock.dbg.json +4 -0
  404. package/src/abi/mocks/credit/ExecutorMock.sol/ExecutorMock.json +61 -0
  405. package/src/abi/mocks/integrations/CurveMock.sol/CurveMock.dbg.json +4 -0
  406. package/src/abi/mocks/integrations/CurveMock.sol/CurveMock.json +168 -0
  407. package/src/abi/mocks/integrations/YearnMock.sol/YearnMock.dbg.json +4 -0
  408. package/src/abi/mocks/integrations/YearnMock.sol/YearnMock.json +556 -0
  409. package/src/abi/mocks/oracles/ChainlinkPriceFeedMock.sol/ChainlinkPriceFeedMock.dbg.json +4 -0
  410. package/src/abi/mocks/oracles/ChainlinkPriceFeedMock.sol/ChainlinkPriceFeedMock.json +151 -0
  411. package/src/abi/mocks/pool/CreditManagerMockForPoolTest.sol/CreditManagerMockForPoolTest.dbg.json +4 -0
  412. package/src/abi/mocks/pool/CreditManagerMockForPoolTest.sol/CreditManagerMockForPoolTest.json +89 -0
  413. package/src/abi/mocks/tokens/ERC20Blocking.sol/ERC20BlockingMock.dbg.json +4 -0
  414. package/src/abi/mocks/tokens/ERC20Blocking.sol/ERC20BlockingMock.json +387 -0
  415. package/src/abi/mocks/tokens/ERC20Fee.sol/TokenFeeMock.dbg.json +4 -0
  416. package/src/abi/mocks/tokens/ERC20Fee.sol/TokenFeeMock.json +385 -0
  417. package/src/abi/oracles/YearnPriceFeed.sol/YearnPriceFeed.dbg.json +4 -0
  418. package/src/abi/oracles/YearnPriceFeed.sol/YearnPriceFeed.json +321 -0
  419. package/src/abi/support/PathFinder.sol/PathFinder.dbg.json +4 -0
  420. package/src/abi/support/PathFinder.sol/PathFinder.json +189 -0
  421. package/src/abi/tokens/GearNFT.sol/GearBeta.dbg.json +4 -0
  422. package/src/abi/tokens/GearNFT.sol/GearBeta.json +485 -0
  423. package/src/abi/tokens/TokenDistributor.sol/TokenDistributor.dbg.json +4 -0
  424. package/src/abi/tokens/TokenDistributor.sol/TokenDistributor.json +439 -0
  425. package/src/abi/tokens/Vesting.sol/StepVesting.dbg.json +4 -0
  426. package/src/abi/tokens/Vesting.sol/StepVesting.json +254 -0
  427. package/src/config.ts +1 -0
  428. package/src/core/constants.ts +44 -0
  429. package/src/core/contracts.ts +151 -0
  430. package/src/core/contractsRegister.ts +51 -0
  431. package/src/core/creditAccount.ts +105 -0
  432. package/src/core/creditCard.ts +15 -0
  433. package/src/core/creditManager.ts +171 -0
  434. package/src/core/creditOperation.ts +9 -0
  435. package/src/core/creditSession.ts +67 -0
  436. package/src/core/errors.ts +45 -0
  437. package/src/core/eventOrTx.ts +94 -0
  438. package/src/core/events.ts +1167 -0
  439. package/src/core/history.ts +55 -0
  440. package/src/core/operations.ts +35 -0
  441. package/src/core/oracles.ts +7 -0
  442. package/src/core/pool.ts +60 -0
  443. package/src/core/swap.ts +4 -0
  444. package/src/core/token.ts +275 -0
  445. package/src/core/tokenData.ts +84 -0
  446. package/src/core/tokenDistributor.ts +14 -0
  447. package/src/core/trade.ts +83 -0
  448. package/src/core/transactions.ts +407 -0
  449. package/src/index.ts +42 -0
  450. package/src/payload/creditAccount.ts +29 -0
  451. package/src/payload/creditManager.ts +46 -0
  452. package/src/payload/creditSession.ts +24 -0
  453. package/src/payload/graphPayload.ts +10 -0
  454. package/src/payload/pool.ts +20 -0
  455. package/src/payload/token.ts +5 -0
  456. package/src/types/ACL.d.ts +491 -0
  457. package/src/types/ACLTrait.d.ts +148 -0
  458. package/src/types/ACLTraitTest.d.ts +209 -0
  459. package/src/types/AccountFactory.d.ts +716 -0
  460. package/src/types/AccountMining.d.ts +222 -0
  461. package/src/types/AddressProvider.d.ts +912 -0
  462. package/src/types/AggregatorV3Interface.d.ts +234 -0
  463. package/src/types/ChainlinkPriceFeedMock.d.ts +215 -0
  464. package/src/types/ContractsRegister.d.ts +398 -0
  465. package/src/types/CreditAccount.d.ts +443 -0
  466. package/src/types/CreditFilter.d.ts +1609 -0
  467. package/src/types/CreditFilterMock.d.ts +1687 -0
  468. package/src/types/CreditManager.d.ts +1285 -0
  469. package/src/types/CreditManagerMockForFilter.d.ts +605 -0
  470. package/src/types/CreditManagerMockForPoolTest.d.ts +204 -0
  471. package/src/types/CurveMock.d.ts +298 -0
  472. package/src/types/CurveV1Adapter.d.ts +349 -0
  473. package/src/types/DataCompressor.d.ts +1331 -0
  474. package/src/types/DieselToken.d.ts +567 -0
  475. package/src/types/ERC165.d.ts +116 -0
  476. package/src/types/ERC20.d.ts +411 -0
  477. package/src/types/ERC20BlockingMock.d.ts +568 -0
  478. package/src/types/ERC721.d.ts +625 -0
  479. package/src/types/Errors.d.ts +1854 -0
  480. package/src/types/ExecutorMock.d.ts +140 -0
  481. package/src/types/FlashLoanAttacker.d.ts +170 -0
  482. package/src/types/FuzzHarness.d.ts +124 -0
  483. package/src/types/GearBeta.d.ts +745 -0
  484. package/src/types/GearToken.d.ts +888 -0
  485. package/src/types/IAccountFactory.d.ts +317 -0
  486. package/src/types/IAccountMiner.d.ts +124 -0
  487. package/src/types/IAppAddressProvider.d.ts +198 -0
  488. package/src/types/IAppCreditManager.d.ts +408 -0
  489. package/src/types/IAppERC20.d.ts +309 -0
  490. package/src/types/IAppPoolService.d.ts +166 -0
  491. package/src/types/ICreditAccount.d.ts +430 -0
  492. package/src/types/ICreditFilter.d.ts +1162 -0
  493. package/src/types/ICreditManager.d.ts +971 -0
  494. package/src/types/ICurvePool.d.ts +298 -0
  495. package/src/types/IDataCompressor.d.ts +1231 -0
  496. package/src/types/IERC165.d.ts +116 -0
  497. package/src/types/IERC20.d.ts +294 -0
  498. package/src/types/IERC721.d.ts +472 -0
  499. package/src/types/IERC721Enumerable.d.ts +564 -0
  500. package/src/types/IERC721Metadata.d.ts +523 -0
  501. package/src/types/IERC721Receiver.d.ts +132 -0
  502. package/src/types/IGearToken.d.ts +527 -0
  503. package/src/types/IInterestRateModel.d.ts +121 -0
  504. package/src/types/IMerkleDistributor.d.ts +190 -0
  505. package/src/types/IPoolService.d.ts +772 -0
  506. package/src/types/IPriceOracle.d.ts +211 -0
  507. package/src/types/IQuoter.d.ts +269 -0
  508. package/src/types/ISwapRouter.d.ts +404 -0
  509. package/src/types/IUniswapV2Migrator.d.ts +134 -0
  510. package/src/types/IUniswapV2Router01.d.ts +1119 -0
  511. package/src/types/IUniswapV2Router02.d.ts +1432 -0
  512. package/src/types/IUniswapV3SwapCallback.d.ts +127 -0
  513. package/src/types/IWETH.d.ts +169 -0
  514. package/src/types/IWETHGateway.d.ts +335 -0
  515. package/src/types/IYVault.d.ts +558 -0
  516. package/src/types/LeveragedActions.d.ts +772 -0
  517. package/src/types/LinearInterestRateModel.d.ts +279 -0
  518. package/src/types/MockPoolService.d.ts +1271 -0
  519. package/src/types/Multicall2.d.ts +449 -0
  520. package/src/types/Ownable.d.ts +169 -0
  521. package/src/types/PathFinder.d.ts +379 -0
  522. package/src/types/Pausable.d.ts +105 -0
  523. package/src/types/PercentageMathTest.d.ts +154 -0
  524. package/src/types/PoolService.d.ts +1174 -0
  525. package/src/types/PriceOracle.d.ts +387 -0
  526. package/src/types/StepVesting.d.ts +411 -0
  527. package/src/types/TestPoolService.d.ts +1294 -0
  528. package/src/types/TokenDistributor.d.ts +640 -0
  529. package/src/types/TokenFeeMock.d.ts +544 -0
  530. package/src/types/TokenMock.d.ts +531 -0
  531. package/src/types/TreasuryMock.d.ts +86 -0
  532. package/src/types/UniswapRouterMock.d.ts +1520 -0
  533. package/src/types/UniswapV2Adapter.d.ts +1463 -0
  534. package/src/types/UniswapV3Adapter.d.ts +455 -0
  535. package/src/types/WETHGateway.d.ts +376 -0
  536. package/src/types/WETHMock.d.ts +433 -0
  537. package/src/types/WadRayMathTest.d.ts +316 -0
  538. package/src/types/YearnAdapter.d.ts +609 -0
  539. package/src/types/YearnMock.d.ts +795 -0
  540. package/src/types/YearnPriceFeed.d.ts +399 -0
  541. package/src/types/commons.d.ts +16 -0
  542. package/src/types/commons.js +5 -0
  543. package/src/types/commons.ts +37 -0
  544. package/src/types/factories/ACLTraitTest__factory.ts +137 -0
  545. package/src/types/factories/ACLTrait__factory.ts +76 -0
  546. package/src/types/factories/ACL__factory.ts +308 -0
  547. package/src/types/factories/AccountFactory__factory.ts +510 -0
  548. package/src/types/factories/AccountMining__factory.ts +214 -0
  549. package/src/types/factories/AddressProvider__factory.ts +579 -0
  550. package/src/types/factories/AggregatorV3Interface__factory.ts +141 -0
  551. package/src/types/factories/ChainlinkPriceFeedMock__factory.ts +209 -0
  552. package/src/types/factories/ContractsRegister__factory.ts +312 -0
  553. package/src/types/factories/CreditAccount__factory.ts +256 -0
  554. package/src/types/factories/CreditFilterMock__factory.ts +1092 -0
  555. package/src/types/factories/CreditFilter__factory.ts +1053 -0
  556. package/src/types/factories/CreditManagerMockForFilter__factory.ts +325 -0
  557. package/src/types/factories/CreditManagerMockForPoolTest__factory.ts +137 -0
  558. package/src/types/factories/CreditManager__factory.ts +1063 -0
  559. package/src/types/factories/CurveMock__factory.ts +206 -0
  560. package/src/types/factories/CurveV1Adapter__factory.ts +263 -0
  561. package/src/types/factories/DataCompressor__factory.ts +946 -0
  562. package/src/types/factories/DieselToken__factory.ts +449 -0
  563. package/src/types/factories/ERC165__factory.ts +39 -0
  564. package/src/types/factories/ERC20BlockingMock__factory.ts +434 -0
  565. package/src/types/factories/ERC20__factory.ts +334 -0
  566. package/src/types/factories/ERC721__factory.ts +463 -0
  567. package/src/types/factories/Errors__factory.ts +1006 -0
  568. package/src/types/factories/ExecutorMock__factory.ts +97 -0
  569. package/src/types/factories/FlashLoanAttacker__factory.ts +119 -0
  570. package/src/types/factories/FuzzHarness__factory.ts +94 -0
  571. package/src/types/factories/GearBeta__factory.ts +521 -0
  572. package/src/types/factories/GearToken__factory.ts +704 -0
  573. package/src/types/factories/IAccountFactory__factory.ts +230 -0
  574. package/src/types/factories/IAccountMiner__factory.ts +49 -0
  575. package/src/types/factories/IAppAddressProvider__factory.ts +104 -0
  576. package/src/types/factories/IAppCreditManager__factory.ts +208 -0
  577. package/src/types/factories/IAppERC20__factory.ts +195 -0
  578. package/src/types/factories/IAppPoolService__factory.ts +73 -0
  579. package/src/types/factories/ICreditAccount__factory.ts +222 -0
  580. package/src/types/factories/ICreditFilter__factory.ts +701 -0
  581. package/src/types/factories/ICreditManager__factory.ts +724 -0
  582. package/src/types/factories/ICurvePool__factory.ts +169 -0
  583. package/src/types/factories/IDataCompressor__factory.ts +830 -0
  584. package/src/types/factories/IERC165__factory.ts +42 -0
  585. package/src/types/factories/IERC20__factory.ts +203 -0
  586. package/src/types/factories/IERC721Enumerable__factory.ts +367 -0
  587. package/src/types/factories/IERC721Metadata__factory.ts +356 -0
  588. package/src/types/factories/IERC721Receiver__factory.ts +60 -0
  589. package/src/types/factories/IERC721__factory.ts +308 -0
  590. package/src/types/factories/IGearToken__factory.ts +343 -0
  591. package/src/types/factories/IInterestRateModel__factory.ts +50 -0
  592. package/src/types/factories/IMerkleDistributor__factory.ts +113 -0
  593. package/src/types/factories/IPoolService__factory.ts +581 -0
  594. package/src/types/factories/IPriceOracle__factory.ts +113 -0
  595. package/src/types/factories/IQuoter__factory.ts +149 -0
  596. package/src/types/factories/ISwapRouter__factory.ts +237 -0
  597. package/src/types/factories/IUniswapV2Migrator__factory.ts +59 -0
  598. package/src/types/factories/IUniswapV2Router01__factory.ts +775 -0
  599. package/src/types/factories/IUniswapV2Router02__factory.ts +977 -0
  600. package/src/types/factories/IUniswapV3SwapCallback__factory.ts +53 -0
  601. package/src/types/factories/IWETHGateway__factory.ts +151 -0
  602. package/src/types/factories/IWETH__factory.ts +64 -0
  603. package/src/types/factories/IYVault__factory.ts +412 -0
  604. package/src/types/factories/LeveragedActions__factory.ts +571 -0
  605. package/src/types/factories/LinearInterestRateModel__factory.ts +237 -0
  606. package/src/types/factories/MockPoolService__factory.ts +891 -0
  607. package/src/types/factories/Multicall2__factory.ts +358 -0
  608. package/src/types/factories/Ownable__factory.ts +75 -0
  609. package/src/types/factories/PathFinder__factory.ts +301 -0
  610. package/src/types/factories/Pausable__factory.ts +62 -0
  611. package/src/types/factories/PercentageMathTest__factory.ts +98 -0
  612. package/src/types/factories/PoolService__factory.ts +898 -0
  613. package/src/types/factories/PriceOracle__factory.ts +289 -0
  614. package/src/types/factories/StepVesting__factory.ts +290 -0
  615. package/src/types/factories/TestPoolService__factory.ts +960 -0
  616. package/src/types/factories/TokenDistributor__factory.ts +483 -0
  617. package/src/types/factories/TokenFeeMock__factory.ts +439 -0
  618. package/src/types/factories/TokenMock__factory.ts +407 -0
  619. package/src/types/factories/TreasuryMock__factory.ts +64 -0
  620. package/src/types/factories/UniswapRouterMock__factory.ts +1043 -0
  621. package/src/types/factories/UniswapV2Adapter__factory.ts +1064 -0
  622. package/src/types/factories/UniswapV3Adapter__factory.ts +327 -0
  623. package/src/types/factories/WETHGateway__factory.ts +240 -0
  624. package/src/types/factories/WETHMock__factory.ts +349 -0
  625. package/src/types/factories/WadRayMathTest__factory.ts +236 -0
  626. package/src/types/factories/YearnAdapter__factory.ts +499 -0
  627. package/src/types/factories/YearnMock__factory.ts +594 -0
  628. package/src/types/factories/YearnPriceFeed__factory.ts +378 -0
  629. package/src/types/hardhat.d.ts +343 -0
  630. package/src/types/index.d.ts +174 -0
  631. package/src/types/index.js +178 -0
  632. package/src/types/index.ts +156 -0
  633. package/src/utils/events.ts +10 -0
  634. package/src/utils/formatter.ts +138 -0
  635. package/src/utils/loading.ts +9 -0
  636. package/src/utils/math.ts +42 -0
  637. package/src/utils/multicall.ts +54 -0
  638. package/src/utils/repeater.ts +18 -0
  639. package/src/utils/validate.ts +8 -0
  640. package/tsconfig.json +62 -0
@@ -0,0 +1,113 @@
1
+ import { Signer, BigNumberish, ContractFactory, Overrides } from "ethers";
2
+ import { Provider, TransactionRequest } from "@ethersproject/providers";
3
+ import type { PoolDeployer, PoolDeployerInterface } from "../PoolDeployer";
4
+ export declare class PoolDeployer__factory extends ContractFactory {
5
+ constructor(signer?: Signer);
6
+ deploy(opts: {
7
+ addressProvider: string;
8
+ underlyingToken: string;
9
+ U_optimal: BigNumberish;
10
+ R_base: BigNumberish;
11
+ R_slope1: BigNumberish;
12
+ R_slope2: BigNumberish;
13
+ expectedLiquidityLimit: BigNumberish;
14
+ minAmount: BigNumberish;
15
+ maxAmount: BigNumberish;
16
+ maxLeverage: BigNumberish;
17
+ defaultSwapContract: string;
18
+ }, overrides?: Overrides & {
19
+ from?: string | Promise<string>;
20
+ }): Promise<PoolDeployer>;
21
+ getDeployTransaction(opts: {
22
+ addressProvider: string;
23
+ underlyingToken: string;
24
+ U_optimal: BigNumberish;
25
+ R_base: BigNumberish;
26
+ R_slope1: BigNumberish;
27
+ R_slope2: BigNumberish;
28
+ expectedLiquidityLimit: BigNumberish;
29
+ minAmount: BigNumberish;
30
+ maxAmount: BigNumberish;
31
+ maxLeverage: BigNumberish;
32
+ defaultSwapContract: string;
33
+ }, overrides?: Overrides & {
34
+ from?: string | Promise<string>;
35
+ }): TransactionRequest;
36
+ attach(address: string): PoolDeployer;
37
+ connect(signer: Signer): PoolDeployer__factory;
38
+ static readonly bytecode = "0x60806040523480156200001157600080fd5b5060405162017d7738038062017d778339818101604052810190620000379190620007fd565b6000620000496200059260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508060000151600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008160200151905060008173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200017e57600080fd5b505afa15801562000193573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190620001be9190620007b8565b604051602001620001d0919062000985565b6040516020818303038152906040528273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200022657600080fd5b505afa1580156200023b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190620002669190620007b8565b604051602001620002789190620009ab565b6040516020818303038152906040528373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ce57600080fd5b505afa158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030991906200082a565b60405162000317906200059a565b620003259392919062000ad8565b604051809103906000f08015801562000342573d6000803e3d6000fd5b50905060008360400151846060015185608001518660a001516040516200036990620005a8565b62000378949392919062000b23565b604051809103906000f08015801562000395573d6000803e3d6000fd5b5090508360000151846020015183838760c00151604051620003b790620005b6565b620003c7959493929190620009fe565b604051809103906000f080158015620003e4573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836000015184602001516040516200043d90620005c4565b6200044a929190620009d1565b604051809103906000f08015801562000467573d6000803e3d6000fd5b50600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600001518460e00151856101000151866101200151600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168961014001516040516200051890620005d2565b6200052a979695949392919062000a5b565b604051809103906000f08015801562000547573d6000803e3d6000fd5b50600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000ce0565b600033905090565b611f9e8062001d7683390190565b6111a38062003d1483390190565b61512b8062004eb783390190565b616ef48062009fe283390190565b616ea18062010ed683390190565b6000620005f7620005f18462000ba4565b62000b70565b9050828152602081018484840111156200061057600080fd5b6200061d84828562000c49565b509392505050565b600081519050620006368162000c92565b92915050565b600082601f8301126200064e57600080fd5b815162000660848260208601620005e0565b91505092915050565b600061016082840312156200067d57600080fd5b6200068a61016062000b70565b905060006200069c8482850162000625565b6000830152506020620006b28482850162000625565b6020830152506040620006c8848285016200078a565b6040830152506060620006de848285016200078a565b6060830152506080620006f4848285016200078a565b60808301525060a06200070a848285016200078a565b60a08301525060c062000720848285016200078a565b60c08301525060e062000736848285016200078a565b60e0830152506101006200074d848285016200078a565b6101008301525061012062000765848285016200078a565b610120830152506101406200077d8482850162000625565b6101408301525092915050565b6000815190506200079b8162000cac565b92915050565b600081519050620007b28162000cc6565b92915050565b600060208284031215620007cb57600080fd5b600082015167ffffffffffffffff811115620007e657600080fd5b620007f4848285016200063c565b91505092915050565b600061016082840312156200081157600080fd5b6000620008218482850162000669565b91505092915050565b6000602082840312156200083d57600080fd5b60006200084d84828501620007a1565b91505092915050565b620008618162000bfe565b82525050565b6000620008748262000bd7565b62000880818562000be2565b93506200089281856020860162000c49565b6200089d8162000c81565b840191505092915050565b6000620008b58262000bd7565b620008c1818562000bf3565b9350620008d381856020860162000c49565b80840191505092915050565b6000620008ee60078362000bf3565b91507f64696573656c20000000000000000000000000000000000000000000000000006000830152600782019050919050565b60006200093060018362000bf3565b91507f64000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6200096e8162000c32565b82525050565b6200097f8162000c3c565b82525050565b60006200099282620008df565b9150620009a08284620008a8565b915081905092915050565b6000620009b88262000921565b9150620009c68284620008a8565b915081905092915050565b6000604082019050620009e8600083018562000856565b620009f7602083018462000856565b9392505050565b600060a08201905062000a15600083018862000856565b62000a24602083018762000856565b62000a33604083018662000856565b62000a42606083018562000856565b62000a51608083018462000963565b9695505050505050565b600060e08201905062000a72600083018a62000856565b62000a81602083018962000963565b62000a90604083018862000963565b62000a9f606083018762000963565b62000aae608083018662000856565b62000abd60a083018562000856565b62000acc60c083018462000856565b98975050505050505050565b6000606082019050818103600083015262000af4818662000867565b9050818103602083015262000b0a818562000867565b905062000b1b604083018462000974565b949350505050565b600060808201905062000b3a600083018762000963565b62000b49602083018662000963565b62000b58604083018562000963565b62000b67606083018462000963565b95945050505050565b6000604051905081810181811067ffffffffffffffff8211171562000b9a5762000b9962000c7f565b5b8060405250919050565b600067ffffffffffffffff82111562000bc25762000bc162000c7f565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600062000c0b8262000c12565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101562000c6957808201518184015260208101905062000c4c565b8381111562000c79576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b62000c9d8162000bfe565b811462000ca957600080fd5b50565b62000cb78162000c32565b811462000cc357600080fd5b50565b62000cd18162000c3c565b811462000cdd57600080fd5b50565b6110868062000cf06000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c12c21c01161005b578063c12c21c0146100f1578063c9dbe9001461010f578063f2fde38b1461012b578063f93f515b1461014757610088565b806316f0115b1461008d5780632954018c146100ab578063715018a6146100c95780638da5cb5b146100d3575b600080fd5b610095610165565b6040516100a29190610e80565b60405180910390f35b6100b361018b565b6040516100c09190610e2f565b60405180910390f35b6100d16101b1565b005b6100db61031e565b6040516100e89190610dd0565b60405180910390f35b6100f9610347565b6040516101069190610e65565b60405180910390f35b61012960048036038101906101249190610d26565b61036d565b005b61014560048036038101906101409190610cd4565b610943565b005b61014f610b35565b60405161015c9190610e4a565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6101b9610b5b565b73ffffffffffffffffffffffffffffffffffffffff166101d761031e565b73ffffffffffffffffffffffffffffffffffffffff1614610260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610375610b5b565b73ffffffffffffffffffffffffffffffffffffffff1661039361031e565b73ffffffffffffffffffffffffffffffffffffffff161461041c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b815260040160206040518083038186803b15801561048657600080fd5b505afa15801561049a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104be9190610cfd565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561052a57600080fd5b505afa15801561053e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105629190610cfd565b90508073ffffffffffffffffffffffffffffffffffffffff1663d914cd4b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016105bf9190610dd0565b600060405180830381600087803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e26b2f63600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161064c9190610dd0565b600060405180830381600087803b15801561066657600080fd5b505af115801561067a573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf33d955600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016106fb9190610dd0565b600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b5050505060005b83600001515181101561080f57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a147c6c68560000151838151811061078b57fe5b602002602001015160000151866000015184815181106107a757fe5b6020026020010151602001516040518363ffffffff1660e01b81526004016107d0929190610e06565b600060405180830381600087803b1580156107ea57600080fd5b505af11580156107fe573d6000803e3d6000fd5b505050508080600101915050610730565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf33d955600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161088d9190610dd0565b600060405180830381600087803b1580156108a757600080fd5b505af11580156108bb573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663f2fde38b336040518263ffffffff1660e01b81526004016108f89190610deb565b600060405180830381600087803b15801561091257600080fd5b505af1158015610926573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff16ff5b61094b610b5b565b73ffffffffffffffffffffffffffffffffffffffff1661096961031e565b73ffffffffffffffffffffffffffffffffffffffff16146109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061102b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b6000610b76610b7184610ecc565b610e9b565b90508083825260208201905082856040860282011115610b9557600080fd5b60005b85811015610bc55781610bab8882610c23565b845260208401935060408301925050600181019050610b98565b5050509392505050565b600081359050610bde81610ffc565b92915050565b600081519050610bf381610ffc565b92915050565b600082601f830112610c0a57600080fd5b8135610c1a848260208601610b63565b91505092915050565b600060408284031215610c3557600080fd5b610c3f6040610e9b565b90506000610c4f84828501610bcf565b6000830152506020610c6384828501610cbf565b60208301525092915050565b600060208284031215610c8157600080fd5b610c8b6020610e9b565b9050600082013567ffffffffffffffff811115610ca757600080fd5b610cb384828501610bf9565b60008301525092915050565b600081359050610cce81611013565b92915050565b600060208284031215610ce657600080fd5b6000610cf484828501610bcf565b91505092915050565b600060208284031215610d0f57600080fd5b6000610d1d84828501610be4565b91505092915050565b600060208284031215610d3857600080fd5b600082013567ffffffffffffffff811115610d5257600080fd5b610d5e84828501610c6f565b91505092915050565b610d7081610f34565b82525050565b610d7f81610ef8565b82525050565b610d8e81610f46565b82525050565b610d9d81610f6a565b82525050565b610dac81610f8e565b82525050565b610dbb81610fb2565b82525050565b610dca81610f2a565b82525050565b6000602082019050610de56000830184610d76565b92915050565b6000602082019050610e006000830184610d67565b92915050565b6000604082019050610e1b6000830185610d76565b610e286020830184610dc1565b9392505050565b6000602082019050610e446000830184610d85565b92915050565b6000602082019050610e5f6000830184610d94565b92915050565b6000602082019050610e7a6000830184610da3565b92915050565b6000602082019050610e956000830184610db2565b92915050565b6000604051905081810181811067ffffffffffffffff82111715610ec257610ec1610ffa565b5b8060405250919050565b600067ffffffffffffffff821115610ee757610ee6610ffa565b5b602082029050602081019050919050565b6000610f0382610f0a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610f3f82610fd6565b9050919050565b6000610f5182610f58565b9050919050565b6000610f6382610f0a565b9050919050565b6000610f7582610f7c565b9050919050565b6000610f8782610f0a565b9050919050565b6000610f9982610fa0565b9050919050565b6000610fab82610f0a565b9050919050565b6000610fbd82610fc4565b9050919050565b6000610fcf82610f0a565b9050919050565b6000610fe182610fe8565b9050919050565b6000610ff382610f0a565b9050919050565bfe5b61100581610ef8565b811461101057600080fd5b50565b61101c81610f2a565b811461102757600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212208f250a615b818c17b0d0435b9d7cf28c496721147dcf715056972dcc66f4cb4364736f6c6343000706003360806040523480156200001157600080fd5b5060405162001f9e38038062001f9e833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828160039080519060200190620001dc92919062000305565b508060049080519060200190620001f592919062000305565b506012600560006101000a81548160ff021916908360ff1602179055505050600062000226620002df60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002d681620002e760201b60201c565b505050620003bb565b600033905090565b80600560006101000a81548160ff021916908360ff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200033d576000855562000389565b82601f106200035857805160ff191683800117855562000389565b8280016001018555821562000389579182015b82811115620003885782518255916020019190600101906200036b565b5b5090506200039891906200039c565b5090565b5b80821115620003b75760008160009055506001016200039d565b5090565b611bd380620003cb6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d7146104c8578063a9059cbb1461052c578063dd62ed3e14610590578063f2fde38b1461060857610100565b8063715018a6146103b95780638da5cb5b146103c357806395d89b41146103f75780639dc29fac1461047a57610100565b8063313ce567116100d3578063313ce5671461028e57806339509351146102af57806340c10f191461031357806370a082311461036157610100565b806306fdde0314610105578063095ea7b31461018857806318160ddd146101ec57806323b872dd1461020a575b600080fd5b61010d61064c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561014d578082015181840152602081019050610132565b50505050905090810190601f16801561017a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d46004803603604081101561019e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106ee565b60405180821515815260200191505060405180910390f35b6101f461070c565b6040518082815260200191505060405180910390f35b6102766004803603606081101561022057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610716565b60405180821515815260200191505060405180910390f35b6102966107ef565b604051808260ff16815260200191505060405180910390f35b6102fb600480360360408110156102c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610806565b60405180821515815260200191505060405180910390f35b61035f6004803603604081101561032957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108b9565b005b6103a36004803603602081101561037757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610976565b6040518082815260200191505060405180910390f35b6103c16109be565b005b6103cb610b2e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103ff610b58565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043f578082015181840152602081019050610424565b50505050905090810190601f16801561046c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104c66004803603604081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bfa565b005b610514600480360360408110156104de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cb7565b60405180821515815260200191505060405180910390f35b6105786004803603604081101561054257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d84565b60405180821515815260200191505060405180910390f35b6105f2600480360360408110156105a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610da2565b6040518082815260200191505060405180910390f35b61064a6004803603602081101561061e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e29565b005b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106e45780601f106106b9576101008083540402835291602001916106e4565b820191906000526020600020905b8154815290600101906020018083116106c757829003601f168201915b5050505050905090565b60006107026106fb61101e565b8484611026565b6001905092915050565b6000600254905090565b600061072384848461121d565b6107e48461072f61101e565b6107df85604051806060016040528060288152602001611ae760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061079561101e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114de9092919063ffffffff16565b611026565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006108af61081361101e565b846108aa856001600061082461101e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159890919063ffffffff16565b611026565b6001905092915050565b6108c161101e565b73ffffffffffffffffffffffffffffffffffffffff166108df610b2e565b73ffffffffffffffffffffffffffffffffffffffff1614610968576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6109728282611620565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c661101e565b73ffffffffffffffffffffffffffffffffffffffff166109e4610b2e565b73ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b610c0261101e565b73ffffffffffffffffffffffffffffffffffffffff16610c20610b2e565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610cb382826117e7565b5050565b6000610d7a610cc461101e565b84610d7585604051806060016040528060258152602001611b796025913960016000610cee61101e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114de9092919063ffffffff16565b611026565b6001905092915050565b6000610d98610d9161101e565b848461121d565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e3161101e565b73ffffffffffffffffffffffffffffffffffffffff16610e4f610b2e565b73ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a796026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611b556024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611a9f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611b306025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611a346023913960400191505060405180910390fd5b6113348383836119ab565b61139f81604051806060016040528060268152602001611ac1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114de9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611432816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061158b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611550578082015181840152602081019050611535565b50505050905090810190601f16801561157d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6116cf600083836119ab565b6116e48160025461159890919063ffffffff16565b60028190555061173b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461159890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561186d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611b0f6021913960400191505060405180910390fd5b611879826000836119ab565b6118e481604051806060016040528060228152602001611a57602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114de9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061193b816002546119b090919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600082821115611a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b81830390509291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122068f8ef391ccdfa2d1d23f1dc400c4a476afaba1d5d40bc74f69b913c6e97cf1064736f6c634300070600336101206040523480156200001257600080fd5b50604051620011a3380380620011a3833981810160405260808110156200003857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050506127108411156040518060400160405280600281526020017f4950000000000000000000000000000000000000000000000000000000000000815250906200014d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000111578082015181840152602081019050620000f4565b50505050905090810190601f1680156200013f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506127108311156040518060400160405280600281526020017f49500000000000000000000000000000000000000000000000000000000000008152509062000234576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001f8578082015181840152602081019050620001db565b50505050905090810190601f168015620002265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506127108211156040518060400160405280600281526020017f4950000000000000000000000000000000000000000000000000000000000000815250906200031b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620002df578082015181840152602081019050620002c2565b50505050905090810190601f1680156200030d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006200034085670de0b6b3a76400006200040660201b620005481790919060201c565b905080608081815250506200036c81670de0b6b3a76400006200056c60201b620006a31790919060201c565b60a0818152505062000399846b033b2e3c9fd0803ce80000006200040660201b620005481790919060201c565b60c08181525050620003c6836b033b2e3c9fd0803ce80000006200040660201b620005481790919060201c565b60e08181525050620003f3826b033b2e3c9fd0803ce80000006200040660201b620005481790919060201c565b61010081815250505050505050620005f0565b600080831480620004175750600082145b1562000427576000905062000566565b816002612710816200043557fe5b047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03816200046057fe5b048311156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509062000544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000508578082015181840152602081019050620004eb565b50505050905090810190601f168015620005365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506127106002612710816200055557fe5b0483850201816200056257fe5b0490505b92915050565b600082821115620005e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60805160a05160c05160e05161010051610b2d620006766000398061033c52806104d9528061052652508061026b528061037c528061040852806104b65250806101ad52806102a8528061039d528061042c52806104935250806102e552806105025250806102185280610246528061030c52806103e452806104625250610b2d6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80639cd3fdb51161005b5780639cd3fdb51461010a578063c8284e6d14610128578063f81d43811461015b578063fc4b2b78146101795761007d565b806342568d441461008257806350ced104146100ce5780639aec06ea146100ec575b600080fd5b6100b86004803603604081101561009857600080fd5b810190808035906020019092919080359060200190929190505050610197565b6040518082815260200191505060405180910390f35b6100d66103e2565b6040518082815260200191505060405180910390f35b6100f4610406565b6040518082815260200191505060405180910390f35b61011261042a565b6040518082815260200191505060405180910390f35b61013061044e565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b610163610500565b6040518082815260200191505060405180910390f35b610181610524565b6040518082815260200191505060405180910390f35b6000808314806101a657508183105b156101d3577f000000000000000000000000000000000000000000000000000000000000000090506103dc565b600061021484610206670de0b6b3a76400006101f887896106a390919063ffffffff16565b61072690919063ffffffff16565b6107ac90919063ffffffff16565b90507f00000000000000000000000000000000000000000000000000000000000000008110156102dd576102d56102a67f0000000000000000000000000000000000000000000000000000000000000000610298847f000000000000000000000000000000000000000000000000000000000000000061072690919063ffffffff16565b6107ac90919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000061083590919063ffffffff16565b9150506103dc565b6103d86103777f000000000000000000000000000000000000000000000000000000000000000061036961033a7f0000000000000000000000000000000000000000000000000000000000000000866106a390919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000061072690919063ffffffff16565b6107ac90919063ffffffff16565b6103ca7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061083590919063ffffffff16565b61083590919063ffffffff16565b9150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060008061048f670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006108bd90919063ffffffff16565b93507f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091507f0000000000000000000000000000000000000000000000000000000000000000905090919293565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808314806105585750600082145b15610566576000905061069d565b8160026127108161057357fe5b047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038161059d57fe5b048311156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061067d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610642578082015181840152602081019050610627565b50505050905090810190601f16801561066f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061271060026127108161068d57fe5b04838502018161069957fe5b0490505b92915050565b60008282111561071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008083141561073957600090506107a6565b600082840290508284828161074a57fe5b04146107a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610ad76021913960400191505060405180910390fd5b809150505b92915050565b6000808211610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161082c57fe5b04905092915050565b6000808284019050838110156108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808214156040518060400160405280600281526020017f4d330000000000000000000000000000000000000000000000000000000000008152509061099f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610964578082015181840152602081019050610949565b50505050905090810190601f1680156109915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000600283816109ac57fe5b049050612710817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03816109dc57fe5b048411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090610abc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a81578082015181840152602081019050610a66565b50505050905090810190601f168015610aae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828161271086020181610acc57fe5b049150509291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220bba758da826ead849a58712eef4e5ba53ecabb2b6b3d1ed02c50fb64394726dc64736f6c6343000706003360806040523480156200001157600080fd5b506040516200512b3803806200512b833981810160405260a08110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508460008060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a30000000000000000000000000000000000000000000000000000000000000815250906200019c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200016057808201518184015260208101905062000143565b50505050905090810190601f1680156200018e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e457600080fd5b505afa158015620001f9573d6000803e3d6000fd5b505050506040513d60208110156200021057600080fd5b8101908080519060200190929190505050600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060018081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015620002d45750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156200030e5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015620003485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6040518060400160405280600281526020017f5a300000000000000000000000000000000000000000000000000000000000008152509062000428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620003ec578082015181840152602081019050620003cf565b50505050905090810190601f1680156200041a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166326c74fc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156200055557600080fd5b505afa1580156200056a573d6000803e3d6000fd5b505050506040513d60208110156200058157600080fd5b8101908080519060200190929190505050600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce8000000600d81905550620005f6826200060860201b60201c565b80600381905550505050505062000ecb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a300000000000000000000000000000000000000000000000000000000000008152509062000719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620006dd578082015181840152602081019050620006c0565b50505050905090810190601f1680156200070b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200076d6000620007b360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea160405160405180910390a250565b620007dc81620007c8620008d260201b60201c565b6200099360201b620033301790919060201c565b600281905550620007f262000a1760201b60201c565b600d81905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342568d446002546200084962000a5560201b60201c565b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156200088557600080fd5b505afa1580156200089a573d6000803e3d6000fd5b505050506040513d6020811015620008b157600080fd5b8101908080519060200190929190505050600e8190555042600f8190555050565b600080620008f1600f54426200099360201b620033301790919060201c565b905060006200096e6301e133806200095a6b033b2e3c9fd0803ce8000000620009468662000932600e5460045462000b2360201b620033b31790919060201c565b62000b2360201b620033b31790919060201c565b62000bae60201b620034391790919060201c565b62000bae60201b620034391790919060201c565b90506200098c8160025462000c3960201b620034c21790919060201c565b9250505090565b60008282111562000a0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008062000a36600f54426200099360201b620033301790919060201c565b905062000a4f600d54600e548362000cc260201b60201c565b91505090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801562000ae157600080fd5b505afa15801562000af6573d6000803e3d6000fd5b505050506040513d602081101562000b0d57600080fd5b8101908080519060200190929190505050905090565b60008083141562000b38576000905062000ba8565b600082840290508284828162000b4a57fe5b041462000ba3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806200510a6021913960400191505060405180910390fd5b809150505b92915050565b600080821162000c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838162000c3057fe5b04905092915050565b60008082840190508381101562000cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008062000d2162000d006301e1338062000cec868862000b2360201b620033b31790919060201c565b62000bae60201b620034391790919060201c565b6b033b2e3c9fd0803ce800000062000c3960201b620034c21790919060201c565b905062000d3d818662000d4760201b6200354a1790919060201c565b9150509392505050565b60008083148062000d585750600082145b1562000d68576000905062000ec5565b8160026b033b2e3c9fd0803ce80000008162000d8057fe5b047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038162000dab57fe5b048311156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509062000e8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000e5357808201518184015260208101905062000e36565b50505050905090810190601f16801562000e815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506b033b2e3c9fd0803ce800000060026b033b2e3c9fd0803ce80000008162000eb457fe5b04838502018162000ec157fe5b0490505b92915050565b61422f8062000edb6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063609ae31711610125578063c00495a1116100ad578063dbcb313b1161007c578063dbcb313b146108c3578063e941fa78146108e1578063ef8d9603146108ff578063f3fdb15a1461091d578063fe14112d146109515761021c565b8063c00495a1146107b3578063c5f956af14610809578063ca9505e41461083d578063cf33d9551461087f5761021c565b80639aa5d462116100f45780639aa5d46214610693578063a4e8273e146106eb578063b6ac642a14610709578063bb04b19314610737578063bf28068b146107655761021c565b8063609ae3171461062f578063743753591461064d578063788c6bfe1461066b5780638456cb59146106895761021c565b806336dda7d5116101a85780634c19386c116101775780634c19386c146105295780634d778ad1146105475780635427c938146105895780635664cacf146105cb5780635c975abb1461060f5761021c565b806336dda7d5146104735780633e163df0146104a75780633f4ba83a1461050157806345d31f9d1461050b5761021c565b80631e16e4fc116101ef5780631e16e4fc146103035780632495a5991461035b5780632954018c1461038f5780632e97ca21146103c357806331d8bc271461041d5761021c565b8063030dbb041461022157806305fe138b1461023f578063078c4781146102a15780630fce70fb146102e5575b600080fd5b61022961096f565b6040518082815260200191505060405180910390f35b61028b6004803603604081101561025557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610975565b6040518082815260200191505060405180910390f35b6102e3600480360360208110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dcc565b005b6102ed61100b565b6040518082815260200191505060405180910390f35b61032f6004803603602081101561031957600080fd5b810190808035906020019092919050505061103a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610363611079565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61039761109f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610405600480360360208110156103d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110c5565b60405180821515815260200191505060405180910390f35b61045d6004803603606081101561043357600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506110e5565b6040518082815260200191505060405180910390f35b61047b61114e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e9600480360360208110156104bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611174565b60405180821515815260200191505060405180910390f35b610509611194565b005b61051361133f565b6040518082815260200191505060405180910390f35b610531611345565b6040518082815260200191505060405180910390f35b6105736004803603602081101561055d57600080fd5b810190808035906020019092919050505061134b565b6040518082815260200191505060405180910390f35b6105b56004803603602081101561059f57600080fd5b810190808035906020019092919050505061138c565b6040518082815260200191505060405180910390f35b61060d600480360360208110156105e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113cd565b005b61061761157a565b60405180821515815260200191505060405180910390f35b610637611590565b6040518082815260200191505060405180910390f35b610655611596565b6040518082815260200191505060405180910390f35b610673611661565b6040518082815260200191505060405180910390f35b610691611766565b005b6106e9600480360360608110156106a957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611911565b005b6106f3611f58565b6040518082815260200191505060405180910390f35b6107356004803603602081101561071f57600080fd5b8101908080359060200190929190505050611f65565b005b6107636004803603602081101561074d57600080fd5b810190808035906020019092919050505061222b565b005b6107b16004803603604081101561077b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061240d565b005b6107f3600480360360608110156107c957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061268d565b6040518082815260200191505060405180910390f35b610811612725565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61087d6004803603606081101561085357600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061274b565b005b6108c16004803603602081101561089557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cb0565b005b6108cb613261565b6040518082815260200191505060405180910390f35b6108e9613267565b6040518082815260200191505060405180910390f35b61090761326d565b6040518082815260200191505060405180910390f35b610925613273565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610959613299565b6040518082815260200191505060405180910390f35b60025481565b600061097f61157a565b156109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415610a6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090610b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b45578082015181840152602081019050610b2a565b50505050905090810190601f168015610b725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000610b8c8461138c565b90506000610ba5601054836136c390919063ffffffff16565b90506000610bbc828461333090919063ffffffff16565b9050610c0b8582600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661381e9092919063ffffffff16565b6000821115610c8457610c83600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661381e9092919063ffffffff16565b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b50505050610d448360025461333090919063ffffffff16565b600281905550610d5460006138c0565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf6886040518082815260200191505060405180910390a38093505050506001808190555092915050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e5557600080fd5b505afa158015610e69573d6000803e3d6000fd5b505050506040513d6020811015610e7f57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090610f6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f31578082015181840152602081019050610f16565b50505050905090810190601f168015610f5e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd660405160405180910390a250565b600080611023600f544261333090919063ffffffff16565b9050611034600d54600e54836110e5565b91505090565b600b818154811061104a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b60008061112f6111146301e1338061110686886133b390919063ffffffff16565b61343990919063ffffffff16565b6b033b2e3c9fd0803ce80000006134c290919063ffffffff16565b9050611144818661354a90919063ffffffff16565b9150509392505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4eb5db0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050506040513d602081101561124757600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c310000000000000000000000000000000000000000000000000000000081525090611334576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112f95780820151818401526020810190506112de565b50505050905090810190601f1680156113265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061133d6139bd565b565b600e5481565b60045481565b6000611385611358611661565b6113776b033b2e3c9fd0803ce8000000856133b390919063ffffffff16565b61343990919063ffffffff16565b9050919050565b60006113c66b033b2e3c9fd0803ce80000006113b86113a9611661565b856133b390919063ffffffff16565b61343990919063ffffffff16565b9050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561145657600080fd5b505afa15801561146a573d6000803e3d6000fd5b505050506040513d602081101561148057600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c32000000000000000000000000000000000000000000000000000000008152509061156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611532578082015181840152602081019050611517565b50505050905090810190601f16801561155f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061157781613aa7565b50565b60008060009054906101000a900460ff16905090565b600f5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561162157600080fd5b505afa158015611635573d6000803e3d6000fd5b505050506040513d602081101561164b57600080fd5b8101908080519060200190929190505050905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cc57600080fd5b505afa1580156116e0573d6000803e3d6000fd5b505050506040513d60208110156116f657600080fd5b810190808051906020019092919050505090506000811415611727576b033b2e3c9fd0803ce8000000915050611763565b61175f816117516b033b2e3c9fd0803ce8000000611743613299565b6133b390919063ffffffff16565b61343990919063ffffffff16565b9150505b90565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a41ec64336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117ef57600080fd5b505afa158015611803573d6000803e3d6000fd5b505050506040513d602081101561181957600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c310000000000000000000000000000000000000000000000000000000081525090611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118cb5780820151818401526020810190506118b0565b50505050905090810190601f1680156118f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061190f613c46565b565b61191961157a565b1561198c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415611a05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090611b1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611adf578082015181840152602081019050611ac4565b50505050905090810190601f168015611b0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600354611b3884611b2a613299565b6134c290919063ffffffff16565b11156040518060400160405280600381526020017f505332000000000000000000000000000000000000000000000000000000000081525090611c16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bdb578082015181840152602081019050611bc0565b50505050905090810190601f168015611c085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ca257600080fd5b505afa158015611cb6573d6000803e3d6000fd5b505050506040513d6020811015611ccc57600080fd5b81019080805190602001909291905050509050611d2e333086600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613d31909392919063ffffffff16565b611e0481600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611dbb57600080fd5b505afa158015611dcf573d6000803e3d6000fd5b505050506040513d6020811015611de557600080fd5b810190808051906020019092919050505061333090919063ffffffff16565b9350600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984611e4e8761134b565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ea157600080fd5b505af1158015611eb5573d6000803e3d6000fd5b50505050611ece846002546134c290919063ffffffff16565b600281905550611ede60006138c0565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e8685604051808381526020018281526020019250505060405180910390a35060018081905550505050565b6000600b80549050905090565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fee57600080fd5b505afa158015612002573d6000803e3d6000fd5b505050506040513d602081101561201857600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120ca5780820151818401526020810190506120af565b50505050905090810190601f1680156120f75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50606460ff1681106040518060400160405280600381526020017f5350330000000000000000000000000000000000000000000000000000000000815250906121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121ae578082015181840152602081019050612193565b50505050905090810190601f1680156121db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50806010819055507fd5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d816040518082815260200191505060405180910390a150565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122b457600080fd5b505afa1580156122c8573d6000803e3d6000fd5b505050506040513d60208110156122de57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c3200000000000000000000000000000000000000000000000000000000815250906123cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612390578082015181840152602081019050612375565b50505050905090810190601f1680156123bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50806003819055507fd7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c816040518082815260200191505060405180910390a150565b61241561157a565b15612488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166040518060400160405280600381526020017f5053300000000000000000000000000000000000000000000000000000000000815250906125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561257657808201518184015260208101905061255b565b50505050905090810190601f1680156125a35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506125ff8183600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661381e9092919063ffffffff16565b61260960006138c0565b61261e826004546134c290919063ffffffff16565b6004819055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b52846040518082815260200191505060405180910390a35050565b600061271c6126d06126a884866133b390919063ffffffff16565b6126c2876126b461100b565b6133b390919063ffffffff16565b6134c290919063ffffffff16565b61270e6126e686886134c290919063ffffffff16565b612700866126f261100b565b6133b390919063ffffffff16565b6133b390919063ffffffff16565b61343990919063ffffffff16565b90509392505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61275361157a565b156127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166040518060400160405280600381526020017f5053300000000000000000000000000000000000000000000000000000000000815250906128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128b4578082015181840152602081019050612899565b50505050905090810190601f1680156128e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008211156129ee57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166129638561134b565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156129b657600080fd5b505af11580156129ca573d6000803e3d6000fd5b505050506129e3826002546134c290919063ffffffff16565b600281905550612c29565b60006129f98261134b565b90506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612aa857600080fd5b505afa158015612abc573d6000803e3d6000fd5b505050506040513d6020811015612ad257600080fd5b8101908080519060200190929190505050905081811015612b59578091503373ffffffffffffffffffffffffffffffffffffffff167fef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c612b43612b348461138c565b8661333090919063ffffffff16565b6040518082815260200191505060405180910390a25b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c0e57600080fd5b505af1158015612c22573d6000803e3d6000fd5b5050505050505b612c32816138c0565b612c478360045461333090919063ffffffff16565b6004819055503373ffffffffffffffffffffffffffffffffffffffff167f2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e0984848460405180848152602001838152602001828152602001935050505060405180910390a2505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612d3957600080fd5b505afa158015612d4d573d6000803e3d6000fd5b505050506040513d6020811015612d6357600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090612e50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e15578082015181840152602081019050612dfa565b50505050905090810190601f168015612e425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9757600080fd5b505afa158015612eab573d6000803e3d6000fd5b505050506040513d6020811015612ec157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f505331000000000000000000000000000000000000000000000000000000000081525090612fdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fa1578082015181840152602081019050612f86565b50505050905090810190601f168015612fce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156040518060400160405280600381526020017f505334000000000000000000000000000000000000000000000000000000000081525090613107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130cc5780820151818401526020810190506130b1565b50505050905090810190601f1680156130f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fe076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c0160405160405180910390a250565b600d5481565b60105481565b60035481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806132b1600f544261333090919063ffffffff16565b905060006133126301e133806133046b033b2e3c9fd0803ce80000006132f6866132e8600e546004546133b390919063ffffffff16565b6133b390919063ffffffff16565b61343990919063ffffffff16565b61343990919063ffffffff16565b9050613329816002546134c290919063ffffffff16565b9250505090565b6000828211156133a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808314156133c65760009050613433565b60008284029050828482816133d757fe5b041461342e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141af6021913960400191505060405180910390fd5b809150505b92915050565b60008082116134b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816134b957fe5b04905092915050565b600080828401905083811015613540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083148061355a5750600082145b1561356857600090506136bd565b8160026b033b2e3c9fd0803ce80000008161357f57fe5b047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03816135a957fe5b048311156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090613689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561364e578082015181840152602081019050613633565b50505050905090810190601f16801561367b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506b033b2e3c9fd0803ce800000060026b033b2e3c9fd0803ce8000000816136ad57fe5b0483850201816136b957fe5b0490505b92915050565b6000808314806136d35750600082145b156136e15760009050613818565b816002612710816136ee57fe5b047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038161371857fe5b048311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906137f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137bd5780820151818401526020810190506137a2565b50505050905090810190601f1680156137ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061271060026127108161380857fe5b04838502018161381457fe5b0490505b92915050565b6138bb8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613df2565b505050565b6138da816138cc613299565b61333090919063ffffffff16565b6002819055506138e861100b565b600d81905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342568d44600254613937611596565b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561397257600080fd5b505afa158015613986573d6000803e3d6000fd5b505050506040513d602081101561399c57600080fd5b8101908080519060200190929190505050600e8190555042600f8190555050565b6139c561157a565b613a37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613a7a613ee1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090613bb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b79578082015181840152602081019050613b5e565b50505050905090810190601f168015613ba65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613c0060006138c0565b8073ffffffffffffffffffffffffffffffffffffffff167f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea160405160405180910390a250565b613c4e61157a565b15613cc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613d04613ee1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b613dec846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613df2565b50505050565b6000613e54826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613ee99092919063ffffffff16565b9050600081511115613edc57808060200190516020811015613e7557600080fd5b8101908080519060200190929190505050613edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806141d0602a913960400191505060405180910390fd5b5b505050565b600033905090565b6060613ef88484600085613f01565b90509392505050565b606082471015613f5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806141896026913960400191505060405180910390fd5b613f65856140a9565b613fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106140265780518252602082019150602081019050602083039250614003565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614088576040519150601f19603f3d011682016040523d82523d6000602084013e61408d565b606091505b509150915061409d8282866140bc565b92505050949350505050565b600080823b905060008111915050919050565b606083156140cc57829050614181565b6000835111156140df5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561414657808201518184015260208101905061412b565b50505050905090810190601f1680156141735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220f0dda67ea803158be214326516b4ad97148a867ad5c5f11a9c676100f235bcf464736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7760806040523480156200001157600080fd5b5060405162006ef438038062006ef4833981810160405281019062000037919062001213565b8160008060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a300000000000000000000000000000000000000000000000000000000000008152509062000163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001275780820151818401526020810190506200010a565b50505050905090810190601f168015620001555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ab57600080fd5b505afa158015620001c0573d6000803e3d6000fd5b505050506040513d6020811015620001d757600080fd5b8101908080519060200190929190505050600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015620002945750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6040518060400160405280600281526020017f5a30000000000000000000000000000000000000000000000000000000000000815250906200030e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030591906200132d565b60405180910390fd5b5081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b957600080fd5b505afa158015620003ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f49190620011e7565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c252f916040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049d57600080fd5b505afa158015620004b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d89190620011e7565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c861251c0360056000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620005fd600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660c861251c036200071560201b60201c565b620006126126de600462000d6160201b60201c565b600160146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377532ed96040518163ffffffff1660e01b815260040160206040518083038186803b1580156200068157600080fd5b505afa15801562000696573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006bc9190620011e7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062001470565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090620007c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b791906200132d565b60405180910390fd5b5060008111801562000833575060056000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111155b6040518060400160405280600381526020017f434631000000000000000000000000000000000000000000000000000000000081525090620008ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a491906200132d565b60405180910390fd5b506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180620009035750610100600480549050105b6040518060400160405280600381526020017f4346360000000000000000000000000000000000000000000000000000000000815250906200097d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200097491906200132d565b60405180910390fd5b5060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401620009bb9190620012e3565b60206040518083038186803b158015620009d457600080fd5b505afa158015620009e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0f919062001254565b101562000a1b57600080fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743b908684600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000a9e92919062001300565b60206040518083038186803b15801562000ab757600080fd5b505afa15801562000acc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000af2919062001254565b116040518060400160405280600381526020017f43464500000000000000000000000000000000000000000000000000000000008152509062000b6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6491906200132d565b60405180910390fd5b50600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000cc9576001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004805490506001901b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167fa52fb6bfa514a4ddcb31de40a5f6c20d767db1f921a8b7747973d93dc5da7a028260405162000d55919062001351565b60405180910390a25050565b816011819055508060128190555062000d7f62000dbe60201b60201c565b7f727652fff0946c19c233fd3eab5fc03db9e9fdd907e902d9136c2a9cac47101c828260405162000db29291906200136e565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000f6d57600062000e4862000e3160115460125462000f6f60201b60201c565b6127106200101f60201b620040491790919060201c565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633915ffaa6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000eb357600080fd5b505afa15801562000ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000eee919062001254565b81106040518060400160405280600381526020017f43464200000000000000000000000000000000000000000000000000000000008152509062000f6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f6191906200132d565b60405180910390fd5b50505b565b600062000f8d83612710620010a360201b620040cc1790919060201c565b905060005b62000fad6001846200101f60201b620040491790919060201c565b81101562000ffa5762000fea61271062000fd68685620010a360201b620040cc1790919060201c565b6200112e60201b620041521790919060201c565b9150808060010191505062000f92565b5062001017612710826200112e60201b620041521790919060201c565b905092915050565b60008282111562001098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600080831415620010b8576000905062001128565b6000828402905082848281620010ca57fe5b041462001123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062006ed36021913960400191505060405180910390fd5b809150505b92915050565b6000808211620011a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b818381620011b057fe5b04905092915050565b600081519050620011ca816200143c565b92915050565b600081519050620011e18162001456565b92915050565b600060208284031215620011fa57600080fd5b60006200120a84828501620011b9565b91505092915050565b600080604083850312156200122757600080fd5b60006200123785828601620011b9565b92505060206200124a85828601620011b9565b9150509250929050565b6000602082840312156200126757600080fd5b60006200127784828501620011d0565b91505092915050565b6200128b81620013b7565b82525050565b60006200129e826200139b565b620012aa8185620013a6565b9350620012bc818560208601620013f5565b620012c7816200142b565b840191505092915050565b620012dd81620013eb565b82525050565b6000602082019050620012fa600083018462001280565b92915050565b600060408201905062001317600083018562001280565b62001326602083018462001280565b9392505050565b6000602082019050818103600083015262001349818462001291565b905092915050565b6000602082019050620013686000830184620012d2565b92915050565b6000604082019050620013856000830185620012d2565b620013946020830184620012d2565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000620013c482620013cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001415578082015181840152602081019050620013f8565b8381111562001425576000848401525b50505050565b6000601f19601f8301169050919050565b6200144781620013b7565b81146200145357600080fd5b50565b6200146181620013eb565b81146200146d57600080fd5b50565b615a5380620014806000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c80635f598edd11610167578063b3c61943116100ce578063e1c8ef0d11610087578063e1c8ef0d14610823578063e54fe9c81461083f578063e6dee2cc1461085b578063f67c5bd014610879578063f9eaee0d146108a9578063fdd57645146108d957610295565b8063b3c6194314610729578063b451cecc14610759578063c12c21c014610789578063c7de38a6146107a7578063cf33d955146107d7578063dfd59465146107f357610295565b80638456cb59116101205780638456cb591461065457806390b1300a1461065e578063a147c6c61461068e578063a5757517146106aa578063af0a6502146106c6578063b2d0d86b146106f957610295565b80635f598edd1461058457806362061c6d146105b457806378327438146105d05780637bccacee146106005780637dd0ba821461061c5780637e4a68631461063857610295565b806347dedfc91161020b57806352438e54116101c457806352438e54146104b0578063570a7af2146104cc5780635a29be45146104ea5780635c975abb1461051a5780635e5f2e26146105385780635f27212a1461056857610295565b806347dedfc9146103da5780634cba294a146103f85780634f0e0ef3146104285780635094cb4f1461044657806350e036ff1461047657806351e3f1601461049457610295565b80632e2986dd1161025d5780632e2986dd1461032e5780633192195c1461034a5780633b00ae701461037a5780633bdfe4f5146103965780633f4ba83a146103c657806340631828146103d057610295565b806320a05ff71461029a57806324147708146102b85780632495a599146102d45780632630c12f146102f25780632954018c14610310575b600080fd5b6102a2610909565b6040516102af91906157c3565b60405180910390f35b6102d260048036038101906102cd919061538b565b610916565b005b6102dc610b12565b6040516102e991906156e2565b60405180910390f35b6102fa610b38565b60405161030791906156e2565b60405180910390f35b610318610b5e565b6040516103259190615786565b60405180910390f35b61034860048036038101906103439190615567565b610b84565b005b610364600480360381019061035f919061538b565b610dce565b60405161037191906157c3565b60405180910390f35b610394600480360381019061038f91906153dd565b610f95565b005b6103b060048036038101906103ab919061538b565b611143565b6040516103bd919061576b565b60405180910390f35b6103ce611163565b005b6103d861130e565b005b6103e2611a9c565b6040516103ef91906157c3565b60405180910390f35b610412600480360381019061040d919061538b565b611aa2565b60405161041f91906157c3565b60405180910390f35b610430611aba565b60405161043d91906156e2565b60405180910390f35b610460600480360381019061045b91906155df565b611ae0565b60405161046d91906156e2565b60405180910390f35b61047e611afd565b60405161048b91906157c3565b60405180910390f35b6104ae60048036038101906104a991906153dd565b611b0e565b005b6104ca60048036038101906104c5919061538b565b611be5565b005b6104d4612037565b6040516104e191906156e2565b60405180910390f35b61050460048036038101906104ff91906153dd565b61205d565b604051610511919061576b565b60405180910390f35b6105226120f1565b60405161052f919061576b565b60405180910390f35b610552600480360381019061054d91906155df565b612107565b60405161055f91906156e2565b60405180910390f35b610582600480360381019061057d9190615567565b612146565b005b61059e6004803603810190610599919061538b565b612243565b6040516105ab919061576b565b60405180910390f35b6105ce60048036038101906105c99190615631565b612263565b005b6105ea60048036038101906105e5919061538b565b612412565b6040516105f791906157c3565b60405180910390f35b61061a600480360381019061061591906153dd565b61242a565b005b6106366004803603810190610631919061538b565b612979565b005b610652600480360381019061064d9190615490565b6129fd565b005b61065c612dca565b005b6106786004803603810190610673919061538b565b612f75565b60405161068591906157c3565b60405180910390f35b6106a860048036038101906106a391906155a3565b613034565b005b6106c460048036038101906106bf91906155a3565b6131e3565b005b6106e060048036038101906106db91906155a3565b61326b565b6040516106f09493929190615726565b60405180910390f35b610713600480360381019061070e919061538b565b613470565b604051610720919061576b565b60405180910390f35b610743600480360381019061073e9190615631565b613490565b60405161075091906157c3565b60405180910390f35b610773600480360381019061076e919061538b565b61351b565b60405161078091906157c3565b60405180910390f35b610791613533565b60405161079e91906156e2565b60405180910390f35b6107c160048036038101906107bc919061538b565b613559565b6040516107ce91906157c3565b60405180910390f35b6107f160048036038101906107ec919061538b565b613601565b005b61080d6004803603810190610808919061538b565b613b7f565b60405161081a91906157c3565b60405180910390f35b61083d60048036038101906108389190615419565b613bbf565b005b6108596004803603810190610854919061538b565b613e4c565b005b610863613fa2565b60405161087091906157c3565b60405180910390f35b610893600480360381019061088e919061538b565b613fa8565b6040516108a091906157c3565b60405180910390f35b6108c360048036038101906108be919061538b565b613fc0565b6040516108d0919061576b565b60405180910390f35b6108f360048036038101906108ee919061538b565b614016565b60405161090091906156e2565b60405180910390f35b6000600480549050905090565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561099f57600080fd5b505afa1580156109b3573d6000803e3d6000fd5b505050506040513d60208110156109c957600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090610ab6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a7b578082015181840152602081019050610a60565b50505050905090810190601f168015610aa85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c0d57600080fd5b505afa158015610c21573d6000803e3d6000fd5b505050506040513d6020811015610c3757600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090610d24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ce9578082015181840152602081019050610cce565b50505050905090810190601f168015610d165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc7d2592986c53f858769b011e8ce6298936f8609789988e9f5ad4f0a2079889782604051610dc2919061576b565b60405180910390a25050565b6000610f8e8273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1957600080fd5b505afa158015610e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e519190615608565b610f80600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef49190615608565b8573ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3a57600080fd5b505afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f729190615608565b6140cc90919063ffffffff16565b61415290919063ffffffff16565b9050919050565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806110375750601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561113f57601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166040518060400160405280600381526020017f43464600000000000000000000000000000000000000000000000000000000008152509061113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113491906157a1565b60405180910390fd5b505b5050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4eb5db0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111ec57600080fd5b505afa158015611200573d6000803e3d6000fd5b505050506040513d602081101561121657600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c310000000000000000000000000000000000000000000000000000000081525090611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112c85780820151818401526020810190506112ad565b50505050905090810190601f1680156112f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061130c6141db565b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f4346330000000000000000000000000000000000000000000000000000000000815250906113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd91906157a1565b60405180910390fd5b50612710600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635e0b63d36040518163ffffffff1660e01b815260040160206040518083038186803b15801561144257600080fd5b505afa158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147a9190615608565b1080156115275750612710600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633915ffaa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ed57600080fd5b505afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190615608565b105b80156115d35750612710600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638053fcbe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190615608565b105b6040518060400160405280600381526020017f434d3800000000000000000000000000000000000000000000000000000000008152509061164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164191906157a1565b60405180910390fd5b50612710600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1b4264c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b657600080fd5b505afa1580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ee9190615608565b116040518060400160405280600381526020017f434d39000000000000000000000000000000000000000000000000000000000081525090611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d91906157a1565b60405180910390fd5b506118b8600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633915ffaa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d257600080fd5b505afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a9190615608565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638053fcbe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561187257600080fd5b505afa158015611886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118aa9190615608565b61404990919063ffffffff16565b60056000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b600480549050811015611a915760056000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600484815481106119a457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156040518060400160405280600381526020017f434643000000000000000000000000000000000000000000000000000000000081525090611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a91906157a1565b60405180910390fd5b508080600101915050611924565b50611a9a6142c5565b565b60115481565b60086020528060005260406000206000915090505481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611af682600961445f90919063ffffffff16565b9050919050565b6000611b096009614479565b905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434633000000000000000000000000000000000000000000000000000000000081525090611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd91906157a1565b60405180910390fd5b50611be1828261448e565b5050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c6e57600080fd5b505afa158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090611d85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d4a578082015181840152602081019050611d2f565b50505050905090810190601f168015611d775780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2591906157a1565b60405180910390fd5b50611e438160096145e990919063ffffffff16565b6040518060400160405280600381526020017f434641000000000000000000000000000000000000000000000000000000000081525090611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb191906157a1565b60405180910390fd5b506000600b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f60405160405180910390a250565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008060009054906101000a900460ff16905090565b6004818154811061211757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee083604051612237919061576b565b60405180910390a35050565b60146020528060005260406000206000915054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122ec57600080fd5b505afa158015612300573d6000803e3d6000fd5b505050506040513d602081101561231657600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090612403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123c85780820151818401526020810190506123ad565b50505050905090810190601f1680156123f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061240e8282614619565b5050565b60056020528060005260406000206000915090505481565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124b357600080fd5b505afa1580156124c7573d6000803e3d6000fd5b505050506040513d60208110156124dd57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c3200000000000000000000000000000000000000000000000000000000815250906125ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561258f578082015181840152602081019050612574565b50505050905090810190601f1680156125bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126355750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6040518060400160405280600281526020017f5a30000000000000000000000000000000000000000000000000000000000000815250906126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a391906157a1565b60405180910390fd5b5060001515600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146040518060400160405280600381526020017f434644000000000000000000000000000000000000000000000000000000000081525090612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f91906157a1565b60405180910390fd5b506000600b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061289c82600961466c90919063ffffffff16565b5080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b61298281613fc0565b6040518060400160405280600381526020017f4346320000000000000000000000000000000000000000000000000000000000815250906129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f091906157a1565b60405180910390fd5b5050565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166040518060400160405280600381526020017f434634000000000000000000000000000000000000000000000000000000000081525090612ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab891906157a1565b60405180910390fd5b5060008083518651148015612ad7575082518551145b6040518060400160405280600281526020017f435200000000000000000000000000000000000000000000000000000000000081525090612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4591906157a1565b60405180910390fd5b5060005b8651811015612c7357612c64600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b66102df898481518110612ba857fe5b6020026020010151888581518110612bbc57fe5b6020026020010151601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518463ffffffff1660e01b8152600401612c05939291906157de565b60206040518083038186803b158015612c1d57600080fd5b505afa158015612c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c559190615608565b8461469c90919063ffffffff16565b92508080600101915050612b52565b5060005b8551811015612db557612c9d88858381518110612c9057fe5b602002602001015161448e565b612da6600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b66102df888481518110612cea57fe5b6020026020010151878581518110612cfe57fe5b6020026020010151601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518463ffffffff1660e01b8152600401612d47939291906157de565b60206040518083038186803b158015612d5f57600080fd5b505afa158015612d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d979190615608565b8361469c90919063ffffffff16565b91508080600101915050612c77565b50612dc1878383614724565b50505050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a41ec64336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e5357600080fd5b505afa158015612e67573d6000803e3d6000fd5b505050506040513d6020811015612e7d57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c310000000000000000000000000000000000000000000000000000000081525090612f6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f2f578082015181840152602081019050612f14565b50505050905090810190601f168015612f5c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612f736148c6565b565b6000806000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b612fc7610909565b81101561301557806001901b925060008383161115613008576000612fec868361326b565b9350505050613004818661469c90919063ffffffff16565b9450505b8080600101915050612fbf565b5061302b6127108461415290919063ffffffff16565b92505050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156130bd57600080fd5b505afa1580156130d1573d6000803e3d6000fd5b505050506040513d60208110156130e757600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c3200000000000000000000000000000000000000000000000000000000815250906131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561319957808201518184015260208101905061317e565b50505050905090810190601f1680156131c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506131df82826149b1565b5050565b806131ed83613b7f565b10156040518060400160405280600381526020017f434d35000000000000000000000000000000000000000000000000000000000081525090613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d91906157a1565b60405180910390fd5b505050565b6000806000806004858154811061327e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693508373ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016132e491906156e2565b60206040518083038186803b1580156132fc57600080fd5b505afa158015613310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133349190615608565b9250600183111561346757600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b66102df8486600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518463ffffffff1660e01b81526004016133c0939291906157de565b60206040518083038186803b1580156133d857600080fd5b505afa1580156133ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134109190615608565b9150613464600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836140cc90919063ffffffff16565b90505b92959194509250565b60036020528060005260406000206000915054906101000a900460ff1681565b60006134a7836127106140cc90919063ffffffff16565b905060005b6134c060018461404990919063ffffffff16565b8110156134fd576134ee6127106134e086856140cc90919063ffffffff16565b61415290919063ffffffff16565b915080806001019150506134ac565b506135136127108261415290919063ffffffff16565b905092915050565b60076020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b6135ab610909565b8110156135f957806001901b9250600083831611156135ec5760006135d0868361326b565b50925050506135e8818661469c90919063ffffffff16565b9450505b80806001019150506135a3565b505050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561368a57600080fd5b505afa15801561369e573d6000803e3d6000fd5b505050506040513d60208110156136b457600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c3200000000000000000000000000000000000000000000000000000000815250906137a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561376657808201518184015260208101905061374b565b50505050905090810190601f1680156137935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a300000000000000000000000000000000000000000000000000000000000008152509061384a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384191906157a1565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434647000000000000000000000000000000000000000000000000000000000081525090613914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390b91906157a1565b60405180910390fd5b5080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b815260040160206040518083038186803b15801561399c57600080fd5b505afa1580156139b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d491906153b4565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b815260040160206040518083038186803b158015613ab557600080fd5b505afa158015613ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aed91906153b4565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434630000000000000000000000000000000000000000000000000000000000081525090613b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7291906157a1565b60405180910390fd5b5050565b6000613bb8613b8d83610dce565b613baa612710613b9c86612f75565b6140cc90919063ffffffff16565b61415290919063ffffffff16565b9050919050565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166040518060400160405280600381526020017f434634000000000000000000000000000000000000000000000000000000000081525090613c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7a91906157a1565b60405180910390fd5b50613c8e858461448e565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b66102df8487601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518463ffffffff1660e01b8152600401613d11939291906157de565b60206040518083038186803b158015613d2957600080fd5b505afa158015613d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d619190615608565b90506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b66102df8487601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518463ffffffff1660e01b8152600401613de6939291906157de565b60206040518083038186803b158015613dfe57600080fd5b505afa158015613e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e369190615608565b9050613e43878383614724565b50505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434633000000000000000000000000000000000000000000000000000000000081525090613f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f0b91906157a1565b60405180910390fd5b506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60125481565b60066020528060005260406000206000915090505481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000828211156140c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808314156140df576000905061414c565b60008284029050828482816140f057fe5b0414614147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159fd6021913960400191505060405180910390fd5b809150505b92915050565b60008082116141c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816141d257fe5b04905092915050565b6141e36120f1565b614255576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa614298614fdf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461445d57600061433f61432e601154601254613490565b61271061404990919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633915ffaa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156143a957600080fd5b505afa1580156143bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143e19190615608565b81106040518060400160405280600381526020017f43464200000000000000000000000000000000000000000000000000000000008152509061445a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161445191906157a1565b60405180910390fd5b50505b565b600061446e8360000183614fe7565b60001c905092915050565b60006144878260000161506a565b9050919050565b61449781612979565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541614156145e557600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205417600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b6000614611836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61507b565b905092915050565b816011819055508060128190555061462f6142c5565b7f727652fff0946c19c233fd3eab5fc03db9e9fdd907e902d9136c2a9cac47101c8282604051614660929190615815565b60405180910390a15050565b6000614694836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615163565b905092915050565b60008082840190508381101561471a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b614739601154836140cc90919063ffffffff16565b61474e612710836140cc90919063ffffffff16565b11801561479c5750601254600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b156147f557600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506148c1565b61271061480184613b7f565b10156040518060400160405280600381526020017f43463500000000000000000000000000000000000000000000000000000000008152509061487a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161487191906157a1565b60405180910390fd5b506001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6148ce6120f1565b15614941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614984614fdf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090614a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a5091906157a1565b60405180910390fd5b50600081118015614acb575060056000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111155b6040518060400160405280600381526020017f434631000000000000000000000000000000000000000000000000000000000081525090614b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b3991906157a1565b60405180910390fd5b506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614b975750610100600480549050105b6040518060400160405280600381526020017f434636000000000000000000000000000000000000000000000000000000000081525090614c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c0591906157a1565b60405180910390fd5b5060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401614c4a91906156e2565b60206040518083038186803b158015614c6257600080fd5b505afa158015614c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9a9190615608565b1015614ca557600080fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743b908684600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401614d269291906156fd565b60206040518083038186803b158015614d3e57600080fd5b505afa158015614d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d769190615608565b116040518060400160405280600381526020017f434645000000000000000000000000000000000000000000000000000000000081525090614dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614de591906157a1565b60405180910390fd5b50600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16614f49576001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004805490506001901b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167fa52fb6bfa514a4ddcb31de40a5f6c20d767db1f921a8b7747973d93dc5da7a0282604051614fd391906157c3565b60405180910390a25050565b600033905090565b600081836000018054905011615048576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806159db6022913960400191505060405180910390fd5b82600001828154811061505757fe5b9060005260206000200154905092915050565b600081600001805490509050919050565b6000808360010160008481526020019081526020016000205490506000811461515757600060018203905060006001866000018054905003905060008660000182815481106150c657fe5b90600052602060002001549050808760000184815481106150e357fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061511b57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061515d565b60009150505b92915050565b600061516f83836151d3565b6151c85782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506151cd565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60006152096152048461586f565b61583e565b9050808382526020820190508285602086028201111561522857600080fd5b60005b85811015615258578161523e88826152ce565b84526020840193506020830192505060018101905061522b565b5050509392505050565b60006152756152708461589b565b61583e565b9050808382526020820190508285602086028201111561529457600080fd5b60005b858110156152c457816152aa8882615361565b845260208401935060208301925050600181019050615297565b5050509392505050565b6000813590506152dd81615995565b92915050565b6000815190506152f281615995565b92915050565b600082601f83011261530957600080fd5b81356153198482602086016151f6565b91505092915050565b600082601f83011261533357600080fd5b8135615343848260208601615262565b91505092915050565b60008135905061535b816159ac565b92915050565b600081359050615370816159c3565b92915050565b600081519050615385816159c3565b92915050565b60006020828403121561539d57600080fd5b60006153ab848285016152ce565b91505092915050565b6000602082840312156153c657600080fd5b60006153d4848285016152e3565b91505092915050565b600080604083850312156153f057600080fd5b60006153fe858286016152ce565b925050602061540f858286016152ce565b9150509250929050565b600080600080600060a0868803121561543157600080fd5b600061543f888289016152ce565b9550506020615450888289016152ce565b9450506040615461888289016152ce565b935050606061547288828901615361565b925050608061548388828901615361565b9150509295509295909350565b600080600080600060a086880312156154a857600080fd5b60006154b6888289016152ce565b955050602086013567ffffffffffffffff8111156154d357600080fd5b6154df88828901615322565b945050604086013567ffffffffffffffff8111156154fc57600080fd5b61550888828901615322565b935050606086013567ffffffffffffffff81111561552557600080fd5b615531888289016152f8565b925050608086013567ffffffffffffffff81111561554e57600080fd5b61555a888289016152f8565b9150509295509295909350565b6000806040838503121561557a57600080fd5b6000615588858286016152ce565b92505060206155998582860161534c565b9150509250929050565b600080604083850312156155b657600080fd5b60006155c4858286016152ce565b92505060206155d585828601615361565b9150509250929050565b6000602082840312156155f157600080fd5b60006155ff84828501615361565b91505092915050565b60006020828403121561561a57600080fd5b600061562884828501615376565b91505092915050565b6000806040838503121561564457600080fd5b600061565285828601615361565b925050602061566385828601615361565b9150509250929050565b615676816158e3565b82525050565b615685816158f5565b82525050565b6156948161592b565b82525050565b60006156a5826158c7565b6156af81856158d2565b93506156bf81856020860161594f565b6156c881615984565b840191505092915050565b6156dc81615921565b82525050565b60006020820190506156f7600083018461566d565b92915050565b6000604082019050615712600083018561566d565b61571f602083018461566d565b9392505050565b600060808201905061573b600083018761566d565b61574860208301866156d3565b61575560408301856156d3565b61576260608301846156d3565b95945050505050565b6000602082019050615780600083018461567c565b92915050565b600060208201905061579b600083018461568b565b92915050565b600060208201905081810360008301526157bb818461569a565b905092915050565b60006020820190506157d860008301846156d3565b92915050565b60006060820190506157f360008301866156d3565b615800602083018561566d565b61580d604083018461566d565b949350505050565b600060408201905061582a60008301856156d3565b61583760208301846156d3565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561586557615864615982565b5b8060405250919050565b600067ffffffffffffffff82111561588a57615889615982565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156158b6576158b5615982565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006158ee82615901565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006159368261593d565b9050919050565b600061594882615901565b9050919050565b60005b8381101561596d578082015181840152602081019050615952565b8381111561597c576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b61599e816158e3565b81146159a957600080fd5b50565b6159b5816158f5565b81146159c057600080fd5b50565b6159cc81615921565b81146159d757600080fd5b5056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a7026a1fffe188502f720f363d5d1cadf85ba583ca2d401f61c5ae40ed5fa7e464736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7760806040523480156200001157600080fd5b5060405162006ea138038062006ea1833981810160405281019062000037919062000c60565b8660008060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a300000000000000000000000000000000000000000000000000000000000008152509062000163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001275780820151818401526020810190506200010a565b50505050905090810190601f168015620001555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ab57600080fd5b505afa158015620001c0573d6000803e3d6000fd5b505050506040513d6020811015620001d757600080fd5b8101908080519060200190929190505050600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060018081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141580156200029b5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015620002d55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156200030f5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6040518060400160405280600281526020017f5a300000000000000000000000000000000000000000000000000000000000008152509062000389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000380919062000d5f565b60405180910390fd5b50600087905083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041757600080fd5b505afa1580156200042c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000452919062000c34565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16634c252f916040518163ffffffff1660e01b815260040160206040518083038186803b158015620004d957600080fd5b505afa158015620004ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000514919062000c34565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166377532ed96040518163ffffffff1660e01b815260040160206040518083038186803b1580156200059b57600080fd5b505afa158015620005b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d6919062000c34565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16639068a8686040518163ffffffff1660e01b815260040160206040518083038186803b1580156200069e57600080fd5b505afa158015620006b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d9919062000c34565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007348787876103e860c861251c6200078360201b60201c565b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050505062000ec5565b848611158015620007945750600084115b6040518060400160405280600381526020017f434d370000000000000000000000000000000000000000000000000000000000815250906200080e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000805919062000d5f565b60405180910390fd5b5085600281905550846003819055508360048190555082600e8190555081600f8190555080601081905550620008aa6004546200089662000864606460ff16600454620009e360201b6200314b1790919060201c565b62000882600f5460105462000a6c60201b620031d31790919060201c565b62000af060201b620032561790919060201c565b62000b7b60201b620032dc1790919060201c565b600581905550600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200098c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406318286040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200097257600080fd5b505af115801562000987573d6000803e3d6000fd5b505050505b7fa32137411fc7c20db359079cd84af0e2cad58cd7a182a8a5e23e08e554e88bf0600254600354600454600e54600f54601054604051620009d39695949392919062000d83565b60405180910390a1505050505050565b60008082840190508381101562000a62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008282111562000ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008083141562000b05576000905062000b75565b600082840290508284828162000b1757fe5b041462000b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062006e806021913960400191505060405180910390fd5b809150505b92915050565b600080821162000bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838162000bfd57fe5b04905092915050565b60008151905062000c178162000e91565b92915050565b60008151905062000c2e8162000eab565b92915050565b60006020828403121562000c4757600080fd5b600062000c578482850162000c06565b91505092915050565b600080600080600080600060e0888a03121562000c7c57600080fd5b600062000c8c8a828b0162000c06565b975050602062000c9f8a828b0162000c1d565b965050604062000cb28a828b0162000c1d565b955050606062000cc58a828b0162000c1d565b945050608062000cd88a828b0162000c06565b93505060a062000ceb8a828b0162000c06565b92505060c062000cfe8a828b0162000c06565b91505092959891949750929550565b600062000d1a8262000df0565b62000d26818562000dfb565b935062000d3881856020860162000e4a565b62000d438162000e80565b840191505092915050565b62000d598162000e40565b82525050565b6000602082019050818103600083015262000d7b818462000d0d565b905092915050565b600060c08201905062000d9a600083018962000d4e565b62000da9602083018862000d4e565b62000db8604083018762000d4e565b62000dc7606083018662000d4e565b62000dd6608083018562000d4e565b62000de560a083018462000d4e565b979650505050505050565b600081519050919050565b600082825260208201905092915050565b600062000e198262000e20565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000e6a57808201518184015260208101905062000e4d565b8381111562000e7a576000848401525b50505050565b6000601f19601f8301169050919050565b62000e9c8162000e0c565b811462000ea857600080fd5b50565b62000eb68162000e40565b811462000ec257600080fd5b50565b615fab8062000ed56000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638053fcbe1161011a578063b2c53a6c116100ad578063e1b4264c1161007c578063e1b4264c146105a7578063e958b704146105c5578063ebb39512146105f5578063f8dbc6b614610611578063f93f515b1461064557610206565b8063b2c53a6c14610531578063c5e10eef1461054f578063d692ba331461056d578063e0c011b71461058957610206565b80639efc60d0116100e95780639efc60d0146104ad578063a69a7dd6146104c9578063a6eab5c2146104e5578063ab1148051461051557610206565b80638053fcbe146104335780638456cb5914610451578063996329f81461045b5780639b2cb5d81461048f57610206565b80635288ba4b1161019d5780635c975abb1161016c5780635c975abb1461038d5780635e0b63d3146103ab5780635f48f393146103c95780636ce4074a146103e75780637e5465ba1461041757610206565b80635288ba4b1461031b578063570a7af214610337578063579122ab14610355578063597810341461037157610206565b80633ce07355116101d95780633ce07355146102a75780633f4ba83a146102d75780634f0e0ef3146102e15780635019e20a146102ff57610206565b8063055ee9b51461020b5780632495a5991461023b578063256ac915146102595780633915ffaa14610289575b600080fd5b610225600480360381019061022091906152f2565b610663565b6040516102329190615952565b60405180910390f35b610243610696565b6040516102509190615952565b60405180910390f35b610273600480360381019061026e91906152f2565b6106bc565b6040516102809190615a4f565b60405180910390f35b610291610754565b60405161029e9190615ac9565b60405180910390f35b6102c160048036038101906102bc919061552c565b61075a565b6040516102ce9190615ac9565b60405180910390f35b6102df610857565b005b6102e9610a02565b6040516102f69190615952565b60405180910390f35b610319600480360381019061031491906152f2565b610a28565b005b610335600480360381019061033091906156ad565b610c7f565b005b61033f611221565b60405161034c9190615952565b60405180910390f35b61036f600480360381019061036a9190615380565b611247565b005b61038b60048036038101906103869190615485565b6114ad565b005b6103956116e4565b6040516103a29190615a4f565b60405180910390f35b6103b36116fa565b6040516103c09190615ac9565b60405180910390f35b6103d1611700565b6040516103de9190615ac9565b60405180910390f35b61040160048036038101906103fc919061541e565b611706565b60405161040e9190615a6a565b60405180910390f35b610431600480360381019061042c9190615344565b611a61565b005b61043b611d5f565b6040516104489190615ac9565b60405180910390f35b610459611d65565b005b61047560048036038101906104709190615568565b611f10565b604051610486959493929190615bc7565b60405180910390f35b610497611feb565b6040516104a49190615ac9565b60405180910390f35b6104c760048036038101906104c2919061565b565b611ff1565b005b6104e360048036038101906104de91906153cf565b612463565b005b6104ff60048036038101906104fa9190615344565b612740565b60405161050c9190615ac9565b60405180910390f35b61052f600480360381019061052a91906154d4565b612920565b005b610539612b6c565b6040516105469190615ac9565b60405180910390f35b610557612b72565b6040516105649190615952565b60405180910390f35b610587600480360381019061058291906152f2565b612b98565b005b610591612ca9565b60405161059e9190615952565b60405180910390f35b6105af612ccf565b6040516105bc9190615ac9565b60405180910390f35b6105df60048036038101906105da91906152f2565b612cd5565b6040516105ec9190615952565b60405180910390f35b61060f600480360381019061060a9190615787565b612dec565b005b61062b60048036038101906106269190615710565b612fa3565b60405161063c959493929190615bc7565b60405180910390f35b61064d613125565b60405161065a9190615a8c565b60405180910390f35b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600f5481565b60008061076684612cd5565b90506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7de38a6836040518263ffffffff1660e01b81526004016107c59190615952565b60206040518083038186803b1580156107dd57600080fd5b505afa1580156107f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108159190615684565b9050600080610825848488611f10565b5050925092505085610837578161084b565b61084a818361314b90919063ffffffff16565b5b94505050505092915050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4eb5db0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d602081101561090a57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c3100000000000000000000000000000000000000000000000000000000815250906109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109bc5780820151818401526020810190506109a1565b50505050905090810190601f1680156109e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610a00613365565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a306116e4565b15610aa3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415610b1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000610b2f33612cd5565b9050610b3a8261344f565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d60405160405180910390a3506001808190555050565b610c876116e4565b15610cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506002548410158015610d8f57506003548411155b8015610d9b5750600082115b8015610da957506004548211155b6040518060400160405280600381526020017f434d37000000000000000000000000000000000000000000000000000000000081525090610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e179190615aa7565b60405180910390fd5b50610e2a8361344f565b6000610e55606460ff16610e47858861325690919063ffffffff16565b6132dc90919063ffffffff16565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166321d1845683600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f389190615684565b6040518363ffffffff1660e01b8152600401610f55929190615b0d565b602060405180830381600087803b158015610f6f57600080fd5b505af1158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa7919061531b565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e54fe9c8826040518263ffffffff1660e01b81526004016110049190615952565b600060405180830381600087803b15801561101e57600080fd5b505af1158015611032573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf28068b83836040518363ffffffff1660e01b8152600401611093929190615ae4565b600060405180830381600087803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b50505050611114338288600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135ce909392919063ffffffff16565b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7b20ae77867a263a1074203a2da261ef0d096c99395c59c9d4a0104b9f334a2789868860405161120a93929190615b90565b60405180910390a450506001808190555050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b813373ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdd57645836040518263ffffffff1660e01b81526004016112ba9190615952565b60206040518083038186803b1580156112d257600080fd5b505afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a919061531b565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434d42000000000000000000000000000000000000000000000000000000000081525090611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f9190615aa7565b60405180910390fd5b506113a16116e4565b15611414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6002600154141561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506114a084848461368f565b6001808190555050505050565b6114b56116e4565b15611528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600260015414156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060006115b484612cd5565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351e3f16082856040518363ffffffff1660e01b8152600401611613929190615996565b600060405180830381600087803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505050506116723382848673ffffffffffffffffffffffffffffffffffffffff166135ce909392919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f846040516116cf9190615ac9565b60405180910390a35060018081905550505050565b60008060009054906101000a900460ff16905090565b600e5481565b60035481565b6060823373ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdd57645836040518263ffffffff1660e01b815260040161177b9190615952565b60206040518083038186803b15801561179357600080fd5b505afa1580156117a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cb919061531b565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434d42000000000000000000000000000000000000000000000000000000000081525090611859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118509190615aa7565b60405180910390fd5b506118626116e4565b156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6002600154141561194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600061196186612cd5565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a38073ffffffffffffffffffffffffffffffffffffffff16631cff79cd86866040518363ffffffff1660e01b81526004016119f89291906159f6565b600060405180830381600087803b158015611a1257600080fd5b505af1158015611a26573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a4f919061561a565b92505060018081905550509392505050565b611a696116e4565b15611adc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415611b55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000611b6833612cd5565b9050600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdd57645856040518263ffffffff1660e01b8152600401611bdd9190615952565b60206040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2d919061531b565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600381526020017f434d42000000000000000000000000000000000000000000000000000000000081525090611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb39190615aa7565b60405180910390fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637dd0ba82836040518263ffffffff1660e01b8152600401611d189190615952565b60006040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b50505050611d5381848461368f565b50600180819055505050565b60105481565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a41ec64336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611dee57600080fd5b505afa158015611e02573d6000803e3d6000fd5b505050506040513d6020811015611e1857600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c310000000000000000000000000000000000000000000000000000000081525090611f05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eca578082015181840152602081019050611eaf565b50505050905090810190601f168015611ef75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611f0e6137b4565b565b6000806000806000806000611f248a61389f565b91509150611fd489898484600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9757600080fd5b505afa158015611fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcf9190615684565b612fa3565b965096509650965096505050939792965093509350565b60025481565b611ff96116e4565b1561206c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600260015414156120e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060006120f833612cd5565b90506000806121068361389f565b91509150600061211f858461314b90919063ffffffff16565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00495a18588866040518463ffffffff1660e01b815260040161218293929190615b90565b60206040518083038186803b15801561219a57600080fd5b505afa1580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d29190615684565b90506121eb60045460035461325690919063ffffffff16565b612202606460ff168461325690919063ffffffff16565b106040518060400160405280600381526020017f434d3300000000000000000000000000000000000000000000000000000000008152509061227a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122719190615aa7565b60405180910390fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf28068b87876040518363ffffffff1660e01b81526004016122d8929190615ae4565b600060405180830381600087803b1580156122f257600080fd5b505af1158015612306573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff16631612821183836040518363ffffffff1660e01b8152600401612345929190615b0d565b600060405180830381600087803b15801561235f57600080fd5b505af1158015612373573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a5757517866005546040518363ffffffff1660e01b81526004016123d6929190615a26565b60006040518083038186803b1580156123ee57600080fd5b505afa158015612402573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458760405161244c9190615ac9565b60405180910390a250505050506001808190555050565b61246b6116e4565b156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600061256a84612cd5565b905060008061257a8386866139a7565b9150915061263d612710600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633192195c866040518263ffffffff1660e01b81526004016125df9190615952565b60206040518083038186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262f9190615684565b61325690919063ffffffff16565b81106040518060400160405280600381526020017f434d340000000000000000000000000000000000000000000000000000000000815250906126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad9190615aa7565b60405180910390fd5b5060006126c8846003858a338b613cf1565b9150503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f5e5da6c348e62989f9cfe029252433fc99009b7d28fa3c20d675520a10ff5896836040516127289190615ac9565b60405180910390a35050505060018081905550505050565b600061274a6116e4565b156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f434d36000000000000000000000000000000000000000000000000000000000081525090612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd9190615aa7565b60405180910390fd5b50612911838361417b565b90506001808190555092915050565b6129286116e4565b1561299b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415612a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000612a2733612cd5565b9050612a34818484614214565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401612a919190615952565b60206040518083038186803b158015612aa957600080fd5b505afa158015612abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae19190615684565b90506000612af5836001843360008b613cf1565b9150508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fca05b632388199c23de1352b2e96fd72a0ec71611683330b38060c004bbf0a7683604051612b559190615ac9565b60405180910390a350505060018081905550505050565b60045481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ba06116e4565b15612c13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60026001541415612c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550612c9e338261417b565b506001808190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600381526020017f434d31000000000000000000000000000000000000000000000000000000000081525090612de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd99190615aa7565b60405180910390fd5b5080915050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f259aba336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e7557600080fd5b505afa158015612e89573d6000803e3d6000fd5b505050506040513d6020811015612e9f57600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525090612f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f51578082015181840152602081019050612f36565b50505050905090810190601f168015612f7e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612f9b8686868686866147ca565b505050505050565b60008060008060008089612fb7578a612fe1565b612fe0612710612fd26010548e61325690919063ffffffff16565b6132dc90919063ffffffff16565b5b9050889550600061300d89612fff8a8d61325690919063ffffffff16565b6132dc90919063ffffffff16565b9050808210156130475761302b6001836131d390919063ffffffff16565b955061304086826131d390919063ffffffff16565b9250613116565b8a61308a57613085613076600e546130688d856131d390919063ffffffff16565b614a0590919063ffffffff16565b8261314b90919063ffffffff16565b6130b2565b6130b1816130a3600f5485614a0590919063ffffffff16565b61314b90919063ffffffff16565b5b9550858211156130e9576130e260016130d488856131d390919063ffffffff16565b6131d390919063ffffffff16565b9450613100565b6130fd6001836131d390919063ffffffff16565b95505b61311381876131d390919063ffffffff16565b93505b50509550955095509550959050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156131c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008282111561324b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008083141561326957600090506132d6565b600082840290508284828161327a57fe5b04146132d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615f2b6021913960400191505060405180910390fd5b809150505b92915050565b6000808211613353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161335c57fe5b04905092915050565b61336d6116e4565b6133df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613422614b60565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156134925750613490816106bc565b155b6040518060400160405280600381526020017f434d32000000000000000000000000000000000000000000000000000000000081525090613509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135009190615aa7565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135cb57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633b00ae7033836040518363ffffffff1660e01b815260040161359a92919061596d565b60006040518083038186803b1580156135b257600080fd5b505afa1580156135c6573d6000803e3d6000fd5b505050505b50565b613689846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614b68565b50505050565b7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e85856040518363ffffffff1660e01b81526004016136eb929190615996565b60206040518083038186803b15801561370357600080fd5b505afa158015613717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373b9190615684565b10156137af578273ffffffffffffffffffffffffffffffffffffffff166303105b0482846040518363ffffffff1660e01b815260040161377c929190615996565b600060405180830381600087803b15801561379657600080fd5b505af11580156137aa573d6000803e3d6000fd5b505050505b505050565b6137bc6116e4565b1561382f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613872614b60565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000808273ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156138e857600080fd5b505afa1580156138fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139209190615684565b91508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b815260040160206040518083038186803b15801561396857600080fd5b505afa15801561397c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a09190615684565b9050915091565b600080600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b451cecc886040518263ffffffff1660e01b8152600401613a089190615952565b60206040518083038186803b158015613a2057600080fd5b505afa158015613a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a589190615684565b9050600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525090613b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af99190615aa7565b60405180910390fd5b5060005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b815260040160206040518083038186803b158015613b6e57600080fd5b505afa158015613b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba69190615684565b811015613ce657806001901b925060008383161115613cd957600080600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af0a65028d876040518363ffffffff1660e01b8152600401613c22929190615a26565b60806040518083038186803b158015613c3a57600080fd5b505afa158015613c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7291906155b7565b93509350935093506001831115613cd457613ca38c858d613c9d6001886131d390919063ffffffff16565b8e614c57565b15613cd357613cbb828a61314b90919063ffffffff16565b9850613cd0818961314b90919063ffffffff16565b97505b5b505050505b8080600101915050613b06565b505050935093915050565b6000806000600360ff168860ff161490506000806000806000613d158e8d88611f10565b94509450945094509450600160ff168d60ff161415613e93578d73ffffffffffffffffffffffffffffffffffffffff1663d1660f99600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518463ffffffff1660e01b8152600401613daf939291906159bf565b600060405180830381600087803b158015613dc957600080fd5b505af1158015613ddd573d6000803e3d6000fd5b50505050600083116040518060400160405280600381526020017f434d41000000000000000000000000000000000000000000000000000000000081525090613e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e539190615aa7565b60405180910390fd5b50613e8d8e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b866000614c57565b50613fe4565b600360ff168d60ff161415613f7157613f138a600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135ce909392919063ffffffff16565b6000831115613f6c57613f6b8a8c85600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135ce909392919063ffffffff16565b5b613fe3565b613fe233600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135ce909392919063ffffffff16565b5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389b77b3e8f6040518263ffffffff1660e01b815260040161403f9190615952565b600060405180830381600087803b15801561405957600080fd5b505af115801561406d573d6000803e3d6000fd5b50505050600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca9505e48684846040518463ffffffff1660e01b815260040161413293929190615b90565b600060405180830381600087803b15801561414c57600080fd5b505af1158015614160573d6000803e3d6000fd5b50505050838397509750505050505050965096945050505050565b60008061418784612cd5565b90506000614197828560006139a7565b50905060006141ab83600284898a8a613cf1565b5090508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fe7c7987373a0cc4913d307f23ab8ef02e0333a2af445065e2ef7636cffc6daa760405160405180910390a380935050505092915050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b451cecc866040518263ffffffff1660e01b81526004016142729190615952565b60206040518083038186803b15801561428a57600080fd5b505afa15801561429e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c29190615684565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b815260040160206040518083038186803b15801561432c57600080fd5b505afa158015614340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143649190615684565b84849050146040518060400160405280600281526020017f504c000000000000000000000000000000000000000000000000000000000000815250906143e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143d79190615aa7565b60405180910390fd5b506000600190505b848490508110156147c257806001901b9250600083831611156147b557600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af0a650289856040518363ffffffff1660e01b8152600401614465929190615a26565b60806040518083038186803b15801561447d57600080fd5b505afa158015614491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b591906155b7565b50509150915060018111156147b2576144f188600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461368f565b60008787858181106144ff57fe5b90506020028101906145119190615cd2565b80600001906145209190615c7b565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509050828160008151811061457057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018a8a888181106145dc57fe5b90506020028101906145ee9190615cd2565b80600001906145fd9190615c7b565b9050038151811061460a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006338ed173960e01b6146626001856131d390919063ffffffff16565b8a8a8881811061466e57fe5b90506020028101906146809190615cd2565b60200135848d4260405160240161469b959493929190615b36565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508973ffffffffffffffffffffffffffffffffffffffff16631cff79cd600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016147579291906159f6565b600060405180830381600087803b15801561477157600080fd5b505af1158015614785573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906147ae919061561a565b5050505b50505b80806001019150506143e8565b505050505050565b8486111580156147da5750600084115b6040518060400160405280600381526020017f434d37000000000000000000000000000000000000000000000000000000000081525090614851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148489190615aa7565b60405180910390fd5b5085600281905550846003819055508360048190555082600e8190555081600f81905550806010819055506148d16004546148c361489e606460ff1660045461314b90919063ffffffff16565b6148b5600f546010546131d390919063ffffffff16565b61325690919063ffffffff16565b6132dc90919063ffffffff16565b600581905550600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146149b057600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406318286040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561499757600080fd5b505af11580156149ab573d6000803e3d6000fd5b505050505b7fa32137411fc7c20db359079cd84af0e2cad58cd7a182a8a5e23e08e554e88bf0600254600354600454600e54600f546010546040516149f596959493929190615c1a565b60405180910390a1505050505050565b600080831480614a155750600082145b15614a235760009050614b5a565b81600261271081614a3057fe5b047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0381614a5a57fe5b048311156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090614b3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614aff578082015181840152602081019050614ae4565b50505050905090810190601f168015614b2c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612710600261271081614b4a57fe5b048385020181614b5657fe5b0490505b92915050565b600033905090565b6000614bca826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614ed09092919063ffffffff16565b9050600081511115614c5257808060200190516020811015614beb57600080fd5b8101908080519060200190929190505050614c51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615f4c602a913960400191505060405180910390fd5b5b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614614da1578573ffffffffffffffffffffffffffffffffffffffff1663d1660f998686866040518463ffffffff1660e01b8152600401614ceb939291906159bf565b600060405180830381600087803b158015614d0557600080fd5b505af1925050508015614d16575060015b614d9c57816040518060400160405280600381526020017f434d43000000000000000000000000000000000000000000000000000000000081525090614d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614d899190615aa7565b60405180910390fd5b5060009050614ec7565b614ec2565b8573ffffffffffffffffffffffffffffffffffffffff1663d1660f9986600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401614e00939291906159bf565b600060405180830381600087803b158015614e1a57600080fd5b505af1158015614e2e573d6000803e3d6000fd5b50505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635869dba885856040518363ffffffff1660e01b8152600401614e8f929190615a26565b600060405180830381600087803b158015614ea957600080fd5b505af1158015614ebd573d6000803e3d6000fd5b505050505b600190505b95945050505050565b6060614edf8484600085614ee8565b90509392505050565b606082471015614f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615f056026913960400191505060405180910390fd5b614f4c85615090565b614fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061500d5780518252602082019150602081019050602083039250614fea565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461506f576040519150601f19603f3d011682016040523d82523d6000602084013e615074565b606091505b50915091506150848282866150a3565b92505050949350505050565b600080823b905060008111915050919050565b606083156150b357829050615168565b6000835111156150c65782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561512d578082015181840152602081019050615112565b50505050905090810190601f16801561515a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b600061518261517d84615d27565b615cf6565b90508281526020810184848401111561519a57600080fd5b6151a5848285615e6a565b509392505050565b60006151c06151bb84615d27565b615cf6565b9050828152602081018484840111156151d857600080fd5b6151e3848285615e79565b509392505050565b6000813590506151fa81615ebf565b92915050565b60008151905061520f81615ebf565b92915050565b60008083601f84011261522757600080fd5b8235905067ffffffffffffffff81111561524057600080fd5b60208301915083602082028301111561525857600080fd5b9250929050565b60008135905061526e81615ed6565b92915050565b600082601f83011261528557600080fd5b813561529584826020860161516f565b91505092915050565b600082601f8301126152af57600080fd5b81516152bf8482602086016151ad565b91505092915050565b6000813590506152d781615eed565b92915050565b6000815190506152ec81615eed565b92915050565b60006020828403121561530457600080fd5b6000615312848285016151eb565b91505092915050565b60006020828403121561532d57600080fd5b600061533b84828501615200565b91505092915050565b6000806040838503121561535757600080fd5b6000615365858286016151eb565b9250506020615376858286016151eb565b9150509250929050565b60008060006060848603121561539557600080fd5b60006153a3868287016151eb565b93505060206153b4868287016151eb565b92505060406153c5868287016151eb565b9150509250925092565b6000806000606084860312156153e457600080fd5b60006153f2868287016151eb565b9350506020615403868287016151eb565b92505060406154148682870161525f565b9150509250925092565b60008060006060848603121561543357600080fd5b6000615441868287016151eb565b9350506020615452868287016151eb565b925050604084013567ffffffffffffffff81111561546f57600080fd5b61547b86828701615274565b9150509250925092565b60008060006060848603121561549a57600080fd5b60006154a8868287016151eb565b93505060206154b9868287016151eb565b92505060406154ca868287016152c8565b9150509250925092565b6000806000604084860312156154e957600080fd5b60006154f7868287016151eb565b935050602084013567ffffffffffffffff81111561551457600080fd5b61552086828701615215565b92509250509250925092565b6000806040838503121561553f57600080fd5b600061554d858286016151eb565b925050602061555e8582860161525f565b9150509250929050565b60008060006060848603121561557d57600080fd5b600061558b868287016151eb565b935050602061559c868287016152c8565b92505060406155ad8682870161525f565b9150509250925092565b600080600080608085870312156155cd57600080fd5b60006155db87828801615200565b94505060206155ec878288016152dd565b93505060406155fd878288016152dd565b925050606061560e878288016152dd565b91505092959194509250565b60006020828403121561562c57600080fd5b600082015167ffffffffffffffff81111561564657600080fd5b6156528482850161529e565b91505092915050565b60006020828403121561566d57600080fd5b600061567b848285016152c8565b91505092915050565b60006020828403121561569657600080fd5b60006156a4848285016152dd565b91505092915050565b600080600080608085870312156156c357600080fd5b60006156d1878288016152c8565b94505060206156e2878288016151eb565b93505060406156f3878288016152c8565b9250506060615704878288016152c8565b91505092959194509250565b600080600080600060a0868803121561572857600080fd5b6000615736888289016152c8565b95505060206157478882890161525f565b9450506040615758888289016152c8565b9350506060615769888289016152c8565b925050608061577a888289016152c8565b9150509295509295909350565b60008060008060008060c087890312156157a057600080fd5b60006157ae89828a016152c8565b96505060206157bf89828a016152c8565b95505060406157d089828a016152c8565b94505060606157e189828a016152c8565b93505060806157f289828a016152c8565b92505060a061580389828a016152c8565b9150509295509295509295565b600061581c8383615837565b60208301905092915050565b61583181615e10565b82525050565b61584081615dc8565b82525050565b61584f81615dc8565b82525050565b600061586082615d67565b61586a8185615d95565b935061587583615d57565b8060005b838110156158a657815161588d8882615810565b975061589883615d88565b925050600181019050615879565b5085935050505092915050565b6158bc81615dda565b82525050565b60006158cd82615d72565b6158d78185615da6565b93506158e7818560208601615e79565b6158f081615eae565b840191505092915050565b61590481615e22565b82525050565b600061591582615d7d565b61591f8185615db7565b935061592f818560208601615e79565b61593881615eae565b840191505092915050565b61594c81615e06565b82525050565b60006020820190506159676000830184615846565b92915050565b60006040820190506159826000830185615828565b61598f6020830184615846565b9392505050565b60006040820190506159ab6000830185615846565b6159b86020830184615846565b9392505050565b60006060820190506159d46000830186615846565b6159e16020830185615846565b6159ee6040830184615943565b949350505050565b6000604082019050615a0b6000830185615846565b8181036020830152615a1d81846158c2565b90509392505050565b6000604082019050615a3b6000830185615846565b615a486020830184615943565b9392505050565b6000602082019050615a6460008301846158b3565b92915050565b60006020820190508181036000830152615a8481846158c2565b905092915050565b6000602082019050615aa160008301846158fb565b92915050565b60006020820190508181036000830152615ac1818461590a565b905092915050565b6000602082019050615ade6000830184615943565b92915050565b6000604082019050615af96000830185615943565b615b066020830184615846565b9392505050565b6000604082019050615b226000830185615943565b615b2f6020830184615943565b9392505050565b600060a082019050615b4b6000830188615943565b615b586020830187615943565b8181036040830152615b6a8186615855565b9050615b796060830185615846565b615b866080830184615943565b9695505050505050565b6000606082019050615ba56000830186615943565b615bb26020830185615943565b615bbf6040830184615943565b949350505050565b600060a082019050615bdc6000830188615943565b615be96020830187615943565b615bf66040830186615943565b615c036060830185615943565b615c106080830184615943565b9695505050505050565b600060c082019050615c2f6000830189615943565b615c3c6020830188615943565b615c496040830187615943565b615c566060830186615943565b615c636080830185615943565b615c7060a0830184615943565b979650505050505050565b60008083356001602003843603038112615c9457600080fd5b80840192508235915067ffffffffffffffff821115615cb257600080fd5b602083019250602082023603831315615cca57600080fd5b509250929050565b600082356001604003833603038112615cea57600080fd5b80830191505092915050565b6000604051905081810181811067ffffffffffffffff82111715615d1d57615d1c615eac565b5b8060405250919050565b600067ffffffffffffffff821115615d4257615d41615eac565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615dd382615de6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615e1b82615e46565b9050919050565b6000615e2d82615e34565b9050919050565b6000615e3f82615de6565b9050919050565b6000615e5182615e58565b9050919050565b6000615e6382615de6565b9050919050565b82818337600083830152505050565b60005b83811015615e97578082015181840152602081019050615e7c565b83811115615ea6576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b615ec881615dc8565b8114615ed357600080fd5b50565b615edf81615dda565b8114615eea57600080fd5b50565b615ef681615e06565b8114615f0157600080fd5b5056fe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220b2ba977302a5ec6af8b842e22a57bff808745305cb2bd20f854e5f34562ce84764736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77";
39
+ static readonly abi: ({
40
+ inputs: {
41
+ components: {
42
+ internalType: string;
43
+ name: string;
44
+ type: string;
45
+ }[];
46
+ internalType: string;
47
+ name: string;
48
+ type: string;
49
+ }[];
50
+ stateMutability: string;
51
+ type: string;
52
+ anonymous?: undefined;
53
+ name?: undefined;
54
+ outputs?: undefined;
55
+ } | {
56
+ anonymous: boolean;
57
+ inputs: {
58
+ indexed: boolean;
59
+ internalType: string;
60
+ name: string;
61
+ type: string;
62
+ }[];
63
+ name: string;
64
+ type: string;
65
+ stateMutability?: undefined;
66
+ outputs?: undefined;
67
+ } | {
68
+ inputs: never[];
69
+ name: string;
70
+ outputs: {
71
+ internalType: string;
72
+ name: string;
73
+ type: string;
74
+ }[];
75
+ stateMutability: string;
76
+ type: string;
77
+ anonymous?: undefined;
78
+ } | {
79
+ inputs: {
80
+ components: {
81
+ components: {
82
+ internalType: string;
83
+ name: string;
84
+ type: string;
85
+ }[];
86
+ internalType: string;
87
+ name: string;
88
+ type: string;
89
+ }[];
90
+ internalType: string;
91
+ name: string;
92
+ type: string;
93
+ }[];
94
+ name: string;
95
+ outputs: never[];
96
+ stateMutability: string;
97
+ type: string;
98
+ anonymous?: undefined;
99
+ } | {
100
+ inputs: {
101
+ internalType: string;
102
+ name: string;
103
+ type: string;
104
+ }[];
105
+ name: string;
106
+ outputs: never[];
107
+ stateMutability: string;
108
+ type: string;
109
+ anonymous?: undefined;
110
+ })[];
111
+ static createInterface(): PoolDeployerInterface;
112
+ static connect(address: string, signerOrProvider: Signer | Provider): PoolDeployer;
113
+ }