@keep-network/tbtc-v2 1.0.0-dev.6 → 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 (120) hide show
  1. package/artifacts/.chainId +1 -1
  2. package/artifacts/Bank.json +40 -50
  3. package/artifacts/Bridge.json +50 -431
  4. package/artifacts/BridgeGovernance.json +21 -21
  5. package/artifacts/BridgeGovernanceParameters.json +10 -10
  6. package/artifacts/Deposit.json +10 -10
  7. package/artifacts/DepositSweep.json +10 -10
  8. package/artifacts/DonationVault.json +14 -14
  9. package/artifacts/Fraud.json +10 -10
  10. package/artifacts/LightRelay.json +34 -34
  11. package/artifacts/MaintainerProxy.json +44 -44
  12. package/artifacts/MovingFunds.json +10 -10
  13. package/artifacts/Redemption.json +10 -10
  14. package/artifacts/TBTC.json +36 -37
  15. package/artifacts/TBTCVault.json +43 -43
  16. package/artifacts/VendingMachine.json +34 -35
  17. package/artifacts/Wallets.json +10 -10
  18. package/artifacts/solcInputs/7cc3eda3cb3ff2522d18b5e7b31ea228.json +102 -0
  19. package/artifacts/solcInputs/{79a96d1cf4af176d93e6844dc248dcff.json → 887fad6b16575ba42183543c324eeb0e.json} +1 -1
  20. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  21. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  22. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  23. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  24. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  25. package/build/contracts/bridge/BridgeGovernanceParameters.sol/BridgeGovernanceParameters.dbg.json +1 -1
  26. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  27. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  28. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  29. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  30. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  31. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  32. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  33. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  34. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  35. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  36. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  37. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  38. package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.dbg.json +1 -1
  39. package/build/contracts/relay/LightRelay.sol/ILightRelay.dbg.json +1 -1
  40. package/build/contracts/relay/LightRelay.sol/LightRelay.dbg.json +1 -1
  41. package/build/contracts/relay/LightRelay.sol/RelayUtils.dbg.json +1 -1
  42. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  43. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  44. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  45. package/build/contracts/vault/TBTCOptimisticMinting.sol/TBTCOptimisticMinting.dbg.json +1 -1
  46. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  47. package/deploy/06_deploy_bridge.ts +7 -0
  48. package/deploy/09_deploy_bridge_governance.ts +2 -0
  49. package/export/artifacts/@keep-network/ecdsa/contracts/EcdsaDkgValidator.sol/EcdsaDkgValidator.json +26 -26
  50. package/export/artifacts/@keep-network/ecdsa/contracts/WalletRegistry.sol/WalletRegistry.json +251 -251
  51. package/export/artifacts/@keep-network/ecdsa/contracts/libraries/EcdsaDkg.sol/EcdsaDkg.json +2 -2
  52. package/export/artifacts/@keep-network/ecdsa/contracts/libraries/EcdsaInactivity.sol/EcdsaInactivity.json +25 -25
  53. package/export/artifacts/@keep-network/random-beacon/contracts/ReimbursementPool.sol/ReimbursementPool.json +47 -47
  54. package/export/artifacts/@keep-network/sortition-pools/contracts/Chaosnet.sol/Chaosnet.json +21 -21
  55. package/export/artifacts/@keep-network/sortition-pools/contracts/Rewards.sol/Rewards.json +16 -16
  56. package/export/artifacts/@keep-network/sortition-pools/contracts/SortitionPool.sol/SortitionPool.json +204 -204
  57. package/export/artifacts/@keep-network/sortition-pools/contracts/SortitionTree.sol/SortitionTree.json +26 -26
  58. package/export/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +42 -42
  59. package/export/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +34 -34
  60. package/export/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +74 -74
  61. package/export/artifacts/@openzeppelin/contracts/token/ERC721/ERC721.sol/ERC721.json +62 -62
  62. package/export/artifacts/@thesis/solidity-contracts/contracts/token/ERC20WithPermit.sol/ERC20WithPermit.json +77 -77
  63. package/export/artifacts/@thesis/solidity-contracts/contracts/token/MisfundRecovery.sol/MisfundRecovery.json +38 -38
  64. package/export/artifacts/contracts/bank/Bank.sol/Bank.json +75 -75
  65. package/export/artifacts/contracts/bridge/Bridge.sol/Bridge.json +326 -326
  66. package/export/artifacts/contracts/bridge/VendingMachine.sol/VendingMachine.json +104 -104
  67. package/export/artifacts/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +147 -147
  68. package/export/artifacts/contracts/relay/LightRelay.sol/LightRelay.json +74 -74
  69. package/export/artifacts/contracts/token/TBTC.sol/TBTC.json +100 -100
  70. package/export/artifacts/contracts/vault/DonationVault.sol/DonationVault.json +19 -19
  71. package/export/artifacts/contracts/vault/TBTCVault.sol/TBTCVault.json +176 -176
  72. package/export/deploy/06_deploy_bridge.js +30 -8
  73. package/export/deploy/09_deploy_bridge_governance.js +11 -7
  74. package/export/hardhat.config.js +1 -0
  75. package/export/typechain/factories/WalletRegistry__factory.js +1 -1
  76. package/export.json +13069 -0
  77. package/package.json +6 -6
  78. package/artifacts/BLS.json +0 -223
  79. package/artifacts/BeaconAuthorization.json +0 -273
  80. package/artifacts/BeaconDkg.json +0 -241
  81. package/artifacts/BeaconDkgValidator.json +0 -501
  82. package/artifacts/BeaconInactivity.json +0 -151
  83. package/artifacts/BeaconSortitionPool.json +0 -1187
  84. package/artifacts/EcdsaDkgValidator.json +0 -517
  85. package/artifacts/EcdsaInactivity.json +0 -156
  86. package/artifacts/EcdsaSortitionPool.json +0 -1187
  87. package/artifacts/KeepRegistry.json +0 -99
  88. package/artifacts/KeepStake.json +0 -286
  89. package/artifacts/KeepToken.json +0 -711
  90. package/artifacts/KeepTokenStaking.json +0 -483
  91. package/artifacts/NuCypherStakingEscrow.json +0 -287
  92. package/artifacts/NuCypherToken.json +0 -711
  93. package/artifacts/RandomBeacon.json +0 -3271
  94. package/artifacts/RandomBeaconChaosnet.json +0 -252
  95. package/artifacts/RandomBeaconGovernance.json +0 -3499
  96. package/artifacts/ReimbursementPool.json +0 -509
  97. package/artifacts/T.json +0 -1148
  98. package/artifacts/TBTCToken.json +0 -738
  99. package/artifacts/TokenStaking.json +0 -2288
  100. package/artifacts/TokenholderGovernor.json +0 -1795
  101. package/artifacts/TokenholderTimelock.json +0 -1058
  102. package/artifacts/VendingMachineKeep.json +0 -400
  103. package/artifacts/VendingMachineNuCypher.json +0 -400
  104. package/artifacts/WalletRegistry.json +0 -1962
  105. package/artifacts/WalletRegistryGovernance.json +0 -2863
  106. package/export/artifacts/contracts/test/BankStub.sol/BankStub.json +0 -11969
  107. package/export/artifacts/contracts/test/BridgeStub.sol/BridgeStub.json +0 -51939
  108. package/export/artifacts/contracts/test/GoerliLightRelay.sol/GoerliLightRelay.json +0 -11982
  109. package/export/artifacts/contracts/test/HeartbeatStub.sol/HeartbeatStub.json +0 -822
  110. package/export/artifacts/contracts/test/LightRelayStub.sol/LightRelayStub.json +0 -12723
  111. package/export/artifacts/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.json +0 -2160
  112. package/export/artifacts/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +0 -3407
  113. package/export/artifacts/contracts/test/TestERC20.sol/TestERC20.json +0 -14257
  114. package/export/artifacts/contracts/test/TestERC721.sol/TestERC721.json +0 -11816
  115. package/export/artifacts/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.json +0 -1160
  116. package/export/test/integration/data/bls.js +0 -12
  117. package/export/test/integration/data/integration.js +0 -133
  118. package/export/test/integration/utils/ecdsa-wallet-registry.js +0 -370
  119. package/export/test/integration/utils/random-beacon.js +0 -193
  120. package/export/test/integration/utils/staking.js +0 -83
@@ -153,7 +153,29 @@ var func = function (hre) {
153
153
  _f)]))];
154
154
  case 13:
155
155
  _b = __read.apply(void 0, [_h.sent(), 2]), bridge = _b[0], proxyDeployment = _b[1];
156
- if (!hre.network.tags.etherscan) return [3 /*break*/, 15];
156
+ if (!hre.network.tags.etherscan) return [3 /*break*/, 21];
157
+ return [4 /*yield*/, helpers.etherscan.verify(Deposit)];
158
+ case 14:
159
+ _h.sent();
160
+ return [4 /*yield*/, helpers.etherscan.verify(DepositSweep)];
161
+ case 15:
162
+ _h.sent();
163
+ return [4 /*yield*/, helpers.etherscan.verify(Redemption)];
164
+ case 16:
165
+ _h.sent();
166
+ return [4 /*yield*/, helpers.etherscan.verify(Wallets)];
167
+ case 17:
168
+ _h.sent();
169
+ return [4 /*yield*/, helpers.etherscan.verify(Fraud)];
170
+ case 18:
171
+ _h.sent();
172
+ return [4 /*yield*/, helpers.etherscan.verify(MovingFunds)
173
+ // We use `verify` instead of `verify:verify` as the `verify` task is defined
174
+ // in "@openzeppelin/hardhat-upgrades" to perform Etherscan verification
175
+ // of Proxy and Implementation contracts.
176
+ ];
177
+ case 19:
178
+ _h.sent();
157
179
  // We use `verify` instead of `verify:verify` as the `verify` task is defined
158
180
  // in "@openzeppelin/hardhat-upgrades" to perform Etherscan verification
159
181
  // of Proxy and Implementation contracts.
@@ -161,22 +183,22 @@ var func = function (hre) {
161
183
  address: proxyDeployment.address,
162
184
  constructorArgsParams: proxyDeployment.args,
163
185
  })];
164
- case 14:
186
+ case 20:
165
187
  // We use `verify` instead of `verify:verify` as the `verify` task is defined
166
188
  // in "@openzeppelin/hardhat-upgrades" to perform Etherscan verification
167
189
  // of Proxy and Implementation contracts.
168
190
  _h.sent();
169
- _h.label = 15;
170
- case 15:
171
- if (!hre.network.tags.tenderly) return [3 /*break*/, 17];
191
+ _h.label = 21;
192
+ case 21:
193
+ if (!hre.network.tags.tenderly) return [3 /*break*/, 23];
172
194
  return [4 /*yield*/, hre.tenderly.verify({
173
195
  name: "Bridge",
174
196
  address: bridge.address,
175
197
  })];
176
- case 16:
198
+ case 22:
177
199
  _h.sent();
178
- _h.label = 17;
179
- case 17: return [2 /*return*/];
200
+ _h.label = 23;
201
+ case 23: return [2 /*return*/];
180
202
  }
181
203
  });
182
204
  });
@@ -72,24 +72,28 @@ var func = function (hre) {
72
72
  })];
73
73
  case 4:
74
74
  bridgeGovernance = _a.sent();
75
- if (!hre.network.tags.etherscan) return [3 /*break*/, 6];
76
- return [4 /*yield*/, helpers.etherscan.verify(bridgeGovernance)];
75
+ if (!hre.network.tags.etherscan) return [3 /*break*/, 7];
76
+ return [4 /*yield*/, helpers.etherscan.verify(bridgeGovernanceParameters)];
77
77
  case 5:
78
78
  _a.sent();
79
- _a.label = 6;
79
+ return [4 /*yield*/, helpers.etherscan.verify(bridgeGovernance)];
80
80
  case 6:
81
- if (!hre.network.tags.tenderly) return [3 /*break*/, 8];
81
+ _a.sent();
82
+ _a.label = 7;
83
+ case 7:
84
+ if (!hre.network.tags.tenderly) return [3 /*break*/, 9];
82
85
  return [4 /*yield*/, hre.tenderly.verify({
83
86
  name: "BridgeGovernance",
84
87
  address: bridgeGovernance.address,
85
88
  })];
86
- case 7:
89
+ case 8:
87
90
  _a.sent();
88
- _a.label = 8;
89
- case 8: return [2 /*return*/];
91
+ _a.label = 9;
92
+ case 9: return [2 /*return*/];
90
93
  }
91
94
  });
92
95
  });
93
96
  };
94
97
  exports.default = func;
95
98
  func.tags = ["BridgeGovernance"];
99
+ func.dependencies = ["Bridge"];
@@ -161,6 +161,7 @@ var config = {
161
161
  deployer: {
162
162
  default: 1,
163
163
  goerli: 0,
164
+ mainnet: 0, // "0x123694886DBf5Ac94DDA07135349534536D14cAf"
164
165
  },
165
166
  governance: {
166
167
  default: 2,
@@ -1928,7 +1928,7 @@ var _abi = [
1928
1928
  type: "function",
1929
1929
  },
1930
1930
  ];
1931
- var _bytecode = "0x60c06040523480156200001157600080fd5b5060405162006187380380620061878339810160408190526200003491620001a1565b6001600160a01b03808316608052811660a0526200005162000059565b5050620001e0565b6200006560ff62000068565b50565b606454600090610100900460ff161562000103578160ff166001148015620000a35750620000a1306200017c60201b6200272e1760201c565b155b620000fb5760405162461bcd60e51b815260206004820152602e60248201526000805160206200616783398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60645460ff808416911610620001625760405162461bcd60e51b815260206004820152602e60248201526000805160206200616783398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000f2565b506064805460ff191660ff92909216919091179055600190565b6001600160a01b03163b151590565b6001600160a01b03811681146200006557600080fd5b60008060408385031215620001b557600080fd5b8251620001c2816200018b565b6020840151909250620001d5816200018b565b809150509250929050565b60805160a051615e9d620002ca600039600081816104ea01528181610a3a01528181610a8701528181610adb01528181610b2901528181610d1501528181610f0901528181611374015281816115af0152818161169501528181611e950152818161222f015261253c0152600081816107e601528181610aa801528181610afc01528181610b4a01528181610c2a01528181610fa501528181611119015281816112ff015281816118780152818161198b01528181611d22015281816120d0015281816122cb015281816124bc0152818161255d015281816125bc01526126950152615e9d6000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80637e0049fd116101e9578063c9bacaad1161010f578063df07ce59116100ad578063f0820c921161007c578063f0820c921461097e578063f7186ce01461098f578063f854a27f146109a2578063fd2a4788146109b557600080fd5b8063df07ce5914610922578063e03e453514610935578063e686440f1461094a578063e83ab3a51461095d57600080fd5b8063d38bfff4116100e9578063d38bfff4146108c8578063d855c631146108db578063d8dc404d146108e3578063ded56d45146108f657600080fd5b8063c9bacaad1461088d578063cc562388146108a0578063d0bcc0e3146108b557600080fd5b8063a04e298011610187578063c09975cd11610156578063c09975cd14610828578063c0c53b8b1461083b578063c7c49c981461084e578063c88e70f41461087a57600080fd5b8063a04e2980146107c6578063b13b55b2146107d9578063b54a2374146107e1578063b5e9ce8b1461080857600080fd5b806388a59590116101c357806388a595901461073a5780638dcbdf4a146107755780639879d19b146107885780639c9de0281461079b57600080fd5b80637e0049fd146106e55780637e33cba6146106f8578063830f9e021461070b57600080fd5b806352902301116102ce5780636c9ecd641161026c578063770124d31161023b578063770124d3146105f2578063789d392a146105fa5780637b14729e146106755780637b35b4e6146106d257600080fd5b80636c9ecd64146105b15780636febd464146105c457806372cc8c6d146105d757806375e0ae5a146105df57600080fd5b8063663032cd116102a8578063663032cd1461057057806368c34948146105835780636a7f7a901461058b5780636b5f2bff1461059e57600080fd5b8063529023011461052f5780635aa6e6751461054a5780635c5b38701461055d57600080fd5b8063227fd44f1161033b5780633682a450116103155780633682a450146104bf57806342d86693146104d25780634cf088d9146104e55780634d99f4731461050c57600080fd5b8063227fd44f146104865780633137676614610499578063343bb927146104ac57600080fd5b8063167f051711610377578063167f0517146104325780631ae879e81461043a5780631c5b07621461044e5780631d35fa631461046157600080fd5b806308aa090b1461039e57806314a85474146103f1578063153622b314610406575b600080fd5b6103a66109c8565b6040516103e89190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b60405180910390f35b6104046103ff366004614e64565b610a2f565b005b6101065461041a906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b610404610ad4565b6101055461041a906001600160a01b031681565b61040461045c366004614eaf565b610b22565b60fc546001600160601b03165b6040516001600160601b0390911681526020016103e8565b610404610494366004614ecc565b610b72565b6104046104a7366004614ee9565b610bf1565b6104046104ba366004614f23565b610e40565b6104046104cd366004614eaf565b610ea4565b6104046104e0366004614eaf565b610eaf565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61051f61051a366004614f23565b611064565b60405190151581526020016103e8565b60fd5460fe54604080519283526020830191909152016103e8565b60005461041a906001600160a01b031681565b61040461056b366004614ee9565b61107f565b61040461057e366004614eaf565b6112b6565b61051f611358565b610404610599366004614e64565b611369565b6104046105ac366004614eaf565b6113be565b6104046105bf366004614f3c565b611437565b6104046105d2366004614f3c565b6114a9565b610404611513565b6104046105ed366004614eaf565b6115a8565b61051f6115d4565b610653610608366004614f23565b60408051606080820183526000808352602080840182905292840181905293845260ca8252928290208251938401835280548452600181015491840191909152600201549082015290565b60408051825181526020808401519082015291810151908201526060016103e8565b6106a36065546001600160601b038116916001600160401b03600160601b8304811692600160a01b90041690565b604080516001600160601b0390941684526001600160401b0392831660208501529116908201526060016103e8565b6104046106e0366004614eaf565b6115e0565b6104046106f3366004614ee9565b611668565b61046e610706366004614eaf565b61168c565b61072c610719366004614f23565b6101046020526000908152604090205481565b6040519081526020016103e8565b60ff5461010054610101546101025461010354604080519586526020860194909452928401919091526060830152608082015260a0016103e8565b610404610783366004614f5e565b6116ba565b610404610796366004614fdd565b611772565b6107ae6107a9366004614eaf565b611b2b565b6040516001600160401b0390911681526020016103e8565b6104046107d436600461506b565b611b38565b610404611bea565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61081b610816366004614f23565b611c51565b6040516103e89190615100565b60325461041a906001600160a01b031681565b610404610849366004615113565b611c5e565b61041a61085c366004614eaf565b6001600160a01b039081166000908152606660205260409020541690565b610404610888366004614f5e565b611df7565b61040461089b366004614e64565b611e8a565b6108a8611edf565b6040516103e89190615169565b6104046108c3366004614eaf565b611eeb565b6104046108d6366004614eaf565b611f64565b610404611ff8565b6104046108f1366004615191565b612035565b61041a610904366004614eaf565b6001600160a01b039081166000908152606760205260409020541690565b61051f61093036600461520c565b6122a7565b61093d612498565b6040516103e891906152b3565b61051f610958366004614eaf565b612533565b61097061096b366004614ee9565b612582565b6040516103e89291906152c6565b6065546001600160601b031661046e565b61051f61099d366004614eaf565b61259a565b61046e6109b0366004614eaf565b612629565b61046e6109c3366004614eaf565b612707565b6109fa6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506040805160a0810182526099548152609a546020820152609b5491810191909152609c546060820152609d54608082015290565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a805760405162461bcd60e51b8152600401610a77906152e1565b60405180910390fd5b610acf60657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086868661273d565b505050565b610b2060657f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006128a9565b565b610b6f60657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612a83565b50565b6000546001600160a01b03163314610b9c5760405162461bcd60e51b8152600401610a7790615323565b60fc80546001600160601b0319166001600160601b0383169081179091556040519081527fe132b87eb6644ee4d4c3c32744f7e1c3906335a2d4f99330767bf573909c7d84906020015b60405180910390a150565b600080610bff609784612c62565b604051638871ca5d60e01b815263ffffffff8216600482015291935091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638871ca5d90602401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061535a565b6040805160018082528183019092529192506000919060208083019080368337019050506001600160a01b038084166000908152606760205260409020549192501681600081518110610cea57610cea61538d565b6001600160a01b03928316602091820292909201015260fc5460fd546040516383ddba8f60e01b81527f0000000000000000000000000000000000000000000000000000000000000000909316926383ddba8f92610d5a926001600160601b0390911691339087906004016153a3565b600060405180830381600087803b158015610d7457600080fd5b505af1925050508015610d85575060015b610dde5760fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f14621289a12ab59e0737decc388bba91d929c723defb4682d5d19b9a12ecfecb910160405180910390a2610e2f565b60fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f88f76c659db78142f88e94db3ca791869495394c6c1b3d412ced9022dc97c9e3910160405180910390a25b610e396097612fcb565b5050505050565b610105546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610a7790615416565b610e7660ca8261301f565b60405181907fa6ae4af610b8ada39d3675190ead27a5552631a8e33f53e4e37dbb082f11a73e90600090a250565b610b6f60658261306c565b6001600160a01b038181166000908152606660205260409020541680610ee75760405162461bcd60e51b8152600401610a779061544d565b604051632de9480760e01b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632de9480790602401606060405180830381865afa158015610f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f769190615477565b50604051637104c0e560e11b81526001600160a01b0385811660048301528281166024830152919350600092507f00000000000000000000000000000000000000000000000000000000000000009091169063e20981ca906044016020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101491906154b9565b6040516001600160601b03821681529091506001600160a01b038516907f38532b6dea69d7266fa923c7813d190be37625f2454ddfa3d93c45c79482e3fd9060200160405180910390a250505050565b600081815260ca602052604081206001015415155b92915050565b60005a905060006110916097846132cf565b9050600080806110b660c08701356110ac60208901896154d6565b60ca9291906136f6565b925092509250856040516020016110cd919061575c565b60405160208183030381529060405280519060200120837fbe8f27cef1f3d94120c9c547c3614f5b992fdb0c0a497cc920fde06546291ab460405160405180910390a38351156111a5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928560fe54426111559190615785565b6040518363ffffffff1660e01b8152600401611172929190615798565b600060405180830381600087803b15801561118c57600080fd5b505af11580156111a0573d6000803e3d6000fd5b505050505b6101055460405163547d07a160e11b81526004810185905260248101849052604481018390526001600160a01b039091169063a8fa0f4290606401600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b5050505061121c6097613771565b603254610100546001600160a01b0390911690637ad226dc905a61124090896157ba565b60ff5461124d9190615785565b6112579190615785565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b15801561129657600080fd5b505af11580156112aa573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b031633146112e05760405162461bcd60e51b8152600401610a7790615323565b604051632a59250560e21b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a9649414906024015b600060405180830381600087803b15801561134457600080fd5b505af1158015610e39573d6000803e3d6000fd5b600061136460976137d5565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113b15760405162461bcd60e51b8152600401610a77906152e1565b610acf6065848484613826565b6000546001600160a01b031633146113e85760405162461bcd60e51b8152600401610a7790615323565b61010680546001600160a01b0319166001600160a01b0383169081179091556040519081527f2b34e21b6daa8fcf8cba1c3ed709cbed2b0231d5fb60e9ccd8c2e75a5674bcb390602001610be6565b6000546001600160a01b031633146114615760405162461bcd60e51b8152600401610a7790615323565b60fd82905560fe81905560408051838152602081018390527ff3a6ee10a78fb7d212e87d9be970fb16bd7324e9dc9c38d21cd7ecde781a1d2a91015b60405180910390a15050565b610106546001600160a01b031633146115045760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74207468652052616e646f6d20426561636f6e006044820152606401610a77565b61150f609783613a61565b5050565b610105546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610a7790615416565b6115486097613b0e565b610106546040516310da3b0360e21b81523060048201526001600160a01b0390911690634368ec0c90602401600060405180830381600087803b15801561158e57600080fd5b505af11580156115a2573d6000803e3d6000fd5b50505050565b610b6f60657f000000000000000000000000000000000000000000000000000000000000000083613bd9565b60006113646097613e1a565b6000546001600160a01b0316331461160a5760405162461bcd60e51b8152600401610a7790615323565b6040516001600160a01b03821681527f0e2d2343d31b085b7c4e56d1c8a6ec79f7ab07460386f1c9a1756239fe2533ac9060200160405180910390a1603280546001600160a01b0319166001600160a01b0392909216919091179055565b61168161167860208301836154d6565b60ca9190613e54565b610b6f609782613fad565b600061107960657f0000000000000000000000000000000000000000000000000000000000000000846142bd565b6000546001600160a01b031633146116e45760405162461bcd60e51b8152600401610a7790615323565b6116ef6097866142f8565b6116fa609785614359565b6117056097846143ba565b6117106097836143fb565b61171b60978261445c565b604080518681526020810186905290810184905260608101839052608081018290527f59ae8ed7b3a7e5f6dde4cff478f0ac0aa652c5edc4f4757b09a778a430b02c569060a0015b60405180910390a15050505050565b60005a8535600081815261010460205260409020549192509085146117c95760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610a77565b6000806117d760ca84614516565b909250905060006117e960ca85614566565b905086866040516020016117fe9291906157cd565b60405160208183030381529060405280519060200120811461185a5760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642067726f7570206d656d6265727360581b6044820152606401610a77565b600073__$c28dd63714b1a086d50ecbb702fff9dbb7$__63f4df04be7f00000000000000000000000000000000000000000000000000000000000000008c87876040516020016118b4929190918252602082015260400190565b6040516020818303038152906040528d8d8d6040518763ffffffff1660e01b81526004016118e7969594939291906157ef565b600060405180830381865af4158015611904573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261192c9190810190615926565b60008681526101046020526040812080549293509061194a836159c4565b9091555050604080518a815233602082015286917f326e1ff7c130ed708307116f79cf7dbca649503e7082e5e35a19ceeee1523b39910160405180910390a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928260fe54426119c79190615785565b6040518363ffffffff1660e01b81526004016119e4929190615798565b600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b50611a279250505060608b0160408c016159dd565b15611a9a5761010554604051631ee74c0960e11b81526004810187905260248101869052604481018590526001600160a01b0390911690633dce981290606401600060405180830381600087803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b505050505b603254610101546001600160a01b0390911690637ad226dc905a611abe908a6157ba565b611ac89190615785565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b5050505050505050505050505050565b60006110796065836145a8565b6000546001600160a01b03163314611b625760405162461bcd60e51b8152600401610a7790615323565b606580546001600160601b0319166001600160601b038516179055611b88606583614640565b611b93606582614668565b604080516001600160601b03851681526001600160401b03848116602083015283168183015290517f544b726e42801bb47073854eeedae851903f66fe32a5bd24e626e10b90027b519181900360600190a1505050565b60005a9050611bf96097614690565b603254610102546001600160a01b0390911690637ad226dc905a611c1d90856157ba565b611c279190615785565b6040516001600160e01b031960e084901b168152600481019190915233602482015260440161132a565b606061107960ca83614717565b6000611c6a6001614752565b90508015611c82576064805461ff0019166101001790555b61010680546001600160a01b038086166001600160a01b0319928316179092556032805492851692909116919091179055611cbc336147e1565b606580546001600160601b031916690878678326eac9000000179055611ce66065623b5380614640565b611cf46065623b5380614668565b60fc80546001600160601b0319166815af1d78b58c400000179055606460fd556212750060fe55611d4760977f00000000000000000000000000000000000000000000000000000000000000008661483b565b611d546097612d006142f8565b611d616097612d00614359565b611d6e609761c3506143ba565b611d7b60976109156143fb565b611d876097601461445c565b62046cd060ff55620119406101005562016b4861010155611c52610102556108fc6101035580156115a2576064805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000546001600160a01b03163314611e215760405162461bcd60e51b8152600401610a7790615323565b60ff859055610100849055610101839055610102829055610103819055604080518681526020810186905290810184905260608101839052608081018290527f8a3e64fa6013a36bccca7362e8826b11ba41e57fb60f55309c0ca48904dad0829060a001611763565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ed25760405162461bcd60e51b8152600401610a77906152e1565b610acf6065848484614930565b600061136460976149fd565b6000546001600160a01b03163314611f155760405162461bcd60e51b8152600401610a7790615323565b61010580546001600160a01b0319166001600160a01b0383169081179091556040519081527fa1993af5a189ba5ad4155263c920cfee33ce0593a8eb231a13bb3ce6f39459e390602001610be6565b6000546001600160a01b03163314611f8e5760405162461bcd60e51b8152600401610a7790615323565b6001600160a01b038116611fef5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f206164647265604482015261737360f01b6064820152608401610a77565b610b6f816147e1565b60005a90506120076097614a93565b603254610103546001600160a01b0390911690637ad226dc905a61202b90856157ba565b611c2791906157ba565b610105546001600160a01b031633146120605760405162461bcd60e51b8152600401610a7790615416565b600061206d60ca85614566565b905082826040516020016120829291906157cd565b6040516020818303038152906040528051906020012081146120b65760405162461bcd60e51b8152600401610a77906159fa565b604051637bfcd47d60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f7f9a8fa9061210790879087906004016157cd565b600060405180830381865afa158015612124573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261214c9190810190615a3c565b90506000836001600160401b0381111561216857612168615377565b604051908082528060200260200182016040528015612191578160200160208202803683370190505b50905060005b8251811015612217576121db8382815181106121b5576121b561538d565b60200260200101516001600160a01b039081166000908152606760205260409020541690565b8282815181106121ed576121ed61538d565b6001600160a01b03909216602092830291909101909101528061220f816159c4565b915050612197565b506040516383ddba8f60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906383ddba8f9061226a908c908c908c9087906004016153a3565b600060405180830381600087803b15801561228457600080fd5b505af1158015612298573d6000803e3d6000fd5b50505050505050505050505050565b604051635a48b46b60e01b81526001600160a01b03838116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690635a48b46b90602401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123369190615aca565b90508063ffffffff1660000361238e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f74206120736f72746974696f6e20706f6f6c206f70657261746f720000006044820152606401610a77565b600061239b60ca89614566565b905086866040516020016123b09291906157cd565b6040516020818303038152906040528051906020012081146123e45760405162461bcd60e51b8152600401610a77906159fa565b836001111580156123f55750858411155b61244d5760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206d656d62657220696e646578206973206f7574206f662072616044820152626e676560e81b6064820152608401610a77565b63ffffffff821687876124616001886157ba565b8181106124705761247061538d565b90506020020160208101906124859190615ae7565b63ffffffff161498975050505050505050565b60a054604051636c2530b960e01b81526064600482015260248101919091526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636c2530b990604401600060405180830381865afa15801561250b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113649190810190615926565b600061107960657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085614b12565b60006060612591609784614c86565b91509150915091565b6040516307b8c36760e51b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f7186ce090602401602060405180830381865afa158015612605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110799190615b04565b60008061264e836001600160a01b039081166000908152606660205260409020541690565b90506001600160a01b0381166126765760405162461bcd60e51b8152600401610a779061544d565b60405163439f18fd60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063873e31fa90602401602060405180830381865afa1580156126dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270091906154b9565b9392505050565b6001600160a01b0381166000908152606860205260408120546001600160601b0316611079565b6001600160a01b03163b151590565b6001600160a01b038084166000908152600188016020526040902054168061276557506128a1565b6040516307b8c36760e51b81526001600160a01b03828116600483015286169063f7186ce090602401602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf9190615b04565b1561289f57846001600160a01b031663a4e2d6346040518163ffffffff1660e01b8152600401602060405180830381865afa158015612812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128369190615b04565b1561289357604080516001600160601b038086168252841660208201526001600160a01b0380841692908716917f1b09380d63e78fd72c1d79a805a7e2dfadf02b22418e24bebff51376b7df33b0910160405180910390a361289f565b61289f87878784612a83565b505b505050505050565b3360008181526002850160205260409020546001600160a01b0316806128e15760405162461bcd60e51b8152600401610a779061544d565b6001600160a01b038116600090815260038601602052604081208054909190612918908890889086906001600160601b0316614d6a565b9050806001600160601b03166000036129735760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b836001600160a01b0316836001600160a01b03167f5075aaa89894a888eb2cac81a27320c60855febb0cf1706b66bdc754e640d43360405160405180910390a3604051630483483160e31b81526001600160a01b0386169063241a4188906129e19087908590600401615b21565b600060405180830381600087803b1580156129fb57600080fd5b505af1158015612a0f573d6000803e3d6000fd5b5050835467fffffffffffffffe19600160601b9091046001600160401b031601915061289f9050578654612a5390600160601b90046001600160401b031642615b43565b82546001600160401b0391909116600160601b0267ffffffffffffffff60601b1990911617825550505050505050565b6001600160a01b0380821660009081526002860160205260409020541680612abd5760405162461bcd60e51b8152600401610a779061544d565b6001600160a01b03808216600081815260038801602052604080822090519093861692917f1231fe5ee649a593b524a494cd53146a196380a872115a0d0fe16c0735afdf2691a36040516307b8c36760e51b81526001600160a01b03848116600483015285169063f7186ce090602401602060405180830381865afa158015612b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6e9190615b04565b15612bf5578054600090612b90908890889086906001600160601b0316614d6a565b60405163dc7520c560e01b81529091506001600160a01b0386169063dc7520c590612bc19087908590600401615b21565b600060405180830381600087803b158015612bdb57600080fd5b505af1158015612bef573d6000803e3d6000fd5b50505050505b805467fffffffffffffffe19600160601b9091046001600160401b0316016128a1578554612c3390600160601b90046001600160401b031642615b43565b81546001600160401b0391909116600160601b0267ffffffffffffffff60601b19909116178155505050505050565b6000806003612c70856149fd565b6003811115612c8157612c81615153565b14612cce5760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003840154600c850154612ce29190615785565b431115612d3d5760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f642068617320616c7265616479207061736044820152621cd95960ea1b6064820152608401610a77565b83600b015483604051602001612d53919061575c565b6040516020818303038152906040528051906020012014612ddc5760405162461bcd60e51b815260206004820152603a60248201527f526573756c7420756e646572206368616c6c656e67652069732064696666657260448201527f656e74207468616e20746865207375626d6974746564206f6e650000000000006064820152608401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92612e18928892600401615b6a565b600060405180830381865afa925050508015612e5657506040513d6000823e601f3d908101601f19168201604052612e539190810190615b8f565b60015b612ecb57336001600160a01b031684600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a0285436604051612ebe906020808252601390820152721d985b1a59185d1a5bdb881c995d995c9d1959606a1b604082015260600190565b60405180910390a3612f5a565b8115612f115760405162461bcd60e51b8152602060048201526015602482015274756e6a7573746966696564206368616c6c656e676560581b6044820152606401610a77565b336001600160a01b031686600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a028543683604051612f4f9190615100565b60405180910390a350505b600b8401549150612f6e60a0840184615c38565b612f7a600186356157ba565b818110612f8957612f8961538d565b9050602002016020810190612f9e9190615ae7565b9050836008015443612fb091906157ba565b600a8501556000600b8501819055600c8501555b9250929050565b60048101545a1015610b6f5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820657874726120676173206c656674000000000000006044820152606401610a77565b60008181526020839052604090206001015461304d5760405162461bcd60e51b8152600401610a7790615c81565b6000908152602091909152604081208181556001810182905560020155565b336001600160a01b0382166130c35760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722063616e206e6f74206265207a65726f20616464726573736044820152606401610a77565b6001600160a01b03818116600090815260018501602052604090205416156131435760405162461bcd60e51b815260206004820152602d60248201527f4f70657261746f7220616c72656164792073657420666f72207468652073746160448201526c35b4b73390383937bb34b232b960991b6064820152608401610a77565b6001600160a01b03828116600090815260028501602052604090205416156131ad5760405162461bcd60e51b815260206004820152601f60248201527f4f70657261746f72206164647265737320616c726561647920696e20757365006044820152606401610a77565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316156132405760405162461bcd60e51b815260206004820152603160248201527f546865726520697320612070656e64696e6720617574686f72697a6174696f6e60448201527008191958dc99585cd9481c995c5d595cdd607a1b6064820152608401610a77565b826001600160a01b0316826001600160a01b03167fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c160405160405180910390a3506001600160a01b03908116600081815260018501602090815260408083208054959096166001600160a01b031995861681179096559482526002909501909452919092208054909216179055565b606060036132dc846149fd565b60038111156132ed576132ed615153565b1461333a5760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003830154600c84015460009161335091615785565b90508043116133ad5760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f6420686173206e6f7420706173736564206044820152621e595d60ea1b6064820152608401610a77565b83600b0154836040516020016133c3919061575c565b604051602081830303815290604052805190602001201461344c5760405162461bcd60e51b815260206004820152603960248201527f526573756c7420756e64657220617070726f76616c206973206469666665726560448201527f6e74207468616e20746865207375626d6974746564206f6e65000000000000006064820152608401610a77565b83546000906001600160a01b0316638871ca5d61346c60a0870187615c38565b613478600189356157ba565b8181106134875761348761538d565b905060200201602081019061349c9190615ae7565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156134de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613502919061535a565b9050336001600160a01b0382161480613528575060068501546135259083615785565b43115b6135a65760405162461bcd60e51b815260206004820152604360248201527f4f6e6c792074686520444b4720726573756c74207375626d697474657220636160448201527f6e20617070726f76652074686520726573756c742061742074686973206d6f6d606482015262195b9d60ea1b608482015260a401610a77565b6135b36040850185615c38565b90506001600160401b038111156135cc576135cc615377565b6040519080825280602002602001820160405280156135f5578160200160208202803683370190505b50925060005b6136086040860186615c38565b90508110156136bc5761361e60a0860186615c38565b600161362d6040890189615c38565b8581811061363d5761363d61538d565b90506020020160208101906136529190615cd1565b61365c9190615cec565b60ff1681811061366e5761366e61538d565b90506020020160208101906136839190615ae7565b8482815181106136955761369561538d565b63ffffffff90921660209283029190910190910152806136b4816159c4565b9150506135fb565b50600b8501546040513391907fe6e9d5eba171e82025efb3f3d44fd35905e7283d104284cb9f3bbc5bf1e4276f90600090a3505092915050565b6000806000848460405161370b929190615d05565b6040519081900390209250613724602060008688615d15565b61372d91615d3f565b915061373c8460208188615d15565b61374591615d3f565b600084815260209890985260409097209586555060018501819055600290940185905594929392915050565b60006008820181905560098201819055600a8201819055600b8201819055600c820181905581546040805163a69df4b560e01b815290516001600160a01b039092169263a69df4b59260048084019382900301818387803b15801561134457600080fd5b600060026137e2836149fd565b60038111156137f3576137f3615153565b14801561107957506005820154600a83015460088401546138149190615785565b61381e9190615785565b431192915050565b6001600160601b038116158061384a575083546001600160601b0390811690821610155b6138b45760405162461bcd60e51b815260206004820152603560248201527f417574686f72697a6174696f6e20616d6f756e742073686f756c642062652030604482015274206f722061626f766520746865206d696e696d756d60581b6064820152608401610a77565b6001600160a01b03808416600090815260018601602052604081205490911690816138e05750426138ea565b506001600160401b035b60006138f68486615d5d565b6001600160a01b03871660009081526003890160205260409020805491925090600160601b90046001600160401b0316801580159061393e57506001600160401b0381811614155b156139d157885461395f90600160a01b90046001600160401b031682615d7d565b6001600160401b03164210156139d15760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f7567682074696d65207061737365642073696e636520746865604482015270081bdc9a59da5b985b081c995c5d595cdd607a1b6064820152608401610a77565b81546001600160401b038516600160601b81026001600160a01b03199092166001600160601b0386811691909117929092178455604080518a8416815292891660208401528201526001600160a01b0386811691908a16907f545cbf267cef6fe43f11f6219417ab43a0e8e345adbaae5f626d9bc325e8535a9060600160405180910390a3505050505050505050565b6001613a6c836149fd565b6003811115613a7d57613a7d615153565b14613ad55760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207374617465206973206e6f74204157414954494e475f5345604482015261115160f21b6064820152608401610a77565b60405181907fb2ad26c2940889d79df2ee9c758a8aefa00c5ca90eee119af0e5d795df3b98bb90600090a2436008830155600990910155565b6000613b19826149fd565b6003811115613b2a57613b2a615153565b14613b475760405162461bcd60e51b8152600401610a7790615d9d565b6040517f5c3ed2397d4d21298b2fb5027ac8e2d42e3c9c72bbb55ddb030e2a36a0cdff6b90600090a1805460408051637c1e845d60e11b815290516001600160a01b039092169163f83d08ba9160048082019260009290919082900301818387803b158015613bb557600080fd5b505af1158015613bc9573d6000803e3d6000fd5b5050505043816007018190555050565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316613c5d5760405162461bcd60e51b8152602060048201526024808201527f417574686f72697a6174696f6e206465637265617365206e6f742072657175656044820152631cdd195960e21b6064820152608401610a77565b805467fffffffffffffffe19600160601b9091046001600160401b031601613cdc5760405162461bcd60e51b815260206004820152602c60248201527f417574686f72697a6174696f6e2064656372656173652072657175657374206e60448201526b1bdd081858dd1a5d985d195960a21b6064820152608401610a77565b8054600160601b90046001600160401b0316421015613d4d5760405162461bcd60e51b815260206004820152602760248201527f417574686f72697a6174696f6e2064656372656173652064656c6179206e6f74604482015266081c185cdcd95960ca1b6064820152608401610a77565b6040516001600160a01b038316907f50270a522c2fef97b6b7385c2aa4a4518adda681530e0a1fe9f5e840f6f2cd9d90600090a2604051633af0572d60e11b81526001600160a01b0383811660048301528416906375e0ae5a906024016020604051808303816000875af1158015613dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ded91906154b9565b50506001600160a01b031660009081526003909201602052506040902080546001600160a01b0319169055565b60006001613e27836149fd565b6003811115613e3857613e38615153565b14801561107957506002820154600783015461381e9190615785565b60408114613ea45760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964206c656e677468206f6620746865207075626c6963206b65796044820152606401610a77565b60008282604051613eb6929190615d05565b604080519182900390912060008181526020879052919091206001015490915015613f3b5760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420776974682074686520676976656e207075626c6963206b657960448201526e20616c72656164792065786973747360881b6064820152608401610a77565b6000613f4a6020828587615d15565b613f5391615d3f565b905080610e395760405162461bcd60e51b815260206004820152602260248201527f57616c6c6574207075626c6963206b6579206d757374206265206e6f6e2d7a65604482015261726f60f01b6064820152608401610a77565b6002613fb8836149fd565b6003811115613fc957613fc9615153565b146140225760405162461bcd60e51b8152602060048201526024808201527f43757272656e74207374617465206973206e6f74204157414954494e475f524560448201526314d5531560e21b6064820152608401610a77565b61402b826137d5565b156140785760405162461bcd60e51b815260206004820152601a60248201527f444b472074696d656f757420616c7265616479207061737365640000000000006044820152606401610a77565b81546040516307b8c36760e51b81523360048201526001600160a01b0390911690819063f7186ce090602401602060405180830381865afa1580156140c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140e59190615b04565b61413d5760405162461bcd60e51b815260206004820152602360248201527f5375626d6974746572206e6f7420696e2074686520736f72746974696f6e20706044820152621bdbdb60ea1b6064820152608401610a77565b336001600160a01b038216638871ca5d61415a60a0860186615c38565b614166600188356157ba565b8181106141755761417561538d565b905060200201602081019061418a9190615ae7565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156141cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f0919061535a565b6001600160a01b0316146142465760405162461bcd60e51b815260206004820152601a60248201527f556e6578706563746564207375626d697474657220696e6465780000000000006044820152606401610a77565b81604051602001614257919061575c565b60408051601f19818403018152908290528051602090910120600b850181905543600c8601556009850154917f8e7fd4293d7db11807147d8890c287fad3396fbb09a4e92273fc7856076c153a906142b090869061575c565b60405180910390a3505050565b6001600160a01b03811660009081526003840160205260408120546142f0908590859085906001600160601b0316614d6a565b949350505050565b6000614303836149fd565b600381111561431457614314615153565b146143315760405162461bcd60e51b8152600401610a7790615d9d565b600081116143515760405162461bcd60e51b8152600401610a7790615dd4565b600290910155565b6000614364836149fd565b600381111561437557614375615153565b146143925760405162461bcd60e51b8152600401610a7790615d9d565b600081116143b25760405162461bcd60e51b8152600401610a7790615dd4565b600390910155565b60006143c5836149fd565b60038111156143d6576143d6615153565b146143f35760405162461bcd60e51b8152600401610a7790615d9d565b600490910155565b6000614406836149fd565b600381111561441757614417615153565b146144345760405162461bcd60e51b8152600401610a7790615d9d565b600081116144545760405162461bcd60e51b8152600401610a7790615dd4565b600590910155565b6000614467836149fd565b600381111561447857614478615153565b146144955760405162461bcd60e51b8152600401610a7790615d9d565b6005820154811061450e5760405162461bcd60e51b815260206004820152603d60248201527f4e65772076616c75652073686f756c64206265206c657373207468616e20726560448201527f73756c74207375626d697373696f6e20706572696f64206c656e6774680000006064820152608401610a77565b600690910155565b60008181526020839052604081206001015481906145465760405162461bcd60e51b8152600401610a7790615c81565b505060009081526020919091526040902060018101546002909101549091565b6000818152602083905260408120600101546145945760405162461bcd60e51b8152600401610a7790615c81565b506000908152602091909152604090205490565b6001600160a01b03811660009081526003830160205260408120805467fffffffffffffffe19600160601b9091046001600160401b0316016145f4576001600160401b03915050611079565b805442906001600160401b03600160601b90910481169082161161463457815461462f908290600160601b90046001600160401b0316615d7d565b614637565b60005b95945050505050565b81546001600160401b03909116600160601b0267ffffffffffffffff60601b19909116179055565b81546001600160401b03909116600160a01b0267ffffffffffffffff60a01b19909116179055565b61469981613e1a565b6146e55760405162461bcd60e51b815260206004820152601f60248201527f4177616974696e67207365656420686173206e6f742074696d6564206f7574006044820152606401610a77565b6040517f68c52f05452e81639fa06f379aee3178cddee4725521fff886f244c99e868b5090600090a1610b6f81613771565b60606000806147268585614516565b604080516020810193909352828101919091528051808303820181526060909201905295945050505050565b606454600090610100900460ff161561479b578160ff1660011480156147775750303b155b6147935760405162461bcd60e51b8152600401610a7790615e19565b506000919050565b60645460ff8084169116106147c25760405162461bcd60e51b8152600401610a7790615e19565b506064805460ff191660ff92909216919091179055600190565b919050565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910161149d565b82546001600160a01b03161561489e5760405162461bcd60e51b815260206004820152602260248201527f536f72746974696f6e20506f6f6c206164647265737320616c72656164792073604482015261195d60f21b6064820152608401610a77565b60018301546001600160a01b0316156149035760405162461bcd60e51b815260206004820152602160248201527f444b472056616c696461746f72206164647265737320616c72656164792073656044820152601d60fa1b6064820152608401610a77565b82546001600160a01b03199081166001600160a01b03938416178455600190930180549093169116179055565b83546001600160601b03908116908216101561498e5760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b6001600160a01b0383811660008181526001870160209081526040918290205482516001600160601b03888116825287169281019290925282519416938493927f87f9f9f59204f53d57a89a817c6083a17979cd0531791c91e18551a56e3cfdd7928290030190a35050505050565b805460408051632938b58d60e21b815290516000926001600160a01b03169163a4e2d6349160048083019260209291908290030181865afa158015614a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a6a9190615b04565b156147dc57506008810154600190156147dc5750600c810154600290156147dc57506003919050565b614a9c816137d5565b614ae05760405162461bcd60e51b81526020600482015260156024820152741112d1c81a185cc81b9bdd081d1a5b5959081bdd5d605a1b6044820152606401610a77565b6040517f2852b3e178dd281713b041c3d90b4815bb55b7ec812931d1e8e8d8bb2ed72d3e90600090a1610b6f81613771565b6001600160a01b03808216600090815260028601602052604081205490911680614b4e5760405162461bcd60e51b8152600401610a779061544d565b6001600160a01b038116600090815260038701602052604081208054909190614b85908990899086906001600160601b0316614d6a565b6040516307b8c36760e51b81526001600160a01b0387811660048301529192509087169063f7186ce090602401602060405180830381865afa158015614bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf39190615b04565b614c0b576001600160601b03161592506142f0915050565b6040516304de824f60e41b81526001600160a01b03871690634de824f090614c399088908590600401615b21565b602060405180830381865afa158015614c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c7a9190615b04565b98975050505050505050565b600060606000846008015411614cde5760405162461bcd60e51b815260206004820152601860248201527f444b4720686173206e6f74206265656e207374617274656400000000000000006044820152606401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92614d1a928892600401615b6a565b600060405180830381865afa158015614d37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d5f9190810190615b8f565b915091509250929050565b604051637004922d60e11b81526001600160a01b038381166004830152306024830152600091829186169063e009245a90604401602060405180830381865afa158015614dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ddf91906154b9565b90506000836001600160601b0316826001600160601b031611614e03576000614e0d565b614e0d8483615d5d565b87549091506001600160601b039081169082161015614e31576000925050506142f0565b91506142f09050565b6001600160a01b0381168114610b6f57600080fd5b6001600160601b0381168114610b6f57600080fd5b600080600060608486031215614e7957600080fd5b8335614e8481614e3a565b92506020840135614e9481614e4f565b91506040840135614ea481614e4f565b809150509250925092565b600060208284031215614ec157600080fd5b813561270081614e3a565b600060208284031215614ede57600080fd5b813561270081614e4f565b600060208284031215614efb57600080fd5b81356001600160401b03811115614f1157600080fd5b820160e0818503121561270057600080fd5b600060208284031215614f3557600080fd5b5035919050565b60008060408385031215614f4f57600080fd5b50508035926020909101359150565b600080600080600060a08688031215614f7657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008083601f840112614fab57600080fd5b5081356001600160401b03811115614fc257600080fd5b6020830191508360208260051b8501011115612fc457600080fd5b60008060008060608587031215614ff357600080fd5b84356001600160401b038082111561500a57600080fd5b9086019060a0828903121561501e57600080fd5b909450602086013593506040860135908082111561503b57600080fd5b5061504887828801614f99565b95989497509550505050565b80356001600160401b03811681146147dc57600080fd5b60008060006060848603121561508057600080fd5b833561508b81614e4f565b925061509960208501615054565b91506150a760408501615054565b90509250925092565b60005b838110156150cb5781810151838201526020016150b3565b50506000910152565b600081518084526150ec8160208601602086016150b0565b601f01601f19169290920160200192915050565b60208152600061270060208301846150d4565b60008060006060848603121561512857600080fd5b833561513381614e3a565b9250602084013561514381614e3a565b91506040840135614ea481614e3a565b634e487b7160e01b600052602160045260246000fd5b602081016004831061518b57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060008060a087890312156151aa57600080fd5b86356151b581614e4f565b95506020870135945060408701356151cc81614e3a565b93506060870135925060808701356001600160401b038111156151ee57600080fd5b6151fa89828a01614f99565b979a9699509497509295939492505050565b60008060008060006080868803121561522457600080fd5b8535945060208601356001600160401b0381111561524157600080fd5b61524d88828901614f99565b909550935050604086013561526181614e3a565b949793965091946060013592915050565b600081518084526020808501945080840160005b838110156152a857815163ffffffff1687529582019590820190600101615286565b509495945050505050565b6020815260006127006020830184615272565b82151581526040602082015260006142f060408301846150d4565b60208082526022908201527f43616c6c6572206973206e6f7420746865207374616b696e6720636f6e74726160408201526118dd60f21b606082015260800190565b6020808252601c908201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604082015260600190565b60006020828403121561536c57600080fd5b815161270081614e3a565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160601b038516815260208082018590526001600160a01b038481166040840152608060608401819052845190840181905260009285810192909160a0860190855b818110156154065785518416835294840194918401916001016153e8565b50909a9950505050505050505050565b6020808252601e908201527f43616c6c6572206973206e6f74207468652057616c6c6574204f776e65720000604082015260600190565b60208082526010908201526f2ab735b737bbb71037b832b930ba37b960811b604082015260600190565b60008060006060848603121561548c57600080fd5b835161549781614e3a565b60208501519093506154a881614e3a565b6040850151909250614ea481614e3a565b6000602082840312156154cb57600080fd5b815161270081614e4f565b6000808335601e198436030181126154ed57600080fd5b8301803591506001600160401b0382111561550757600080fd5b602001915036819003821315612fc457600080fd5b6000808335601e1984360301811261553357600080fd5b83016020810192503590506001600160401b0381111561555257600080fd5b803603821315612fc457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126155a157600080fd5b83016020810192503590506001600160401b038111156155c057600080fd5b8060051b3603821315612fc457600080fd5b803560ff811681146147dc57600080fd5b81835260006001600160fb1b038311156155fc57600080fd5b8260051b80836020870137939093016020019392505050565b63ffffffff81168114610b6f57600080fd5b8183526000602080850194508260005b858110156152a857813561564a81615615565b63ffffffff1687529582019590820190600101615637565b80358252600060206156768184018461551c565b60e08387015261568a60e087018284615561565b91505061569a604085018561558a565b868303604088015280835290916000919084015b818310156156d65760ff6156c1856155d2565b168152928401926001929092019184016156ae565b6156e3606088018861551c565b9550935087810360608901526156fa818686615561565b94505050505061570d608084018461558a565b85830360808701526157208382846155e3565b9250505061573160a084018461558a565b85830360a0870152615744838284615627565b9250505060c083013560c08501528091505092915050565b6020815260006127006020830184615662565b634e487b7160e01b600052601160045260246000fd5b808201808211156110795761107961576f565b6040815260006157ab6040830185615272565b90508260208301529392505050565b818103818111156110795761107961576f565b6020815260006142f0602083018486615627565b8015158114610b6f57600080fd5b60018060a01b038716815260a06020820152853560a08201526000615817602088018861558a565b60a060c085015261582d610140850182846155e3565b915050604088013561583e816157e1565b151560e0840152615852606089018961551c565b609f19808685030161010087015261586b848385615561565b935061587a60808c018c61558a565b935091508086850301610120870152506158958383836155e3565b9250505082810360408401526158ab81886150d4565b905085606084015282810360808401526158c6818587615627565b9998505050505050505050565b604051601f8201601f191681016001600160401b03811182821017156158fb576158fb615377565b604052919050565b60006001600160401b0382111561591c5761591c615377565b5060051b60200190565b6000602080838503121561593957600080fd5b82516001600160401b0381111561594f57600080fd5b8301601f8101851361596057600080fd5b805161597361596e82615903565b6158d3565b81815260059190911b8201830190838101908783111561599257600080fd5b928401925b828410156159b95783516159aa81615615565b82529284019290840190615997565b979650505050505050565b6000600182016159d6576159d661576f565b5060010190565b6000602082840312156159ef57600080fd5b8135612700816157e1565b60208082526022908201527f496e76616c69642077616c6c6574206d656d62657273206964656e7469666965604082015261727360f01b606082015260800190565b60006020808385031215615a4f57600080fd5b82516001600160401b03811115615a6557600080fd5b8301601f81018513615a7657600080fd5b8051615a8461596e82615903565b81815260059190911b82018301908381019087831115615aa357600080fd5b928401925b828410156159b9578351615abb81614e3a565b82529284019290840190615aa8565b600060208284031215615adc57600080fd5b815161270081615615565b600060208284031215615af957600080fd5b813561270081615615565b600060208284031215615b1657600080fd5b8151612700816157e1565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160401b03818116838216019080821115615b6357615b6361576f565b5092915050565b606081526000615b7d6060830186615662565b60208301949094525060400152919050565b60008060408385031215615ba257600080fd5b8251615bad816157e1565b60208401519092506001600160401b0380821115615bca57600080fd5b818501915085601f830112615bde57600080fd5b815181811115615bf057615bf0615377565b615c03601f8201601f19166020016158d3565b9150808252866020828501011115615c1a57600080fd5b615c2b8160208401602086016150b0565b5080925050509250929050565b6000808335601e19843603018112615c4f57600080fd5b8301803591506001600160401b03821115615c6957600080fd5b6020019150600581901b3603821315612fc457600080fd5b60208082526030908201527f57616c6c657420776974682074686520676976656e20494420686173206e6f7460408201526f081899595b881c9959da5cdd195c995960821b606082015260800190565b600060208284031215615ce357600080fd5b612700826155d2565b60ff82811682821603908111156110795761107961576f565b8183823760009101908152919050565b60008085851115615d2557600080fd5b83861115615d3257600080fd5b5050820193919092039150565b8035602083101561107957600019602084900360031b1b1692915050565b6001600160601b03828116828216039080821115615b6357615b6361576f565b6001600160401b03828116828216039080821115615b6357615b6361576f565b60208082526019908201527f43757272656e74207374617465206973206e6f742049444c4500000000000000604082015260600190565b60208082526025908201527f4e65772076616c75652073686f756c642062652067726561746572207468616e604082015264207a65726f60d81b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b60608201526080019056fea2646970667358221220d81f1039d808fe849e658698a5bdb5df30fe5734f31bc40a1a580b39a5e2e3ad64736f6c63430008110033496e697469616c697a61626c653a20636f6e747261637420697320616c726561";
1931
+ var _bytecode = "0x60c06040523480156200001157600080fd5b5060405162006187380380620061878339810160408190526200003491620001a1565b6001600160a01b03808316608052811660a0526200005162000059565b5050620001e0565b6200006560ff62000068565b50565b606454600090610100900460ff161562000103578160ff166001148015620000a35750620000a1306200017c60201b6200272e1760201c565b155b620000fb5760405162461bcd60e51b815260206004820152602e60248201526000805160206200616783398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60645460ff808416911610620001625760405162461bcd60e51b815260206004820152602e60248201526000805160206200616783398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000f2565b506064805460ff191660ff92909216919091179055600190565b6001600160a01b03163b151590565b6001600160a01b03811681146200006557600080fd5b60008060408385031215620001b557600080fd5b8251620001c2816200018b565b6020840151909250620001d5816200018b565b809150509250929050565b60805160a051615e9d620002ca600039600081816104ea01528181610a3a01528181610a8701528181610adb01528181610b2901528181610d1501528181610f0901528181611374015281816115af0152818161169501528181611e950152818161222f015261253c0152600081816107e601528181610aa801528181610afc01528181610b4a01528181610c2a01528181610fa501528181611119015281816112ff015281816118780152818161198b01528181611d22015281816120d0015281816122cb015281816124bc0152818161255d015281816125bc01526126950152615e9d6000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80637e0049fd116101e9578063c9bacaad1161010f578063df07ce59116100ad578063f0820c921161007c578063f0820c921461097e578063f7186ce01461098f578063f854a27f146109a2578063fd2a4788146109b557600080fd5b8063df07ce5914610922578063e03e453514610935578063e686440f1461094a578063e83ab3a51461095d57600080fd5b8063d38bfff4116100e9578063d38bfff4146108c8578063d855c631146108db578063d8dc404d146108e3578063ded56d45146108f657600080fd5b8063c9bacaad1461088d578063cc562388146108a0578063d0bcc0e3146108b557600080fd5b8063a04e298011610187578063c09975cd11610156578063c09975cd14610828578063c0c53b8b1461083b578063c7c49c981461084e578063c88e70f41461087a57600080fd5b8063a04e2980146107c6578063b13b55b2146107d9578063b54a2374146107e1578063b5e9ce8b1461080857600080fd5b806388a59590116101c357806388a595901461073a5780638dcbdf4a146107755780639879d19b146107885780639c9de0281461079b57600080fd5b80637e0049fd146106e55780637e33cba6146106f8578063830f9e021461070b57600080fd5b806352902301116102ce5780636c9ecd641161026c578063770124d31161023b578063770124d3146105f2578063789d392a146105fa5780637b14729e146106755780637b35b4e6146106d257600080fd5b80636c9ecd64146105b15780636febd464146105c457806372cc8c6d146105d757806375e0ae5a146105df57600080fd5b8063663032cd116102a8578063663032cd1461057057806368c34948146105835780636a7f7a901461058b5780636b5f2bff1461059e57600080fd5b8063529023011461052f5780635aa6e6751461054a5780635c5b38701461055d57600080fd5b8063227fd44f1161033b5780633682a450116103155780633682a450146104bf57806342d86693146104d25780634cf088d9146104e55780634d99f4731461050c57600080fd5b8063227fd44f146104865780633137676614610499578063343bb927146104ac57600080fd5b8063167f051711610377578063167f0517146104325780631ae879e81461043a5780631c5b07621461044e5780631d35fa631461046157600080fd5b806308aa090b1461039e57806314a85474146103f1578063153622b314610406575b600080fd5b6103a66109c8565b6040516103e89190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b60405180910390f35b6104046103ff366004614e64565b610a2f565b005b6101065461041a906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b610404610ad4565b6101055461041a906001600160a01b031681565b61040461045c366004614eaf565b610b22565b60fc546001600160601b03165b6040516001600160601b0390911681526020016103e8565b610404610494366004614ecc565b610b72565b6104046104a7366004614ee9565b610bf1565b6104046104ba366004614f23565b610e40565b6104046104cd366004614eaf565b610ea4565b6104046104e0366004614eaf565b610eaf565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61051f61051a366004614f23565b611064565b60405190151581526020016103e8565b60fd5460fe54604080519283526020830191909152016103e8565b60005461041a906001600160a01b031681565b61040461056b366004614ee9565b61107f565b61040461057e366004614eaf565b6112b6565b61051f611358565b610404610599366004614e64565b611369565b6104046105ac366004614eaf565b6113be565b6104046105bf366004614f3c565b611437565b6104046105d2366004614f3c565b6114a9565b610404611513565b6104046105ed366004614eaf565b6115a8565b61051f6115d4565b610653610608366004614f23565b60408051606080820183526000808352602080840182905292840181905293845260ca8252928290208251938401835280548452600181015491840191909152600201549082015290565b60408051825181526020808401519082015291810151908201526060016103e8565b6106a36065546001600160601b038116916001600160401b03600160601b8304811692600160a01b90041690565b604080516001600160601b0390941684526001600160401b0392831660208501529116908201526060016103e8565b6104046106e0366004614eaf565b6115e0565b6104046106f3366004614ee9565b611668565b61046e610706366004614eaf565b61168c565b61072c610719366004614f23565b6101046020526000908152604090205481565b6040519081526020016103e8565b60ff5461010054610101546101025461010354604080519586526020860194909452928401919091526060830152608082015260a0016103e8565b610404610783366004614f5e565b6116ba565b610404610796366004614fdd565b611772565b6107ae6107a9366004614eaf565b611b2b565b6040516001600160401b0390911681526020016103e8565b6104046107d436600461506b565b611b38565b610404611bea565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61081b610816366004614f23565b611c51565b6040516103e89190615100565b60325461041a906001600160a01b031681565b610404610849366004615113565b611c5e565b61041a61085c366004614eaf565b6001600160a01b039081166000908152606660205260409020541690565b610404610888366004614f5e565b611df7565b61040461089b366004614e64565b611e8a565b6108a8611edf565b6040516103e89190615169565b6104046108c3366004614eaf565b611eeb565b6104046108d6366004614eaf565b611f64565b610404611ff8565b6104046108f1366004615191565b612035565b61041a610904366004614eaf565b6001600160a01b039081166000908152606760205260409020541690565b61051f61093036600461520c565b6122a7565b61093d612498565b6040516103e891906152b3565b61051f610958366004614eaf565b612533565b61097061096b366004614ee9565b612582565b6040516103e89291906152c6565b6065546001600160601b031661046e565b61051f61099d366004614eaf565b61259a565b61046e6109b0366004614eaf565b612629565b61046e6109c3366004614eaf565b612707565b6109fa6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506040805160a0810182526099548152609a546020820152609b5491810191909152609c546060820152609d54608082015290565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a805760405162461bcd60e51b8152600401610a77906152e1565b60405180910390fd5b610acf60657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086868661273d565b505050565b610b2060657f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006128a9565b565b610b6f60657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612a83565b50565b6000546001600160a01b03163314610b9c5760405162461bcd60e51b8152600401610a7790615323565b60fc80546001600160601b0319166001600160601b0383169081179091556040519081527fe132b87eb6644ee4d4c3c32744f7e1c3906335a2d4f99330767bf573909c7d84906020015b60405180910390a150565b600080610bff609784612c62565b604051638871ca5d60e01b815263ffffffff8216600482015291935091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638871ca5d90602401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061535a565b6040805160018082528183019092529192506000919060208083019080368337019050506001600160a01b038084166000908152606760205260409020549192501681600081518110610cea57610cea61538d565b6001600160a01b03928316602091820292909201015260fc5460fd546040516383ddba8f60e01b81527f0000000000000000000000000000000000000000000000000000000000000000909316926383ddba8f92610d5a926001600160601b0390911691339087906004016153a3565b600060405180830381600087803b158015610d7457600080fd5b505af1925050508015610d85575060015b610dde5760fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f14621289a12ab59e0737decc388bba91d929c723defb4682d5d19b9a12ecfecb910160405180910390a2610e2f565b60fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f88f76c659db78142f88e94db3ca791869495394c6c1b3d412ced9022dc97c9e3910160405180910390a25b610e396097612fcb565b5050505050565b610105546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610a7790615416565b610e7660ca8261301f565b60405181907fa6ae4af610b8ada39d3675190ead27a5552631a8e33f53e4e37dbb082f11a73e90600090a250565b610b6f60658261306c565b6001600160a01b038181166000908152606660205260409020541680610ee75760405162461bcd60e51b8152600401610a779061544d565b604051632de9480760e01b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632de9480790602401606060405180830381865afa158015610f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f769190615477565b50604051637104c0e560e11b81526001600160a01b0385811660048301528281166024830152919350600092507f00000000000000000000000000000000000000000000000000000000000000009091169063e20981ca906044016020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101491906154b9565b6040516001600160601b03821681529091506001600160a01b038516907f38532b6dea69d7266fa923c7813d190be37625f2454ddfa3d93c45c79482e3fd9060200160405180910390a250505050565b600081815260ca602052604081206001015415155b92915050565b60005a905060006110916097846132cf565b9050600080806110b660c08701356110ac60208901896154d6565b60ca9291906136f6565b925092509250856040516020016110cd919061575c565b60405160208183030381529060405280519060200120837fbe8f27cef1f3d94120c9c547c3614f5b992fdb0c0a497cc920fde06546291ab460405160405180910390a38351156111a5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928560fe54426111559190615785565b6040518363ffffffff1660e01b8152600401611172929190615798565b600060405180830381600087803b15801561118c57600080fd5b505af11580156111a0573d6000803e3d6000fd5b505050505b6101055460405163547d07a160e11b81526004810185905260248101849052604481018390526001600160a01b039091169063a8fa0f4290606401600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b5050505061121c6097613771565b603254610100546001600160a01b0390911690637ad226dc905a61124090896157ba565b60ff5461124d9190615785565b6112579190615785565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b15801561129657600080fd5b505af11580156112aa573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b031633146112e05760405162461bcd60e51b8152600401610a7790615323565b604051632a59250560e21b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a9649414906024015b600060405180830381600087803b15801561134457600080fd5b505af1158015610e39573d6000803e3d6000fd5b600061136460976137d5565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113b15760405162461bcd60e51b8152600401610a77906152e1565b610acf6065848484613826565b6000546001600160a01b031633146113e85760405162461bcd60e51b8152600401610a7790615323565b61010680546001600160a01b0319166001600160a01b0383169081179091556040519081527f2b34e21b6daa8fcf8cba1c3ed709cbed2b0231d5fb60e9ccd8c2e75a5674bcb390602001610be6565b6000546001600160a01b031633146114615760405162461bcd60e51b8152600401610a7790615323565b60fd82905560fe81905560408051838152602081018390527ff3a6ee10a78fb7d212e87d9be970fb16bd7324e9dc9c38d21cd7ecde781a1d2a91015b60405180910390a15050565b610106546001600160a01b031633146115045760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74207468652052616e646f6d20426561636f6e006044820152606401610a77565b61150f609783613a61565b5050565b610105546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610a7790615416565b6115486097613b0e565b610106546040516310da3b0360e21b81523060048201526001600160a01b0390911690634368ec0c90602401600060405180830381600087803b15801561158e57600080fd5b505af11580156115a2573d6000803e3d6000fd5b50505050565b610b6f60657f000000000000000000000000000000000000000000000000000000000000000083613bd9565b60006113646097613e1a565b6000546001600160a01b0316331461160a5760405162461bcd60e51b8152600401610a7790615323565b6040516001600160a01b03821681527f0e2d2343d31b085b7c4e56d1c8a6ec79f7ab07460386f1c9a1756239fe2533ac9060200160405180910390a1603280546001600160a01b0319166001600160a01b0392909216919091179055565b61168161167860208301836154d6565b60ca9190613e54565b610b6f609782613fad565b600061107960657f0000000000000000000000000000000000000000000000000000000000000000846142bd565b6000546001600160a01b031633146116e45760405162461bcd60e51b8152600401610a7790615323565b6116ef6097866142f8565b6116fa609785614359565b6117056097846143ba565b6117106097836143fb565b61171b60978261445c565b604080518681526020810186905290810184905260608101839052608081018290527f59ae8ed7b3a7e5f6dde4cff478f0ac0aa652c5edc4f4757b09a778a430b02c569060a0015b60405180910390a15050505050565b60005a8535600081815261010460205260409020549192509085146117c95760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610a77565b6000806117d760ca84614516565b909250905060006117e960ca85614566565b905086866040516020016117fe9291906157cd565b60405160208183030381529060405280519060200120811461185a5760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642067726f7570206d656d6265727360581b6044820152606401610a77565b600073__$c28dd63714b1a086d50ecbb702fff9dbb7$__63f4df04be7f00000000000000000000000000000000000000000000000000000000000000008c87876040516020016118b4929190918252602082015260400190565b6040516020818303038152906040528d8d8d6040518763ffffffff1660e01b81526004016118e7969594939291906157ef565b600060405180830381865af4158015611904573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261192c9190810190615926565b60008681526101046020526040812080549293509061194a836159c4565b9091555050604080518a815233602082015286917f326e1ff7c130ed708307116f79cf7dbca649503e7082e5e35a19ceeee1523b39910160405180910390a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928260fe54426119c79190615785565b6040518363ffffffff1660e01b81526004016119e4929190615798565b600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b50611a279250505060608b0160408c016159dd565b15611a9a5761010554604051631ee74c0960e11b81526004810187905260248101869052604481018590526001600160a01b0390911690633dce981290606401600060405180830381600087803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b505050505b603254610101546001600160a01b0390911690637ad226dc905a611abe908a6157ba565b611ac89190615785565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b5050505050505050505050505050565b60006110796065836145a8565b6000546001600160a01b03163314611b625760405162461bcd60e51b8152600401610a7790615323565b606580546001600160601b0319166001600160601b038516179055611b88606583614640565b611b93606582614668565b604080516001600160601b03851681526001600160401b03848116602083015283168183015290517f544b726e42801bb47073854eeedae851903f66fe32a5bd24e626e10b90027b519181900360600190a1505050565b60005a9050611bf96097614690565b603254610102546001600160a01b0390911690637ad226dc905a611c1d90856157ba565b611c279190615785565b6040516001600160e01b031960e084901b168152600481019190915233602482015260440161132a565b606061107960ca83614717565b6000611c6a6001614752565b90508015611c82576064805461ff0019166101001790555b61010680546001600160a01b038086166001600160a01b0319928316179092556032805492851692909116919091179055611cbc336147e1565b606580546001600160601b031916690878678326eac9000000179055611ce66065623b5380614640565b611cf46065623b5380614668565b60fc80546001600160601b0319166815af1d78b58c400000179055606460fd556212750060fe55611d4760977f00000000000000000000000000000000000000000000000000000000000000008661483b565b611d546097612d006142f8565b611d616097612d00614359565b611d6e609761c3506143ba565b611d7b60976107d06143fb565b611d876097601461445c565b62046cd060ff55620119406101005562016b4861010155611c52610102556108fc6101035580156115a2576064805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000546001600160a01b03163314611e215760405162461bcd60e51b8152600401610a7790615323565b60ff859055610100849055610101839055610102829055610103819055604080518681526020810186905290810184905260608101839052608081018290527f8a3e64fa6013a36bccca7362e8826b11ba41e57fb60f55309c0ca48904dad0829060a001611763565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ed25760405162461bcd60e51b8152600401610a77906152e1565b610acf6065848484614930565b600061136460976149fd565b6000546001600160a01b03163314611f155760405162461bcd60e51b8152600401610a7790615323565b61010580546001600160a01b0319166001600160a01b0383169081179091556040519081527fa1993af5a189ba5ad4155263c920cfee33ce0593a8eb231a13bb3ce6f39459e390602001610be6565b6000546001600160a01b03163314611f8e5760405162461bcd60e51b8152600401610a7790615323565b6001600160a01b038116611fef5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f206164647265604482015261737360f01b6064820152608401610a77565b610b6f816147e1565b60005a90506120076097614a93565b603254610103546001600160a01b0390911690637ad226dc905a61202b90856157ba565b611c2791906157ba565b610105546001600160a01b031633146120605760405162461bcd60e51b8152600401610a7790615416565b600061206d60ca85614566565b905082826040516020016120829291906157cd565b6040516020818303038152906040528051906020012081146120b65760405162461bcd60e51b8152600401610a77906159fa565b604051637bfcd47d60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f7f9a8fa9061210790879087906004016157cd565b600060405180830381865afa158015612124573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261214c9190810190615a3c565b90506000836001600160401b0381111561216857612168615377565b604051908082528060200260200182016040528015612191578160200160208202803683370190505b50905060005b8251811015612217576121db8382815181106121b5576121b561538d565b60200260200101516001600160a01b039081166000908152606760205260409020541690565b8282815181106121ed576121ed61538d565b6001600160a01b03909216602092830291909101909101528061220f816159c4565b915050612197565b506040516383ddba8f60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906383ddba8f9061226a908c908c908c9087906004016153a3565b600060405180830381600087803b15801561228457600080fd5b505af1158015612298573d6000803e3d6000fd5b50505050505050505050505050565b604051635a48b46b60e01b81526001600160a01b03838116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690635a48b46b90602401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123369190615aca565b90508063ffffffff1660000361238e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f74206120736f72746974696f6e20706f6f6c206f70657261746f720000006044820152606401610a77565b600061239b60ca89614566565b905086866040516020016123b09291906157cd565b6040516020818303038152906040528051906020012081146123e45760405162461bcd60e51b8152600401610a77906159fa565b836001111580156123f55750858411155b61244d5760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206d656d62657220696e646578206973206f7574206f662072616044820152626e676560e81b6064820152608401610a77565b63ffffffff821687876124616001886157ba565b8181106124705761247061538d565b90506020020160208101906124859190615ae7565b63ffffffff161498975050505050505050565b60a054604051636c2530b960e01b81526064600482015260248101919091526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636c2530b990604401600060405180830381865afa15801561250b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113649190810190615926565b600061107960657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085614b12565b60006060612591609784614c86565b91509150915091565b6040516307b8c36760e51b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f7186ce090602401602060405180830381865afa158015612605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110799190615b04565b60008061264e836001600160a01b039081166000908152606660205260409020541690565b90506001600160a01b0381166126765760405162461bcd60e51b8152600401610a779061544d565b60405163439f18fd60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063873e31fa90602401602060405180830381865afa1580156126dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270091906154b9565b9392505050565b6001600160a01b0381166000908152606860205260408120546001600160601b0316611079565b6001600160a01b03163b151590565b6001600160a01b038084166000908152600188016020526040902054168061276557506128a1565b6040516307b8c36760e51b81526001600160a01b03828116600483015286169063f7186ce090602401602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf9190615b04565b1561289f57846001600160a01b031663a4e2d6346040518163ffffffff1660e01b8152600401602060405180830381865afa158015612812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128369190615b04565b1561289357604080516001600160601b038086168252841660208201526001600160a01b0380841692908716917f1b09380d63e78fd72c1d79a805a7e2dfadf02b22418e24bebff51376b7df33b0910160405180910390a361289f565b61289f87878784612a83565b505b505050505050565b3360008181526002850160205260409020546001600160a01b0316806128e15760405162461bcd60e51b8152600401610a779061544d565b6001600160a01b038116600090815260038601602052604081208054909190612918908890889086906001600160601b0316614d6a565b9050806001600160601b03166000036129735760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b836001600160a01b0316836001600160a01b03167f5075aaa89894a888eb2cac81a27320c60855febb0cf1706b66bdc754e640d43360405160405180910390a3604051630483483160e31b81526001600160a01b0386169063241a4188906129e19087908590600401615b21565b600060405180830381600087803b1580156129fb57600080fd5b505af1158015612a0f573d6000803e3d6000fd5b5050835467fffffffffffffffe19600160601b9091046001600160401b031601915061289f9050578654612a5390600160601b90046001600160401b031642615b43565b82546001600160401b0391909116600160601b0267ffffffffffffffff60601b1990911617825550505050505050565b6001600160a01b0380821660009081526002860160205260409020541680612abd5760405162461bcd60e51b8152600401610a779061544d565b6001600160a01b03808216600081815260038801602052604080822090519093861692917f1231fe5ee649a593b524a494cd53146a196380a872115a0d0fe16c0735afdf2691a36040516307b8c36760e51b81526001600160a01b03848116600483015285169063f7186ce090602401602060405180830381865afa158015612b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6e9190615b04565b15612bf5578054600090612b90908890889086906001600160601b0316614d6a565b60405163dc7520c560e01b81529091506001600160a01b0386169063dc7520c590612bc19087908590600401615b21565b600060405180830381600087803b158015612bdb57600080fd5b505af1158015612bef573d6000803e3d6000fd5b50505050505b805467fffffffffffffffe19600160601b9091046001600160401b0316016128a1578554612c3390600160601b90046001600160401b031642615b43565b81546001600160401b0391909116600160601b0267ffffffffffffffff60601b19909116178155505050505050565b6000806003612c70856149fd565b6003811115612c8157612c81615153565b14612cce5760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003840154600c850154612ce29190615785565b431115612d3d5760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f642068617320616c7265616479207061736044820152621cd95960ea1b6064820152608401610a77565b83600b015483604051602001612d53919061575c565b6040516020818303038152906040528051906020012014612ddc5760405162461bcd60e51b815260206004820152603a60248201527f526573756c7420756e646572206368616c6c656e67652069732064696666657260448201527f656e74207468616e20746865207375626d6974746564206f6e650000000000006064820152608401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92612e18928892600401615b6a565b600060405180830381865afa925050508015612e5657506040513d6000823e601f3d908101601f19168201604052612e539190810190615b8f565b60015b612ecb57336001600160a01b031684600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a0285436604051612ebe906020808252601390820152721d985b1a59185d1a5bdb881c995d995c9d1959606a1b604082015260600190565b60405180910390a3612f5a565b8115612f115760405162461bcd60e51b8152602060048201526015602482015274756e6a7573746966696564206368616c6c656e676560581b6044820152606401610a77565b336001600160a01b031686600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a028543683604051612f4f9190615100565b60405180910390a350505b600b8401549150612f6e60a0840184615c38565b612f7a600186356157ba565b818110612f8957612f8961538d565b9050602002016020810190612f9e9190615ae7565b9050836008015443612fb091906157ba565b600a8501556000600b8501819055600c8501555b9250929050565b60048101545a1015610b6f5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820657874726120676173206c656674000000000000006044820152606401610a77565b60008181526020839052604090206001015461304d5760405162461bcd60e51b8152600401610a7790615c81565b6000908152602091909152604081208181556001810182905560020155565b336001600160a01b0382166130c35760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722063616e206e6f74206265207a65726f20616464726573736044820152606401610a77565b6001600160a01b03818116600090815260018501602052604090205416156131435760405162461bcd60e51b815260206004820152602d60248201527f4f70657261746f7220616c72656164792073657420666f72207468652073746160448201526c35b4b73390383937bb34b232b960991b6064820152608401610a77565b6001600160a01b03828116600090815260028501602052604090205416156131ad5760405162461bcd60e51b815260206004820152601f60248201527f4f70657261746f72206164647265737320616c726561647920696e20757365006044820152606401610a77565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316156132405760405162461bcd60e51b815260206004820152603160248201527f546865726520697320612070656e64696e6720617574686f72697a6174696f6e60448201527008191958dc99585cd9481c995c5d595cdd607a1b6064820152608401610a77565b826001600160a01b0316826001600160a01b03167fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c160405160405180910390a3506001600160a01b03908116600081815260018501602090815260408083208054959096166001600160a01b031995861681179096559482526002909501909452919092208054909216179055565b606060036132dc846149fd565b60038111156132ed576132ed615153565b1461333a5760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003830154600c84015460009161335091615785565b90508043116133ad5760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f6420686173206e6f7420706173736564206044820152621e595d60ea1b6064820152608401610a77565b83600b0154836040516020016133c3919061575c565b604051602081830303815290604052805190602001201461344c5760405162461bcd60e51b815260206004820152603960248201527f526573756c7420756e64657220617070726f76616c206973206469666665726560448201527f6e74207468616e20746865207375626d6974746564206f6e65000000000000006064820152608401610a77565b83546000906001600160a01b0316638871ca5d61346c60a0870187615c38565b613478600189356157ba565b8181106134875761348761538d565b905060200201602081019061349c9190615ae7565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156134de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613502919061535a565b9050336001600160a01b0382161480613528575060068501546135259083615785565b43115b6135a65760405162461bcd60e51b815260206004820152604360248201527f4f6e6c792074686520444b4720726573756c74207375626d697474657220636160448201527f6e20617070726f76652074686520726573756c742061742074686973206d6f6d606482015262195b9d60ea1b608482015260a401610a77565b6135b36040850185615c38565b90506001600160401b038111156135cc576135cc615377565b6040519080825280602002602001820160405280156135f5578160200160208202803683370190505b50925060005b6136086040860186615c38565b90508110156136bc5761361e60a0860186615c38565b600161362d6040890189615c38565b8581811061363d5761363d61538d565b90506020020160208101906136529190615cd1565b61365c9190615cec565b60ff1681811061366e5761366e61538d565b90506020020160208101906136839190615ae7565b8482815181106136955761369561538d565b63ffffffff90921660209283029190910190910152806136b4816159c4565b9150506135fb565b50600b8501546040513391907fe6e9d5eba171e82025efb3f3d44fd35905e7283d104284cb9f3bbc5bf1e4276f90600090a3505092915050565b6000806000848460405161370b929190615d05565b6040519081900390209250613724602060008688615d15565b61372d91615d3f565b915061373c8460208188615d15565b61374591615d3f565b600084815260209890985260409097209586555060018501819055600290940185905594929392915050565b60006008820181905560098201819055600a8201819055600b8201819055600c820181905581546040805163a69df4b560e01b815290516001600160a01b039092169263a69df4b59260048084019382900301818387803b15801561134457600080fd5b600060026137e2836149fd565b60038111156137f3576137f3615153565b14801561107957506005820154600a83015460088401546138149190615785565b61381e9190615785565b431192915050565b6001600160601b038116158061384a575083546001600160601b0390811690821610155b6138b45760405162461bcd60e51b815260206004820152603560248201527f417574686f72697a6174696f6e20616d6f756e742073686f756c642062652030604482015274206f722061626f766520746865206d696e696d756d60581b6064820152608401610a77565b6001600160a01b03808416600090815260018601602052604081205490911690816138e05750426138ea565b506001600160401b035b60006138f68486615d5d565b6001600160a01b03871660009081526003890160205260409020805491925090600160601b90046001600160401b0316801580159061393e57506001600160401b0381811614155b156139d157885461395f90600160a01b90046001600160401b031682615d7d565b6001600160401b03164210156139d15760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f7567682074696d65207061737365642073696e636520746865604482015270081bdc9a59da5b985b081c995c5d595cdd607a1b6064820152608401610a77565b81546001600160401b038516600160601b81026001600160a01b03199092166001600160601b0386811691909117929092178455604080518a8416815292891660208401528201526001600160a01b0386811691908a16907f545cbf267cef6fe43f11f6219417ab43a0e8e345adbaae5f626d9bc325e8535a9060600160405180910390a3505050505050505050565b6001613a6c836149fd565b6003811115613a7d57613a7d615153565b14613ad55760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207374617465206973206e6f74204157414954494e475f5345604482015261115160f21b6064820152608401610a77565b60405181907fb2ad26c2940889d79df2ee9c758a8aefa00c5ca90eee119af0e5d795df3b98bb90600090a2436008830155600990910155565b6000613b19826149fd565b6003811115613b2a57613b2a615153565b14613b475760405162461bcd60e51b8152600401610a7790615d9d565b6040517f5c3ed2397d4d21298b2fb5027ac8e2d42e3c9c72bbb55ddb030e2a36a0cdff6b90600090a1805460408051637c1e845d60e11b815290516001600160a01b039092169163f83d08ba9160048082019260009290919082900301818387803b158015613bb557600080fd5b505af1158015613bc9573d6000803e3d6000fd5b5050505043816007018190555050565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316613c5d5760405162461bcd60e51b8152602060048201526024808201527f417574686f72697a6174696f6e206465637265617365206e6f742072657175656044820152631cdd195960e21b6064820152608401610a77565b805467fffffffffffffffe19600160601b9091046001600160401b031601613cdc5760405162461bcd60e51b815260206004820152602c60248201527f417574686f72697a6174696f6e2064656372656173652072657175657374206e60448201526b1bdd081858dd1a5d985d195960a21b6064820152608401610a77565b8054600160601b90046001600160401b0316421015613d4d5760405162461bcd60e51b815260206004820152602760248201527f417574686f72697a6174696f6e2064656372656173652064656c6179206e6f74604482015266081c185cdcd95960ca1b6064820152608401610a77565b6040516001600160a01b038316907f50270a522c2fef97b6b7385c2aa4a4518adda681530e0a1fe9f5e840f6f2cd9d90600090a2604051633af0572d60e11b81526001600160a01b0383811660048301528416906375e0ae5a906024016020604051808303816000875af1158015613dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ded91906154b9565b50506001600160a01b031660009081526003909201602052506040902080546001600160a01b0319169055565b60006001613e27836149fd565b6003811115613e3857613e38615153565b14801561107957506002820154600783015461381e9190615785565b60408114613ea45760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964206c656e677468206f6620746865207075626c6963206b65796044820152606401610a77565b60008282604051613eb6929190615d05565b604080519182900390912060008181526020879052919091206001015490915015613f3b5760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420776974682074686520676976656e207075626c6963206b657960448201526e20616c72656164792065786973747360881b6064820152608401610a77565b6000613f4a6020828587615d15565b613f5391615d3f565b905080610e395760405162461bcd60e51b815260206004820152602260248201527f57616c6c6574207075626c6963206b6579206d757374206265206e6f6e2d7a65604482015261726f60f01b6064820152608401610a77565b6002613fb8836149fd565b6003811115613fc957613fc9615153565b146140225760405162461bcd60e51b8152602060048201526024808201527f43757272656e74207374617465206973206e6f74204157414954494e475f524560448201526314d5531560e21b6064820152608401610a77565b61402b826137d5565b156140785760405162461bcd60e51b815260206004820152601a60248201527f444b472074696d656f757420616c7265616479207061737365640000000000006044820152606401610a77565b81546040516307b8c36760e51b81523360048201526001600160a01b0390911690819063f7186ce090602401602060405180830381865afa1580156140c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140e59190615b04565b61413d5760405162461bcd60e51b815260206004820152602360248201527f5375626d6974746572206e6f7420696e2074686520736f72746974696f6e20706044820152621bdbdb60ea1b6064820152608401610a77565b336001600160a01b038216638871ca5d61415a60a0860186615c38565b614166600188356157ba565b8181106141755761417561538d565b905060200201602081019061418a9190615ae7565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156141cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f0919061535a565b6001600160a01b0316146142465760405162461bcd60e51b815260206004820152601a60248201527f556e6578706563746564207375626d697474657220696e6465780000000000006044820152606401610a77565b81604051602001614257919061575c565b60408051601f19818403018152908290528051602090910120600b850181905543600c8601556009850154917f8e7fd4293d7db11807147d8890c287fad3396fbb09a4e92273fc7856076c153a906142b090869061575c565b60405180910390a3505050565b6001600160a01b03811660009081526003840160205260408120546142f0908590859085906001600160601b0316614d6a565b949350505050565b6000614303836149fd565b600381111561431457614314615153565b146143315760405162461bcd60e51b8152600401610a7790615d9d565b600081116143515760405162461bcd60e51b8152600401610a7790615dd4565b600290910155565b6000614364836149fd565b600381111561437557614375615153565b146143925760405162461bcd60e51b8152600401610a7790615d9d565b600081116143b25760405162461bcd60e51b8152600401610a7790615dd4565b600390910155565b60006143c5836149fd565b60038111156143d6576143d6615153565b146143f35760405162461bcd60e51b8152600401610a7790615d9d565b600490910155565b6000614406836149fd565b600381111561441757614417615153565b146144345760405162461bcd60e51b8152600401610a7790615d9d565b600081116144545760405162461bcd60e51b8152600401610a7790615dd4565b600590910155565b6000614467836149fd565b600381111561447857614478615153565b146144955760405162461bcd60e51b8152600401610a7790615d9d565b6005820154811061450e5760405162461bcd60e51b815260206004820152603d60248201527f4e65772076616c75652073686f756c64206265206c657373207468616e20726560448201527f73756c74207375626d697373696f6e20706572696f64206c656e6774680000006064820152608401610a77565b600690910155565b60008181526020839052604081206001015481906145465760405162461bcd60e51b8152600401610a7790615c81565b505060009081526020919091526040902060018101546002909101549091565b6000818152602083905260408120600101546145945760405162461bcd60e51b8152600401610a7790615c81565b506000908152602091909152604090205490565b6001600160a01b03811660009081526003830160205260408120805467fffffffffffffffe19600160601b9091046001600160401b0316016145f4576001600160401b03915050611079565b805442906001600160401b03600160601b90910481169082161161463457815461462f908290600160601b90046001600160401b0316615d7d565b614637565b60005b95945050505050565b81546001600160401b03909116600160601b0267ffffffffffffffff60601b19909116179055565b81546001600160401b03909116600160a01b0267ffffffffffffffff60a01b19909116179055565b61469981613e1a565b6146e55760405162461bcd60e51b815260206004820152601f60248201527f4177616974696e67207365656420686173206e6f742074696d6564206f7574006044820152606401610a77565b6040517f68c52f05452e81639fa06f379aee3178cddee4725521fff886f244c99e868b5090600090a1610b6f81613771565b60606000806147268585614516565b604080516020810193909352828101919091528051808303820181526060909201905295945050505050565b606454600090610100900460ff161561479b578160ff1660011480156147775750303b155b6147935760405162461bcd60e51b8152600401610a7790615e19565b506000919050565b60645460ff8084169116106147c25760405162461bcd60e51b8152600401610a7790615e19565b506064805460ff191660ff92909216919091179055600190565b919050565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910161149d565b82546001600160a01b03161561489e5760405162461bcd60e51b815260206004820152602260248201527f536f72746974696f6e20506f6f6c206164647265737320616c72656164792073604482015261195d60f21b6064820152608401610a77565b60018301546001600160a01b0316156149035760405162461bcd60e51b815260206004820152602160248201527f444b472056616c696461746f72206164647265737320616c72656164792073656044820152601d60fa1b6064820152608401610a77565b82546001600160a01b03199081166001600160a01b03938416178455600190930180549093169116179055565b83546001600160601b03908116908216101561498e5760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b6001600160a01b0383811660008181526001870160209081526040918290205482516001600160601b03888116825287169281019290925282519416938493927f87f9f9f59204f53d57a89a817c6083a17979cd0531791c91e18551a56e3cfdd7928290030190a35050505050565b805460408051632938b58d60e21b815290516000926001600160a01b03169163a4e2d6349160048083019260209291908290030181865afa158015614a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a6a9190615b04565b156147dc57506008810154600190156147dc5750600c810154600290156147dc57506003919050565b614a9c816137d5565b614ae05760405162461bcd60e51b81526020600482015260156024820152741112d1c81a185cc81b9bdd081d1a5b5959081bdd5d605a1b6044820152606401610a77565b6040517f2852b3e178dd281713b041c3d90b4815bb55b7ec812931d1e8e8d8bb2ed72d3e90600090a1610b6f81613771565b6001600160a01b03808216600090815260028601602052604081205490911680614b4e5760405162461bcd60e51b8152600401610a779061544d565b6001600160a01b038116600090815260038701602052604081208054909190614b85908990899086906001600160601b0316614d6a565b6040516307b8c36760e51b81526001600160a01b0387811660048301529192509087169063f7186ce090602401602060405180830381865afa158015614bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf39190615b04565b614c0b576001600160601b03161592506142f0915050565b6040516304de824f60e41b81526001600160a01b03871690634de824f090614c399088908590600401615b21565b602060405180830381865afa158015614c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c7a9190615b04565b98975050505050505050565b600060606000846008015411614cde5760405162461bcd60e51b815260206004820152601860248201527f444b4720686173206e6f74206265656e207374617274656400000000000000006044820152606401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92614d1a928892600401615b6a565b600060405180830381865afa158015614d37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d5f9190810190615b8f565b915091509250929050565b604051637004922d60e11b81526001600160a01b038381166004830152306024830152600091829186169063e009245a90604401602060405180830381865afa158015614dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ddf91906154b9565b90506000836001600160601b0316826001600160601b031611614e03576000614e0d565b614e0d8483615d5d565b87549091506001600160601b039081169082161015614e31576000925050506142f0565b91506142f09050565b6001600160a01b0381168114610b6f57600080fd5b6001600160601b0381168114610b6f57600080fd5b600080600060608486031215614e7957600080fd5b8335614e8481614e3a565b92506020840135614e9481614e4f565b91506040840135614ea481614e4f565b809150509250925092565b600060208284031215614ec157600080fd5b813561270081614e3a565b600060208284031215614ede57600080fd5b813561270081614e4f565b600060208284031215614efb57600080fd5b81356001600160401b03811115614f1157600080fd5b820160e0818503121561270057600080fd5b600060208284031215614f3557600080fd5b5035919050565b60008060408385031215614f4f57600080fd5b50508035926020909101359150565b600080600080600060a08688031215614f7657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008083601f840112614fab57600080fd5b5081356001600160401b03811115614fc257600080fd5b6020830191508360208260051b8501011115612fc457600080fd5b60008060008060608587031215614ff357600080fd5b84356001600160401b038082111561500a57600080fd5b9086019060a0828903121561501e57600080fd5b909450602086013593506040860135908082111561503b57600080fd5b5061504887828801614f99565b95989497509550505050565b80356001600160401b03811681146147dc57600080fd5b60008060006060848603121561508057600080fd5b833561508b81614e4f565b925061509960208501615054565b91506150a760408501615054565b90509250925092565b60005b838110156150cb5781810151838201526020016150b3565b50506000910152565b600081518084526150ec8160208601602086016150b0565b601f01601f19169290920160200192915050565b60208152600061270060208301846150d4565b60008060006060848603121561512857600080fd5b833561513381614e3a565b9250602084013561514381614e3a565b91506040840135614ea481614e3a565b634e487b7160e01b600052602160045260246000fd5b602081016004831061518b57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060008060a087890312156151aa57600080fd5b86356151b581614e4f565b95506020870135945060408701356151cc81614e3a565b93506060870135925060808701356001600160401b038111156151ee57600080fd5b6151fa89828a01614f99565b979a9699509497509295939492505050565b60008060008060006080868803121561522457600080fd5b8535945060208601356001600160401b0381111561524157600080fd5b61524d88828901614f99565b909550935050604086013561526181614e3a565b949793965091946060013592915050565b600081518084526020808501945080840160005b838110156152a857815163ffffffff1687529582019590820190600101615286565b509495945050505050565b6020815260006127006020830184615272565b82151581526040602082015260006142f060408301846150d4565b60208082526022908201527f43616c6c6572206973206e6f7420746865207374616b696e6720636f6e74726160408201526118dd60f21b606082015260800190565b6020808252601c908201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604082015260600190565b60006020828403121561536c57600080fd5b815161270081614e3a565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160601b038516815260208082018590526001600160a01b038481166040840152608060608401819052845190840181905260009285810192909160a0860190855b818110156154065785518416835294840194918401916001016153e8565b50909a9950505050505050505050565b6020808252601e908201527f43616c6c6572206973206e6f74207468652057616c6c6574204f776e65720000604082015260600190565b60208082526010908201526f2ab735b737bbb71037b832b930ba37b960811b604082015260600190565b60008060006060848603121561548c57600080fd5b835161549781614e3a565b60208501519093506154a881614e3a565b6040850151909250614ea481614e3a565b6000602082840312156154cb57600080fd5b815161270081614e4f565b6000808335601e198436030181126154ed57600080fd5b8301803591506001600160401b0382111561550757600080fd5b602001915036819003821315612fc457600080fd5b6000808335601e1984360301811261553357600080fd5b83016020810192503590506001600160401b0381111561555257600080fd5b803603821315612fc457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126155a157600080fd5b83016020810192503590506001600160401b038111156155c057600080fd5b8060051b3603821315612fc457600080fd5b803560ff811681146147dc57600080fd5b81835260006001600160fb1b038311156155fc57600080fd5b8260051b80836020870137939093016020019392505050565b63ffffffff81168114610b6f57600080fd5b8183526000602080850194508260005b858110156152a857813561564a81615615565b63ffffffff1687529582019590820190600101615637565b80358252600060206156768184018461551c565b60e08387015261568a60e087018284615561565b91505061569a604085018561558a565b868303604088015280835290916000919084015b818310156156d65760ff6156c1856155d2565b168152928401926001929092019184016156ae565b6156e3606088018861551c565b9550935087810360608901526156fa818686615561565b94505050505061570d608084018461558a565b85830360808701526157208382846155e3565b9250505061573160a084018461558a565b85830360a0870152615744838284615627565b9250505060c083013560c08501528091505092915050565b6020815260006127006020830184615662565b634e487b7160e01b600052601160045260246000fd5b808201808211156110795761107961576f565b6040815260006157ab6040830185615272565b90508260208301529392505050565b818103818111156110795761107961576f565b6020815260006142f0602083018486615627565b8015158114610b6f57600080fd5b60018060a01b038716815260a06020820152853560a08201526000615817602088018861558a565b60a060c085015261582d610140850182846155e3565b915050604088013561583e816157e1565b151560e0840152615852606089018961551c565b609f19808685030161010087015261586b848385615561565b935061587a60808c018c61558a565b935091508086850301610120870152506158958383836155e3565b9250505082810360408401526158ab81886150d4565b905085606084015282810360808401526158c6818587615627565b9998505050505050505050565b604051601f8201601f191681016001600160401b03811182821017156158fb576158fb615377565b604052919050565b60006001600160401b0382111561591c5761591c615377565b5060051b60200190565b6000602080838503121561593957600080fd5b82516001600160401b0381111561594f57600080fd5b8301601f8101851361596057600080fd5b805161597361596e82615903565b6158d3565b81815260059190911b8201830190838101908783111561599257600080fd5b928401925b828410156159b95783516159aa81615615565b82529284019290840190615997565b979650505050505050565b6000600182016159d6576159d661576f565b5060010190565b6000602082840312156159ef57600080fd5b8135612700816157e1565b60208082526022908201527f496e76616c69642077616c6c6574206d656d62657273206964656e7469666965604082015261727360f01b606082015260800190565b60006020808385031215615a4f57600080fd5b82516001600160401b03811115615a6557600080fd5b8301601f81018513615a7657600080fd5b8051615a8461596e82615903565b81815260059190911b82018301908381019087831115615aa357600080fd5b928401925b828410156159b9578351615abb81614e3a565b82529284019290840190615aa8565b600060208284031215615adc57600080fd5b815161270081615615565b600060208284031215615af957600080fd5b813561270081615615565b600060208284031215615b1657600080fd5b8151612700816157e1565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160401b03818116838216019080821115615b6357615b6361576f565b5092915050565b606081526000615b7d6060830186615662565b60208301949094525060400152919050565b60008060408385031215615ba257600080fd5b8251615bad816157e1565b60208401519092506001600160401b0380821115615bca57600080fd5b818501915085601f830112615bde57600080fd5b815181811115615bf057615bf0615377565b615c03601f8201601f19166020016158d3565b9150808252866020828501011115615c1a57600080fd5b615c2b8160208401602086016150b0565b5080925050509250929050565b6000808335601e19843603018112615c4f57600080fd5b8301803591506001600160401b03821115615c6957600080fd5b6020019150600581901b3603821315612fc457600080fd5b60208082526030908201527f57616c6c657420776974682074686520676976656e20494420686173206e6f7460408201526f081899595b881c9959da5cdd195c995960821b606082015260800190565b600060208284031215615ce357600080fd5b612700826155d2565b60ff82811682821603908111156110795761107961576f565b8183823760009101908152919050565b60008085851115615d2557600080fd5b83861115615d3257600080fd5b5050820193919092039150565b8035602083101561107957600019602084900360031b1b1692915050565b6001600160601b03828116828216039080821115615b6357615b6361576f565b6001600160401b03828116828216039080821115615b6357615b6361576f565b60208082526019908201527f43757272656e74207374617465206973206e6f742049444c4500000000000000604082015260600190565b60208082526025908201527f4e65772076616c75652073686f756c642062652067726561746572207468616e604082015264207a65726f60d81b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b60608201526080019056fea26469706673582212207d527670be2f1a1bee5eb74798769255f2df8088f25a9510d01b903ec55371b564736f6c63430008110033496e697469616c697a61626c653a20636f6e747261637420697320616c726561";
1932
1932
  var isSuperArgs = function (xs) {
1933
1933
  return (typeof xs[0] === "string" ||
1934
1934
  Array.isArray(xs[0]) ||