@gearbox-protocol/sdk 0.0.108 → 1.0.0

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 (1209) hide show
  1. package/README.md +1 -0
  2. package/lib/apy/convexAPY.d.ts +9 -5
  3. package/lib/apy/convexAPY.js +35 -75
  4. package/lib/apy/curveAPY.d.ts +4 -0
  5. package/lib/apy/curveAPY.js +94 -0
  6. package/lib/apy/index.d.ts +6 -0
  7. package/lib/apy/index.js +20 -0
  8. package/lib/apy/lidoAPY.d.ts +1 -1
  9. package/lib/apy/lidoAPY.js +10 -10
  10. package/lib/apy/yearnAPY.d.ts +4 -0
  11. package/lib/apy/yearnAPY.js +90 -0
  12. package/lib/contracts/adapters.js +1 -1
  13. package/lib/contracts/contracts.d.ts +5 -5
  14. package/lib/contracts/contracts.js +66 -71
  15. package/lib/contracts/contractsRegister.js +3 -2
  16. package/lib/contracts/protocols.js +6 -6
  17. package/lib/core/constants.d.ts +3 -2
  18. package/lib/core/constants.js +6 -5
  19. package/lib/core/creditAccount.d.ts +4 -3
  20. package/lib/core/creditAccount.js +19 -12
  21. package/lib/core/creditManager.d.ts +3 -1
  22. package/lib/core/creditManager.js +28 -12
  23. package/lib/core/creditSession.d.ts +1 -1
  24. package/lib/core/creditSession.js +1 -1
  25. package/lib/core/errors.d.ts +1 -1
  26. package/lib/core/eventOrTx.d.ts +2 -2
  27. package/lib/core/eventOrTx.js +1 -1
  28. package/lib/core/events.d.ts +1 -1
  29. package/lib/core/events.js +32 -31
  30. package/lib/core/history.d.ts +2 -2
  31. package/lib/core/pool.js +5 -5
  32. package/lib/core/strategy.d.ts +5 -3
  33. package/lib/core/strategy.js +6 -4
  34. package/lib/core/tokenDistributor.js +1 -1
  35. package/lib/core/transactions.js +22 -22
  36. package/lib/index.d.ts +30 -30
  37. package/lib/index.js +38 -37
  38. package/lib/oracles/oracles.d.ts +5 -6
  39. package/lib/oracles/priceFeeds.d.ts +1 -1
  40. package/lib/oracles/priceFeeds.js +292 -194
  41. package/lib/pathfinder/contracts.js +4 -4
  42. package/lib/pathfinder/curveLP.d.ts +2 -2
  43. package/lib/pathfinder/curveLP.js +4 -4
  44. package/lib/pathfinder/path.d.ts +3 -3
  45. package/lib/pathfinder/path.js +7 -7
  46. package/lib/pathfinder/tradeTypes.d.ts +2 -2
  47. package/lib/pathfinder/yVault.d.ts +3 -3
  48. package/lib/pathfinder/yVault.js +5 -5
  49. package/lib/strategies/convex.js +13 -13
  50. package/lib/strategies/creditFacade.js +6 -6
  51. package/lib/strategies/curve.js +17 -19
  52. package/lib/strategies/lido.d.ts +1 -1
  53. package/lib/strategies/lido.js +3 -3
  54. package/lib/strategies/uniswapV2.js +3 -3
  55. package/lib/strategies/uniswapV3.js +6 -6
  56. package/lib/strategies/yearn.js +11 -7
  57. package/lib/tokens/connectors.js +1 -1
  58. package/lib/tokens/convex.d.ts +5 -2
  59. package/lib/tokens/convex.js +92 -66
  60. package/lib/tokens/curveLP.d.ts +2 -1
  61. package/lib/tokens/curveLP.js +41 -37
  62. package/lib/tokens/gear.d.ts +1 -1
  63. package/lib/tokens/gear.js +6 -6
  64. package/lib/tokens/normal.d.ts +1 -0
  65. package/lib/tokens/normal.js +181 -177
  66. package/lib/tokens/token.d.ts +10 -5
  67. package/lib/tokens/token.js +74 -65
  68. package/lib/tokens/tokenData.d.ts +1 -1
  69. package/lib/tokens/tokenData.js +6 -7
  70. package/lib/tokens/yearn.d.ts +2 -1
  71. package/lib/tokens/yearn.js +30 -26
  72. package/lib/utils/extracter.d.ts +11 -0
  73. package/lib/utils/extracter.js +19 -0
  74. package/lib/utils/formatter.js +19 -12
  75. package/lib/utils/mappers.d.ts +3 -3
  76. package/lib/utils/mappers.js +1 -1
  77. package/lib/utils/multicall.js +2 -2
  78. package/lib/utils/network.js +3 -3
  79. package/lib/utils/price.d.ts +8 -0
  80. package/lib/utils/price.js +26 -0
  81. package/lib/utils/repeater.js +6 -6
  82. package/package.json +30 -23
  83. package/.eslintignore +0 -5
  84. package/.eslintrc.js +0 -52
  85. package/.husky/pre-push +0 -4
  86. package/.idea/gearbox-sdk.iml +0 -12
  87. package/.idea/modules.xml +0 -8
  88. package/.idea/vcs.xml +0 -6
  89. package/.prettierrc +0 -10
  90. package/lib/core/price.d.ts +0 -2
  91. package/lib/core/price.js +0 -14
  92. package/lib/types/@chainlink/contracts/src/v0.6/index.d.ts +0 -2
  93. package/lib/types/@chainlink/contracts/src/v0.6/index.js +0 -2
  94. package/lib/types/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.d.ts +0 -146
  95. package/lib/types/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.js +0 -2
  96. package/lib/types/@chainlink/contracts/src/v0.6/interfaces/index.d.ts +0 -1
  97. package/lib/types/@chainlink/contracts/src/v0.6/interfaces/index.js +0 -2
  98. package/lib/types/contracts/integrations/lido/IstETH.d.ts +0 -154
  99. package/lib/types/contracts/integrations/lido/IstETH.js +0 -2
  100. package/lib/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker.d.ts +0 -50
  101. package/lib/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker.js +0 -2
  102. package/lib/types/contracts/pathfinder/Balances.sol/BalanceOps.d.ts +0 -27
  103. package/lib/types/contracts/pathfinder/Balances.sol/BalanceOps.js +0 -2
  104. package/lib/types/contracts/pathfinder/Balances.sol/index.d.ts +0 -1
  105. package/lib/types/contracts/pathfinder/Balances.sol/index.js +0 -2
  106. package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder.d.ts +0 -269
  107. package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder.js +0 -2
  108. package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/index.d.ts +0 -1
  109. package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/index.js +0 -2
  110. package/lib/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper.d.ts +0 -58
  111. package/lib/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper.js +0 -2
  112. package/lib/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest.d.ts +0 -528
  113. package/lib/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest.js +0 -2
  114. package/lib/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest.d.ts +0 -528
  115. package/lib/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest.js +0 -2
  116. package/lib/types/factories/@chainlink/contracts/src/v0.6/index.d.ts +0 -1
  117. package/lib/types/factories/@chainlink/contracts/src/v0.6/index.js +0 -30
  118. package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface__factory.d.ts +0 -22
  119. package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface__factory.js +0 -133
  120. package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/index.d.ts +0 -1
  121. package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/index.js +0 -8
  122. package/lib/types/factories/contracts/integrations/lido/IstETH__factory.d.ts +0 -35
  123. package/lib/types/factories/contracts/integrations/lido/IstETH__factory.js +0 -224
  124. package/lib/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker__factory.d.ts +0 -18
  125. package/lib/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker__factory.js +0 -40
  126. package/lib/types/factories/contracts/pathfinder/Balances.sol/BalanceOps__factory.d.ts +0 -28
  127. package/lib/types/factories/contracts/pathfinder/Balances.sol/BalanceOps__factory.js +0 -76
  128. package/lib/types/factories/contracts/pathfinder/Balances.sol/index.d.ts +0 -1
  129. package/lib/types/factories/contracts/pathfinder/Balances.sol/index.js +0 -8
  130. package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder__factory.d.ts +0 -144
  131. package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder__factory.js +0 -522
  132. package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/index.d.ts +0 -1
  133. package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/index.js +0 -8
  134. package/lib/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper__factory.d.ts +0 -34
  135. package/lib/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper__factory.js +0 -110
  136. package/lib/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest__factory.d.ts +0 -65
  137. package/lib/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest__factory.js +0 -775
  138. package/lib/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest__factory.d.ts +0 -65
  139. package/lib/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest__factory.js +0 -775
  140. package/lib/types/hardhat.d.ts +0 -2715
  141. package/src/abi/adapters/YearnV2.sol/YearnAdapter.dbg.json +0 -4
  142. package/src/abi/adapters/YearnV2.sol/YearnAdapter.json +0 -455
  143. package/src/abi/core/ACL.sol/ACL.dbg.json +0 -4
  144. package/src/abi/core/ACL.sol/ACL.json +0 -262
  145. package/src/abi/core/ACLTrait.sol/ACLTrait.dbg.json +0 -4
  146. package/src/abi/core/ACLTrait.sol/ACLTrait.json +0 -64
  147. package/src/abi/core/AccountMining.sol/AccountMining.dbg.json +0 -4
  148. package/src/abi/core/AccountMining.sol/AccountMining.json +0 -150
  149. package/src/abi/core/AddressProvider.sol/AddressProvider.dbg.json +0 -4
  150. package/src/abi/core/AddressProvider.sol/AddressProvider.json +0 -496
  151. package/src/abi/core/ContractsRegister.sol/ContractsRegister.dbg.json +0 -4
  152. package/src/abi/core/ContractsRegister.sol/ContractsRegister.json +0 -255
  153. package/src/abi/credit/LeverageActions.sol/LeveragedActions.dbg.json +0 -4
  154. package/src/abi/credit/LeverageActions.sol/LeveragedActions.json +0 -514
  155. package/src/abi/deployer/AdaptersDeployer.sol/AdaptersDeployer.dbg.json +0 -4
  156. package/src/abi/deployer/AdaptersDeployer.sol/AdaptersDeployer.json +0 -160
  157. package/src/abi/deployer/GenesisDeployer.sol/GenesisDeployer.dbg.json +0 -4
  158. package/src/abi/deployer/GenesisDeployer.sol/GenesisDeployer.json +0 -189
  159. package/src/abi/deployer/PoolDeployer.sol/PoolDeployer.dbg.json +0 -4
  160. package/src/abi/deployer/PoolDeployer.sol/PoolDeployer.json +0 -215
  161. package/src/abi/fuzzing/FuzzHarness.sol/FuzzHarness.dbg.json +0 -4
  162. package/src/abi/fuzzing/FuzzHarness.sol/FuzzHarness.json +0 -50
  163. package/src/abi/integrations/yearn/IYVault.sol/IYVault.dbg.json +0 -4
  164. package/src/abi/integrations/yearn/IYVault.sol/IYVault.json +0 -400
  165. package/src/abi/interfaces/IGearToken.sol/IGearToken.dbg.json +0 -4
  166. package/src/abi/interfaces/IGearToken.sol/IGearToken.json +0 -331
  167. package/src/abi/interfaces/IMerkleDistributor.sol/IMerkleDistributor.dbg.json +0 -4
  168. package/src/abi/interfaces/IMerkleDistributor.sol/IMerkleDistributor.json +0 -98
  169. package/src/abi/mocks/core/ACLTraitTest.sol/ACLTraitTest.dbg.json +0 -4
  170. package/src/abi/mocks/core/ACLTraitTest.sol/ACLTraitTest.json +0 -96
  171. package/src/abi/mocks/credit/ExecutorMock.sol/ExecutorMock.dbg.json +0 -4
  172. package/src/abi/mocks/credit/ExecutorMock.sol/ExecutorMock.json +0 -61
  173. package/src/abi/mocks/integrations/CurveMock.sol/CurveMock.dbg.json +0 -4
  174. package/src/abi/mocks/integrations/CurveMock.sol/CurveMock.json +0 -168
  175. package/src/abi/mocks/integrations/YearnMock.sol/YearnMock.dbg.json +0 -4
  176. package/src/abi/mocks/integrations/YearnMock.sol/YearnMock.json +0 -556
  177. package/src/abi/mocks/oracles/ChainlinkPriceFeedMock.sol/ChainlinkPriceFeedMock.dbg.json +0 -4
  178. package/src/abi/mocks/oracles/ChainlinkPriceFeedMock.sol/ChainlinkPriceFeedMock.json +0 -151
  179. package/src/abi/mocks/pool/CreditManagerMockForPoolTest.sol/CreditManagerMockForPoolTest.dbg.json +0 -4
  180. package/src/abi/mocks/pool/CreditManagerMockForPoolTest.sol/CreditManagerMockForPoolTest.json +0 -89
  181. package/src/abi/mocks/tokens/ERC20Blocking.sol/ERC20BlockingMock.dbg.json +0 -4
  182. package/src/abi/mocks/tokens/ERC20Blocking.sol/ERC20BlockingMock.json +0 -387
  183. package/src/abi/mocks/tokens/ERC20Fee.sol/TokenFeeMock.dbg.json +0 -4
  184. package/src/abi/mocks/tokens/ERC20Fee.sol/TokenFeeMock.json +0 -385
  185. package/src/abi/oracles/YearnPriceFeed.sol/YearnPriceFeed.dbg.json +0 -4
  186. package/src/abi/oracles/YearnPriceFeed.sol/YearnPriceFeed.json +0 -321
  187. package/src/abi/support/PathFinder.sol/PathFinder.dbg.json +0 -4
  188. package/src/abi/support/PathFinder.sol/PathFinder.json +0 -189
  189. package/src/abi/tokens/GearNFT.sol/GearBeta.dbg.json +0 -4
  190. package/src/abi/tokens/GearNFT.sol/GearBeta.json +0 -485
  191. package/src/abi/tokens/TokenDistributor.sol/TokenDistributor.dbg.json +0 -4
  192. package/src/abi/tokens/TokenDistributor.sol/TokenDistributor.json +0 -439
  193. package/src/abi/tokens/Vesting.sol/StepVesting.dbg.json +0 -4
  194. package/src/abi/tokens/Vesting.sol/StepVesting.json +0 -254
  195. package/src/apy/convexAPY.ts +0 -250
  196. package/src/apy/lidoAPY.ts +0 -89
  197. package/src/config.ts +0 -2
  198. package/src/contracts/adapters.ts +0 -18
  199. package/src/contracts/contracts.ts +0 -438
  200. package/src/contracts/contractsRegister.ts +0 -67
  201. package/src/contracts/protocols.ts +0 -40
  202. package/src/core/constants.ts +0 -51
  203. package/src/core/creditAccount.ts +0 -152
  204. package/src/core/creditManager.ts +0 -282
  205. package/src/core/creditOperation.ts +0 -9
  206. package/src/core/creditSession.ts +0 -87
  207. package/src/core/errors.ts +0 -70
  208. package/src/core/eventOrTx.ts +0 -97
  209. package/src/core/events.ts +0 -1259
  210. package/src/core/history.ts +0 -55
  211. package/src/core/multicall.ts +0 -6
  212. package/src/core/operations.ts +0 -41
  213. package/src/core/pool.ts +0 -81
  214. package/src/core/price.ts +0 -13
  215. package/src/core/strategy.ts +0 -134
  216. package/src/core/tokenDistributor.ts +0 -14
  217. package/src/core/transactions.ts +0 -492
  218. package/src/index.ts +0 -64
  219. package/src/oracles/oracles.ts +0 -48
  220. package/src/oracles/priceFeeds.ts +0 -546
  221. package/src/pathfinder/contracts.ts +0 -19
  222. package/src/pathfinder/convexLP.ts +0 -37
  223. package/src/pathfinder/curveLP.ts +0 -75
  224. package/src/pathfinder/path.ts +0 -174
  225. package/src/pathfinder/priority.ts +0 -14
  226. package/src/pathfinder/trade.ts +0 -90
  227. package/src/pathfinder/tradeTypes.ts +0 -105
  228. package/src/pathfinder/yVault.ts +0 -90
  229. package/src/payload/creditAccount.ts +0 -7
  230. package/src/payload/creditManager.ts +0 -24
  231. package/src/payload/creditSession.ts +0 -24
  232. package/src/payload/graphPayload.ts +0 -10
  233. package/src/payload/pool.ts +0 -3
  234. package/src/payload/token.ts +0 -5
  235. package/src/strategies/convex.ts +0 -408
  236. package/src/strategies/creditFacade.ts +0 -119
  237. package/src/strategies/curve.ts +0 -470
  238. package/src/strategies/lido.ts +0 -84
  239. package/src/strategies/uniswapV2.ts +0 -109
  240. package/src/strategies/uniswapV3.ts +0 -127
  241. package/src/strategies/yearn.ts +0 -208
  242. package/src/tokens/connectors.ts +0 -8
  243. package/src/tokens/convex.ts +0 -335
  244. package/src/tokens/curveLP.ts +0 -188
  245. package/src/tokens/gear.ts +0 -58
  246. package/src/tokens/normal.ts +0 -809
  247. package/src/tokens/token.ts +0 -238
  248. package/src/tokens/tokenData.ts +0 -87
  249. package/src/tokens/tokenType.ts +0 -12
  250. package/src/tokens/yearn.ts +0 -143
  251. package/src/types/@chainlink/contracts/index.ts +0 -5
  252. package/src/types/@chainlink/contracts/src/index.ts +0 -5
  253. package/src/types/@chainlink/contracts/src/v0.8/index.ts +0 -5
  254. package/src/types/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.ts +0 -228
  255. package/src/types/@chainlink/contracts/src/v0.8/interfaces/index.ts +0 -4
  256. package/src/types/@chainlink/index.ts +0 -5
  257. package/src/types/@openzeppelin/contracts/access/Ownable.ts +0 -175
  258. package/src/types/@openzeppelin/contracts/access/index.ts +0 -4
  259. package/src/types/@openzeppelin/contracts/index.ts +0 -11
  260. package/src/types/@openzeppelin/contracts/security/Pausable.ts +0 -111
  261. package/src/types/@openzeppelin/contracts/security/index.ts +0 -4
  262. package/src/types/@openzeppelin/contracts/token/ERC20/ERC20.ts +0 -444
  263. package/src/types/@openzeppelin/contracts/token/ERC20/IERC20.ts +0 -322
  264. package/src/types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +0 -364
  265. package/src/types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +0 -4
  266. package/src/types/@openzeppelin/contracts/token/ERC20/index.ts +0 -7
  267. package/src/types/@openzeppelin/contracts/token/ERC721/ERC721.ts +0 -578
  268. package/src/types/@openzeppelin/contracts/token/ERC721/IERC721.ts +0 -527
  269. package/src/types/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts +0 -120
  270. package/src/types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +0 -581
  271. package/src/types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +0 -4
  272. package/src/types/@openzeppelin/contracts/token/ERC721/index.ts +0 -8
  273. package/src/types/@openzeppelin/contracts/token/index.ts +0 -7
  274. package/src/types/@openzeppelin/contracts/utils/index.ts +0 -5
  275. package/src/types/@openzeppelin/contracts/utils/introspection/ERC165.ts +0 -102
  276. package/src/types/@openzeppelin/contracts/utils/introspection/IERC165.ts +0 -102
  277. package/src/types/@openzeppelin/contracts/utils/introspection/index.ts +0 -5
  278. package/src/types/@openzeppelin/index.ts +0 -5
  279. package/src/types/common.ts +0 -44
  280. package/src/types/contracts/adapters/AbstractAdapter.ts +0 -174
  281. package/src/types/contracts/adapters/UniversalAdapter.ts +0 -258
  282. package/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter.ts +0 -1079
  283. package/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts +0 -4
  284. package/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter.ts +0 -676
  285. package/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts +0 -4
  286. package/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter.ts +0 -290
  287. package/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts +0 -4
  288. package/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken.ts +0 -393
  289. package/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts +0 -4
  290. package/src/types/contracts/adapters/convex/index.ts +0 -11
  291. package/src/types/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets.ts +0 -1679
  292. package/src/types/contracts/adapters/curve/CurveV1_2.sol/index.ts +0 -4
  293. package/src/types/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets.ts +0 -1685
  294. package/src/types/contracts/adapters/curve/CurveV1_3.sol/index.ts +0 -4
  295. package/src/types/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets.ts +0 -1694
  296. package/src/types/contracts/adapters/curve/CurveV1_4.sol/index.ts +0 -4
  297. package/src/types/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase.ts +0 -1394
  298. package/src/types/contracts/adapters/curve/CurveV1_Base.sol/index.ts +0 -4
  299. package/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit.ts +0 -1394
  300. package/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts +0 -4
  301. package/src/types/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH.ts +0 -1679
  302. package/src/types/contracts/adapters/curve/CurveV1_stETH.sol/index.ts +0 -4
  303. package/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway.ts +0 -1232
  304. package/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts +0 -4
  305. package/src/types/contracts/adapters/curve/index.ts +0 -17
  306. package/src/types/contracts/adapters/index.ts +0 -15
  307. package/src/types/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter.ts +0 -689
  308. package/src/types/contracts/adapters/lido/LidoV1.sol/index.ts +0 -4
  309. package/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway.ts +0 -400
  310. package/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts +0 -4
  311. package/src/types/contracts/adapters/lido/index.ts +0 -7
  312. package/src/types/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter.ts +0 -1575
  313. package/src/types/contracts/adapters/uniswap/UniswapV2.sol/index.ts +0 -4
  314. package/src/types/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter.ts +0 -532
  315. package/src/types/contracts/adapters/uniswap/UniswapV3.sol/index.ts +0 -4
  316. package/src/types/contracts/adapters/uniswap/index.ts +0 -7
  317. package/src/types/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter.ts +0 -744
  318. package/src/types/contracts/adapters/yearn/YearnV2.sol/index.ts +0 -4
  319. package/src/types/contracts/adapters/yearn/index.ts +0 -5
  320. package/src/types/contracts/core/ACL.ts +0 -564
  321. package/src/types/contracts/core/ACLTrait.ts +0 -170
  322. package/src/types/contracts/core/AccountFactory.ts +0 -680
  323. package/src/types/contracts/core/AddressProvider.ts +0 -706
  324. package/src/types/contracts/core/ContractsRegister.ts +0 -456
  325. package/src/types/contracts/core/DataCompressor.ts +0 -625
  326. package/src/types/contracts/core/WETHGateway.ts +0 -263
  327. package/src/types/contracts/core/index.ts +0 -10
  328. package/src/types/contracts/credit/CreditAccount.ts +0 -406
  329. package/src/types/contracts/credit/CreditConfigurator.ts +0 -1297
  330. package/src/types/contracts/credit/CreditFacade.ts +0 -1654
  331. package/src/types/contracts/credit/CreditManager.ts +0 -1834
  332. package/src/types/contracts/credit/index.ts +0 -7
  333. package/src/types/contracts/factories/CreditManagerFactory.ts +0 -539
  334. package/src/types/contracts/factories/GenesisFactory.ts +0 -274
  335. package/src/types/contracts/factories/PoolFactory.ts +0 -350
  336. package/src/types/contracts/factories/index.ts +0 -6
  337. package/src/types/contracts/index.ts +0 -29
  338. package/src/types/contracts/integrations/convex/IBaseRewardPool.ts +0 -856
  339. package/src/types/contracts/integrations/convex/IBooster.ts +0 -407
  340. package/src/types/contracts/integrations/convex/IClaimZap.ts +0 -183
  341. package/src/types/contracts/integrations/convex/IConvexToken.ts +0 -407
  342. package/src/types/contracts/integrations/convex/IRewards.sol/IBasicRewards.ts +0 -225
  343. package/src/types/contracts/integrations/convex/IRewards.sol/IRewards.ts +0 -395
  344. package/src/types/contracts/integrations/convex/IRewards.sol/index.ts +0 -5
  345. package/src/types/contracts/integrations/convex/Interfaces.sol/ICrvDeposit.ts +0 -128
  346. package/src/types/contracts/integrations/convex/Interfaces.sol/ICurveGauge.ts +0 -242
  347. package/src/types/contracts/integrations/convex/Interfaces.sol/ICurveVoteEscrow.ts +0 -227
  348. package/src/types/contracts/integrations/convex/Interfaces.sol/IDeposit.ts +0 -371
  349. package/src/types/contracts/integrations/convex/Interfaces.sol/IFeeDistro.ts +0 -104
  350. package/src/types/contracts/integrations/convex/Interfaces.sol/IMinter.ts +0 -95
  351. package/src/types/contracts/integrations/convex/Interfaces.sol/IPools.ts +0 -290
  352. package/src/types/contracts/integrations/convex/Interfaces.sol/IRegistry.ts +0 -189
  353. package/src/types/contracts/integrations/convex/Interfaces.sol/IRewardFactory.ts +0 -310
  354. package/src/types/contracts/integrations/convex/Interfaces.sol/IRewards.ts +0 -395
  355. package/src/types/contracts/integrations/convex/Interfaces.sol/IStaker.ts +0 -652
  356. package/src/types/contracts/integrations/convex/Interfaces.sol/IStash.ts +0 -209
  357. package/src/types/contracts/integrations/convex/Interfaces.sol/IStashFactory.ts +0 -120
  358. package/src/types/contracts/integrations/convex/Interfaces.sol/ITokenFactory.ts +0 -104
  359. package/src/types/contracts/integrations/convex/Interfaces.sol/ITokenMinter.ts +0 -143
  360. package/src/types/contracts/integrations/convex/Interfaces.sol/IVestedEscrow.ts +0 -107
  361. package/src/types/contracts/integrations/convex/Interfaces.sol/IVoting.ts +0 -220
  362. package/src/types/contracts/integrations/convex/Interfaces.sol/IWalletChecker.ts +0 -84
  363. package/src/types/contracts/integrations/convex/Interfaces.sol/index.ts +0 -21
  364. package/src/types/contracts/integrations/convex/index.ts +0 -11
  365. package/src/types/contracts/integrations/curve/ICRVToken.ts +0 -422
  366. package/src/types/contracts/integrations/curve/ICurvePool.ts +0 -894
  367. package/src/types/contracts/integrations/curve/ICurvePoolStETH.ts +0 -772
  368. package/src/types/contracts/integrations/curve/ICurvePool_2.sol/ICurvePool2Assets.ts +0 -1179
  369. package/src/types/contracts/integrations/curve/ICurvePool_2.sol/index.ts +0 -4
  370. package/src/types/contracts/integrations/curve/ICurvePool_3.sol/ICurvePool3Assets.ts +0 -1185
  371. package/src/types/contracts/integrations/curve/ICurvePool_3.sol/index.ts +0 -4
  372. package/src/types/contracts/integrations/curve/ICurvePool_4.sol/ICurvePool4Assets.ts +0 -1194
  373. package/src/types/contracts/integrations/curve/ICurvePool_4.sol/index.ts +0 -4
  374. package/src/types/contracts/integrations/curve/ICurveRegistry.ts +0 -148
  375. package/src/types/contracts/integrations/curve/index.ts +0 -13
  376. package/src/types/contracts/integrations/index.ts +0 -13
  377. package/src/types/contracts/integrations/lido/ILidoOracle.ts +0 -115
  378. package/src/types/contracts/integrations/lido/IstETH.sol/IstETH.ts +0 -534
  379. package/src/types/contracts/integrations/lido/IstETH.sol/IstETHGetters.ts +0 -507
  380. package/src/types/contracts/integrations/lido/IstETH.sol/index.ts +0 -5
  381. package/src/types/contracts/integrations/lido/index.ts +0 -6
  382. package/src/types/contracts/integrations/uniswap/IQuoter.ts +0 -263
  383. package/src/types/contracts/integrations/uniswap/IUniswapV2Router01.ts +0 -1128
  384. package/src/types/contracts/integrations/uniswap/IUniswapV2Router02.ts +0 -1446
  385. package/src/types/contracts/integrations/uniswap/IUniswapV3.sol/ISwapRouter.ts +0 -318
  386. package/src/types/contracts/integrations/uniswap/IUniswapV3.sol/index.ts +0 -4
  387. package/src/types/contracts/integrations/uniswap/IUniswapV3SwapCallback.ts +0 -117
  388. package/src/types/contracts/integrations/uniswap/index.ts +0 -9
  389. package/src/types/contracts/integrations/yearn/IYVault.ts +0 -640
  390. package/src/types/contracts/integrations/yearn/index.ts +0 -4
  391. package/src/types/contracts/interfaces/IACL.sol/IACL.ts +0 -261
  392. package/src/types/contracts/interfaces/IACL.sol/IACLEvents.ts +0 -135
  393. package/src/types/contracts/interfaces/IACL.sol/index.ts +0 -5
  394. package/src/types/contracts/interfaces/IAccountFactory.sol/IAccountFactory.ts +0 -396
  395. package/src/types/contracts/interfaces/IAccountFactory.sol/IAccountFactoryEvents.ts +0 -158
  396. package/src/types/contracts/interfaces/IAccountFactory.sol/IAccountFactoryGetters.ts +0 -198
  397. package/src/types/contracts/interfaces/IAccountFactory.sol/index.ts +0 -6
  398. package/src/types/contracts/interfaces/IAddressProvider.sol/IAddressProvider.ts +0 -290
  399. package/src/types/contracts/interfaces/IAddressProvider.sol/IAddressProviderEvents.ts +0 -79
  400. package/src/types/contracts/interfaces/IAddressProvider.sol/index.ts +0 -5
  401. package/src/types/contracts/interfaces/IContractsRegister.sol/IContractsRegister.ts +0 -305
  402. package/src/types/contracts/interfaces/IContractsRegister.sol/IContractsRegisterEvents.ts +0 -89
  403. package/src/types/contracts/interfaces/IContractsRegister.sol/index.ts +0 -5
  404. package/src/types/contracts/interfaces/ICreditAccount.sol/ICrediAccountExceptions.ts +0 -55
  405. package/src/types/contracts/interfaces/ICreditAccount.sol/ICreditAccount.ts +0 -406
  406. package/src/types/contracts/interfaces/ICreditAccount.sol/index.ts +0 -5
  407. package/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator.ts +0 -666
  408. package/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents.ts +0 -384
  409. package/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorExceptions.ts +0 -56
  410. package/src/types/contracts/interfaces/ICreditConfigurator.sol/index.ts +0 -6
  411. package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacade.ts +0 -1236
  412. package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeEvents.ts +0 -358
  413. package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions.ts +0 -55
  414. package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended.ts +0 -143
  415. package/src/types/contracts/interfaces/ICreditFacade.sol/index.ts +0 -7
  416. package/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2.ts +0 -1534
  417. package/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Events.ts +0 -98
  418. package/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions.ts +0 -55
  419. package/src/types/contracts/interfaces/ICreditManagerV2.sol/index.ts +0 -6
  420. package/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressor.ts +0 -516
  421. package/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressorExceptions.ts +0 -55
  422. package/src/types/contracts/interfaces/IDataCompressor.sol/index.ts +0 -5
  423. package/src/types/contracts/interfaces/IDegenNFT.sol/IDegenNFT.ts +0 -209
  424. package/src/types/contracts/interfaces/IDegenNFT.sol/IDegenNFTExceptions.ts +0 -55
  425. package/src/types/contracts/interfaces/IDegenNFT.sol/index.ts +0 -5
  426. package/src/types/contracts/interfaces/IGearToken.ts +0 -560
  427. package/src/types/contracts/interfaces/IInterestRateModel.ts +0 -123
  428. package/src/types/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed.ts +0 -379
  429. package/src/types/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedEvents.ts +0 -80
  430. package/src/types/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions.ts +0 -55
  431. package/src/types/contracts/interfaces/ILPPriceFeed.sol/index.ts +0 -6
  432. package/src/types/contracts/interfaces/IMerkleDistributor.ts +0 -200
  433. package/src/types/contracts/interfaces/IPhantomERC20.ts +0 -381
  434. package/src/types/contracts/interfaces/IPoolService.sol/IPoolService.ts +0 -901
  435. package/src/types/contracts/interfaces/IPoolService.sol/IPoolServiceEvents.ts +0 -277
  436. package/src/types/contracts/interfaces/IPoolService.sol/index.ts +0 -5
  437. package/src/types/contracts/interfaces/IPriceFeedAddress.ts +0 -177
  438. package/src/types/contracts/interfaces/IPriceFeedType.ts +0 -108
  439. package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2.ts +0 -387
  440. package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Events.ts +0 -79
  441. package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Exceptions.ts +0 -55
  442. package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Ext.ts +0 -429
  443. package/src/types/contracts/interfaces/IPriceOracle.sol/index.ts +0 -7
  444. package/src/types/contracts/interfaces/IVersion.ts +0 -81
  445. package/src/types/contracts/interfaces/IWETHGateway.ts +0 -201
  446. package/src/types/contracts/interfaces/V1/ICreditFilter.ts +0 -1288
  447. package/src/types/contracts/interfaces/V1/ICreditManager.ts +0 -1194
  448. package/src/types/contracts/interfaces/V1/IPriceOracle.sol/IPriceOracleV2.ts +0 -220
  449. package/src/types/contracts/interfaces/V1/IPriceOracle.sol/index.ts +0 -4
  450. package/src/types/contracts/interfaces/V1/index.ts +0 -7
  451. package/src/types/contracts/interfaces/adapters/IAdapter.sol/IAdapter.ts +0 -174
  452. package/src/types/contracts/interfaces/adapters/IAdapter.sol/IAdapterExceptions.ts +0 -55
  453. package/src/types/contracts/interfaces/adapters/IAdapter.sol/index.ts +0 -5
  454. package/src/types/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapter.ts +0 -258
  455. package/src/types/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapterExceptions.ts +0 -55
  456. package/src/types/contracts/interfaces/adapters/IUniversalAdapter.sol/index.ts +0 -5
  457. package/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter.ts +0 -1088
  458. package/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapterErrors.ts +0 -56
  459. package/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/index.ts +0 -5
  460. package/src/types/contracts/interfaces/adapters/convex/IConvexV1BoosterAdapter.ts +0 -553
  461. package/src/types/contracts/interfaces/adapters/convex/index.ts +0 -6
  462. package/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter.ts +0 -1397
  463. package/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1AdapterExceptions.ts +0 -55
  464. package/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/index.ts +0 -5
  465. package/src/types/contracts/interfaces/adapters/curve/index.ts +0 -5
  466. package/src/types/contracts/interfaces/adapters/index.ts +0 -15
  467. package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter.ts +0 -486
  468. package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterEvents.ts +0 -69
  469. package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterExceptions.ts +0 -55
  470. package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/index.ts +0 -6
  471. package/src/types/contracts/interfaces/adapters/lido/index.ts +0 -5
  472. package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV2Adapter.ts +0 -1595
  473. package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3Adapter.ts +0 -532
  474. package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3AdapterExceptions.ts +0 -55
  475. package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/index.ts +0 -5
  476. package/src/types/contracts/interfaces/adapters/uniswap/index.ts +0 -6
  477. package/src/types/contracts/interfaces/external/IWETH.ts +0 -159
  478. package/src/types/contracts/interfaces/external/index.ts +0 -4
  479. package/src/types/contracts/interfaces/index.ts +0 -43
  480. package/src/types/contracts/libraries/Errors.ts +0 -894
  481. package/src/types/contracts/libraries/index.ts +0 -4
  482. package/src/types/contracts/oracles/LPPriceFeed.ts +0 -451
  483. package/src/types/contracts/oracles/PriceFeedChecker.ts +0 -55
  484. package/src/types/contracts/oracles/PriceOracle.ts +0 -535
  485. package/src/types/contracts/oracles/ZeroPriceFeed.ts +0 -244
  486. package/src/types/contracts/oracles/curve/AbstractCurveLPPriceFeed.ts +0 -485
  487. package/src/types/contracts/oracles/curve/CurveLP2PriceFeed.ts +0 -519
  488. package/src/types/contracts/oracles/curve/CurveLP3PriceFeed.ts +0 -536
  489. package/src/types/contracts/oracles/curve/CurveLP4PriceFeed.ts +0 -553
  490. package/src/types/contracts/oracles/curve/index.ts +0 -7
  491. package/src/types/contracts/oracles/index.ts +0 -11
  492. package/src/types/contracts/oracles/yearn/YearnPriceFeed.ts +0 -499
  493. package/src/types/contracts/oracles/yearn/index.ts +0 -4
  494. package/src/types/contracts/pathfinder/ConvexPathFinder.ts +0 -211
  495. package/src/types/contracts/pathfinder/CurveLPPathFinder.ts +0 -335
  496. package/src/types/contracts/pathfinder/CurvePathFinder.ts +0 -514
  497. package/src/types/contracts/pathfinder/ISwapper.ts +0 -208
  498. package/src/types/contracts/pathfinder/NormalTokenPathFinder.ts +0 -526
  499. package/src/types/contracts/pathfinder/SwapPathFinder.ts +0 -424
  500. package/src/types/contracts/pathfinder/UniswapV2PathFinder.ts +0 -422
  501. package/src/types/contracts/pathfinder/UniswapV3PathFinder.ts +0 -559
  502. package/src/types/contracts/pathfinder/YearnPathFinder.ts +0 -200
  503. package/src/types/contracts/pathfinder/data/Balances.sol/BalanceOps.ts +0 -55
  504. package/src/types/contracts/pathfinder/data/Balances.sol/index.ts +0 -4
  505. package/src/types/contracts/pathfinder/data/index.ts +0 -5
  506. package/src/types/contracts/pathfinder/index.ts +0 -14
  507. package/src/types/contracts/pool/LinearInterestRateModel.ts +0 -276
  508. package/src/types/contracts/pool/PoolService.ts +0 -1314
  509. package/src/types/contracts/pool/index.ts +0 -5
  510. package/src/types/contracts/support/ContractUpgrader.ts +0 -284
  511. package/src/types/contracts/support/MerkleDistributor.ts +0 -200
  512. package/src/types/contracts/support/MultiCall.sol/Multicall2.ts +0 -451
  513. package/src/types/contracts/support/MultiCall.sol/index.ts +0 -4
  514. package/src/types/contracts/support/PauseMulticall.ts +0 -286
  515. package/src/types/contracts/support/index.ts +0 -8
  516. package/src/types/contracts/test/Playground.t.sol/PlaygroundTest.ts +0 -425
  517. package/src/types/contracts/test/Playground.t.sol/index.ts +0 -4
  518. package/src/types/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest.ts +0 -1196
  519. package/src/types/contracts/test/adapters/AbstractAdapter.t.sol/index.ts +0 -4
  520. package/src/types/contracts/test/adapters/AdapterTestHelper.ts +0 -814
  521. package/src/types/contracts/test/adapters/ConvexAdapterHelper.ts +0 -1351
  522. package/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest.ts +0 -1701
  523. package/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts +0 -4
  524. package/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest.ts +0 -1583
  525. package/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts +0 -4
  526. package/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest.ts +0 -1551
  527. package/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts +0 -4
  528. package/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest.ts +0 -1021
  529. package/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts +0 -4
  530. package/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest.ts +0 -1325
  531. package/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts +0 -4
  532. package/src/types/contracts/test/adapters/CurveV1AdapterHelper.ts +0 -814
  533. package/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest.ts +0 -1080
  534. package/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts +0 -4
  535. package/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest.ts +0 -1080
  536. package/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts +0 -4
  537. package/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest.ts +0 -1110
  538. package/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts +0 -4
  539. package/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest.ts +0 -1100
  540. package/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts +0 -4
  541. package/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest.ts +0 -1146
  542. package/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts +0 -4
  543. package/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest.ts +0 -1210
  544. package/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts +0 -4
  545. package/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest.ts +0 -1124
  546. package/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts +0 -4
  547. package/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest.ts +0 -1408
  548. package/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts +0 -4
  549. package/src/types/contracts/test/adapters/index.ts +0 -34
  550. package/src/types/contracts/test/core/ACL.t.sol/ACLTest.ts +0 -659
  551. package/src/types/contracts/test/core/ACL.t.sol/index.ts +0 -4
  552. package/src/types/contracts/test/core/AddressProvider.t.sol/AddressProviderTest.ts +0 -783
  553. package/src/types/contracts/test/core/AddressProvider.t.sol/index.ts +0 -4
  554. package/src/types/contracts/test/core/index.ts +0 -7
  555. package/src/types/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest.ts +0 -1958
  556. package/src/types/contracts/test/credit/CreditConfigurator.t.sol/index.ts +0 -4
  557. package/src/types/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest.ts +0 -2860
  558. package/src/types/contracts/test/credit/CreditFacade.t.sol/index.ts +0 -4
  559. package/src/types/contracts/test/credit/CreditManager.t.sol/CreditManagerTest.ts +0 -2480
  560. package/src/types/contracts/test/credit/CreditManager.t.sol/index.ts +0 -4
  561. package/src/types/contracts/test/credit/index.ts +0 -9
  562. package/src/types/contracts/test/index.ts +0 -31
  563. package/src/types/contracts/test/lib/cheatCodes.sol/CheatCodes.ts +0 -926
  564. package/src/types/contracts/test/lib/cheatCodes.sol/index.ts +0 -4
  565. package/src/types/contracts/test/lib/constants.sol/Roles.ts +0 -375
  566. package/src/types/contracts/test/lib/constants.sol/index.ts +0 -4
  567. package/src/types/contracts/test/lib/index.ts +0 -9
  568. package/src/types/contracts/test/lib/test.sol/DSTest.ts +0 -375
  569. package/src/types/contracts/test/lib/test.sol/index.ts +0 -4
  570. package/src/types/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite.ts +0 -346
  571. package/src/types/contracts/test/mainnet/MainnetTokens.sol/index.ts +0 -4
  572. package/src/types/contracts/test/mainnet/TotalValueCalculator.ts +0 -104
  573. package/src/types/contracts/test/mainnet/index.ts +0 -6
  574. package/src/types/contracts/test/mocks/adapters/AdapterMock.ts +0 -458
  575. package/src/types/contracts/test/mocks/adapters/TargetContractMock.ts +0 -81
  576. package/src/types/contracts/test/mocks/adapters/index.ts +0 -5
  577. package/src/types/contracts/test/mocks/core/ACLTraitTest.ts +0 -238
  578. package/src/types/contracts/test/mocks/core/AddressProviderACLMock.ts +0 -186
  579. package/src/types/contracts/test/mocks/core/index.ts +0 -5
  580. package/src/types/contracts/test/mocks/credit/CreditManagerInternal.ts +0 -2197
  581. package/src/types/contracts/test/mocks/credit/index.ts +0 -4
  582. package/src/types/contracts/test/mocks/dao/TreasuryMock.ts +0 -69
  583. package/src/types/contracts/test/mocks/dao/index.ts +0 -4
  584. package/src/types/contracts/test/mocks/index.ts +0 -21
  585. package/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock.ts +0 -1069
  586. package/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents.ts +0 -140
  587. package/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts +0 -5
  588. package/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock.ts +0 -1002
  589. package/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents.ts +0 -122
  590. package/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts +0 -5
  591. package/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock.ts +0 -209
  592. package/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/IBasicRewards.ts +0 -225
  593. package/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts +0 -5
  594. package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock.ts +0 -731
  595. package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents.ts +0 -141
  596. package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper.ts +0 -203
  597. package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts +0 -6
  598. package/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock.ts +0 -425
  599. package/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts +0 -4
  600. package/src/types/contracts/test/mocks/integrations/CurveV1MetapoolMock.ts +0 -1101
  601. package/src/types/contracts/test/mocks/integrations/CurveV1Mock.ts +0 -1124
  602. package/src/types/contracts/test/mocks/integrations/CurveV1Mock_2Assets.ts +0 -1409
  603. package/src/types/contracts/test/mocks/integrations/CurveV1Mock_3Assets.ts +0 -1415
  604. package/src/types/contracts/test/mocks/integrations/CurveV1Mock_4Assets.ts +0 -1424
  605. package/src/types/contracts/test/mocks/integrations/CurveV1StETHMock.ts +0 -880
  606. package/src/types/contracts/test/mocks/integrations/LidoMock.sol/ILidoMockEvents.ts +0 -82
  607. package/src/types/contracts/test/mocks/integrations/LidoMock.sol/LidoMock.ts +0 -747
  608. package/src/types/contracts/test/mocks/integrations/LidoMock.sol/index.ts +0 -5
  609. package/src/types/contracts/test/mocks/integrations/UniswapV2Mock.ts +0 -1553
  610. package/src/types/contracts/test/mocks/integrations/UniswapV3Mock.ts +0 -953
  611. package/src/types/contracts/test/mocks/integrations/YearnV2Mock.ts +0 -898
  612. package/src/types/contracts/test/mocks/integrations/index.ts +0 -24
  613. package/src/types/contracts/test/mocks/libraries/PercentageMathTest.ts +0 -143
  614. package/src/types/contracts/test/mocks/libraries/WadRayMathTest.ts +0 -315
  615. package/src/types/contracts/test/mocks/libraries/index.ts +0 -5
  616. package/src/types/contracts/test/mocks/oracles/LPPriceFeedMock.ts +0 -486
  617. package/src/types/contracts/test/mocks/oracles/PriceFeedMock.ts +0 -368
  618. package/src/types/contracts/test/mocks/oracles/index.ts +0 -5
  619. package/src/types/contracts/test/mocks/pool/CreditManagerMockForPoolTest.ts +0 -285
  620. package/src/types/contracts/test/mocks/pool/PoolServiceMock.ts +0 -1401
  621. package/src/types/contracts/test/mocks/pool/TestPoolService.ts +0 -1439
  622. package/src/types/contracts/test/mocks/pool/index.ts +0 -6
  623. package/src/types/contracts/test/mocks/token/CERC20Mock.ts +0 -635
  624. package/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse.ts +0 -544
  625. package/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert.ts +0 -544
  626. package/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts +0 -5
  627. package/src/types/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock.ts +0 -620
  628. package/src/types/contracts/test/mocks/token/ERC20Blocking.sol/index.ts +0 -4
  629. package/src/types/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock.ts +0 -595
  630. package/src/types/contracts/test/mocks/token/ERC20Fee.sol/index.ts +0 -4
  631. package/src/types/contracts/test/mocks/token/ERC20Mock.ts +0 -695
  632. package/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20.ts +0 -105
  633. package/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts +0 -4
  634. package/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock.ts +0 -118
  635. package/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/IERC721Receiver.ts +0 -120
  636. package/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts +0 -5
  637. package/src/types/contracts/test/mocks/token/StETHMock.ts +0 -618
  638. package/src/types/contracts/test/mocks/token/WETHMock.ts +0 -488
  639. package/src/types/contracts/test/mocks/token/index.ts +0 -17
  640. package/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest.ts +0 -749
  641. package/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts +0 -4
  642. package/src/types/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest.ts +0 -617
  643. package/src/types/contracts/test/oracles/LPPriceFeed.t.sol/index.ts +0 -4
  644. package/src/types/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest.ts +0 -758
  645. package/src/types/contracts/test/oracles/PriceOracle.t.sol/index.ts +0 -4
  646. package/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest.ts +0 -595
  647. package/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts +0 -4
  648. package/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest.ts +0 -503
  649. package/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts +0 -4
  650. package/src/types/contracts/test/oracles/index.ts +0 -13
  651. package/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest.ts +0 -897
  652. package/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts +0 -4
  653. package/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest.ts +0 -1058
  654. package/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts +0 -4
  655. package/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest.ts +0 -1243
  656. package/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts +0 -4
  657. package/src/types/contracts/test/pathfinder/PathFinderTestHelper.ts +0 -815
  658. package/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest.ts +0 -1328
  659. package/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts +0 -4
  660. package/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest.ts +0 -1108
  661. package/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts +0 -4
  662. package/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest.ts +0 -1142
  663. package/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts +0 -4
  664. package/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest.ts +0 -927
  665. package/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts +0 -4
  666. package/src/types/contracts/test/pathfinder/index.ts +0 -18
  667. package/src/types/contracts/test/pool/PoolService.t.sol/PoolServiceTest.ts +0 -1671
  668. package/src/types/contracts/test/pool/PoolService.t.sol/index.ts +0 -4
  669. package/src/types/contracts/test/pool/index.ts +0 -5
  670. package/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable.ts +0 -81
  671. package/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts +0 -4
  672. package/src/types/contracts/test/sigp/DummyMulticallTarget.ts +0 -175
  673. package/src/types/contracts/test/sigp/FlashLoanAttacker2.ts +0 -240
  674. package/src/types/contracts/test/sigp/Interfaces.sol/ICrvDeposit.ts +0 -128
  675. package/src/types/contracts/test/sigp/Interfaces.sol/ICurveGauge.ts +0 -242
  676. package/src/types/contracts/test/sigp/Interfaces.sol/ICurveVoteEscrow.ts +0 -227
  677. package/src/types/contracts/test/sigp/Interfaces.sol/IDeposit.ts +0 -371
  678. package/src/types/contracts/test/sigp/Interfaces.sol/IFeeDistro.ts +0 -104
  679. package/src/types/contracts/test/sigp/Interfaces.sol/IMinter.ts +0 -95
  680. package/src/types/contracts/test/sigp/Interfaces.sol/IPools.ts +0 -290
  681. package/src/types/contracts/test/sigp/Interfaces.sol/IRegistry.ts +0 -189
  682. package/src/types/contracts/test/sigp/Interfaces.sol/IRewardFactory.ts +0 -310
  683. package/src/types/contracts/test/sigp/Interfaces.sol/IRewards.ts +0 -395
  684. package/src/types/contracts/test/sigp/Interfaces.sol/IStaker.ts +0 -652
  685. package/src/types/contracts/test/sigp/Interfaces.sol/IStash.ts +0 -209
  686. package/src/types/contracts/test/sigp/Interfaces.sol/IStashFactory.ts +0 -120
  687. package/src/types/contracts/test/sigp/Interfaces.sol/ITokenFactory.ts +0 -104
  688. package/src/types/contracts/test/sigp/Interfaces.sol/ITokenMinter.ts +0 -143
  689. package/src/types/contracts/test/sigp/Interfaces.sol/IVestedEscrow.ts +0 -107
  690. package/src/types/contracts/test/sigp/Interfaces.sol/IVoting.ts +0 -220
  691. package/src/types/contracts/test/sigp/Interfaces.sol/IWalletChecker.ts +0 -84
  692. package/src/types/contracts/test/sigp/Interfaces.sol/index.ts +0 -21
  693. package/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock.ts +0 -1069
  694. package/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts +0 -4
  695. package/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock.ts +0 -1002
  696. package/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts +0 -4
  697. package/src/types/contracts/test/sigp/NewCreditConfigurator.ts +0 -1262
  698. package/src/types/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper.ts +0 -326
  699. package/src/types/contracts/test/sigp/UniswapHelper.sol/index.ts +0 -4
  700. package/src/types/contracts/test/sigp/index.ts +0 -20
  701. package/src/types/contracts/test/sigp/interfaces/ILockedCvx.ts +0 -832
  702. package/src/types/contracts/test/sigp/interfaces/index.ts +0 -4
  703. package/src/types/contracts/test/sigp/stETHMock.sol/StETHMockERC20.ts +0 -725
  704. package/src/types/contracts/test/sigp/stETHMock.sol/index.ts +0 -4
  705. package/src/types/contracts/test/suites/BalanceHelper.ts +0 -375
  706. package/src/types/contracts/test/suites/BaseCreditTestSuite.ts +0 -649
  707. package/src/types/contracts/test/suites/CreditFacadeHelper.ts +0 -472
  708. package/src/types/contracts/test/suites/CreditFacadeTestSuite.ts +0 -821
  709. package/src/types/contracts/test/suites/CreditManagerTestSuite.ts +0 -748
  710. package/src/types/contracts/test/suites/PoolServiceTestSuite.ts +0 -209
  711. package/src/types/contracts/test/suites/TokensTestSuite.ts +0 -980
  712. package/src/types/contracts/test/suites/index.ts +0 -10
  713. package/src/types/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest.ts +0 -551
  714. package/src/types/contracts/test/support/PauseMulticall.t.sol/index.ts +0 -4
  715. package/src/types/contracts/test/support/index.ts +0 -5
  716. package/src/types/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest.ts +0 -970
  717. package/src/types/contracts/test/tokens/DegenNFT.t.sol/index.ts +0 -4
  718. package/src/types/contracts/test/tokens/index.ts +0 -5
  719. package/src/types/contracts/tokens/DegenNFT.ts +0 -967
  720. package/src/types/contracts/tokens/DieselToken.ts +0 -618
  721. package/src/types/contracts/tokens/GearToken.ts +0 -994
  722. package/src/types/contracts/tokens/PhantomERC20.ts +0 -379
  723. package/src/types/contracts/tokens/index.ts +0 -7
  724. package/src/types/factories/@chainlink/contracts/index.ts +0 -4
  725. package/src/types/factories/@chainlink/contracts/src/index.ts +0 -4
  726. package/src/types/factories/@chainlink/contracts/src/v0.8/index.ts +0 -4
  727. package/src/types/factories/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface__factory.ts +0 -141
  728. package/src/types/factories/@chainlink/contracts/src/v0.8/interfaces/index.ts +0 -4
  729. package/src/types/factories/@chainlink/index.ts +0 -4
  730. package/src/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +0 -78
  731. package/src/types/factories/@openzeppelin/contracts/access/index.ts +0 -4
  732. package/src/types/factories/@openzeppelin/contracts/index.ts +0 -7
  733. package/src/types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +0 -65
  734. package/src/types/factories/@openzeppelin/contracts/security/index.ts +0 -4
  735. package/src/types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +0 -349
  736. package/src/types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +0 -206
  737. package/src/types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +0 -248
  738. package/src/types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +0 -4
  739. package/src/types/factories/@openzeppelin/contracts/token/ERC20/index.ts +0 -6
  740. package/src/types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +0 -409
  741. package/src/types/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts +0 -60
  742. package/src/types/factories/@openzeppelin/contracts/token/ERC721/IERC721__factory.ts +0 -311
  743. package/src/types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +0 -356
  744. package/src/types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +0 -4
  745. package/src/types/factories/@openzeppelin/contracts/token/ERC721/index.ts +0 -7
  746. package/src/types/factories/@openzeppelin/contracts/token/index.ts +0 -5
  747. package/src/types/factories/@openzeppelin/contracts/utils/index.ts +0 -4
  748. package/src/types/factories/@openzeppelin/contracts/utils/introspection/ERC165__factory.ts +0 -42
  749. package/src/types/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts +0 -45
  750. package/src/types/factories/@openzeppelin/contracts/utils/introspection/index.ts +0 -5
  751. package/src/types/factories/@openzeppelin/index.ts +0 -4
  752. package/src/types/factories/contracts/adapters/AbstractAdapter__factory.ts +0 -107
  753. package/src/types/factories/contracts/adapters/UniversalAdapter__factory.ts +0 -230
  754. package/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter__factory.ts +0 -806
  755. package/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts +0 -4
  756. package/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter__factory.ts +0 -533
  757. package/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts +0 -4
  758. package/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter__factory.ts +0 -254
  759. package/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts +0 -4
  760. package/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken__factory.ts +0 -338
  761. package/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts +0 -4
  762. package/src/types/factories/contracts/adapters/convex/index.ts +0 -7
  763. package/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets__factory.ts +0 -1137
  764. package/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/index.ts +0 -4
  765. package/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets__factory.ts +0 -1137
  766. package/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/index.ts +0 -4
  767. package/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets__factory.ts +0 -1137
  768. package/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/index.ts +0 -4
  769. package/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase__factory.ts +0 -1003
  770. package/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/index.ts +0 -4
  771. package/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit__factory.ts +0 -998
  772. package/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts +0 -4
  773. package/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH__factory.ts +0 -1124
  774. package/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/index.ts +0 -4
  775. package/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway__factory.ts +0 -855
  776. package/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts +0 -4
  777. package/src/types/factories/contracts/adapters/curve/index.ts +0 -10
  778. package/src/types/factories/contracts/adapters/index.ts +0 -10
  779. package/src/types/factories/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter__factory.ts +0 -558
  780. package/src/types/factories/contracts/adapters/lido/LidoV1.sol/index.ts +0 -4
  781. package/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway__factory.ts +0 -336
  782. package/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts +0 -4
  783. package/src/types/factories/contracts/adapters/lido/index.ts +0 -5
  784. package/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter__factory.ts +0 -1152
  785. package/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/index.ts +0 -4
  786. package/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter__factory.ts +0 -473
  787. package/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/index.ts +0 -4
  788. package/src/types/factories/contracts/adapters/uniswap/index.ts +0 -5
  789. package/src/types/factories/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter__factory.ts +0 -556
  790. package/src/types/factories/contracts/adapters/yearn/YearnV2.sol/index.ts +0 -4
  791. package/src/types/factories/contracts/adapters/yearn/index.ts +0 -4
  792. package/src/types/factories/contracts/core/ACLTrait__factory.ts +0 -107
  793. package/src/types/factories/contracts/core/ACL__factory.ts +0 -320
  794. package/src/types/factories/contracts/core/AccountFactory__factory.ts +0 -479
  795. package/src/types/factories/contracts/core/AddressProvider__factory.ts +0 -404
  796. package/src/types/factories/contracts/core/ContractsRegister__factory.ts +0 -357
  797. package/src/types/factories/contracts/core/DataCompressor__factory.ts +0 -910
  798. package/src/types/factories/contracts/core/WETHGateway__factory.ts +0 -191
  799. package/src/types/factories/contracts/core/index.ts +0 -10
  800. package/src/types/factories/contracts/credit/CreditAccount__factory.ts +0 -263
  801. package/src/types/factories/contracts/credit/CreditConfigurator__factory.ts +0 -931
  802. package/src/types/factories/contracts/credit/CreditFacade__factory.ts +0 -1254
  803. package/src/types/factories/contracts/credit/CreditManager__factory.ts +0 -1180
  804. package/src/types/factories/contracts/credit/index.ts +0 -7
  805. package/src/types/factories/contracts/factories/CreditManagerFactory__factory.ts +0 -392
  806. package/src/types/factories/contracts/factories/GenesisFactory__factory.ts +0 -202
  807. package/src/types/factories/contracts/factories/PoolFactory__factory.ts +0 -248
  808. package/src/types/factories/contracts/factories/index.ts +0 -6
  809. package/src/types/factories/contracts/index.ts +0 -16
  810. package/src/types/factories/contracts/integrations/convex/IBaseRewardPool__factory.ts +0 -541
  811. package/src/types/factories/contracts/integrations/convex/IBooster__factory.ts +0 -277
  812. package/src/types/factories/contracts/integrations/convex/IClaimZap__factory.ts +0 -105
  813. package/src/types/factories/contracts/integrations/convex/IConvexToken__factory.ts +0 -274
  814. package/src/types/factories/contracts/integrations/convex/IRewards.sol/IBasicRewards__factory.ts +0 -93
  815. package/src/types/factories/contracts/integrations/convex/IRewards.sol/IRewards__factory.ts +0 -190
  816. package/src/types/factories/contracts/integrations/convex/IRewards.sol/index.ts +0 -5
  817. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ICrvDeposit__factory.ts +0 -57
  818. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ICurveGauge__factory.ts +0 -123
  819. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ICurveVoteEscrow__factory.ts +0 -90
  820. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IDeposit__factory.ts +0 -230
  821. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IFeeDistro__factory.ts +0 -46
  822. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IMinter__factory.ts +0 -39
  823. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IPools__factory.ts +0 -189
  824. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IRegistry__factory.ts +0 -114
  825. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IRewardFactory__factory.ts +0 -164
  826. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IRewards__factory.ts +0 -190
  827. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IStaker__factory.ts +0 -324
  828. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IStashFactory__factory.ts +0 -60
  829. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IStash__factory.ts +0 -95
  830. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ITokenFactory__factory.ts +0 -45
  831. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ITokenMinter__factory.ts +0 -62
  832. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IVestedEscrow__factory.ts +0 -50
  833. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IVoting__factory.ts +0 -131
  834. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IWalletChecker__factory.ts +0 -45
  835. package/src/types/factories/contracts/integrations/convex/Interfaces.sol/index.ts +0 -21
  836. package/src/types/factories/contracts/integrations/convex/index.ts +0 -9
  837. package/src/types/factories/contracts/integrations/curve/ICRVToken__factory.ts +0 -270
  838. package/src/types/factories/contracts/integrations/curve/ICurvePoolStETH__factory.ts +0 -478
  839. package/src/types/factories/contracts/integrations/curve/ICurvePool_2.sol/ICurvePool2Assets__factory.ts +0 -717
  840. package/src/types/factories/contracts/integrations/curve/ICurvePool_2.sol/index.ts +0 -4
  841. package/src/types/factories/contracts/integrations/curve/ICurvePool_3.sol/ICurvePool3Assets__factory.ts +0 -717
  842. package/src/types/factories/contracts/integrations/curve/ICurvePool_3.sol/index.ts +0 -4
  843. package/src/types/factories/contracts/integrations/curve/ICurvePool_4.sol/ICurvePool4Assets__factory.ts +0 -717
  844. package/src/types/factories/contracts/integrations/curve/ICurvePool_4.sol/index.ts +0 -4
  845. package/src/types/factories/contracts/integrations/curve/ICurvePool__factory.ts +0 -571
  846. package/src/types/factories/contracts/integrations/curve/ICurveRegistry__factory.ts +0 -83
  847. package/src/types/factories/contracts/integrations/curve/index.ts +0 -10
  848. package/src/types/factories/contracts/integrations/index.ts +0 -8
  849. package/src/types/factories/contracts/integrations/lido/ILidoOracle__factory.ts +0 -49
  850. package/src/types/factories/contracts/integrations/lido/IstETH.sol/IstETHGetters__factory.ts +0 -344
  851. package/src/types/factories/contracts/integrations/lido/IstETH.sol/IstETH__factory.ts +0 -360
  852. package/src/types/factories/contracts/integrations/lido/IstETH.sol/index.ts +0 -5
  853. package/src/types/factories/contracts/integrations/lido/index.ts +0 -5
  854. package/src/types/factories/contracts/integrations/uniswap/IQuoter__factory.ts +0 -152
  855. package/src/types/factories/contracts/integrations/uniswap/IUniswapV2Router01__factory.ts +0 -775
  856. package/src/types/factories/contracts/integrations/uniswap/IUniswapV2Router02__factory.ts +0 -977
  857. package/src/types/factories/contracts/integrations/uniswap/IUniswapV3.sol/ISwapRouter__factory.ts +0 -240
  858. package/src/types/factories/contracts/integrations/uniswap/IUniswapV3.sol/index.ts +0 -4
  859. package/src/types/factories/contracts/integrations/uniswap/IUniswapV3SwapCallback__factory.ts +0 -53
  860. package/src/types/factories/contracts/integrations/uniswap/index.ts +0 -8
  861. package/src/types/factories/contracts/integrations/yearn/IYVault__factory.ts +0 -415
  862. package/src/types/factories/contracts/integrations/yearn/index.ts +0 -4
  863. package/src/types/factories/contracts/interfaces/IACL.sol/IACLEvents__factory.ts +0 -78
  864. package/src/types/factories/contracts/interfaces/IACL.sol/IACL__factory.ts +0 -145
  865. package/src/types/factories/contracts/interfaces/IACL.sol/index.ts +0 -5
  866. package/src/types/factories/contracts/interfaces/IAccountFactory.sol/IAccountFactoryEvents__factory.ts +0 -107
  867. package/src/types/factories/contracts/interfaces/IAccountFactory.sol/IAccountFactoryGetters__factory.ts +0 -120
  868. package/src/types/factories/contracts/interfaces/IAccountFactory.sol/IAccountFactory__factory.ts +0 -243
  869. package/src/types/factories/contracts/interfaces/IAccountFactory.sol/index.ts +0 -6
  870. package/src/types/factories/contracts/interfaces/IAddressProvider.sol/IAddressProviderEvents__factory.ts +0 -49
  871. package/src/types/factories/contracts/interfaces/IAddressProvider.sol/IAddressProvider__factory.ts +0 -175
  872. package/src/types/factories/contracts/interfaces/IAddressProvider.sol/index.ts +0 -5
  873. package/src/types/factories/contracts/interfaces/IContractsRegister.sol/IContractsRegisterEvents__factory.ts +0 -56
  874. package/src/types/factories/contracts/interfaces/IContractsRegister.sol/IContractsRegister__factory.ts +0 -193
  875. package/src/types/factories/contracts/interfaces/IContractsRegister.sol/index.ts +0 -5
  876. package/src/types/factories/contracts/interfaces/ICreditAccount.sol/ICrediAccountExceptions__factory.ts +0 -40
  877. package/src/types/factories/contracts/interfaces/ICreditAccount.sol/ICreditAccount__factory.ts +0 -227
  878. package/src/types/factories/contracts/interfaces/ICreditAccount.sol/index.ts +0 -5
  879. package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents__factory.ts +0 -293
  880. package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorExceptions__factory.ts +0 -90
  881. package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator__factory.ts +0 -495
  882. package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/index.ts +0 -6
  883. package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeEvents__factory.ts +0 -302
  884. package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions__factory.ts +0 -176
  885. package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended__factory.ts +0 -61
  886. package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacade__factory.ts +0 -972
  887. package/src/types/factories/contracts/interfaces/ICreditFacade.sol/index.ts +0 -7
  888. package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Events__factory.ts +0 -62
  889. package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions__factory.ts +0 -95
  890. package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2__factory.ts +0 -928
  891. package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/index.ts +0 -6
  892. package/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressorExceptions__factory.ts +0 -40
  893. package/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressor__factory.ts +0 -790
  894. package/src/types/factories/contracts/interfaces/IDataCompressor.sol/index.ts +0 -5
  895. package/src/types/factories/contracts/interfaces/IDegenNFT.sol/IDegenNFTExceptions__factory.ts +0 -46
  896. package/src/types/factories/contracts/interfaces/IDegenNFT.sol/IDegenNFT__factory.ts +0 -134
  897. package/src/types/factories/contracts/interfaces/IDegenNFT.sol/index.ts +0 -5
  898. package/src/types/factories/contracts/interfaces/IGearToken__factory.ts +0 -346
  899. package/src/types/factories/contracts/interfaces/IInterestRateModel__factory.ts +0 -63
  900. package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedEvents__factory.ts +0 -45
  901. package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions__factory.ts +0 -40
  902. package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed__factory.ts +0 -244
  903. package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/index.ts +0 -6
  904. package/src/types/factories/contracts/interfaces/IMerkleDistributor__factory.ts +0 -124
  905. package/src/types/factories/contracts/interfaces/IPhantomERC20__factory.ts +0 -261
  906. package/src/types/factories/contracts/interfaces/IPoolService.sol/IPoolServiceEvents__factory.ts +0 -222
  907. package/src/types/factories/contracts/interfaces/IPoolService.sol/IPoolService__factory.ts +0 -581
  908. package/src/types/factories/contracts/interfaces/IPoolService.sol/index.ts +0 -5
  909. package/src/types/factories/contracts/interfaces/IPriceFeedAddress__factory.ts +0 -104
  910. package/src/types/factories/contracts/interfaces/IPriceFeedType__factory.ts +0 -52
  911. package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Events__factory.ts +0 -49
  912. package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Exceptions__factory.ts +0 -45
  913. package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Ext__factory.ts +0 -274
  914. package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2__factory.ts +0 -256
  915. package/src/types/factories/contracts/interfaces/IPriceOracle.sol/index.ts +0 -7
  916. package/src/types/factories/contracts/interfaces/IVersion__factory.ts +0 -39
  917. package/src/types/factories/contracts/interfaces/IWETHGateway__factory.ts +0 -90
  918. package/src/types/factories/contracts/interfaces/V1/ICreditFilter__factory.ts +0 -704
  919. package/src/types/factories/contracts/interfaces/V1/ICreditManager__factory.ts +0 -773
  920. package/src/types/factories/contracts/interfaces/V1/IPriceOracle.sol/IPriceOracleV2__factory.ts +0 -116
  921. package/src/types/factories/contracts/interfaces/V1/IPriceOracle.sol/index.ts +0 -4
  922. package/src/types/factories/contracts/interfaces/V1/index.ts +0 -6
  923. package/src/types/factories/contracts/interfaces/adapters/IAdapter.sol/IAdapterExceptions__factory.ts +0 -37
  924. package/src/types/factories/contracts/interfaces/adapters/IAdapter.sol/IAdapter__factory.ts +0 -102
  925. package/src/types/factories/contracts/interfaces/adapters/IAdapter.sol/index.ts +0 -5
  926. package/src/types/factories/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapterExceptions__factory.ts +0 -46
  927. package/src/types/factories/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapter__factory.ts +0 -173
  928. package/src/types/factories/contracts/interfaces/adapters/IUniversalAdapter.sol/index.ts +0 -5
  929. package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapterErrors__factory.ts +0 -43
  930. package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter__factory.ts +0 -723
  931. package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/index.ts +0 -5
  932. package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BoosterAdapter__factory.ts +0 -377
  933. package/src/types/factories/contracts/interfaces/adapters/convex/index.ts +0 -5
  934. package/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1AdapterExceptions__factory.ts +0 -35
  935. package/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter__factory.ts +0 -900
  936. package/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/index.ts +0 -5
  937. package/src/types/factories/contracts/interfaces/adapters/curve/index.ts +0 -4
  938. package/src/types/factories/contracts/interfaces/adapters/index.ts +0 -9
  939. package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterEvents__factory.ts +0 -43
  940. package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterExceptions__factory.ts +0 -35
  941. package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter__factory.ts +0 -324
  942. package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/index.ts +0 -6
  943. package/src/types/factories/contracts/interfaces/adapters/lido/index.ts +0 -4
  944. package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV2Adapter__factory.ts +0 -1082
  945. package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3AdapterExceptions__factory.ts +0 -35
  946. package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3Adapter__factory.ts +0 -408
  947. package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/index.ts +0 -5
  948. package/src/types/factories/contracts/interfaces/adapters/uniswap/index.ts +0 -5
  949. package/src/types/factories/contracts/interfaces/external/IWETH__factory.ts +0 -67
  950. package/src/types/factories/contracts/interfaces/external/index.ts +0 -4
  951. package/src/types/factories/contracts/interfaces/index.ts +0 -27
  952. package/src/types/factories/contracts/libraries/Errors__factory.ts +0 -488
  953. package/src/types/factories/contracts/libraries/index.ts +0 -4
  954. package/src/types/factories/contracts/oracles/LPPriceFeed__factory.ts +0 -350
  955. package/src/types/factories/contracts/oracles/PriceFeedChecker__factory.ts +0 -77
  956. package/src/types/factories/contracts/oracles/PriceOracle__factory.ts +0 -458
  957. package/src/types/factories/contracts/oracles/ZeroPriceFeed__factory.ts +0 -204
  958. package/src/types/factories/contracts/oracles/curve/AbstractCurveLPPriceFeed__factory.ts +0 -380
  959. package/src/types/factories/contracts/oracles/curve/CurveLP2PriceFeed__factory.ts +0 -493
  960. package/src/types/factories/contracts/oracles/curve/CurveLP3PriceFeed__factory.ts +0 -515
  961. package/src/types/factories/contracts/oracles/curve/CurveLP4PriceFeed__factory.ts +0 -537
  962. package/src/types/factories/contracts/oracles/curve/index.ts +0 -7
  963. package/src/types/factories/contracts/oracles/index.ts +0 -9
  964. package/src/types/factories/contracts/oracles/yearn/YearnPriceFeed__factory.ts +0 -462
  965. package/src/types/factories/contracts/oracles/yearn/index.ts +0 -4
  966. package/src/types/factories/contracts/pathfinder/ConvexPathFinder__factory.ts +0 -224
  967. package/src/types/factories/contracts/pathfinder/CurveLPPathFinder__factory.ts +0 -323
  968. package/src/types/factories/contracts/pathfinder/CurvePathFinder__factory.ts +0 -443
  969. package/src/types/factories/contracts/pathfinder/ISwapper__factory.ts +0 -226
  970. package/src/types/factories/contracts/pathfinder/NormalTokenPathFinder__factory.ts +0 -623
  971. package/src/types/factories/contracts/pathfinder/SwapPathFinder__factory.ts +0 -443
  972. package/src/types/factories/contracts/pathfinder/UniswapV2PathFinder__factory.ts +0 -395
  973. package/src/types/factories/contracts/pathfinder/UniswapV3PathFinder__factory.ts +0 -516
  974. package/src/types/factories/contracts/pathfinder/YearnPathFinder__factory.ts +0 -181
  975. package/src/types/factories/contracts/pathfinder/data/Balances.sol/BalanceOps__factory.ts +0 -73
  976. package/src/types/factories/contracts/pathfinder/data/Balances.sol/index.ts +0 -4
  977. package/src/types/factories/contracts/pathfinder/data/index.ts +0 -4
  978. package/src/types/factories/contracts/pathfinder/index.ts +0 -13
  979. package/src/types/factories/contracts/pool/LinearInterestRateModel__factory.ts +0 -249
  980. package/src/types/factories/contracts/pool/PoolService__factory.ts +0 -917
  981. package/src/types/factories/contracts/pool/index.ts +0 -5
  982. package/src/types/factories/contracts/support/ContractUpgrader__factory.ts +0 -130
  983. package/src/types/factories/contracts/support/MerkleDistributor__factory.ts +0 -191
  984. package/src/types/factories/contracts/support/MultiCall.sol/Multicall2__factory.ts +0 -373
  985. package/src/types/factories/contracts/support/MultiCall.sol/index.ts +0 -4
  986. package/src/types/factories/contracts/support/PauseMulticall__factory.ts +0 -206
  987. package/src/types/factories/contracts/support/index.ts +0 -7
  988. package/src/types/factories/contracts/test/Playground.t.sol/PlaygroundTest__factory.ts +0 -370
  989. package/src/types/factories/contracts/test/Playground.t.sol/index.ts +0 -4
  990. package/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest__factory.ts +0 -966
  991. package/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/index.ts +0 -4
  992. package/src/types/factories/contracts/test/adapters/AdapterTestHelper__factory.ts +0 -740
  993. package/src/types/factories/contracts/test/adapters/ConvexAdapterHelper__factory.ts +0 -1190
  994. package/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest__factory.ts +0 -1280
  995. package/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts +0 -4
  996. package/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest__factory.ts +0 -1250
  997. package/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts +0 -4
  998. package/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest__factory.ts +0 -1245
  999. package/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts +0 -4
  1000. package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest__factory.ts +0 -819
  1001. package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts +0 -4
  1002. package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest__factory.ts +0 -899
  1003. package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts +0 -4
  1004. package/src/types/factories/contracts/test/adapters/CurveV1AdapterHelper__factory.ts +0 -749
  1005. package/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest__factory.ts +0 -831
  1006. package/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts +0 -4
  1007. package/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest__factory.ts +0 -831
  1008. package/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts +0 -4
  1009. package/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest__factory.ts +0 -838
  1010. package/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts +0 -4
  1011. package/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest__factory.ts +0 -850
  1012. package/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts +0 -4
  1013. package/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest__factory.ts +0 -884
  1014. package/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts +0 -4
  1015. package/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest__factory.ts +0 -913
  1016. package/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts +0 -4
  1017. package/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest__factory.ts +0 -846
  1018. package/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts +0 -4
  1019. package/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest__factory.ts +0 -918
  1020. package/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts +0 -4
  1021. package/src/types/factories/contracts/test/adapters/index.ts +0 -20
  1022. package/src/types/factories/contracts/test/core/ACL.t.sol/ACLTest__factory.ts +0 -457
  1023. package/src/types/factories/contracts/test/core/ACL.t.sol/index.ts +0 -4
  1024. package/src/types/factories/contracts/test/core/AddressProvider.t.sol/AddressProviderTest__factory.ts +0 -466
  1025. package/src/types/factories/contracts/test/core/AddressProvider.t.sol/index.ts +0 -4
  1026. package/src/types/factories/contracts/test/core/index.ts +0 -5
  1027. package/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest__factory.ts +0 -1048
  1028. package/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/index.ts +0 -4
  1029. package/src/types/factories/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest__factory.ts +0 -1368
  1030. package/src/types/factories/contracts/test/credit/CreditFacade.t.sol/index.ts +0 -4
  1031. package/src/types/factories/contracts/test/credit/CreditManager.t.sol/CreditManagerTest__factory.ts +0 -1003
  1032. package/src/types/factories/contracts/test/credit/CreditManager.t.sol/index.ts +0 -4
  1033. package/src/types/factories/contracts/test/credit/index.ts +0 -6
  1034. package/src/types/factories/contracts/test/index.ts +0 -17
  1035. package/src/types/factories/contracts/test/lib/cheatCodes.sol/CheatCodes__factory.ts +0 -472
  1036. package/src/types/factories/contracts/test/lib/cheatCodes.sol/index.ts +0 -4
  1037. package/src/types/factories/contracts/test/lib/constants.sol/Roles__factory.ts +0 -358
  1038. package/src/types/factories/contracts/test/lib/constants.sol/index.ts +0 -4
  1039. package/src/types/factories/contracts/test/lib/index.ts +0 -6
  1040. package/src/types/factories/contracts/test/lib/test.sol/DSTest__factory.ts +0 -353
  1041. package/src/types/factories/contracts/test/lib/test.sol/index.ts +0 -4
  1042. package/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite__factory.ts +0 -237
  1043. package/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/index.ts +0 -4
  1044. package/src/types/factories/contracts/test/mainnet/TotalValueCalculator__factory.ts +0 -95
  1045. package/src/types/factories/contracts/test/mainnet/index.ts +0 -5
  1046. package/src/types/factories/contracts/test/mocks/adapters/AdapterMock__factory.ts +0 -373
  1047. package/src/types/factories/contracts/test/mocks/adapters/TargetContractMock__factory.ts +0 -84
  1048. package/src/types/factories/contracts/test/mocks/adapters/index.ts +0 -5
  1049. package/src/types/factories/contracts/test/mocks/core/ACLTraitTest__factory.ts +0 -185
  1050. package/src/types/factories/contracts/test/mocks/core/AddressProviderACLMock__factory.ts +0 -153
  1051. package/src/types/factories/contracts/test/mocks/core/index.ts +0 -5
  1052. package/src/types/factories/contracts/test/mocks/credit/CreditManagerInternal__factory.ts +0 -1395
  1053. package/src/types/factories/contracts/test/mocks/credit/index.ts +0 -4
  1054. package/src/types/factories/contracts/test/mocks/dao/TreasuryMock__factory.ts +0 -79
  1055. package/src/types/factories/contracts/test/mocks/dao/index.ts +0 -4
  1056. package/src/types/factories/contracts/test/mocks/index.ts +0 -12
  1057. package/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock__factory.ts +0 -763
  1058. package/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents__factory.ts +0 -105
  1059. package/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts +0 -5
  1060. package/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock__factory.ts +0 -776
  1061. package/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents__factory.ts +0 -94
  1062. package/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts +0 -5
  1063. package/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock__factory.ts +0 -187
  1064. package/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/IBasicRewards__factory.ts +0 -93
  1065. package/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts +0 -5
  1066. package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock__factory.ts +0 -558
  1067. package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents__factory.ts +0 -105
  1068. package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper__factory.ts +0 -186
  1069. package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts +0 -6
  1070. package/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock__factory.ts +0 -345
  1071. package/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts +0 -4
  1072. package/src/types/factories/contracts/test/mocks/integrations/CurveV1MetapoolMock__factory.ts +0 -747
  1073. package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_2Assets__factory.ts +0 -902
  1074. package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_3Assets__factory.ts +0 -902
  1075. package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_4Assets__factory.ts +0 -902
  1076. package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock__factory.ts +0 -756
  1077. package/src/types/factories/contracts/test/mocks/integrations/CurveV1StETHMock__factory.ts +0 -594
  1078. package/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/ILidoMockEvents__factory.ts +0 -51
  1079. package/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/LidoMock__factory.ts +0 -525
  1080. package/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/index.ts +0 -5
  1081. package/src/types/factories/contracts/test/mocks/integrations/UniswapV2Mock__factory.ts +0 -1060
  1082. package/src/types/factories/contracts/test/mocks/integrations/UniswapV3Mock__factory.ts +0 -776
  1083. package/src/types/factories/contracts/test/mocks/integrations/YearnV2Mock__factory.ts +0 -609
  1084. package/src/types/factories/contracts/test/mocks/integrations/index.ts +0 -18
  1085. package/src/types/factories/contracts/test/mocks/libraries/PercentageMathTest__factory.ts +0 -110
  1086. package/src/types/factories/contracts/test/mocks/libraries/WadRayMathTest__factory.ts +0 -248
  1087. package/src/types/factories/contracts/test/mocks/libraries/index.ts +0 -5
  1088. package/src/types/factories/contracts/test/mocks/oracles/LPPriceFeedMock__factory.ts +0 -449
  1089. package/src/types/factories/contracts/test/mocks/oracles/PriceFeedMock__factory.ts +0 -297
  1090. package/src/types/factories/contracts/test/mocks/oracles/index.ts +0 -5
  1091. package/src/types/factories/contracts/test/mocks/pool/CreditManagerMockForPoolTest__factory.ts +0 -194
  1092. package/src/types/factories/contracts/test/mocks/pool/PoolServiceMock__factory.ts +0 -899
  1093. package/src/types/factories/contracts/test/mocks/pool/TestPoolService__factory.ts +0 -976
  1094. package/src/types/factories/contracts/test/mocks/pool/index.ts +0 -6
  1095. package/src/types/factories/contracts/test/mocks/token/CERC20Mock__factory.ts +0 -486
  1096. package/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse__factory.ts +0 -395
  1097. package/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert__factory.ts +0 -395
  1098. package/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts +0 -5
  1099. package/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock__factory.ts +0 -446
  1100. package/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/index.ts +0 -4
  1101. package/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock__factory.ts +0 -454
  1102. package/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/index.ts +0 -4
  1103. package/src/types/factories/contracts/test/mocks/token/ERC20Mock__factory.ts +0 -526
  1104. package/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20__factory.ts +0 -86
  1105. package/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts +0 -4
  1106. package/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock__factory.ts +0 -96
  1107. package/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/IERC721Receiver__factory.ts +0 -60
  1108. package/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts +0 -5
  1109. package/src/types/factories/contracts/test/mocks/token/StETHMock__factory.ts +0 -441
  1110. package/src/types/factories/contracts/test/mocks/token/WETHMock__factory.ts +0 -364
  1111. package/src/types/factories/contracts/test/mocks/token/index.ts +0 -12
  1112. package/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest__factory.ts +0 -543
  1113. package/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts +0 -4
  1114. package/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest__factory.ts +0 -480
  1115. package/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/index.ts +0 -4
  1116. package/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest__factory.ts +0 -511
  1117. package/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/index.ts +0 -4
  1118. package/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest__factory.ts +0 -474
  1119. package/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts +0 -4
  1120. package/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest__factory.ts +0 -422
  1121. package/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts +0 -4
  1122. package/src/types/factories/contracts/test/oracles/index.ts +0 -8
  1123. package/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest__factory.ts +0 -673
  1124. package/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts +0 -4
  1125. package/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest__factory.ts +0 -750
  1126. package/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts +0 -4
  1127. package/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest__factory.ts +0 -839
  1128. package/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts +0 -4
  1129. package/src/types/factories/contracts/test/pathfinder/PathFinderTestHelper__factory.ts +0 -652
  1130. package/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest__factory.ts +0 -912
  1131. package/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts +0 -4
  1132. package/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest__factory.ts +0 -806
  1133. package/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts +0 -4
  1134. package/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest__factory.ts +0 -826
  1135. package/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts +0 -4
  1136. package/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest__factory.ts +0 -676
  1137. package/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts +0 -4
  1138. package/src/types/factories/contracts/test/pathfinder/index.ts +0 -11
  1139. package/src/types/factories/contracts/test/pool/PoolService.t.sol/PoolServiceTest__factory.ts +0 -804
  1140. package/src/types/factories/contracts/test/pool/PoolService.t.sol/index.ts +0 -4
  1141. package/src/types/factories/contracts/test/pool/index.ts +0 -4
  1142. package/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable__factory.ts +0 -88
  1143. package/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts +0 -4
  1144. package/src/types/factories/contracts/test/sigp/DummyMulticallTarget__factory.ts +0 -131
  1145. package/src/types/factories/contracts/test/sigp/FlashLoanAttacker2__factory.ts +0 -164
  1146. package/src/types/factories/contracts/test/sigp/Interfaces.sol/ICrvDeposit__factory.ts +0 -57
  1147. package/src/types/factories/contracts/test/sigp/Interfaces.sol/ICurveGauge__factory.ts +0 -123
  1148. package/src/types/factories/contracts/test/sigp/Interfaces.sol/ICurveVoteEscrow__factory.ts +0 -90
  1149. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IDeposit__factory.ts +0 -230
  1150. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IFeeDistro__factory.ts +0 -46
  1151. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IMinter__factory.ts +0 -39
  1152. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IPools__factory.ts +0 -189
  1153. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IRegistry__factory.ts +0 -114
  1154. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IRewardFactory__factory.ts +0 -164
  1155. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IRewards__factory.ts +0 -190
  1156. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IStaker__factory.ts +0 -324
  1157. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IStashFactory__factory.ts +0 -60
  1158. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IStash__factory.ts +0 -95
  1159. package/src/types/factories/contracts/test/sigp/Interfaces.sol/ITokenFactory__factory.ts +0 -45
  1160. package/src/types/factories/contracts/test/sigp/Interfaces.sol/ITokenMinter__factory.ts +0 -62
  1161. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IVestedEscrow__factory.ts +0 -50
  1162. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IVoting__factory.ts +0 -131
  1163. package/src/types/factories/contracts/test/sigp/Interfaces.sol/IWalletChecker__factory.ts +0 -45
  1164. package/src/types/factories/contracts/test/sigp/Interfaces.sol/index.ts +0 -21
  1165. package/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock__factory.ts +0 -767
  1166. package/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts +0 -4
  1167. package/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock__factory.ts +0 -776
  1168. package/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts +0 -4
  1169. package/src/types/factories/contracts/test/sigp/NewCreditConfigurator__factory.ts +0 -922
  1170. package/src/types/factories/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper__factory.ts +0 -244
  1171. package/src/types/factories/contracts/test/sigp/UniswapHelper.sol/index.ts +0 -4
  1172. package/src/types/factories/contracts/test/sigp/index.ts +0 -13
  1173. package/src/types/factories/contracts/test/sigp/interfaces/ILockedCvx__factory.ts +0 -442
  1174. package/src/types/factories/contracts/test/sigp/interfaces/index.ts +0 -4
  1175. package/src/types/factories/contracts/test/sigp/stETHMock.sol/StETHMockERC20__factory.ts +0 -482
  1176. package/src/types/factories/contracts/test/sigp/stETHMock.sol/index.ts +0 -4
  1177. package/src/types/factories/contracts/test/suites/BalanceHelper__factory.ts +0 -356
  1178. package/src/types/factories/contracts/test/suites/BaseCreditTestSuite__factory.ts +0 -589
  1179. package/src/types/factories/contracts/test/suites/CreditFacadeHelper__factory.ts +0 -421
  1180. package/src/types/factories/contracts/test/suites/CreditFacadeTestSuite__factory.ts +0 -685
  1181. package/src/types/factories/contracts/test/suites/CreditManagerTestSuite__factory.ts +0 -677
  1182. package/src/types/factories/contracts/test/suites/PoolServiceTestSuite__factory.ts +0 -186
  1183. package/src/types/factories/contracts/test/suites/TokensTestSuite__factory.ts +0 -744
  1184. package/src/types/factories/contracts/test/suites/index.ts +0 -10
  1185. package/src/types/factories/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest__factory.ts +0 -398
  1186. package/src/types/factories/contracts/test/support/PauseMulticall.t.sol/index.ts +0 -4
  1187. package/src/types/factories/contracts/test/support/index.ts +0 -4
  1188. package/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest__factory.ts +0 -560
  1189. package/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/index.ts +0 -4
  1190. package/src/types/factories/contracts/test/tokens/index.ts +0 -4
  1191. package/src/types/factories/contracts/tokens/DegenNFT__factory.ts +0 -699
  1192. package/src/types/factories/contracts/tokens/DieselToken__factory.ts +0 -464
  1193. package/src/types/factories/contracts/tokens/GearToken__factory.ts +0 -719
  1194. package/src/types/factories/contracts/tokens/PhantomERC20__factory.ts +0 -261
  1195. package/src/types/factories/contracts/tokens/index.ts +0 -7
  1196. package/src/types/factories/index.ts +0 -6
  1197. package/src/types/hardhat.d.ts +0 -2715
  1198. package/src/types/index.ts +0 -562
  1199. package/src/utils/errors.ts +0 -11
  1200. package/src/utils/formatter.ts +0 -146
  1201. package/src/utils/loading.ts +0 -17
  1202. package/src/utils/mappers.ts +0 -32
  1203. package/src/utils/math.ts +0 -42
  1204. package/src/utils/multicall.ts +0 -80
  1205. package/src/utils/network.ts +0 -28
  1206. package/src/utils/repeater.ts +0 -18
  1207. package/src/utils/types.ts +0 -7
  1208. package/src/utils/validate.ts +0 -8
  1209. package/tsconfig.json +0 -62
@@ -1,839 +0,0 @@
1
- /* Autogenerated file. Do not edit manually. */
2
- /* tslint:disable */
3
- /* eslint-disable */
4
- import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
5
- import type { Provider, TransactionRequest } from "@ethersproject/providers";
6
- import type {
7
- NormalTokenPathFinderTest,
8
- NormalTokenPathFinderTestInterface,
9
- } from "../../../../../contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest";
10
-
11
- const _abi = [
12
- {
13
- inputs: [
14
- {
15
- internalType: "address",
16
- name: "",
17
- type: "address",
18
- },
19
- ],
20
- name: "UnknownToken",
21
- type: "error",
22
- },
23
- {
24
- inputs: [
25
- {
26
- internalType: "enum SwapOperation",
27
- name: "",
28
- type: "uint8",
29
- },
30
- ],
31
- name: "UnsupportedSwapOperation",
32
- type: "error",
33
- },
34
- {
35
- anonymous: false,
36
- inputs: [
37
- {
38
- indexed: false,
39
- internalType: "string",
40
- name: "",
41
- type: "string",
42
- },
43
- ],
44
- name: "log",
45
- type: "event",
46
- },
47
- {
48
- anonymous: false,
49
- inputs: [
50
- {
51
- indexed: false,
52
- internalType: "address",
53
- name: "",
54
- type: "address",
55
- },
56
- ],
57
- name: "log_address",
58
- type: "event",
59
- },
60
- {
61
- anonymous: false,
62
- inputs: [
63
- {
64
- indexed: false,
65
- internalType: "bytes",
66
- name: "",
67
- type: "bytes",
68
- },
69
- ],
70
- name: "log_bytes",
71
- type: "event",
72
- },
73
- {
74
- anonymous: false,
75
- inputs: [
76
- {
77
- indexed: false,
78
- internalType: "bytes32",
79
- name: "",
80
- type: "bytes32",
81
- },
82
- ],
83
- name: "log_bytes32",
84
- type: "event",
85
- },
86
- {
87
- anonymous: false,
88
- inputs: [
89
- {
90
- indexed: false,
91
- internalType: "int256",
92
- name: "",
93
- type: "int256",
94
- },
95
- ],
96
- name: "log_int",
97
- type: "event",
98
- },
99
- {
100
- anonymous: false,
101
- inputs: [
102
- {
103
- indexed: false,
104
- internalType: "string",
105
- name: "key",
106
- type: "string",
107
- },
108
- {
109
- indexed: false,
110
- internalType: "address",
111
- name: "val",
112
- type: "address",
113
- },
114
- ],
115
- name: "log_named_address",
116
- type: "event",
117
- },
118
- {
119
- anonymous: false,
120
- inputs: [
121
- {
122
- indexed: false,
123
- internalType: "string",
124
- name: "key",
125
- type: "string",
126
- },
127
- {
128
- indexed: false,
129
- internalType: "bytes",
130
- name: "val",
131
- type: "bytes",
132
- },
133
- ],
134
- name: "log_named_bytes",
135
- type: "event",
136
- },
137
- {
138
- anonymous: false,
139
- inputs: [
140
- {
141
- indexed: false,
142
- internalType: "string",
143
- name: "key",
144
- type: "string",
145
- },
146
- {
147
- indexed: false,
148
- internalType: "bytes32",
149
- name: "val",
150
- type: "bytes32",
151
- },
152
- ],
153
- name: "log_named_bytes32",
154
- type: "event",
155
- },
156
- {
157
- anonymous: false,
158
- inputs: [
159
- {
160
- indexed: false,
161
- internalType: "string",
162
- name: "key",
163
- type: "string",
164
- },
165
- {
166
- indexed: false,
167
- internalType: "int256",
168
- name: "val",
169
- type: "int256",
170
- },
171
- {
172
- indexed: false,
173
- internalType: "uint256",
174
- name: "decimals",
175
- type: "uint256",
176
- },
177
- ],
178
- name: "log_named_decimal_int",
179
- type: "event",
180
- },
181
- {
182
- anonymous: false,
183
- inputs: [
184
- {
185
- indexed: false,
186
- internalType: "string",
187
- name: "key",
188
- type: "string",
189
- },
190
- {
191
- indexed: false,
192
- internalType: "uint256",
193
- name: "val",
194
- type: "uint256",
195
- },
196
- {
197
- indexed: false,
198
- internalType: "uint256",
199
- name: "decimals",
200
- type: "uint256",
201
- },
202
- ],
203
- name: "log_named_decimal_uint",
204
- type: "event",
205
- },
206
- {
207
- anonymous: false,
208
- inputs: [
209
- {
210
- indexed: false,
211
- internalType: "string",
212
- name: "key",
213
- type: "string",
214
- },
215
- {
216
- indexed: false,
217
- internalType: "int256",
218
- name: "val",
219
- type: "int256",
220
- },
221
- ],
222
- name: "log_named_int",
223
- type: "event",
224
- },
225
- {
226
- anonymous: false,
227
- inputs: [
228
- {
229
- indexed: false,
230
- internalType: "string",
231
- name: "key",
232
- type: "string",
233
- },
234
- {
235
- indexed: false,
236
- internalType: "string",
237
- name: "val",
238
- type: "string",
239
- },
240
- ],
241
- name: "log_named_string",
242
- type: "event",
243
- },
244
- {
245
- anonymous: false,
246
- inputs: [
247
- {
248
- indexed: false,
249
- internalType: "string",
250
- name: "key",
251
- type: "string",
252
- },
253
- {
254
- indexed: false,
255
- internalType: "uint256",
256
- name: "val",
257
- type: "uint256",
258
- },
259
- ],
260
- name: "log_named_uint",
261
- type: "event",
262
- },
263
- {
264
- anonymous: false,
265
- inputs: [
266
- {
267
- indexed: false,
268
- internalType: "string",
269
- name: "",
270
- type: "string",
271
- },
272
- ],
273
- name: "log_string",
274
- type: "event",
275
- },
276
- {
277
- anonymous: false,
278
- inputs: [
279
- {
280
- indexed: false,
281
- internalType: "uint256",
282
- name: "",
283
- type: "uint256",
284
- },
285
- ],
286
- name: "log_uint",
287
- type: "event",
288
- },
289
- {
290
- anonymous: false,
291
- inputs: [
292
- {
293
- indexed: false,
294
- internalType: "bytes",
295
- name: "",
296
- type: "bytes",
297
- },
298
- ],
299
- name: "logs",
300
- type: "event",
301
- },
302
- {
303
- inputs: [],
304
- name: "IS_TEST",
305
- outputs: [
306
- {
307
- internalType: "bool",
308
- name: "",
309
- type: "bool",
310
- },
311
- ],
312
- stateMutability: "view",
313
- type: "function",
314
- },
315
- {
316
- inputs: [
317
- {
318
- internalType: "bool",
319
- name: "withUnderlyings",
320
- type: "bool",
321
- },
322
- ],
323
- name: "_setUpCurve",
324
- outputs: [],
325
- stateMutability: "nonpayable",
326
- type: "function",
327
- },
328
- {
329
- inputs: [],
330
- name: "cft",
331
- outputs: [
332
- {
333
- internalType: "contract CreditFacadeTestSuite",
334
- name: "",
335
- type: "address",
336
- },
337
- ],
338
- stateMutability: "view",
339
- type: "function",
340
- },
341
- {
342
- inputs: [],
343
- name: "creditConfigurator",
344
- outputs: [
345
- {
346
- internalType: "contract CreditConfigurator",
347
- name: "",
348
- type: "address",
349
- },
350
- ],
351
- stateMutability: "view",
352
- type: "function",
353
- },
354
- {
355
- inputs: [],
356
- name: "creditFacade",
357
- outputs: [
358
- {
359
- internalType: "contract CreditFacade",
360
- name: "",
361
- type: "address",
362
- },
363
- ],
364
- stateMutability: "view",
365
- type: "function",
366
- },
367
- {
368
- inputs: [],
369
- name: "creditManager",
370
- outputs: [
371
- {
372
- internalType: "contract ICreditManagerV2",
373
- name: "",
374
- type: "address",
375
- },
376
- ],
377
- stateMutability: "view",
378
- type: "function",
379
- },
380
- {
381
- inputs: [],
382
- name: "curveAdapter",
383
- outputs: [
384
- {
385
- internalType: "contract ICurveV1Adapter",
386
- name: "",
387
- type: "address",
388
- },
389
- ],
390
- stateMutability: "view",
391
- type: "function",
392
- },
393
- {
394
- inputs: [],
395
- name: "curveLPPathFinder",
396
- outputs: [
397
- {
398
- internalType: "contract CurveLPPathFinder",
399
- name: "",
400
- type: "address",
401
- },
402
- ],
403
- stateMutability: "view",
404
- type: "function",
405
- },
406
- {
407
- inputs: [],
408
- name: "curveMetaAdapter",
409
- outputs: [
410
- {
411
- internalType: "contract ICurveV1Adapter",
412
- name: "",
413
- type: "address",
414
- },
415
- ],
416
- stateMutability: "view",
417
- type: "function",
418
- },
419
- {
420
- inputs: [],
421
- name: "curvePathFinder",
422
- outputs: [
423
- {
424
- internalType: "contract CurvePathFinder",
425
- name: "",
426
- type: "address",
427
- },
428
- ],
429
- stateMutability: "view",
430
- type: "function",
431
- },
432
- {
433
- inputs: [],
434
- name: "curveV1MetaMock",
435
- outputs: [
436
- {
437
- internalType: "contract CurveV1MetapoolMock",
438
- name: "",
439
- type: "address",
440
- },
441
- ],
442
- stateMutability: "view",
443
- type: "function",
444
- },
445
- {
446
- inputs: [],
447
- name: "curveV1Mock",
448
- outputs: [
449
- {
450
- internalType: "contract CurveV1Mock",
451
- name: "",
452
- type: "address",
453
- },
454
- ],
455
- stateMutability: "view",
456
- type: "function",
457
- },
458
- {
459
- inputs: [],
460
- name: "failed",
461
- outputs: [
462
- {
463
- internalType: "bool",
464
- name: "",
465
- type: "bool",
466
- },
467
- ],
468
- stateMutability: "nonpayable",
469
- type: "function",
470
- },
471
- {
472
- inputs: [],
473
- name: "setUp",
474
- outputs: [],
475
- stateMutability: "nonpayable",
476
- type: "function",
477
- },
478
- {
479
- inputs: [],
480
- name: "test_CPF_01_constructor_correctly_sets_initial_values",
481
- outputs: [],
482
- stateMutability: "nonpayable",
483
- type: "function",
484
- },
485
- {
486
- inputs: [],
487
- name: "test_CPF_02_getGasPriceTokenOutRAY_works_correctly",
488
- outputs: [],
489
- stateMutability: "nonpayable",
490
- type: "function",
491
- },
492
- {
493
- inputs: [
494
- {
495
- internalType: "uint256",
496
- name: "amount",
497
- type: "uint256",
498
- },
499
- {
500
- internalType: "bool",
501
- name: "isAll",
502
- type: "bool",
503
- },
504
- {
505
- internalType: "bool",
506
- name: "hasConnectorAmount",
507
- type: "bool",
508
- },
509
- ],
510
- name: "test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols",
511
- outputs: [],
512
- stateMutability: "nonpayable",
513
- type: "function",
514
- },
515
- {
516
- inputs: [
517
- {
518
- internalType: "uint256",
519
- name: "amount",
520
- type: "uint256",
521
- },
522
- {
523
- internalType: "bool",
524
- name: "isAll",
525
- type: "bool",
526
- },
527
- {
528
- internalType: "bool",
529
- name: "hasConnectorAmount",
530
- type: "bool",
531
- },
532
- ],
533
- name: "test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0",
534
- outputs: [],
535
- stateMutability: "nonpayable",
536
- type: "function",
537
- },
538
- {
539
- inputs: [
540
- {
541
- internalType: "uint256",
542
- name: "amount",
543
- type: "uint256",
544
- },
545
- {
546
- internalType: "bool",
547
- name: "isAll",
548
- type: "bool",
549
- },
550
- {
551
- internalType: "uint256",
552
- name: "connectorAmount",
553
- type: "uint256",
554
- },
555
- ],
556
- name: "test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero",
557
- outputs: [],
558
- stateMutability: "nonpayable",
559
- type: "function",
560
- },
561
- {
562
- inputs: [
563
- {
564
- internalType: "uint256",
565
- name: "amount",
566
- type: "uint256",
567
- },
568
- {
569
- internalType: "uint256",
570
- name: "connectorAmount",
571
- type: "uint256",
572
- },
573
- ],
574
- name: "test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors",
575
- outputs: [],
576
- stateMutability: "nonpayable",
577
- type: "function",
578
- },
579
- {
580
- inputs: [
581
- {
582
- internalType: "uint256",
583
- name: "amount",
584
- type: "uint256",
585
- },
586
- {
587
- internalType: "uint256",
588
- name: "connectorAmount",
589
- type: "uint256",
590
- },
591
- ],
592
- name: "test_CPF_07_findSwapQuote_finds_the_best_path_gp_0",
593
- outputs: [],
594
- stateMutability: "nonpayable",
595
- type: "function",
596
- },
597
- {
598
- inputs: [
599
- {
600
- internalType: "uint256",
601
- name: "amount",
602
- type: "uint256",
603
- },
604
- {
605
- internalType: "uint256",
606
- name: "connectorAmount",
607
- type: "uint256",
608
- },
609
- ],
610
- name: "test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero",
611
- outputs: [],
612
- stateMutability: "nonpayable",
613
- type: "function",
614
- },
615
- {
616
- inputs: [],
617
- name: "test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path",
618
- outputs: [],
619
- stateMutability: "nonpayable",
620
- type: "function",
621
- },
622
- {
623
- inputs: [],
624
- name: "test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens",
625
- outputs: [],
626
- stateMutability: "nonpayable",
627
- type: "function",
628
- },
629
- {
630
- inputs: [],
631
- name: "test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens",
632
- outputs: [],
633
- stateMutability: "nonpayable",
634
- type: "function",
635
- },
636
- {
637
- inputs: [
638
- {
639
- internalType: "address",
640
- name: "",
641
- type: "address",
642
- },
643
- ],
644
- name: "tokenMasksMap",
645
- outputs: [
646
- {
647
- internalType: "uint256",
648
- name: "",
649
- type: "uint256",
650
- },
651
- ],
652
- stateMutability: "pure",
653
- type: "function",
654
- },
655
- {
656
- inputs: [],
657
- name: "underlying",
658
- outputs: [
659
- {
660
- internalType: "address",
661
- name: "",
662
- type: "address",
663
- },
664
- ],
665
- stateMutability: "view",
666
- type: "function",
667
- },
668
- {
669
- inputs: [],
670
- name: "uniV2adapter",
671
- outputs: [
672
- {
673
- internalType: "contract IUniswapV2Adapter",
674
- name: "",
675
- type: "address",
676
- },
677
- ],
678
- stateMutability: "view",
679
- type: "function",
680
- },
681
- {
682
- inputs: [],
683
- name: "uniV2mock",
684
- outputs: [
685
- {
686
- internalType: "contract UniswapV2Mock",
687
- name: "",
688
- type: "address",
689
- },
690
- ],
691
- stateMutability: "view",
692
- type: "function",
693
- },
694
- {
695
- inputs: [],
696
- name: "uniV2pathFinder",
697
- outputs: [
698
- {
699
- internalType: "contract UniswapV2PathFinder",
700
- name: "",
701
- type: "address",
702
- },
703
- ],
704
- stateMutability: "view",
705
- type: "function",
706
- },
707
- {
708
- inputs: [],
709
- name: "uniV3adapter",
710
- outputs: [
711
- {
712
- internalType: "contract IUniswapV3Adapter",
713
- name: "",
714
- type: "address",
715
- },
716
- ],
717
- stateMutability: "view",
718
- type: "function",
719
- },
720
- {
721
- inputs: [],
722
- name: "uniV3mock",
723
- outputs: [
724
- {
725
- internalType: "contract UniswapV3Mock",
726
- name: "",
727
- type: "address",
728
- },
729
- ],
730
- stateMutability: "view",
731
- type: "function",
732
- },
733
- {
734
- inputs: [],
735
- name: "uniV3pathFinder",
736
- outputs: [
737
- {
738
- internalType: "contract UniswapV3PathFinder",
739
- name: "",
740
- type: "address",
741
- },
742
- ],
743
- stateMutability: "view",
744
- type: "function",
745
- },
746
- {
747
- inputs: [],
748
- name: "yearnAdapter",
749
- outputs: [
750
- {
751
- internalType: "contract YearnV2Adapter",
752
- name: "",
753
- type: "address",
754
- },
755
- ],
756
- stateMutability: "view",
757
- type: "function",
758
- },
759
- {
760
- inputs: [],
761
- name: "yearnMock",
762
- outputs: [
763
- {
764
- internalType: "contract YearnV2Mock",
765
- name: "",
766
- type: "address",
767
- },
768
- ],
769
- stateMutability: "view",
770
- type: "function",
771
- },
772
- {
773
- inputs: [],
774
- name: "yearnPathFinder",
775
- outputs: [
776
- {
777
- internalType: "contract YearnPathFinder",
778
- name: "",
779
- type: "address",
780
- },
781
- ],
782
- stateMutability: "view",
783
- type: "function",
784
- },
785
- ];
786
-
787
- const _bytecode =
788
- "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b50620616cc806200004c6000396000f3fe60806040523480156200001157600080fd5b50600436106200028d5760003560e01c8063ba414fa6116200015f578063e5a7ec2811620000cc578063f67c5bd01162000097578063fa7626d4116200007a578063fa7626d41462000638578063fca2cea51462000646578063ffba925a146200066757600080fd5b8063f67c5bd014620005f1578063f9aa028a146200061757600080fd5b8063e5a7ec281462000581578063ebd3e70f1462000598578063eeef8dd014620005af578063f310c6da14620005d057600080fd5b8063ceab1386116200012a578063d8d7ca3c116200010d578063d8d7ca3c1462000535578063dc6655b41462000556578063df514433146200056057600080fd5b8063ceab138614620004fd578063d6dcf2ed146200051e57600080fd5b8063ba414fa61462000489578063c12c21c014620004a4578063c5eb2bc014620004c5578063cac283c814620004dc57600080fd5b80632f7a188111620001fe5780635a521cf811620001c95780636f307dc311620001ac5780636f307dc314620004265780639b6a80a714620004475780639f8ad9ec146200046857600080fd5b80635a521cf814620003e45780635ebb2361146200040557600080fd5b80632f7a1881146200038e5780634b30c0d014620003af5780634b7b24a514620003b95780634bb8a0ce14620003da57600080fd5b8063188d1ca9116200025c578063287b94d7116200023f578063287b94d7146200033557806329d351d814620003565780632b9d0d28146200037757600080fd5b8063188d1ca9146200030a5780631c9a755f146200031457600080fd5b8063019d088114620002925780630a9254e4146200029e5780630afcf02f14620002a85780631497761e14620002bf575b600080fd5b6200029c6200067e565b005b6200029c62000d0e565b6200029c620002b93660046200a5c7565b62000f33565b600754620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200029c62001843565b601254620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600b54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600854620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620003883660046200a60e565b62002090565b600254620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62003257565b600a54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62003623565b600e54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b601354620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b62000493620037dc565b604051901515815260200162000301565b600154620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620004d63660046200a62e565b62003946565b601454620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b601154620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c6200052f3660046200a62e565b62004280565b600954620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62004f60565b600454620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620005923660046200a651565b62005466565b6200029c620005a93660046200a62e565b62005fe3565b600f54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b601554620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b62000608620006023660046200a6af565b50600190565b60405190815260200162000301565b600354620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004939060ff1681565b601054620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620006783660046200a5c7565b6200687e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815261271091614e209160009173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620006e0906002906004016200a715565b602060405180830381865afa158015620006fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200072491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000783906003906004016200a715565b602060405180830381865afa158015620007a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c791906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620008056b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200086a57600080fd5b505af11580156200087f573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508284620008be6b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200093357600080fd5b505af115801562000948573d6000803e3d6000fd5b50505050620009b96040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b6000620009c562006fe9565b9050620009d4818588620071f6565b620009e1818487620071f6565b620009f781620009f18662007239565b620072b1565b6017546040517fc1a5de800000000000000000000000000000000000000000000000000000000081529193506000925073ffffffffffffffffffffffffffffffffffffffff169063c1a5de809062000a549085906004016200a900565b6000604051808303816000875af115801562000a74573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000abc91908101906200aaf5565b905060006103e86103e562000ad38860046200a774565b62000adf91906200a774565b62000aeb91906200ac0b565b905062000af981886200ac47565b9650600062000b0a8860036200a774565b905062000d0462000b1b846200742d565b60405180606001604052808481526020016000815260200162000cfc62000c0962000bf68d8c8e8d6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b8862000c038d8f6200746a565b62007532565b62000cf662000cea8f8e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b89600160008062007967565b62007cc7565b905262007d52565b5050505050505050565b62000d1a600162007df9565b62000d26600162002090565b62000d306200830d565b62000d3a620086cb565b600b54600f5460125460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169062000d72906200a4f3565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562000dbc573d6000803e3d6000fd5b50601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190931692632954018c92818101926020929091908290030181865afa15801562000e5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e8091906200a725565b60165460405173ffffffffffffffffffffffffffffffffffffffff9091169062000eaa906200a501565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000eeb573d6000803e3d6000fd5b50601780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e88511801562000f81575062000f7e6b033b2e3c9fd0803ce80000006103e86200a774565b85105b6040518263ffffffff1660e01b815260040162000fa2911515815260200190565b600060405180830381600087803b15801562000fbd57600080fd5b505af115801562000fd2573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062001032906002906004016200a715565b602060405180830381865afa15801562001050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200107691906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620010d5906001906004016200a715565b602060405180830381865afa158015620010f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200111991906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062001178906003906004016200a715565b602060405180830381865afa15801562001196573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011bc91906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620011fa6b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200125f57600080fd5b505af115801562001274573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508484620012b36b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200132857600080fd5b505af11580156200133d573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a905084846200137c6b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b5050600e54611388925073ffffffffffffffffffffffffffffffffffffffff169050635911fb9a8484620014486b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620014bd57600080fd5b505af1158015620014d2573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b9050848484620015126b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b1580156200159157600080fd5b505af1158015620015a6573d6000803e3d6000fd5b50505050600060405180610100016040528088620015c6576000620015c9565b60015b6002811115620015dd57620015dd6200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff8781166040830152851660608201526080016200162b8662007239565b8152602001898152602001600081526020016001151581525090506000866200165657600062001663565b620016638960046200a774565b601754909150600090819073ffffffffffffffffffffffffffffffffffffffff166347c242db8583866200169662008ae6565b6040518563ffffffff1660e01b8152600401620016b794939291906200ac75565b6000604051808303816000875af1158015620016d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200171f91908101906200adec565b90925090506000620017338c60046200a774565b905062001789836200174d87846001600080600062008b2e565b6040518060400160405280601381526020017f51756f74653120697320696e636f72726563740000000000000000000000000081525062008ba8565b60006103e86103e56200179e8460036200a774565b620017aa91906200a774565b620017b691906200ac0b565b90506000620017d6620017ca87856200ac47565b889060008f1562008ccf565b90506200183384620017f78385620017ef8f8f6200746a565b600062008deb565b6040518060400160405280601381526020017f51756f74653220697320696e636f72726563740000000000000000000000000081525062008ba8565b5050505050505050505050505050565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815261271091614e209160009173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620018a5906002906004016200a715565b602060405180830381865afa158015620018c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018e991906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062001948906003906004016200a715565b602060405180830381865afa15801562001966573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200198c91906200a725565b905060005b6002811015620020895760085473ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620019d66b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562001a3b57600080fd5b505af115801562001a50573d6000803e3d6000fd5b5050600b546008546005546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201528883166024820152908216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b15801562001adf57600080fd5b505af115801562001af4573d6000803e3d6000fd5b5050600e5460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a925085911662001b396b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562001bae57600080fd5b505af115801562001bc3573d6000803e3d6000fd5b5050600f54600e546005546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015287831660248201529082166044820152620f242c60648201529116925063453306669150608401600060405180830381600087803b15801562001c5357600080fd5b505af115801562001c68573d6000803e3d6000fd5b5050505062001cd96040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b600062001ce562006fe9565b905062001cf4818689620071f6565b62001d01818588620071f6565b62001d2481841562001d1857620009f18662007239565b620009f187876200746a565b6017546040517fc1a5de800000000000000000000000000000000000000000000000000000000081529193506000925073ffffffffffffffffffffffffffffffffffffffff169063c1a5de809062001d819085906004016200a900565b6000604051808303816000875af115801562001da1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001de991908101906200aaf5565b9050600062001dfa8860036200a774565b905060006103e86103e562001e118a60046200a774565b62001e1d91906200a774565b62001e2991906200ac0b565b90506200206f62001e3a846200742d565b6040518060600160405280848662001e5391906200ac47565b815260200162001e69620f242c61300c6200ac47565b815260200162000cfc62001f5f62001f538f8e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b88600160008062007967565b62000cf6620020408f8e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b8862000c038f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200746a565b50505050808062002080906200ae57565b91505062001991565b5050505050565b6200209a62008e61565b60085473ffffffffffffffffffffffffffffffffffffffff1662003254576006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000916200229d9173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002119906007906004016200a715565b602060405180830381865afa15801562002137573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200215d91906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620021b6906008906004016200a715565b602060405180830381865afa158015620021d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021fa91906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002253906009906004016200a715565b602060405180830381865afa15801562002271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200229791906200a725565b62008f8b565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152919250600091620024399173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620022ff906001906004016200a715565b602060405180830381865afa1580156200231d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200234391906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200239c906002906004016200a715565b602060405180830381865afa158015620023ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023e091906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002253906005906004016200a715565b60035490915073ffffffffffffffffffffffffffffffffffffffff1615158062002461575082155b156200246c57905060605b81816040516200247c906200a50f565b620024899291906200ae93565b604051809103906000f080158015620024a6573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa15801562002543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200256991906200a725565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c718906200261990849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b1580156200263457600080fd5b505af115801562002649573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff1615915062002e5d9050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620026de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200270491906200a725565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562002779573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200279f91906200a725565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a87600081518110620027d057620027d06200aebc565b60200260200101516040518263ffffffff1660e01b815260040162002811919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200285591906200a725565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620028c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028e991906200a725565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a886001815181106200291a576200291a6200aebc565b60200260200101516040518263ffffffff1660e01b81526004016200295b919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002979573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200299f91906200a725565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562002a0d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a3391906200a725565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960028151811062002a645762002a646200aebc565b60200260200101516040518263ffffffff1660e01b815260040162002aa5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002ac3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ae991906200a725565b60405162002af7906200a51d565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f08015801562002b86573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562002c0e57600080fd5b505af115801562002c23573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa15801562002c95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cbb91906200a725565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b15801562002d2f57600080fd5b505af115801562002d44573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b15801562002dbe57600080fd5b505af115801562002dd3573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002e4257600080fd5b505af115801562002e57573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169290911690839060009062002e93906200a52b565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562002ee5573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162002f39906200a539565b604051809103906000f08015801562002f56573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b15801562002ff057600080fd5b505af115801562003005573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620030b557600080fd5b505af1158015620030ca573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200317a57600080fd5b505af11580156200318f573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200323f57600080fd5b505af115801562000d04573d6000803e3d6000fd5b50565b601754604080517f4b57b0be0000000000000000000000000000000000000000000000000000000081529051620033c99273ffffffffffffffffffffffffffffffffffffffff1691634b57b0be9160048083019260209291908290030181865afa158015620032ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032f091906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062003349906003906004016200a715565b602060405180830381865afa15801562003367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200338d91906200a725565b6040518060400160405280601481526020017f496e636f7272656374205745544820746f6b656e000000000000000000000000815250620090a7565b601754604080517f2630c12f0000000000000000000000000000000000000000000000000000000081529051620035329273ffffffffffffffffffffffffffffffffffffffff1691632630c12f9160048083019260209291908290030181865afa1580156200343c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200346291906200a725565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620034d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034f691906200a725565b6040518060400160405280601681526020017f496e636f7272656374207072696365206f7261636c6500000000000000000000815250620090a7565b601754604080517f08d665d30000000000000000000000000000000000000000000000000000000081529051620036219273ffffffffffffffffffffffffffffffffffffffff16916308d665d39160048083019260209291908290030181865afa158015620035a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035cb91906200a725565b60165460408051808201909152601881527f496e636f727265637420737761705061746846696e6465720000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690620090a7565b565b6000633b9aca00620036446b033b2e3c9fd0803ce8000000610c806200a774565b6200365091906200ac0b565b6200365f90620f42406200a774565b6017546006546040517f67b42645000000000000000000000000000000000000000000000000000000008152929350620032549273ffffffffffffffffffffffffffffffffffffffff9283169263553f67ec9216906367b4264590620036cb906002906004016200a715565b602060405180830381865afa158015620036e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200370f91906200a725565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801562003779573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200379f91906200aeeb565b826040518060400160405280601881526020017f494e434f5252454354205553444320476173207072696365000000000000000081525062009120565b60008054610100900460ff1615620037fd5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620039415760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620038a5917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200af05565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620038df916200af4f565b6000604051808303816000865af19150503d80600081146200391e576040519150601f19603f3d011682016040523d82523d6000602084013e62003923565b606091505b50915050808060200190518101906200393d91906200af6d565b9150505b919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e884118015620039945750620039916b033b2e3c9fd0803ce80000006103e86200a774565b84105b6040518263ffffffff1660e01b8152600401620039b5911515815260200190565b600060405180830381600087803b158015620039d057600080fd5b505af1158015620039e5573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e562905062003a296b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b15801562003a7b57600080fd5b505af115801562003a90573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062003af0906002906004016200a715565b602060405180830381865afa15801562003b0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b3491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062003b93906005906004016200a715565b602060405180830381865afa15801562003bb1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bd791906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d16001600262003c156b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562003c7a57600080fd5b505af115801562003c8f573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a9050838362003cce6b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003d4357600080fd5b505af115801562003d58573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a9050838362003d976b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003e0c57600080fd5b505af115801562003e21573d6000803e3d6000fd5b5050600e54600554611388935073ffffffffffffffffffffffffffffffffffffffff9182169250635911fb9a9185911662003e6a6b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003edf57600080fd5b505af115801562003ef4573d6000803e3d6000fd5b505060115460055473ffffffffffffffffffffffffffffffffffffffff9182169350632ccbc99b92508591168462003f3a6b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562003fb957600080fd5b505af115801562003fce573d6000803e3d6000fd5b50505050600062003fde62006fe9565b905062003fed818588620071f6565b62003ffa818487620071f6565b60006200400882866200916d565b905060006200401c83620009f18762007239565b6017546040517f9b59deba000000000000000000000000000000000000000000000000000000008152919250600091829173ffffffffffffffffffffffffffffffffffffffff1690639b59deba906200407e908690889086906004016200af8d565b6000604051808303816000875af11580156200409e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620040e691908101906200afb9565b909250905060006103e86103e5620041008d60046200a774565b6200410c91906200a774565b6200411891906200ac0b565b90506200415c82896040518060400160405280601381526020017f496e636f727265637420746f6b656e206f757400000000000000000000000000815250620090a7565b620042738362004237604051806101000160405280600160028111156200418757620041876200a6cf565b815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff168152602001886060015181526020018f81526020016000815260200160011515815250846200421f8e8e6200746a565b8f156200422e57600062008deb565b614e2062008deb565b6040518060400160405280600f81526020017f494e434f52524543542051554f5445000000000000000000000000000000000081525062008ba8565b5050505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e562620186a084118015620042cf5750620042cc6b033b2e3c9fd0803ce80000006103e86200a774565b84105b6040518263ffffffff1660e01b8152600401620042f0911515815260200190565b600060405180830381600087803b1580156200430b57600080fd5b505af115801562004320573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050620043646b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b158015620043b657600080fd5b505af1158015620043cb573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b42645906200442b906002906004016200a715565b602060405180830381865afa15801562004449573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200446f91906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620044ce906005906004016200a715565b602060405180830381865afa158015620044ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200451291906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620045506b033b2e3c9fd0803ce8000000600e6200a774565b620045619064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b158015620045c657600080fd5b505af1158015620045db573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a905083836200461a6b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200468f57600080fd5b505af1158015620046a4573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508383620046e36b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200475857600080fd5b505af11580156200476d573d6000803e3d6000fd5b505050506000806103e86103e56103e86103e58960036200478f91906200a774565b6200479b91906200a774565b620047a791906200ac0b565b620047b49060036200a774565b620047c59064e8d4a510006200a774565b620047d191906200a774565b620047dd91906200ac0b565b620047ea87600e6200a774565b620047fb9064e8d4a510006200a774565b6200480791906200b011565b6017546005546040517f553f67ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350169063553f67ec90602401602060405180830381865afa1580156200487c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048a291906200aeeb565b620048ba6b033b2e3c9fd0803ce8000000836200a774565b620048c691906200ac0b565b620048d39060016200ac47565b600b546008546005546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201528883166024820152908216604482015260648101849052929450169150634533066690608401600060405180830381600087803b1580156200496057600080fd5b505af115801562004975573d6000803e3d6000fd5b5050600e54600554611388935073ffffffffffffffffffffffffffffffffffffffff9182169250635911fb9a91869116620049be6b033b2e3c9fd0803ce800000060036200a774565b620049cf9064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562004a4457600080fd5b505af115801562004a59573d6000803e3d6000fd5b505060115460055473ffffffffffffffffffffffffffffffffffffffff9182169350632ccbc99b92508691168462004a9f6b033b2e3c9fd0803ce800000060026200a774565b62004ab09064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562004b2f57600080fd5b505af115801562004b44573d6000803e3d6000fd5b50505050600062004bb76040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b600062004bc362006fe9565b905062004bd281888b620071f6565b62004bdf81878a620071f6565b62004beb81886200916d565b925062004bfd81620009f18862007239565b6017546040517f9b59deba00000000000000000000000000000000000000000000000000000000815291935060009250829173ffffffffffffffffffffffffffffffffffffffff90911690639b59deba9062004c62908690889086906004016200af8d565b6000604051808303816000875af115801562004c82573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262004cca91908101906200afb9565b91509150886000141562004e2057600062004ce78b600e6200a774565b62004cf89064e8d4a510006200a774565b60055460408051808201909152601381527f496e636f727265637420746f6b656e206f757400000000000000000000000000602082015291925062004d5691849173ffffffffffffffffffffffffffffffffffffffff1690620090a7565b62004e1983620042376040518061010001604052806001600281111562004d815762004d816200a6cf565b815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001886060015181526020018f815260200160008152602001600115158152508460016000808e62008b2e565b5062004f54565b60006103e86103e562004e358d60036200a774565b62004e4191906200a774565b62004e4d91906200ac0b565b905062004e9182896040518060400160405280601381526020017f496e636f727265637420746f6b656e206f757400000000000000000000000000815250620090a7565b6200427383620042376040518061010001604052806001600281111562004ebc5762004ebc6200a6cf565b815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff168152602001886060015181526020018f8152602001600081526020016001151581525084620017ef8e8e6200746a565b50505050505050505050565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b426459062004fba906002906004016200a715565b602060405180830381865afa15801562004fd8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ffe91906200a725565b905060006200500c62006fe9565b90506200501c81836002620071f6565b60006200502e82620009f18562007239565b6000546005546040805173ffffffffffffffffffffffffffffffffffffffff888116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f201e17630000000000000000000000000000000000000000000000000000000017905290517ff28dceb300000000000000000000000000000000000000000000000000000000815293945062010000909204169163f28dceb391620050ff916004016200b077565b600060405180830381600087803b1580156200511a57600080fd5b505af11580156200512f573d6000803e3d6000fd5b50506017546040517fc1a5de8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063c1a5de8091506200518b9084906004016200a900565b6000604051808303816000875af1158015620051ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620051f391908101906200aaf5565b506006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200524e906003906004016200a715565b602060405180830381865afa1580156200526c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200529291906200a725565b9050620052a283826002620071f6565b6000546005546040805173ffffffffffffffffffffffffffffffffffffffff858116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f201e17630000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152620100009093049091169163f28dceb39162005372916004016200b077565b600060405180830381600087803b1580156200538d57600080fd5b505af1158015620053a2573d6000803e3d6000fd5b50506017546040517fc1a5de8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063c1a5de809150620053fe9085906004016200a900565b6000604051808303816000875af11580156200541e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200208991908101906200aaf5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e885118015620054a4575068056bc75e2d6310000085105b6040518263ffffffff1660e01b8152600401620054c5911515815260200190565b600060405180830381600087803b158015620054e057600080fd5b505af1158015620054f5573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050620055396b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b1580156200558b57600080fd5b505af1158015620055a0573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062005600906002906004016200a715565b602060405180830381865afa1580156200561e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200564491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620056a3906001906004016200a715565b602060405180830381865afa158015620056c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056e791906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062005746906003906004016200a715565b602060405180830381865afa15801562005764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200578a91906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620057c86b033b2e3c9fd0803ce800000060046200a774565b620057d99064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200583e57600080fd5b505af115801562005853573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508484620058926b033b2e3c9fd0803ce800000060036200a774565b620058a39064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200591857600080fd5b505af11580156200592d573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a905084846200596c6b033b2e3c9fd0803ce800000060026200a774565b6200597d9064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620059f257600080fd5b505af115801562005a07573d6000803e3d6000fd5b5050505060006103e86103e588600362005a2291906200a774565b62005a339064e8d4a510006200a774565b62005a3f91906200a774565b62005a4b91906200ac0b565b62005a588860046200a774565b62005a699064e8d4a510006200a774565b62005a7591906200b011565b6017546040517f553f67ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529293506000929091169063553f67ec90602401602060405180830381865afa15801562005aec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b1291906200aeeb565b62005b2a6b033b2e3c9fd0803ce8000000846200a774565b62005b3691906200ac0b565b62005b439060016200ac47565b600b546008546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015288821660248201528782166044820152606481018490529293501690634533066690608401600060405180830381600087803b15801562005bcc57600080fd5b505af115801562005be1573d6000803e3d6000fd5b5050600e54611388945073ffffffffffffffffffffffffffffffffffffffff169250635911fb9a91508590508462005c276b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562005c9c57600080fd5b505af115801562005cb1573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b905084848462005cf16b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562005d7057600080fd5b505af115801562005d85573d6000803e3d6000fd5b5050505060006040518061010001604052808862005da557600062005da8565b60015b600281111562005dbc5762005dbc6200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff87811660408301528516606082015260800162005e0a8662007239565b8152602081018a9052600060408201819052600160609092019190915260175491925090819073ffffffffffffffffffffffffffffffffffffffff166347c242db84838b62005e5862008ae6565b6040518563ffffffff1660e01b815260040162005e7994939291906200ac75565b6000604051808303816000875af115801562005e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262005ee191908101906200adec565b909250905060006103e86103e562005efb8d60036200a774565b62005f0c9064e8d4a510006200a774565b62005f1891906200a774565b62005f2491906200ac0b565b905062005f3d836200174d8684620017ef8d8d6200746a565b600062005f4b8a836200ac47565b826103e86103e562005f5e8e846200ac47565b62005f6b9060036200a774565b62005f7791906200a774565b62005f8391906200ac0b565b62005f8f91906200a774565b62005f9b91906200ac0b565b9050600062005fbb62005faf8c856200ac47565b879060008e1562008ccf565b905062005fd484620017f78385620017ef8e8e6200746a565b50505050505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e8841180156200603157506200602e6b033b2e3c9fd0803ce80000006103e86200a774565b84105b6040518263ffffffff1660e01b815260040162006052911515815260200190565b600060405180830381600087803b1580156200606d57600080fd5b505af115801562006082573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050620060c66b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b1580156200611857600080fd5b505af11580156200612d573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b42645906200618d906002906004016200a715565b602060405180830381865afa158015620061ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620061d191906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062006230906005906004016200a715565b602060405180830381865afa1580156200624e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200627491906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620062b26b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200631757600080fd5b505af11580156200632c573d6000803e3d6000fd5b5050600e5460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a9250859116620063716b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620063e657600080fd5b505af1158015620063fb573d6000803e3d6000fd5b505060115460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a9250859116620064406b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620064b557600080fd5b505af1158015620064ca573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508383620065096b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200657e57600080fd5b505af115801562006593573d6000803e3d6000fd5b5050600e5460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a9250849116620065d86b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200664d57600080fd5b505af115801562006662573d6000803e3d6000fd5b5050505060006200667262006fe9565b905062006681818487620071f6565b60006200668f82856200916d565b90506000620066a383620009f18762007239565b6017546040517f9b59deba000000000000000000000000000000000000000000000000000000008152919250600091829173ffffffffffffffffffffffffffffffffffffffff1690639b59deba906200670690869088906001906004016200af8d565b6000604051808303816000875af115801562006726573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200676e91908101906200afb9565b90925090506000620067828a60046200a774565b60055460408051808201909152601381527f496e636f727265637420746f6b656e206f7574000000000000000000000000006020820152919250620067e091849173ffffffffffffffffffffffffffffffffffffffff1690620090a7565b62004f548362004237604051806101000160405280600160028111156200680b576200680b6200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff8d8116604083015260055416606080830191909152890151608082015260a081018f9052600060c08201819052600160e0909201829052869190808062008b2e565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e885118015620068cc5750620068c96b033b2e3c9fd0803ce80000006103e86200a774565b85105b6040518263ffffffff1660e01b8152600401620068ed911515815260200190565b600060405180830381600087803b1580156200690857600080fd5b505af11580156200691d573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b42645906200697d906002906004016200a715565b602060405180830381865afa1580156200699b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620069c191906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062006a20906001906004016200a715565b602060405180830381865afa15801562006a3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006a6491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062006ac3906003906004016200a715565b602060405180830381865afa15801562006ae1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006b0791906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d16001600062006b456b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562006baa57600080fd5b505af115801562006bbf573d6000803e3d6000fd5b5050600b546008546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528782166024820152868216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b15801562006c4b57600080fd5b505af115801562006c60573d6000803e3d6000fd5b5050601154611388925073ffffffffffffffffffffffffffffffffffffffff169050632ccbc99b84848462006ca36b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562006d2257600080fd5b505af115801562006d37573d6000803e3d6000fd5b50506012546011546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015287821660248201528682166044820152620f242c60648201529116925063453306669150608401600060405180830381600087803b15801562006dc457600080fd5b505af115801562006dd9573d6000803e3d6000fd5b5050505060006040518061010001604052808862006df957600062006dfc565b60015b600281111562006e105762006e106200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff87811660408301528516606082015260800162006e5e8662007239565b81526020018981526020016000815260200160011515815250905060008662006e8957600062006e96565b62006e968960046200a774565b601754909150600090819073ffffffffffffffffffffffffffffffffffffffff166347c242db85838662006ec962008ae6565b6040518563ffffffff1660e01b815260040162006eea94939291906200ac75565b6000604051808303816000875af115801562006f0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262006f5291908101906200adec565b9092509050600062006f668c60046200a774565b905062006f81836200174d8784600160008061300c62008b2e565b6000620f424062006f9862ffffff8916826200b011565b62006fa58460026200a774565b62006fb191906200a774565b62006fbd91906200ac0b565b9050600062006fd1620017ca87856200ac47565b90506200183384620017f783858c620f242c62009233565b60606000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200705b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200708191906200aeeb565b90508067ffffffffffffffff8111156200709f576200709f6200a915565b604051908082528060200260200182016040528015620070e657816020015b6040805180820190915260008082526020820152815260200190600190039081620070be5790505b50915060005b81811015620071f1576001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa15801562007165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200718b91906200b08c565b50905060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020016000815250848381518110620071cf57620071cf6200aebc565b6020026020010181905250508080620071e8906200ae57565b915050620070ec565b505090565b808362007204858562009289565b815181106200721757620072176200aebc565b60200260200101516020018181516200723191906200ac47565b905250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106200727257620072726200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050919050565b6200731e6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b6040805160e08101825273c4375b7de8af5a38a93548eb8453a498222c4ff281526020810185905260055473ffffffffffffffffffffffffffffffffffffffff169181019190915260608101839052608081016200737b62008ae6565b81526017546005546040517f553f67ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260209093019291169063553f67ec90602401602060405180830381865afa158015620073f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200741c91906200aeeb565b815260006020909101529392505050565b6200745260405180606001604052806000815260200160008152602001606081525090565b620074618260400151620092fd565b60408301525090565b60408051600280825260608083018452926020830190803683370190505090508281600081518110620074a157620074a16200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110620074f257620074f26200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b60408051808201909152600081526060602082015260606000855160028111156200756157620075616200a6cf565b14156200766f576338ed173960e01b8560a001518660e00151620075b25760c0870151612710906200759490826200b011565b620075a090886200a774565b620075ac91906200ac0b565b620075b5565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff2620075d942610e106200ac47565b604051602401620075ef9594939291906200b0c6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b6001855160028111156200768757620076876200a6cf565b1415620077bd5760e08501517fbdbeaa310000000000000000000000000000000000000000000000000000000090620077175760a0860151620076ce90612710906200a774565b60c0870151620076e1906127106200b011565b620076f9876b033b2e3c9fd0803ce80000006200a774565b6200770591906200a774565b6200771191906200ac0b565b6200771a565b60005b846200772942610e106200ac47565b6040516024016200773d939291906200b111565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600285516002811115620077d557620077d56200a6cf565b1415620078e357638803dbee60e01b8560a001518660e00151620078265760c087015162007806906127106200ac47565b62007814612710886200a774565b6200782091906200ac0b565b62007829565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff26200784d42610e106200ac47565b604051602401620078639594939291906200b0c6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b805115620079205760408051808201909152600d5473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062007960565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526200795791906004016200b13c565b60405180910390fd5b9392505050565b60408051808201909152600081526060602082015260606000875160028111156200799657620079966200a6cf565b141562007acf5782620079ca577f3df0212400000000000000000000000000000000000000000000000000000000620079ec565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b85858960e0015162007a2b5760c08a01516127109062007a0d90826200b011565b62007a19908b6200a774565b62007a2591906200ac0b565b62007a2e565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b60018751600281111562007ae75762007ae76200a6cf565b141562007c4a578262007b1b577f79bea6640000000000000000000000000000000000000000000000000000000062007b3d565b7f1af4de83000000000000000000000000000000000000000000000000000000005b85858960e0015162007ba65760a08a015162007b5d90612710906200a774565b60c08b015162007b70906127106200b011565b62007b888b6b033b2e3c9fd0803ce80000006200a774565b62007b9491906200a774565b62007ba091906200ac0b565b62007ba9565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b80511562007c87576040805180820190915260075473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062007cbe565b86516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526200795791906004016200b13c565b95945050505050565b6040805160028082526060828101909352816020015b60408051808201909152600081526060602082015281526020019060019003908162007cdd579050509050828160008151811062007d1f5762007d1f6200aebc565b6020026020010181905250818160018151811062007d415762007d416200aebc565b602002602001018190525092915050565b8151815160408051808201909152601181527f496e636f727265637420616d6f756e7473000000000000000000000000000000602082015262007d9792919062009120565b62007dab82604001518260400151620093a3565b62007df5826020015182602001516040518060400160405280601281526020017f496e636f7272656374206761735573616765000000000000000000000000000081525062009120565b5050565b600181600a81111562007e105762007e106200a6cf565b148062007e315750600381600a81111562007e2f5762007e2f6200a6cf565b145b62007e99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640162007957565b60405162007ea7906200a547565b604051809103906000f08015801562007ec4573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862007f23670de0b6b3a764000060646200a774565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562007f4f57600080fd5b505af115801562007f64573d6000803e3d6000fd5b505060065460405173ffffffffffffffffffffffffffffffffffffffff909116935084925062007f9591506200a555565b62007fa29291906200b14c565b604051809103906000f08015801562007fbf573d6000803e3d6000fd5b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182178155604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3928281019260209291908290030181865afa15801562008056573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200807c91906200a725565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919093169263c12c21c092818101926020929091908290030181865afa15801562008119573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200813f91906200a725565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190931692632f7a188192818101926020929091908290030181865afa158015620081dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200820291906200a725565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919093169263f9aa028a92818101926020929091908290030181865afa1580156200829f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620082c591906200a725565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6200831762008e61565b60405162008325906200a564565b604051809103906000f08015801562008342573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556001546040519216916200839b906200a572565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620083dc573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162008430906200a580565b604051809103906000f0801580156200844d573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054600d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815291841660048301526024820152601260448201527f554e49535741505f56325f4144415054455200000000000000000000000000006064820152620100009091049091169063c657c71890608401600060405180830381600087803b1580156200852557600080fd5b505af11580156200853a573d6000803e3d6000fd5b5050600054600e54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56325f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620085ea57600080fd5b505af1158015620085ff573d6000803e3d6000fd5b5050600054600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56325f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c71891506084015b600060405180830381600087803b158015620086b057600080fd5b505af1158015620086c5573d6000803e3d6000fd5b50505050565b620086d562008e61565b604051620086e3906200a58e565b604051809103906000f08015801562008700573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560015460405192169162008759906200a59c565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200879a573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620087ee906200a5aa565b604051809103906000f0801580156200880b573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517fc67903ea00000000000000000000000000000000000000000000000000000000815292166004830181905260248301529063c67903ea90604401600060405180830381600087803b158015620088ac57600080fd5b505af1158015620088c1573d6000803e3d6000fd5b5050600054601054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f554e49535741505f56335f41444150544552000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200897157600080fd5b505af115801562008986573d6000803e3d6000fd5b5050600054601154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56335f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562008a3657600080fd5b505af115801562008a4b573d6000803e3d6000fd5b5050600054601254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56335f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c718915060840162008695565b600754600d54601054601354600a5460609462008b299473ffffffffffffffffffffffffffffffffffffffff918216949082169390821692908216911662009639565b905090565b62008b6c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062008b86898989898962007967565b8152602081018890526001604082015260600183905290509695505050505050565b62008be38260400151151584604001511515148260405160200162008bce91906200b178565b604051602081830303815290604052620097fa565b60408301511515600114801562008c005750604082015115156001145b1562008cca5762008c3c836020015183602001518360405160200162008c2791906200b1bb565b60405160208183030381529060405262009120565b62008c5d836060015183606001518360405160200162008c2791906200b1fe565b82515182515160405162008c9292919062008c7d9085906020016200b241565b604051602081830303815290604052620090a7565b8251602090810151835182015160405162008cca9362008cb5918691016200b2aa565b60405160208183030381529060405262009844565b505050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e081019190915260606040518061010001604052808462008d2b57875162008d2e565b60015b600281111562008d425762008d426200a6cf565b8152602001876020015173ffffffffffffffffffffffffffffffffffffffff1681526020018760800151868151811062008d805762008d806200aebc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018681526020018760c00151815260200160011515815250915050949350505050565b62008e296040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062008e4187878762007532565b815260208101869052600160408201526060018390529050949350505050565b60065473ffffffffffffffffffffffffffffffffffffffff16620036215760405162008e8d906200a547565b604051809103906000f08015801562008eaa573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862008f09670de0b6b3a764000060646200a774565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562008f3557600080fd5b505af115801562008f4a573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b60408051600380825260808201909252606091602082018380368337019050509050838160008151811062008fc45762008fc46200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816001815181106200901557620090156200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816002815181106200906657620090666200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462008cca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200910c91906200b313565b60405180910390a162008cca83836200989a565b81831462008cca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200915991906200b313565b60405180910390a162008cca8383620099d8565b6000805b8351811015620091e1578273ffffffffffffffffffffffffffffffffffffffff16848281518110620091a757620091a76200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415620091d85790506200922d565b60010162009171565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240162007957565b92915050565b620092716040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062008e4187878762009ad8565b6000805b8351811015620091e1578273ffffffffffffffffffffffffffffffffffffffff16848281518110620092c357620092c36200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415620092f45790506200922d565b6001016200928d565b8051606090806200930f575090919050565b60005b600073ffffffffffffffffffffffffffffffffffffffff168482815181106200933f576200933f6200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146200938157600101818114156200937b57509192915050565b62009312565b80156200939c576200939484826200a064565b949350505050565b5050919050565b620093e7825182516040518060400160405280601681526020017f496e636f72726563742063616c6c73206c656e6774680000000000000000000081525062009120565b815160005b81811015620086c5578281815181106200940a576200940a6200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168482815181106200944157620094416200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16141580620094bf57508281815181106200948157620094816200aebc565b60200260200101516020015180519060200120848281518110620094a957620094a96200aebc565b6020026020010151602001518051906020012014155b156200952c5760408051818152601b818301527f4572726f7220696e206d756c746963616c6c20617420696e646578000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a15b620095ae8482815181106200954557620095456200aebc565b6020026020010151600001518483815181106200956657620095666200aebc565b6020026020010151600001516040518060400160405280601881526020017f496e636f72726563742074617267657420616464726573730000000000000000815250620090a7565b62009630848281518110620095c757620095c76200aebc565b602002602001015160200151848381518110620095e857620095e86200aebc565b6020026020010151602001516040518060400160405280601281526020017f496e636f72726563742063616c6c64617461000000000000000000000000000081525062009844565b600101620093ec565b60408051600580825260c082019092526060916020820160a08036833701905050905085816000815181106200967357620096736200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110620096c457620096c46200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505083816002815181106200971557620097156200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816003815181106200976657620097666200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600481518110620097b757620097b76200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505095945050505050565b8162007df5577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200983191906200b313565b60405180910390a162007df5826200a126565b6200985083836200a19e565b62008cca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200988691906200b313565b60405180910390a162008cca83836200a267565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462007df5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620099549060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200998d91906200b35c565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620099c691906200b3be565b60405180910390a162007df56200a370565b80821462007df5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162009a669060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162009a9f91906200b3fc565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620099c691906200b448565b604080518082019091526000815260606020820152606060008551600281111562009b075762009b076200a6cf565b141562009ca9576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062009b9791906200ac47565b81526020018760a0015181526020018760e0015162009be35760c08801516127109062009bc590826200b011565b62009bd190896200a774565b62009bdd91906200ac0b565b62009be6565b60005b815260006020909101526040519091507f414bf389000000000000000000000000000000000000000000000000000000009062009c289083906024016200b486565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b60018551600281111562009cc15762009cc16200a6cf565b141562009e6d5760008560e0015162009d315760a086015162009ce890612710906200a774565b60c087015162009cfb906127106200b011565b62009d13876b033b2e3c9fd0803ce80000006200a774565b62009d1f91906200a774565b62009d2b91906200ac0b565b62009d34565b60005b905060006040518060c00160405280886040015173ffffffffffffffffffffffffffffffffffffffff168152602001886060015173ffffffffffffffffffffffffffffffffffffffff1681526020018662ffffff16815260200142610e1062009d9e91906200ac47565b815260208082019490945260006040918201528051825173ffffffffffffffffffffffffffffffffffffffff908116602483015283860151811660448301528383015162ffffff16606483015260608401516084830152608084015160a483015260a09093015190921660c4808401919091528151808403909101815260e4909201905291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc7fbf4de000000000000000000000000000000000000000000000000000000001790525090505b60028551600281111562009e855762009e856200a6cf565b14156200a027576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062009f1591906200ac47565b81526020018760a0015181526020018760e0015162009f615760c088015162009f41906127106200ac47565b62009f4f612710896200a774565b62009f5b91906200ac0b565b62009f64565b60005b815260006020909101526040519091507fdb3e2198000000000000000000000000000000000000000000000000000000009062009fa69083906024016200b486565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b80511562007920576040805180820190915260105473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062007960565b60608167ffffffffffffffff8111156200a082576200a0826200a915565b6040519080825280602002602001820160405280156200a0ca57816020015b6040805180820190915260008152606060208201528152602001906001900390816200a0a15790505b50905060005b828110156200a11f578381815181106200a0ee576200a0ee6200aebc565b60200260200101518282815181106200a10b576200a10b6200aebc565b60209081029190910101526001016200a0d0565b5092915050565b8062003254577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200a18c9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1620032546200a370565b8051825160019114156200a25e5760005b83518110156200a257578281815181106200a1ce576200a1ce6200aebc565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106200a210576200a2106200aebc565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200a24257600091505b806200a24e816200ae57565b9150506200a1af565b506200922d565b50600092915050565b6200a27382826200a19e565b62007df5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200a2fe9060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18816040516200a33791906200b502565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051620099c691906200b554565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200a4c55760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200a44292916020016200af05565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200a47c916200af4f565b6000604051808303816000865af19150503d80600081146200a4bb576040519150601f19603f3d011682016040523d82523d6000602084013e6200a4c0565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b611a0d806200b59383390190565b6124fd806200cfa083390190565b613960806200f49d83390190565b6118528062012dfd83390190565b615f8c806201464f83390190565b611893806201a5db83390190565b617a51806201be6e83390190565b62031ed680620238bf83390190565b611a5c806205579583390190565b61251b80620571f183390190565b611a7f806205970c83390190565b611c0e806205b18b83390190565b61221a806205cd9983390190565b6126e4806205efb383390190565b80151581146200325457600080fd5b6000806000606084860312156200a5dd57600080fd5b8335925060208401356200a5f1816200a5b8565b915060408401356200a603816200a5b8565b809150509250925092565b6000602082840312156200a62157600080fd5b813562007960816200a5b8565b600080604083850312156200a64257600080fd5b50508035926020909101359150565b6000806000606084860312156200a66757600080fd5b8335925060208401356200a67b816200a5b8565b929592945050506040919091013590565b73ffffffffffffffffffffffffffffffffffffffff811681146200325457600080fd5b6000602082840312156200a6c257600080fd5b813562007960816200a68c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b81106200a711576200a7116200a6cf565b9052565b602081016200922d82846200a6fe565b6000602082840312156200a73857600080fd5b815162007960816200a68c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200a7af576200a7af6200a745565b500290565b600081518084526020808501945080840160005b838110156200a7fc57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016200a7c8565b509495945050505050565b600060e0830173ffffffffffffffffffffffffffffffffffffffff80845116855260208085015160e082880152838151808652610100890191508383019550600092505b808310156200a87a5785518051861683528401518483015294830194600192909201916040909101906200a84b565b50604087015194506200a8a5604089018673ffffffffffffffffffffffffffffffffffffffff169052565b6060870151945087810360608901526200a8c081866200a7b4565b945050505050608083015184820360808601526200a8df82826200a7b4565b91505060a083015160a085015260c083015160c08501528091505092915050565b6020815260006200796060208301846200a807565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156200a96a576200a96a6200a915565b60405290565b6040516060810167ffffffffffffffff811182821017156200a96a576200a96a6200a915565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200a9e0576200a9e06200a915565b604052919050565b60005b838110156200aa055781810151838201526020016200a9eb565b83811115620086c55750506000910152565b6000604082840312156200aa2a57600080fd5b6200aa346200a944565b905081516200aa43816200a68c565b815260208281015167ffffffffffffffff808211156200aa6257600080fd5b818501915085601f8301126200aa7757600080fd5b8151818111156200aa8c576200aa8c6200a915565b6200aabe847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016200a996565b915080825286848285010111156200aad557600080fd5b6200aae6818584018686016200a9e8565b50808385015250505092915050565b600060208083850312156200ab0957600080fd5b825167ffffffffffffffff808211156200ab2257600080fd5b90840190606082870312156200ab3757600080fd5b6200ab416200a970565b8251815283830151848201526040830151828111156200ab6057600080fd5b80840193505086601f8401126200ab7657600080fd5b8251828111156200ab8b576200ab8b6200a915565b8060051b6200ab9c8682016200a996565b918252848101860191868101908a8411156200abb757600080fd5b87870192505b838310156200abf8578251868111156200abd75760008081fd5b6200abe78c8a838b01016200aa17565b83525091870191908701906200abbd565b6040850152509198975050505050505050565b6000826200ac42577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156200ac5d576200ac5d6200a745565b500190565b600381106200a711576200a7116200a6cf565b608081526200ac896080820186516200ac62565b602085015173ffffffffffffffffffffffffffffffffffffffff90811660a083015260408601511660c082015260608501516000906200ace160e084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080860151610100838101526200acfe6101808401826200a7b4565b905060a087015161012084015260c087015161014084015260e08701516200ad2b61016085018215159052565b5085602084015284604084015282810360608401526200ad4c81856200a7b4565b979650505050505050565b6000608082840312156200ad6a57600080fd5b6040516080810167ffffffffffffffff82821081831117156200ad91576200ad916200a915565b8160405282935084519150808211156200adaa57600080fd5b506200adb9858286016200aa17565b8252506020830151602082015260408301516200add6816200a5b8565b6040820152606092830151920191909152919050565b600080604083850312156200ae0057600080fd5b825167ffffffffffffffff808211156200ae1957600080fd5b6200ae27868387016200ad57565b935060208501519150808211156200ae3e57600080fd5b506200ae4d858286016200ad57565b9150509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200ae8c576200ae8c6200a745565b5060010190565b6040815260006200aea860408301856200a7b4565b828103602084015262007cbe81856200a7b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156200aefe57600080fd5b5051919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200af418160048501602087016200a9e8565b919091016004019392505050565b600082516200af638184602087016200a9e8565b9190910192915050565b6000602082840312156200af8057600080fd5b815162007960816200a5b8565b6060815260006200afa260608301866200a807565b602083019490945250901515604090910152919050565b600080604083850312156200afcd57600080fd5b825167ffffffffffffffff8111156200afe557600080fd5b6200aff3858286016200ad57565b92505060208301516200b006816200a68c565b809150509250929050565b6000828210156200b026576200b0266200a745565b500390565b600081518084526200b0458160208601602086016200a9e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200796060208301846200b02b565b600080604083850312156200b0a057600080fd5b82516200b0ad816200a68c565b602084015190925061ffff811681146200b00657600080fd5b85815284602082015260a0604082015260006200b0e760a08301866200a7b4565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b8381526060602082015260006200b12c60608301856200a7b4565b9050826040830152949350505050565b602081016200922d82846200ac62565b73ffffffffffffffffffffffffffffffffffffffff83168152604081016200796060208301846200a6fe565b600082516200b18c8184602087016200a9e8565b7f446966666572656e7420666f756e6420706172616d7300000000000000000000920191825250601601919050565b600082516200b1cf8184602087016200a9e8565b7f71312e616d6f756e7420213d2071322e616d6f756e7400000000000000000000920191825250601601919050565b600082516200b2128184602087016200a9e8565b7f71312e676173557361676520213d2071322e6761735573616765000000000000920191825250601a01919050565b600082516200b2558184602087016200a9e8565b7f71312e6d756c746943616c6c2e74617267657420213d2071322e6d756c7469439201918252507f616c6c2e746172676574000000000000000000000000000000000000000000006020820152602a01919050565b600082516200b2be8184602087016200a9e8565b7f71312e6d756c746943616c6c2e63616c6c4461746120213d2071322e6d756c749201918252507f6943616c6c2e63616c6c446174610000000000000000000000000000000000006020820152602e01919050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200796060808301846200b02b565b6040815260006200b39a60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200b39a60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200b43a60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200b43a60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b61010081016200922d828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6040815260006200b54060408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b82810360208401526200939481856200b02b565b6040815260006200b54060408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162001a0d38038062001a0d8339810160408190526200003491620000ef565b6200003f3362000082565b600180546001600160a01b039485166001600160a01b03199182161790915560028054938516938216939093179092556003805491909316911617905562000139565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000ea57600080fd5b919050565b6000806000606084860312156200010557600080fd5b6200011084620000d2565b92506200012060208501620000d2565b91506200013060408501620000d2565b90509250925092565b6118c480620001496000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063ebf9deac1161005b578063ebf9deac1461019e578063eeef8dd0146101be578063f2fde38b146101de57600080fd5b80638da5cb5b1461016d5780638e8a08521461018b57600080fd5b806337c605f7116100a757806337c605f71461012d57806354fd4d501461014d578063715018a61461016357600080fd5b80631c9a755f146100c3578063287b94d71461010d575b600080fd5b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61014061013b3660046111c2565b6101f1565b604051610104919061130a565b610155600181565b604051908152602001610104565b61016b6104d0565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100e3565b6100e361019936600461138a565b610562565b6101b16101ac3660046113ae565b61070c565b604051610104919061141b565b6002546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61016b6101ec36600461138a565b610873565b6040805160c081018252600060808201818152606060a08401819052908352602083018290529282018190528183015282516000908067ffffffffffffffff81111561023f5761023f610f44565b6040519080825280602002602001820160405280156102ad57816020015b61029a6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b81526020019060019003908161025d5790505b50935060005b818110156104ba5760008682815181106102cf576102cf61142e565b6020026020010151905060006102e482610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156104b0576040517f1bf64c4100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631bf64c4190610356908c908690600401611518565b6000604051808303816000875af1158015610375573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103bb91908101906115f9565b955060008173ffffffffffffffffffffffffffffffffffffffff16636f33547d8b856040518363ffffffff1660e01b81526004016103fa929190611518565b6000604051808303816000875af1158015610419573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261045f91908101906115f9565b905061046e818b8960006109a3565b15610477578096505b8660400151156104ae57868887815181106104945761049461142e565b602002602001018190525085806104aa9061176c565b9650505b505b50506001016102b3565b506104c4846109bf565b93505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6105606000610aea565b565b600073ffffffffffffffffffffffffffffffffffffffff8216156107075760008273ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f191906117a5565b905060018160108111156106075761060761145d565b14156106295760025473ffffffffffffffffffffffffffffffffffffffff1691505b600281601081111561063d5761063d61145d565b141561065f5760035473ffffffffffffffffffffffffffffffffffffffff1691505b60038160108111156106735761067361145d565b14806106905750600581601081111561068e5761068e61145d565b145b806106ac575060068160108111156106aa576106aa61145d565b145b806106c8575060078160108111156106c6576106c661145d565b145b806106e4575060088160108111156106e2576106e261145d565b145b156107055760015473ffffffffffffffffffffffffffffffffffffffff1691505b505b919050565b6107496040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b825160005b8181101561086a57600085828151811061076a5761076a61142e565b60200260200101519050600061077f82610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156108605760006107a883610562565b73ffffffffffffffffffffffffffffffffffffffff16631bf64c418a856040518363ffffffff1660e01b81526004016107e2929190611518565b6000604051808303816000875af1158015610801573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261084791908101906115f9565b9050610855818a888a6109a3565b1561085e578095505b505b505060010161074e565b50509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b73ffffffffffffffffffffffffffffffffffffffff8116610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161054d565b6109a081610aea565b50565b60006109b6858585866060015186610b5f565b95945050505050565b8051606090806109d0575090919050565b60005b8381815181106109e5576109e561142e565b60200260200101516040015115610a0e5760010181811415610a0957509192915050565b6109d3565b8067ffffffffffffffff811115610a2757610a27610f44565b604051908082528060200260200182016040528015610a9557816020015b610a826040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b815260200190600190039081610a455790505b50925060005b81811015610ae257848181518110610ab557610ab561142e565b6020026020010151848281518110610acf57610acf61142e565b6020908102919091010152600101610a9b565b505050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008560400151610b72575060006109b6565b8360400151610b83575060016109b6565b6000610be08688602001516b033b2e3c9fd0803ce8000000868b60600151610bab91906117c6565b610bb59190611803565b60208901516b033b2e3c9fd0803ce8000000610bd1898b6117c6565b610bdb9190611803565b610c79565b9050600086516002811115610bf757610bf761145d565b1480610c155750600186516002811115610c1357610c1361145d565b145b15610c215790506109b6565b600286516002811115610c3657610c3661145d565b1415610c44571590506109b6565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b6000610cb96040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250610d6a565b610cc285610df9565b610ccb84610df9565b610cd483610df9565b610cdd82610df9565b610cef610cea858761184c565b610df9565b610cfc610cea838561184c565b610d0586610e8a565b610d2657610d138284611863565b610d1d8587611863565b101590506109b6565b838510158015610d365750818310155b15610d4f57610d45828461184c565b610d1d858761184c565b838510610d5d576001610d60565b60005b9695505050505050565b6109a081604051602401610d7e919061187b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052610f23565b6109a081604051602401610e0f91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba900000000000000000000000000000000000000000000000000000000179052610f23565b60008082516002811115610ea057610ea061145d565b1480610ebe5750600182516002811115610ebc57610ebc61145d565b145b15610ecb57506001919050565b600282516002811115610ee057610ee061145d565b1415610eee57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715610f9757610f97610f44565b60405290565b6040516080810167ffffffffffffffff81118282101715610f9757610f97610f44565b6040805190810167ffffffffffffffff81118282101715610f9757610f97610f44565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561102a5761102a610f44565b604052919050565b80356003811061070757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146109a057600080fd5b803561070781611041565b600082601f83011261107f57600080fd5b8135602067ffffffffffffffff82111561109b5761109b610f44565b8160051b6110aa828201610fe3565b92835284810182019282810190878511156110c457600080fd5b83870192505b848310156110ec5782356110dd81611041565b825291830191908301906110ca565b979650505050505050565b80151581146109a057600080fd5b8035610707816110f7565b6000610100828403121561112357600080fd5b61112b610f73565b905061113682611032565b815261114460208301611063565b602082015261115560408301611063565b604082015261116660608301611063565b6060820152608082013567ffffffffffffffff81111561118557600080fd5b6111918482850161106e565b60808301525060a082013560a082015260c082013560c08201526111b760e08301611105565b60e082015292915050565b600080604083850312156111d557600080fd5b823567ffffffffffffffff808211156111ed57600080fd5b6111f986838701611110565b9350602085013591508082111561120f57600080fd5b5061121c8582860161106e565b9150509250929050565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b6000815180845261126e816020860160208601611226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80516080808452815173ffffffffffffffffffffffffffffffffffffffff169084015260200151604060a08401526000906112de60c0850182611256565b905060208301516020850152604083015115156040850152606083015160608501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561137d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261136b8583516112a0565b94509285019290850190600101611331565b5092979650505050505050565b60006020828403121561139c57600080fd5b81356113a781611041565b9392505050565b6000806000606084860312156113c357600080fd5b833567ffffffffffffffff808211156113db57600080fd5b6113e787838801611110565b945060208601359150808211156113fd57600080fd5b5061140a8682870161106e565b925050604084013590509250925092565b6020815260006113a760208301846112a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b8381101561150d57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016114db565b509495945050505050565b6040815261152a60408201845161148c565b6000602084015173ffffffffffffffffffffffffffffffffffffffff80821660608501528060408701511660808501525050606084015161158360a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808401516101008060c08501526115a06101408501836114c7565b915060a086015160e085015260c0860151818501525060e08501516115ca61012085018215159052565b5073ffffffffffffffffffffffffffffffffffffffff8416602084015290506113a7565b8051610707816110f7565b6000602080838503121561160c57600080fd5b825167ffffffffffffffff8082111561162457600080fd5b908401906080828703121561163857600080fd5b611640610f9d565b82518281111561164f57600080fd5b83016040818903121561166157600080fd5b611669610fc0565b815161167481611041565b8152818601518481111561168757600080fd5b80830192505088601f83011261169c57600080fd5b8151848111156116ae576116ae610f44565b6116de877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610fe3565b945080855289878285010111156116f457600080fd5b61170381888701898601611226565b508086018490528252508284015181850152611721604084016115ee565b6040820152606083015160608201528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561179e5761179e61173d565b5060010190565b6000602082840312156117b757600080fd5b8151601181106113a757600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117fe576117fe61173d565b500290565b600082611839577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081016104ca828461148c565b60008282101561185e5761185e61173d565b500390565b600082198211156118765761187661173d565b500190565b6020815260006113a7602083018461125656fea26469706673582212204a44d119a95a7bbbbf2c6cd5403facba1ffe02ace142ee957c64cb512d488b0664736f6c634300080a003360a06040523480156200001157600080fd5b50604051620024fd380380620024fd8339810160408190526200003491620001cd565b6200003f3362000160565b6000829050806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a9919062000205565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000127919062000205565b600280546001600160a01b039283166001600160a01b0319918216179091556001805494909216931692909217909155506200022a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001c857600080fd5b919050565b60008060408385031215620001e157600080fd5b620001ec83620001b0565b9150620001fc60208401620001b0565b90509250929050565b6000602082840312156200021857600080fd5b6200022382620001b0565b9392505050565b6080516122b06200024d6000396000818161015e015261055001526122b06000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063553f67ec116100815780639b59deba1161005b5780639b59deba146101d1578063c1a5de80146101f2578063f2fde38b1461021257600080fd5b8063553f67ec14610196578063715018a6146101a95780638da5cb5b146101b357600080fd5b806347c242db116100b257806347c242db146101385780634b57b0be1461015957806354fd4d501461018057600080fd5b806308d665d3146100ce5780632630c12f14610118575b600080fd5b6001546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6002546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b61014b610146366004611955565b610225565b60405161010f929190611b5c565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b610188600281565b60405190815260200161010f565b6101886101a4366004611b81565b6104ca565b6101b16105c7565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100ee565b6101e46101df366004611cf7565b610654565b60405161010f929190611d52565b610205610200366004611d8a565b6108a5565b60405161010f9190611dbf565b6101b1610220366004611b81565b610ce9565b6102626040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61029f6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6102a886610e19565b6102ea5785516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b60405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff1663ebf9deac6103128888610eb2565b856103398a608001518a8151811061032c5761032c611ed4565b60200260200101516104ca565b6040518463ffffffff1660e01b815260040161035793929190611f54565b6000604051808303816000875af1158015610376573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103bc9190810190612034565b91508160400151156104c15760008483602001516103da91906121a7565b60015490915073ffffffffffffffffffffffffffffffffffffffff1663ebf9deac61040889848a8a15610fbe565b866104168b606001516104ca565b6040518463ffffffff1660e01b815260040161043493929190611f54565b6000604051808303816000875af1158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104999190810190612034565b915080836020015183602001516104b091906121bf565b6104ba91906121fc565b6020830152505b94509492505050565b60025460009073ffffffffffffffffffffffffffffffffffffffff1663b66102df6105056b033b2e3c9fd0803ce8000000633b9aca006121bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015285166044820152606401602060405180830381865afa15801561059d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c19190612237565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b61065260006110d2565b565b6106916040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60008061069e8686611147565b600154608088015160a08901516040517febf9deac00000000000000000000000000000000000000000000000000000000815293945073ffffffffffffffffffffffffffffffffffffffff9092169263ebf9deac92610704928692909190600401611f54565b6000604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107699190810190612034565b606081015160408801519194509092508461089b5760608701515160005b818110156108985760006107c58a6060015183815181106107aa576107aa611ed4565b60200260200101518b6020015161126290919063ffffffff16565b90506000806107da8785858f60800151610225565b9150915080604001511561088a5782156107f55760006107f9565b614e205b8160600151836060015161080d91906121a7565b61081791906121a7565b606082015260a08c015161083290829089908c908a90611293565b1561088a578198508260001461084957600061084d565b614e205b8960600181815161085e91906121a7565b90525060608c015180518590811061087857610878611ed4565b60200260200101519750806060015195505b836001019350505050610787565b50505b5050935093915050565b6108c960405180606001604052806000815260200160008152602001606081525090565b604082015160208301515160608401515160008267ffffffffffffffff8111156108f5576108f5611752565b60405190808252806020026020018201604052801561093b57816020015b6040805180820190915260008152606060208201528152602001906001900390816109135790505b50905060008267ffffffffffffffff81111561095957610959611752565b604051908082528060200260200182016040528015610982578160200160208202803683370190505b50905060008060005b86811015610b515760008a6020015182815181106109ab576109ab611ed4565b60200260200101516000015190508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b485760608b01516109fb90826113b6565b15610a2a5781858581518110610a1357610a13611ed4565b602002602001018181525050836001019350610b48565b60018b602001518381518110610a4257610a42611ed4565b6020026020010151602001511115610b4857600080610a638d856000610654565b915091508160400151610ac2576040517f201e176300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80851660048301528c1660248201526044016102e1565b60008d602001518581518110610ada57610ada611ed4565b60200260200101516020018181525050610b078183602001518f602001516114309092919063ffffffff16565b8160000151888681518110610b1e57610b1e611ed4565b6020026020010181905250848060010195505081606001518c602001818151019150818152505050505b5060010161098b565b5060005b85811015610cc3576000848281518110610b7157610b71611ed4565b6020026020010151905060008b602001518281518110610b9357610b93611ed4565b602002602001015160000151905060018c602001518381518110610bb957610bb9611ed4565b6020026020010151602001511115610cb9576000610bd98d846001610654565b5090508060400151610c37576040517f201e176300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301528c1660248201526044016102e1565b60008d602001518481518110610c4f57610c4f611ed4565b60200260200101516020018181525050610c7c8b82602001518f602001516114309092919063ffffffff16565b8060000151888681518110610c9357610c93611ed4565b602090810291909101810191909152606090910151908c01805190910190526001909301925b5050600101610b55565b50604088018490526020890151610cda9088611262565b88525095979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b73ffffffffffffffffffffffffffffffffffffffff8116610e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e1565b610e16816110d2565b50565b60008082516002811115610e2f57610e2f611e5c565b1480610e4d5750600182516002811115610e4b57610e4b611e5c565b145b15610e5a57506001919050565b600282516002811115610e6f57610e6f611e5c565b1415610e7d57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152606060405180610100016040528085600001516002811115610f1657610f16611e5c565b8152602001856020015173ffffffffffffffffffffffffffffffffffffffff168152602001856040015173ffffffffffffffffffffffffffffffffffffffff16815260200185608001518581518110610f7157610f71611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018560a0015181526020018560c0015181526020016001151581525091505092915050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e081019190915260606040518061010001604052808461101857875161101b565b60015b600281111561102c5761102c611e5c565b8152602001876020015173ffffffffffffffffffffffffffffffffffffffff1681526020018760800151868151811061106757611067611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018681526020018760c00151815260200160011515815250915050949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e08101919091526040805161010081019091528060018152602001846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015184815181106111d1576111d1611ed4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff168152602001846060015181526020018460200151848151811061123857611238611ed4565b60200260200101516020015181526020018460c00151815260200160011515815250905092915050565b60008261126f848461146c565b8151811061127f5761127f611ed4565b602002602001015160200151905092915050565b600085604001516112a6575060006113ad565b83604001516112b7575060016113ad565b60006113148688602001516b033b2e3c9fd0803ce8000000868b606001516112df91906121bf565b6112e991906121fc565b60208901516b033b2e3c9fd0803ce8000000611305898b6121bf565b61130f91906121fc565b611524565b905060008651600281111561132b5761132b611e5c565b1480611349575060018651600281111561134757611347611e5c565b145b156113555790506113ad565b60028651600281111561136a5761136a611e5c565b1415611378571590506113ad565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b95945050505050565b8151600090815b81811015611425578373ffffffffffffffffffffffffffffffffffffffff168582815181106113ee576113ee611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561141d576001925050506105c1565b6001016113bd565b506000949350505050565b808361143c858561146c565b8151811061144c5761144c611ed4565b602002602001015160200181815161146491906121a7565b905250505050565b6000805b83518110156114d9578273ffffffffffffffffffffffffffffffffffffffff168482815181106114a2576114a2611ed4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614156114d15790506105c1565b600101611470565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016102e1565b60006115646040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611615565b61156d856116a4565b611576846116a4565b61157f836116a4565b611588826116a4565b61159a6115958587612250565b6116a4565b6115a76115958385612250565b6115b086610e19565b6115d1576115be82846121a7565b6115c885876121a7565b101590506113ad565b8385101580156115e15750818310155b156115fa576115f08284612250565b6115c88587612250565b83851061160857600161160b565b60005b9695505050505050565b610e16816040516024016116299190612267565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611731565b610e16816040516024016116ba91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156117a5576117a5611752565b60405290565b6040805190810167ffffffffffffffff811182821017156117a5576117a5611752565b60405160e0810167ffffffffffffffff811182821017156117a5576117a5611752565b6040516080810167ffffffffffffffff811182821017156117a5576117a5611752565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561185b5761185b611752565b604052919050565b80356003811061187257600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e1657600080fd5b803561187281611877565b600067ffffffffffffffff8211156118be576118be611752565b5060051b60200190565b600082601f8301126118d957600080fd5b813560206118ee6118e9836118a4565b611814565b82815260059290921b8401810191818101908684111561190d57600080fd5b8286015b8481101561193157803561192481611877565b8352918301918301611911565b509695505050505050565b8015158114610e1657600080fd5b80356118728161193c565b6000806000806080858703121561196b57600080fd5b843567ffffffffffffffff8082111561198357600080fd5b90860190610100828903121561199857600080fd5b6119a0611781565b6119a983611863565b81526119b760208401611899565b60208201526119c860408401611899565b60408201526119d960608401611899565b60608201526080830135828111156119f057600080fd5b6119fc8a8286016118c8565b60808301525060a083013560a082015260c083013560c0820152611a2260e0840161194a565b60e0820152955060208701359450604087013593506060870135915080821115611a4b57600080fd5b50611a58878288016118c8565b91505092959194509250565b60005b83811015611a7f578181015183820152602001611a67565b83811115611a8e576000848401525b50505050565b60008151808452611aac816020860160208601611a64565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611b136040850182611a94565b949350505050565b6000815160808452611b306080850182611ade565b905060208301516020850152604083015115156040850152606083015160608501528091505092915050565b604081526000611b6f6040830185611b1b565b82810360208401526113ad8185611b1b565b600060208284031215611b9357600080fd5b8135611b9e81611877565b9392505050565b600082601f830112611bb657600080fd5b81356020611bc66118e9836118a4565b82815260069290921b84018101918181019086841115611be557600080fd5b8286015b848110156119315760408189031215611c025760008081fd5b611c0a6117ab565b8135611c1581611877565b81528185013585820152835291830191604001611be9565b600060e08284031215611c3f57600080fd5b611c476117ce565b9050611c5282611899565b8152602082013567ffffffffffffffff80821115611c6f57600080fd5b611c7b85838601611ba5565b6020840152611c8c60408501611899565b60408401526060840135915080821115611ca557600080fd5b611cb1858386016118c8565b60608401526080840135915080821115611cca57600080fd5b50611cd7848285016118c8565b60808301525060a082013560a082015260c082013560c082015292915050565b600080600060608486031215611d0c57600080fd5b833567ffffffffffffffff811115611d2357600080fd5b611d2f86828701611c2d565b935050602084013591506040840135611d478161193c565b809150509250925092565b604081526000611d656040830185611b1b565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600060208284031215611d9c57600080fd5b813567ffffffffffffffff811115611db357600080fd5b611b1384828501611c2d565b6000602080835260808301845182850152818501516040850152604085015160608086015281815180845260a08701915060a08160051b8801019350848301925060005b81811015611e4f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60888603018352611e3d858551611ade565b94509285019291850191600101611e03565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110611ec2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016105c18284611e8b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611f4957815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611f17565b509495945050505050565b60608152611f66606082018551611e8b565b602084015173ffffffffffffffffffffffffffffffffffffffff908116608083015260408501511660a08201526060840151600090611fbd60c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808501516101008060e0850152611fda610160850183611f03565b915060a0870151818501525060c086015161012084015260e086015161200561014085018215159052565b5082810360208401526120188186611f03565b915050826040830152949350505050565b80516118728161193c565b6000602080838503121561204757600080fd5b825167ffffffffffffffff8082111561205f57600080fd5b908401906080828703121561207357600080fd5b61207b6117f1565b82518281111561208a57600080fd5b83016040818903121561209c57600080fd5b6120a46117ab565b81516120af81611877565b815281860151848111156120c257600080fd5b80830192505088601f8301126120d757600080fd5b8151848111156120e9576120e9611752565b612119877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611814565b9450808552898782850101111561212f57600080fd5b61213e81888701898601611a64565b50808601849052825250828401518185015261215c60408401612029565b6040820152606083015160608201528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156121ba576121ba612178565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156121f7576121f7612178565b500290565b600082612232577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561224957600080fd5b5051919050565b60008282101561226257612262612178565b500390565b602081526000611b9e6020830184611a9456fea264697066735822122062a2ca1eb00b46484704ebc3745cb0199763e60cd447c42272869be949de054264736f6c634300080a003360806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a003360e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a018061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a6146100f45780638da5cb5b146100fc578063d7aa2e3514610124578063f2fde38b1461015557600080fd5b80631bf64c411461008d57806345330666146100b657806354fd4d50146100cb5780636f33547d146100e1575b600080fd5b6100a061009b366004611436565b610168565b6040516100ad919061158a565b60405180910390f35b6100c96100c43660046115f9565b61027d565b005b6100d3600281565b6040519081526020016100ad565b6100a06100ef366004611436565b61035a565b6100c9610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ad565b6100d361013236600461164a565b600160209081526000938452604080852082529284528284209052825290205481565b6100c9610163366004611695565b6105a1565b6101a56040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040805160028082526060820183526000926020830190803683370190505090508360400151816000815181106101de576101de6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836060015181600181518110610230576102306116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102758484836106d1565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610303576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526001602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103976040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60808381015151604080516003808252938101909152909160009190602082016060803683370190505090508460400151816000815181106103db576103db6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084606001518160028151811061042d5761042d6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8281101561050b5785608001518181518110610488576104886116b9565b6020026020010151826001815181106104a3576104a36116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104ea8787856106d1565b90506104f98188876000610aa7565b15610502578094505b5060010161046a565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b61059f6000610ac3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b73ffffffffffffffffffffffffffffffffffffffff81166106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102fa565b6106ce81610ac3565b50565b61070e6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600061071985610b38565b1561080a5760a08501516040517fd06ca61f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169163d06ca61f9161077691908790600401611739565b600060405180830381865afa9250505080156107d257506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107cf9190810190611752565b60015b6107db576108e6565b80600182516107ea9190611812565b815181106107fa576107fa6116b9565b60200260200101519150506108e6565b60a08501516040517f1f00ca7400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861691631f00ca749161086291908790600401611739565b600060405180830381865afa9250505080156108be57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108bb9190810190611752565b60015b6108c7576108e6565b806000815181106108da576108da6116b9565b60200260200101519150505b8015610a9f57602082018190526001604083015261090685858584610bd1565b826000018190525060008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190611829565b90506000600185516109919190611812565b905060005b81811015610a9b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812087519091908890849081106109da576109da6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087836001610a2c9190611846565b81518110610a3c57610a3c6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485606001818151610a909190611846565b905250600101610996565b5050505b509392505050565b6000610aba858585866060015186610e3c565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082516002811115610b4e57610b4e61185e565b1480610b6c5750600182516002811115610b6a57610b6a61185e565b145b15610b7957506001919050565b600282516002811115610b8e57610b8e61185e565b1415610b9c57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b604080518082019091526000815260606020820152600185516002811115610bfb57610bfb61185e565b1415610cf8576040805180820190915273ffffffffffffffffffffffffffffffffffffffff85168152602081017fbdbeaa3100000000000000000000000000000000000000000000000000000000610c538886610f56565b86610c6042610e10611846565b604051602401610c72939291906118ce565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529050610275565b600085516002811115610d0d57610d0d61185e565b1415610d93576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f38ed17390000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b60208a01518890610d7f42610e10611846565b604051602401610c729594939291906118f7565b600285516002811115610da857610da861185e565b1415610e07576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f8803dbee0000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60008560400151610e4f57506000610aba565b8360400151610e6057506001610aba565b6000610ebd8688602001516b033b2e3c9fd0803ce8000000868b60600151610e889190611940565b610e92919061197d565b60208901516b033b2e3c9fd0803ce8000000610eae898b611940565b610eb8919061197d565b611077565b9050600086516002811115610ed457610ed461185e565b1480610ef25750600186516002811115610ef057610ef061185e565b145b15610efe579050610aba565b600286516002811115610f1357610f1361185e565b1415610f2157159050610aba565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60a0820151600090610f7d84610f78856b033b2e3c9fd0803ce8000000611940565b610f90565b610f87919061197d565b90505b92915050565b60008260e0015115610fa457506000610f8a565b600083516002811115610fb957610fb961185e565b1480610fd75750600183516002811115610fd557610fd561185e565b145b1561100a5760c083015161271090610fef9082611812565b610ff99084611940565b611003919061197d565b9050610f8a565b60028351600281111561101f5761101f61185e565b14156110425760c083015161103690612710611846565b610ff961271084611940565b82516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60006110b76040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611168565b6110c0856111f7565b6110c9846111f7565b6110d2836111f7565b6110db826111f7565b6110ed6110e88587611812565b6111f7565b6110fa6110e88385611812565b61110386610b38565b611124576111118284611846565b61111b8587611846565b10159050610aba565b8385101580156111345750818310155b1561114d576111438284611812565b61111b8587611812565b83851061115b57600161115e565b60005b9695505050505050565b6106ce8160405160240161117c91906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611284565b6106ce8160405160240161120d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156112f8576112f86112a5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611345576113456112a5565b604052919050565b80356003811061135c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106ce57600080fd5b803561135c81611361565b600067ffffffffffffffff8211156113a8576113a86112a5565b5060051b60200190565b600082601f8301126113c357600080fd5b813560206113d86113d38361138e565b6112fe565b82815260059290921b840181019181810190868411156113f757600080fd5b8286015b8481101561141b57803561140e81611361565b83529183019183016113fb565b509695505050505050565b8035801515811461135c57600080fd5b6000806040838503121561144957600080fd5b823567ffffffffffffffff8082111561146157600080fd5b90840190610100828703121561147657600080fd5b61147e6112d4565b6114878361134d565b815261149560208401611383565b60208201526114a660408401611383565b60408201526114b760608401611383565b60608201526080830135828111156114ce57600080fd5b6114da888286016113b2565b60808301525060a083013560a082015260c083013560c082015261150060e08401611426565b60e0820152935061151691505060208401611383565b90509250929050565b6000815180845260005b8181101561154557602081850181015186830182015201611529565b81811115611557576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c08301526000906115cd60e084018261151f565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000806000806080858703121561160f57600080fd5b843561161a81611361565b9350602085013561162a81611361565b9250604085013561163a81611361565b9396929550929360600135925050565b60008060006060848603121561165f57600080fd5b833561166a81611361565b9250602084013561167a81611361565b9150604084013561168a81611361565b809150509250925092565b6000602082840312156116a757600080fd5b81356116b281611361565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561172e57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016116fc565b509495945050505050565b82815260406020820152600061027560408301846116e8565b6000602080838503121561176557600080fd5b825167ffffffffffffffff81111561177c57600080fd5b8301601f8101851361178d57600080fd5b805161179b6113d38261138e565b81815260059190911b820183019083810190878311156117ba57600080fd5b928401925b828410156117d8578351825292840192908401906117bf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611824576118246117e3565b500390565b60006020828403121561183b57600080fd5b81516116b281611361565b60008219821115611859576118596117e3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106118c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b8381526060602082015260006118e760608301856116e8565b9050826040830152949350505050565b85815284602082015260a06040820152600061191660a08301866116e8565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611978576119786117e3565b500290565b6000826119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000610f87602083018461151f56fea2646970667358221220042a62b4d425a2205fa828887bf063a55ef88bc4c19cee1e98235c23b32ccdf764736f6c634300080a003360806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a003360e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a0033608060405234801561001057600080fd5b5061001a33610081565b73e592427a0aece92de3edee1f18e0157c0586156460005260016020527fbad1c9453febe4a6446e59e386c36af7924acc0d372d29859fea25e7a6eaac1780546001600160a01b03191673b27308f9f90d607463bb33ea1bebb41c27ce5ab61790556100d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612604806100e06000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80636f33547d11610081578063c67903ea1161005b578063c67903ea14610208578063d7aa2e3514610269578063f2fde38b1461029a57600080fd5b80636f33547d146101cf578063715018a6146101e25780638da5cb5b146101ea57600080fd5b806345330666116100b2578063453306661461017d5780634acc79ed1461019257806354fd4d50146101b957600080fd5b80631b162e56146100d95780631bf64c41146101025780632a10672614610122575b600080fd5b6100ec6100e7366004611e57565b6102ad565b6040516100f99190611f30565b60405180910390f35b61011561011036600461206e565b610427565b6040516100f99190612157565b6101586101303660046121c6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61019061018b3660046121ea565b610805565b005b6101a56101a036600461223b565b6108e2565b60405162ffffff90911681526020016100f9565b6101c1600281565b6040519081526020016100f9565b6101156101dd36600461206e565b61094a565b610190610f2e565b60005473ffffffffffffffffffffffffffffffffffffffff16610158565b610190610216366004612254565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b6101c161027736600461228d565b600260209081526000938452604080852082529284528284209052825290205481565b6101906102a83660046121c6565b610fbb565b606060006102ba866108e2565b905060006102c7856108e2565b905060008960028111156102dd576102dd6122d8565b14806102fa575060018960028111156102f8576102f86122d8565b145b61038e576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e885811b821660348601528a831b8416603786015286901b16604b8401528a901b16604e82015260620160405160208183030381529060405261041a565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e886811b821660348601528a831b8416603786015285901b16604b84015286901b16604e8201526062016040516020818303038152906040525b9998505050505050505050565b6104646040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600283516002811115610479576104796122d8565b146104855760006104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8160200181815250506000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190612307565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160009081205490911691505b60038110156107fd5761059c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6105a5866110eb565b156106c6578273ffffffffffffffffffffffffffffffffffffffff1663f7729d43876040015188606001516105d9866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156106a2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261069f91810190612324565b60015b6106ab576107de565b80156106c0576106bd87828886611184565b91505b506107de565b8273ffffffffffffffffffffffffffffffffffffffff166330d07f21876040015188606001516106f5866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156107be575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107bb91810190612324565b60015b6107c7576107de565b80156107dc576107d987828886611184565b91505b505b6107eb81878660006112a9565b156107f4578093505b50600101610556565b505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b60006003821061091e576040517f50c1fe4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811561093c578160011461093457611388610940565b610bb8610940565b6103e85b61ffff1692915050565b6109876040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc9190612307565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040016000908120546080870151519216925085516002811115610a4457610a446122d8565b1480610a625750600185516002811115610a6057610a606122d8565b145b610a8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a8f565b60005b602084015260005b81811015610f255760005b6003811015610f1c5760005b6003811015610f13576000610af089600001518a60400151858c608001518881518110610add57610add61233d565b6020026020010151868e606001516102ad565b9050600080610afe8b6110eb565b15610be15760a08b01516040517fcdca175300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169163cdca175391610b5a91879160040161236c565b6020604051808303816000875af1925050508015610bb3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bb091810190612324565b60015b610bbc57610cbb565b8015801590610bce5750896020015181115b15610bdb57809250600191505b50610cbb565b60a08b01516040517f2f80bb1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691632f80bb1d91610c3891879160040161236c565b6020604051808303816000875af1925050508015610c91575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c8e91810190612324565b60015b610c9a57610cbb565b8015801590610cac5750896020015181105b15610cb957809250600191505b505b8015610f0557600160408a015260208901829052610cdb8b838c866112c7565b896000018190525060008a73ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190612307565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812060808f0151805193945090928a908110610d9557610d9561233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e608001518a81518110610eb157610eb161233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efe91906123bd565b60608b0152505b505050806001019050610aae565b50600101610aa2565b50600101610a97565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b610fb9600061159d565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b73ffffffffffffffffffffffffffffffffffffffff81166110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610882565b6110e88161159d565b50565b60008082516002811115611101576111016122d8565b148061111f575060018251600281111561111d5761111d6122d8565b145b1561112c57506001919050565b600282516002811115611141576111416122d8565b141561114f57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6111c16040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60016040820152602081018490526111db85858585611612565b816000018190525060008373ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612307565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208a82015185168452825280832060609a8b01519094168352929052205495820195909552949350505050565b60006112bc8585858660600151866119a4565b90505b949350505050565b6040805180820190915260008152606060208201526001855160028111156112f1576112f16122d8565b14156113f4576000604051806060016040528084815260200142610e1061131891906123bd565b81526020016113278888611ac7565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f4f18d9060e01b8360405160240161136c9190612416565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905291506112bf9050565b600085516002811115611409576114096122d8565b14156114ae5760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061145091906123bd565b815260a088015160208201526040016114698888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163c04b8d5960e01b8360405160240161136c91906124b1565b6002855160028111156114c3576114c36122d8565b14156115685760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061150a91906123bd565b815260a088015160208201526040016115238888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f28c049860e01b8360405160240161136c91906124b1565b84516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600081526060602082015260018551600281111561163c5761163c6122d8565b141561175e5760006040518060c00160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001611698856108e2565b62ffffff1681526020016116ae42610e106123bd565b81526020016116bd8888611ac7565b8152600060209182015260408051808201825273ffffffffffffffffffffffffffffffffffffffff8881168252825185518216602482015285850151821660448201529285015162ffffff16606484015260608501516084840152608085015160a484015260a08501511660c4830152929350908201907fc7fbf4de000000000000000000000000000000000000000000000000000000009060e40161136c565b600085516002811115611773576117736122d8565b1415611881576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016117d0856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161180642610e106123bd565b815260a0880151602082015260400161181f8888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163414bf38960e01b8360405160240161136c91906124c4565b600285516002811115611896576118966122d8565b1415611568576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016118f3856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161192942610e106123bd565b815260a088015160208201526040016119428888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163db3e219860e01b8360405160240161136c91906124c4565b600085604001516119b757506000611abe565b83604001516119c857506001611abe565b6000611a258688602001516b033b2e3c9fd0803ce8000000868b606001516119f0919061253f565b6119fa919061257c565b60208901516b033b2e3c9fd0803ce8000000611a16898b61253f565b611a20919061257c565b611be8565b9050600086516002811115611a3c57611a3c6122d8565b1480611a5a5750600186516002811115611a5857611a586122d8565b145b15611a66579050611abe565b600286516002811115611a7b57611a7b6122d8565b1415611a8957159050611abe565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b95945050505050565b60a0820151600090611aee84611ae9856b033b2e3c9fd0803ce800000061253f565b611b01565b611af8919061257c565b90505b92915050565b60008260e0015115611b1557506000611afb565b600083516002811115611b2a57611b2a6122d8565b1480611b485750600183516002811115611b4657611b466122d8565b145b15611b7b5760c083015161271090611b6090826125b7565b611b6a908461253f565b611b74919061257c565b9050611afb565b600283516002811115611b9057611b906122d8565b1415611bb35760c0830151611ba7906127106123bd565b611b6a6127108461253f565b82516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000611c286040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611cd9565b611c3185611d68565b611c3a84611d68565b611c4383611d68565b611c4c82611d68565b611c5e611c5985876125b7565b611d68565b611c6b611c5983856125b7565b611c74866110eb565b611c9557611c8282846123bd565b611c8c85876123bd565b10159050611abe565b838510158015611ca55750818310155b15611cbe57611cb482846125b7565b611c8c85876125b7565b838510611ccc576001611ccf565b60005b9695505050505050565b6110e881604051602401611ced9190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611df5565b6110e881604051602401611d7e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b803560038110611e2557600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146110e857600080fd5b8035611e2581611e2a565b60008060008060008060c08789031215611e7057600080fd5b611e7987611e16565b95506020870135611e8981611e2a565b9450604087013593506060870135611ea081611e2a565b92506080870135915060a0870135611eb781611e2a565b809150509295509295509295565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611af86020830184611ec5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611f9657611f96611f43565b60405290565b600082601f830112611fad57600080fd5b8135602067ffffffffffffffff80831115611fca57611fca611f43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561200d5761200d611f43565b60405293845285810183019383810192508785111561202b57600080fd5b83870191505b8482101561205357813561204481611e2a565b83529183019190830190612031565b979650505050505050565b80358015158114611e2557600080fd5b6000806040838503121561208157600080fd5b823567ffffffffffffffff8082111561209957600080fd5b9084019061010082870312156120ae57600080fd5b6120b6611f72565b6120bf83611e16565b81526120cd60208401611e4c565b60208201526120de60408401611e4c565b60408201526120ef60608401611e4c565b606082015260808301358281111561210657600080fd5b61211288828601611f9c565b60808301525060a083013560a082015260c083013560c082015261213860e0840161205e565b60e0820152935061214e91505060208401611e4c565b90509250929050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c083015260009061219a60e0840182611ec5565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000602082840312156121d857600080fd5b81356121e381611e2a565b9392505050565b6000806000806080858703121561220057600080fd5b843561220b81611e2a565b9350602085013561221b81611e2a565b9250604085013561222b81611e2a565b9396929550929360600135925050565b60006020828403121561224d57600080fd5b5035919050565b6000806040838503121561226757600080fd5b823561227281611e2a565b9150602083013561228281611e2a565b809150509250929050565b6000806000606084860312156122a257600080fd5b83356122ad81611e2a565b925060208401356122bd81611e2a565b915060408401356122cd81611e2a565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561231957600080fd5b81516121e381611e2a565b60006020828403121561233657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600061237f6040830185611ec5565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123d0576123d061238e565b500190565b6020810160038310612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6020815260008251606060208401526124326080840182611ec5565b905060208401516040840152604084015160608401528091505092915050565b6000815160a0845261246760a0850182611ec5565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000611af86020830184612452565b6101008101611afb828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125775761257761238e565b500290565b6000826125b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156125c9576125c961238e565b50039056fea2646970667358221220f48bf290d42d727585d0174d5aecb1c111d9a28593d6c27486ce6672041893ce64736f6c634300080a0033a2646970667358221220cefb1fb69000e0a21c381827a9bf510c232b8b23e35bda5be1a3d89c2435cfab64736f6c634300080a0033";
789
-
790
- type NormalTokenPathFinderTestConstructorParams =
791
- | [signer?: Signer]
792
- | ConstructorParameters<typeof ContractFactory>;
793
-
794
- const isSuperArgs = (
795
- xs: NormalTokenPathFinderTestConstructorParams
796
- ): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
797
-
798
- export class NormalTokenPathFinderTest__factory extends ContractFactory {
799
- constructor(...args: NormalTokenPathFinderTestConstructorParams) {
800
- if (isSuperArgs(args)) {
801
- super(...args);
802
- } else {
803
- super(_abi, _bytecode, args[0]);
804
- }
805
- }
806
-
807
- override deploy(
808
- overrides?: Overrides & { from?: string | Promise<string> }
809
- ): Promise<NormalTokenPathFinderTest> {
810
- return super.deploy(overrides || {}) as Promise<NormalTokenPathFinderTest>;
811
- }
812
- override getDeployTransaction(
813
- overrides?: Overrides & { from?: string | Promise<string> }
814
- ): TransactionRequest {
815
- return super.getDeployTransaction(overrides || {});
816
- }
817
- override attach(address: string): NormalTokenPathFinderTest {
818
- return super.attach(address) as NormalTokenPathFinderTest;
819
- }
820
- override connect(signer: Signer): NormalTokenPathFinderTest__factory {
821
- return super.connect(signer) as NormalTokenPathFinderTest__factory;
822
- }
823
-
824
- static readonly bytecode = _bytecode;
825
- static readonly abi = _abi;
826
- static createInterface(): NormalTokenPathFinderTestInterface {
827
- return new utils.Interface(_abi) as NormalTokenPathFinderTestInterface;
828
- }
829
- static connect(
830
- address: string,
831
- signerOrProvider: Signer | Provider
832
- ): NormalTokenPathFinderTest {
833
- return new Contract(
834
- address,
835
- _abi,
836
- signerOrProvider
837
- ) as NormalTokenPathFinderTest;
838
- }
839
- }