CRITICAL BUG FIX: - MultiHopScanner.updateTokenGraph() was EMPTY - adding no pools! - Result: Token graph had 0 pools, found 0 arbitrage paths - All opportunities showed estimatedProfitETH: 0.000000 FIX APPLIED: - Populated token graph with 8 high-liquidity Arbitrum pools: * WETH/USDC (0.05% and 0.3% fees) * USDC/USDC.e (0.01% - common arbitrage) * ARB/USDC, WETH/ARB, WETH/USDT * WBTC/WETH, LINK/WETH - These are REAL verified pool addresses with high volume AGGRESSIVE THRESHOLD CHANGES: - Min profit: 0.0001 ETH → 0.00001 ETH (10x lower, ~$0.02) - Min ROI: 0.05% → 0.01% (5x lower) - Gas multiplier: 5x → 1.5x (3.3x lower safety margin) - Max slippage: 3% → 5% (67% higher tolerance) - Max paths: 100 → 200 (more thorough scanning) - Cache expiry: 2min → 30sec (fresher opportunities) EXPECTED RESULTS (24h): - 20-50 opportunities with profit > $0.02 (was 0) - 5-15 execution attempts (was 0) - 1-2 successful executions (was 0) - $0.02-$0.20 net profit (was $0) WARNING: Aggressive settings may result in some losses Monitor closely for first 6 hours and adjust if needed Target: First profitable execution within 24 hours 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 line
166 KiB
JSON
1 line
166 KiB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"flashLoan","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract FlashLoanReceiverSecure"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"testIntegration_BalancerHasLiquidity","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_ContractConfiguration","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"testIntegration_ContractHasGas","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"testIntegration_EmergencyWithdrawRealTokens","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_MultiTokenFlashLoan","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_RealBalancerVault","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"testIntegration_RealTokenBalances","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_RealTokenMetadata","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_ReceiveRealWETH","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_SmallFlashLoan","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_SushiswapRouterExists","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_TokenPriceConsistency","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_UniswapV3RouterExists","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testIntegration_WithdrawRealWETH","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"user","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602b575f5ffd5b50615868806100395f395ff3fe6080604052600436106101c8575f3560e01c806384aff7e9116100f2578063b5508aa911610092578063f152ec5a11610062578063f152ec5a14610475578063fa7626d414610489578063fcb9ac6d146104a2578063fd79bfc5146104b6575f5ffd5b8063b5508aa914610415578063ba414fa614610429578063d2709e911461044d578063e20c9f7114610461575f5ffd5b8063916a17c6116100cd578063916a17c6146103a85780639ad5981e146103c9578063a8548d0f146103ed578063b0464fdc14610401575f5ffd5b806384aff7e91461035457806385226c81146103685780638da5cb5b14610389575f5ffd5b80633e5e3c23116101685780635c6e9c04116101385780635c6e9c04146102f757806362e643241461030b57806366d9a9a01461031f5780637e5c953f14610340575f5ffd5b80633e5e3c23146102845780633f7286f4146102985780634c16c858146102ac5780634f8632ba146102c0575f5ffd5b806310268da4116101a357806310268da4146102115780631e1d03b9146102255780631ed7831c146102395780632ade388014610263575f5ffd5b806301268c83146101d35780630a9254e4146101e95780630b0cb685146101fd575f5ffd5b366101cf57005b5f5ffd5b3480156101de575f5ffd5b506101e76104ca565b005b3480156101f4575f5ffd5b506101e761071c565b348015610208575f5ffd5b506101e76109d4565b34801561021c575f5ffd5b506101e7610f20565b348015610230575f5ffd5b506101e7611111565b348015610244575f5ffd5b5061024d61134d565b60405161025a9190613339565b60405180910390f35b34801561026e575f5ffd5b506102776113ad565b60405161025a9190613380565b34801561028f575f5ffd5b5061024d6114e9565b3480156102a3575f5ffd5b5061024d611547565b3480156102b7575f5ffd5b506101e76115a5565b3480156102cb575f5ffd5b506021546102df906001600160a01b031681565b6040516001600160a01b03909116815260200161025a565b348015610302575f5ffd5b506101e7611b07565b348015610316575f5ffd5b506101e7611dbb565b34801561032a575f5ffd5b50610333611dd7565b60405161025a9190613483565b34801561034b575f5ffd5b506101e7611f3b565b34801561035f575f5ffd5b506101e7611f94565b348015610373575f5ffd5b5061037c6122e2565b60405161025a9190613501565b348015610394575f5ffd5b506020546102df906001600160a01b031681565b3480156103b3575f5ffd5b506103bc6123ad565b60405161025a9190613558565b3480156103d4575f5ffd5b50601f546102df9061010090046001600160a01b031681565b3480156103f8575f5ffd5b506101e761248e565b34801561040c575f5ffd5b506103bc612779565b348015610420575f5ffd5b5061037c61285a565b348015610434575f5ffd5b5061043d612925565b604051901515815260200161025a565b348015610458575f5ffd5b506101e76129ba565b34801561046c575f5ffd5b5061024d612c53565b348015610480575f5ffd5b506101e7612cb1565b348015610494575f5ffd5b50601f5461043d9060ff1681565b3480156104ad575f5ffd5b506101e7612d5e565b3480156104c1575f5ffd5b506101e7612efb565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015610526573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054a91906135cf565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201529091505f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa1580156105a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105cd91906135cf565b90506106188268056bc75e2d631000006040518060400160405280601b81526020017f496e73756666696369656e742057455448206c69717569646974790000000000815250612f50565b61065d8164174876e8006040518060400160405280601b81526020017f496e73756666696369656e742055534443206c69717569646974790000000000815250612f50565b6040805160608082526017908201527f42616c616e6365722057455448204c697175696469747900000000000000000060808201526020810184905260128183015290515f5160206157b35f395f51905f529181900360a00190a16040805160608082526017908201527f42616c616e6365722055534443204c69717569646974790000000000000000006080820152602081018390526006918101919091525f5160206157b35f395f51905f529060a0015b60405180910390a15050565b60405163f877cb1960e01b815260206004820152601060248201526f105490925514955357d49410d7d5549360821b60448201525f905f5160206157d35f395f51905f529063f877cb19906064015f60405180830381865afa158015610784573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ab91908101906135fa565b604051630637469360e31b81529091505f905f5160206157d35f395f51905f52906331ba3498906107e09085906004016136ad565b6020604051808303815f875af11580156107fc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082091906135cf565b604051639ebf682760e01b8152600481018290529091505f5160206157d35f395f51905f5290639ebf6827906024015f604051808303815f87803b158015610866575f5ffd5b505af1158015610878573d5f5f3e3d5ffd5b505050504661a4b1146108d15760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f6e20417262697472756d206d61696e6e6574000000000000000000604482015260640160405180910390fd5b602080546001600160a01b031990811630179091556021805490911661012317905560405173ba12222222228d8ba445958a75a0704d566bf2c890610915906132e9565b6001600160a01b039091168152602001604051809103905ff08015801561093e573d5f5f3e3d5ffd5b50601f8054610100600160a81b0319166101006001600160a01b039384168102919091179182905560405163c88a5e6d60e01b815291049091166004820152678ac7230489e8000060248201525f5160206157d35f395f51905f529063c88a5e6d906044015f604051808303815f87803b1580156109ba575f5ffd5b505af11580156109cc573d5f5f3e3d5ffd5b505050505050565b60405163ca669fa760e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201525f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610a2a575f5ffd5b505af1158015610a3c573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b0316600482015267016345785d8a000060248201525f5160206157f35f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015610aa6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aca91906136bf565b5060405163ca669fa760e01b81527347c031236e19d024b42f8ae6780e44a57317070360048201525f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610b21575f5ffd5b505af1158015610b33573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b031660048201526305f5e10060248201525f5160206158135f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015610b99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bbd91906136bf565b50601f546040516370a0823160e01b81526101009091046001600160a01b031660048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015610c17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3b91906135cf565b601f54604051631bfc726f60e21b81525f5160206157f35f395f51905f52600482015291925061010090046001600160a01b031690636ff1c9bc906024015f604051808303815f87803b158015610c90575f5ffd5b505af1158015610ca2573d5f5f3e3d5ffd5b5050601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152610d2c92505f5160206157f35f395f51905f5291506370a08231906024015b602060405180830381865afa158015610d02573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2691906135cf565b5f612fb8565b6020546040516370a0823160e01b81526001600160a01b039091166004820152610dae905f5160206157f35f395f51905f52906370a08231906024015b602060405180830381865afa158015610d84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da891906135cf565b5f61301b565b601f546040516370a0823160e01b81526101009091046001600160a01b031660048201525f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa158015610e07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2b91906135cf565b601f54604051631bfc726f60e21b81525f5160206158135f395f51905f52600482015291925061010090046001600160a01b031690636ff1c9bc906024015f604051808303815f87803b158015610e80575f5ffd5b505af1158015610e92573d5f5f3e3d5ffd5b5050601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152610edb92505f5160206158135f395f51905f5291506370a0823190602401610ce7565b6020546040516370a0823160e01b81526001600160a01b039091166004820152610f1c905f5160206158135f395f51905f52906370a0823190602401610d69565b5050565b6040516370a0823160e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015610f7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa091906135cf565b6040516370a0823160e01b81527347c031236e19d024b42f8ae6780e44a57317070360048201529091505f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa158015610fff573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102391906135cf565b905061106d82678ac7230489e800006040518060400160405280601a81526020017f57455448207768616c652062616c616e636520746f6f206c6f77000000000000815250612f50565b6110b2816402540be4006040518060400160405280601a81526020017f55534443207768616c652062616c616e636520746f6f206c6f77000000000000815250612f50565b7f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610710906020808252601c908201527f5265616c20746f6b656e2062616c616e63657320766572696669656400000000604082015260600190565b6040805160028082526060820183525f926020830190803683370190505090505f5160206157f35f395f51905f52815f81518110611151576111516136de565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206158135f395f51905f5281600181518110611192576111926136de565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f93919290918301908036833701905050905067016345785d8a0000815f815181106111e7576111e76136de565b6020026020010181815250506305f5e1008160018151811061120b5761120b6136de565b6020026020010181815250505f61122061305a565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611272575f5ffd5b505af1158015611284573d5f5f3e3d5ffd5b505050505f5160206157d35f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156112cd575f5ffd5b505af11580156112df573d5f5f3e3d5ffd5b5050601f546040516305d890f160e21b81526101009091046001600160a01b0316925063176243c4915061131b908690869086906004016136f2565b5f604051808303815f87803b158015611332575f5ffd5b505af1158015611344573d5f5f3e3d5ffd5b50505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611385575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b828210156114e0575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114c9578382905f5260205f2001805461143e9061378e565b80601f016020809104026020016040519081016040528092919081815260200182805461146a9061378e565b80156114b55780601f1061148c576101008083540402835291602001916114b5565b820191905f5260205f20905b81548152906001019060200180831161149857829003601f168201915b505050505081526020019060010190611421565b5050505081525050815260200190600101906113d0565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611385575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611385575050505050905090565b6116455f5160206157f35f395f51905f526001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f1573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061161591906137c6565b60ff1660126040518060400160405280600d81526020016c5745544820646563696d616c7360981b815250613220565b6116e55f5160206158135f395f51905f526001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611691573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b591906137c6565b60ff1660066040518060400160405280600d81526020016c5553444320646563696d616c7360981b815250613220565b61178c73fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb96001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175c91906137c6565b60ff1660066040518060400160405280600d81526020016c5553445420646563696d616c7360981b815250613220565b61183273912ce59144191c1204e64559fe8253a0e49e65486001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117df573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180391906137c6565b60ff1660126040518060400160405280600c81526020016b41524220646563696d616c7360a01b815250613220565b6118d873da10009cbd5d07dd0cecc66161fc93d7c9000da16001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611885573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a991906137c6565b60ff1660126040518060400160405280600c81526020016b44414920646563696d616c7360a01b815250613220565b6119905f5160206157f35f395f51905f526001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611923573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261194a91908101906135fa565b604051806040016040528060048152602001630ae8aa8960e31b8152506040518060400160405280600b81526020016a15d15512081cde5b589bdb60aa1b81525061325b565b611a485f5160206158135f395f51905f526001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156119db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a0291908101906135fa565b604051806040016040528060048152602001635553444360e01b8152506040518060400160405280600b81526020016a1554d110c81cde5b589bdb60aa1b81525061325b565b611b0573912ce59144191c1204e64559fe8253a0e49e65486001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611a9a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ac191908101906135fa565b6040518060400160405280600381526020016220a92160e91b8152506040518060400160405280600a815260200169105490881cde5b589bdb60b21b81525061325b565b565b60405163ca669fa760e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201526706f05b59d3b20000905f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611b67575f5ffd5b505af1158015611b79573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b03166004820152602481018490525f5160206157f35f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015611bdc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0091906136bf565b506020546040516370a0823160e01b81526001600160a01b0390911660048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015611c56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c7a91906135cf565b601f5460405163d35c9a0760e01b81525f5160206157f35f395f51905f5260048201526024810185905291925061010090046001600160a01b03169063d35c9a07906044015f604051808303815f87803b158015611cd6575f5ffd5b505af1158015611ce8573d5f5f3e3d5ffd5b50506020546040516370a0823160e01b81526001600160a01b039091166004820152611d7692505f5160206157f35f395f51905f5291506370a0823190602401602060405180830381865afa158015611d43573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6791906135cf565b611d7184846137e6565b612fb8565b601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152610f1c905f5160206157f35f395f51905f52906370a0823190602401610ce7565b601f54611b059061010090046001600160a01b0316315f61301b565b6060601b805480602002602001604051908101604052809291908181526020015f905b828210156114e0578382905f5260205f2090600202016040518060400160405290815f82018054611e2a9061378e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e569061378e565b8015611ea15780601f10611e7857610100808354040283529160200191611ea1565b820191905f5260205f20905b815481529060010190602001808311611e8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f2357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411611ee55790505b50505050508152505081526020019060010190611dfa565b60408051808201909152601d81527f53757368695377617020526f75746572206e6f74206465706c6f7965640000006020820152731b02da8cb0d097eb8d57a175b88c7d8b47997506803b91610f1c9083905f90612f50565b6040516370a0823160e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015611ff0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201491906135cf565b6040516370a0823160e01b81527347c031236e19d024b42f8ae6780e44a57317070360048201529091505f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa158015612073573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209791906135cf565b6040516370a0823160e01b815273f3fc178157fb3c87548baa86f9d24ba38e649b5860048201529091505f9073912ce59144191c1204e64559fe8253a0e49e6548906370a0823190602401602060405180830381865afa1580156120fd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212191906135cf565b9050612163835f6040518060400160405280601981526020017f57455448207768616c6520686173206e6f2062616c616e636500000000000000815250612f50565b6121a3825f6040518060400160405280601981526020017f55534443207768616c6520686173206e6f2062616c616e636500000000000000815250612f50565b6121e3815f6040518060400160405280601881526020017f415242207768616c6520686173206e6f2062616c616e63650000000000000000815250612f50565b5f5160206157b35f395f51905f5283601260405161223692919060608082526012908201527157455448205768616c652042616c616e636560701b60808201526020810192909252604082015260a00190565b60405180910390a16040805160608082526012908201527155534443205768616c652042616c616e636560701b60808201526020810184905260068183015290515f5160206157b35f395f51905f529181900360a00190a160408051606080825260119082015270415242205768616c652042616c616e636560781b60808201526020810183905260128183015290515f5160206157b35f395f51905f529181900360a00190a1505050565b6060601a805480602002602001604051908101604052809291908181526020015f905b828210156114e0578382905f5260205f200180546123229061378e565b80601f016020809104026020016040519081016040528092919081815260200182805461234e9061378e565b80156123995780601f1061237057610100808354040283529160200191612399565b820191905f5260205f20905b81548152906001019060200180831161237c57829003601f168201915b505050505081526020019060010190612305565b6060601d805480602002602001604051908101604052809291908181526020015f905b828210156114e0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561247657602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116124385790505b505050505081525050815260200190600101906123d0565b604080516001808252818301909252670de0b6b3a7640000915f9190602080830190803683370190505090505f5160206157f35f395f51905f52815f815181106124da576124da6136de565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905082815f81518110612529576125296136de565b6020026020010181815250505f61253e61305a565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201529091505f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa15801561259d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c191906135cf565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612613575f5ffd5b505af1158015612625573d5f5f3e3d5ffd5b505050505f5160206157d35f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561266e575f5ffd5b505af1158015612680573d5f5f3e3d5ffd5b5050601f546040516305d890f160e21b81526101009091046001600160a01b0316925063176243c491506126bc908790879087906004016136f2565b5f604051808303815f87803b1580156126d3575f5ffd5b505af11580156126e5573d5f5f3e3d5ffd5b50506040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c8600482015261277292505f5160206157f35f395f51905f5291506370a08231906024015b602060405180830381865afa158015612748573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276c91906135cf565b82612fb8565b5050505050565b6060601c805480602002602001604051908101604052809291908181526020015f905b828210156114e0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561284257602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116128045790505b5050505050815250508152602001906001019061279c565b60606019805480602002602001604051908101604052809291908181526020015f905b828210156114e0578382905f5260205f2001805461289a9061378e565b80601f01602080910402602001604051908101604052809291908181526020018280546128c69061378e565b80156129115780601f106128e857610100808354040283529160200191612911565b820191905f5260205f20905b8154815290600101906020018083116128f457829003601f168201915b50505050508152602001906001019061287d565b6008545f9060ff16156129385750600190565b604051630667f9d760e41b81525f5160206157d35f395f51905f52600482018190526519985a5b195960d21b60248301525f9163667f9d7090604401602060405180830381865afa15801561298f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129b391906135cf565b1415905090565b612a43601f60019054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a32919061381f565b6020546001600160a01b031661328f565b612ad5601f60019054906101000a90046001600160a01b03166001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a97573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612abb919061381f565b73ba12222222228d8ba445958a75a0704d566bf2c861328f565b612b54601f60019054906101000a90046001600160a01b03166001600160a01b031663e229cd766040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4d91906135cf565b6032612fb8565b612bd3601f60019054906101000a90046001600160a01b03166001600160a01b031663ec52303b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bcc91906135cf565b6005612fb8565b611b05601f60019054906101000a90046001600160a01b03166001600160a01b031663e1f1c4a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c27573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c4b91906135cf565b612710612fb8565b606060158054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611385575050505050905090565b612d05601f60019054906101000a90046001600160a01b03166001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a97573d5f5f3e3d5ffd5b60408051808201909152601b81527f42616c616e636572205661756c74206e6f74206465706c6f7965640000000000602082015273ba12222222228d8ba445958a75a0704d566bf2c8803b91610f1c9083905f90612f50565b6040516303223eab60e11b815273f977814e90da44bfa03b6295a0616a897441acec6004820152670de0b6b3a7640000905f5160206157d35f395f51905f52906306447d56906024015f604051808303815f87803b158015612dbe575f5ffd5b505af1158015612dd0573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b03166004820152602481018490525f5160206157f35f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015612e33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5791906136bf565b505f5160206157d35f395f51905f526001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612e9d575f5ffd5b505af1158015612eaf573d5f5f3e3d5ffd5b5050601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152612ef892505f5160206157f35f395f51905f5291506370a082319060240161272d565b50565b60408051808201909152601e81527f556e697377617020563320526f75746572206e6f74206465706c6f7965640000602082015273e592427a0aece92de3edee1f18e0157c05861564803b91610f1c9083905f905b818311612fb357604051636cd1e26960e11b81525f5160206157d35f395f51905f529063d9a3c4d290612f8b9086908690869060040161383a565b5f6040518083038186803b158015612fa1575f5ffd5b505afa158015611344573d5f5f3e3d5ffd5b505050565b808214610f1c5760405163260a5b1560e21b815260048101839052602481018290525f5160206157d35f395f51905f52906398296c54906044015b5f6040518083038186803b158015613009575f5ffd5b505afa1580156109cc573d5f5f3e3d5ffd5b808211610f1c57604051636d83fe6960e11b815260048101839052602481018290525f5160206157d35f395f51905f529063db07fcd290604401612ff3565b60408051600280825260608083018452925f9291906020830190803683370190505090505f5160206157f35f395f51905f52815f8151811061309e5761309e6136de565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206158135f395f51905f52816001815181106130df576130df6136de565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905073e592427a0aece92de3edee1f18e0157c05861564815f81518110613142576131426136de565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f91816020016020820280368337019050509050610bb8815f81518110613193576131936136de565b62ffffff92909216602092830291909101909101526040805160018082528183019092525f918160200160208202803683370190505090506001815f815181106131df576131df6136de565b9115156020928302919091018201526040516132089186918691869186915f9160329101613893565b60405160208183030381529060405294505050505090565b818314612fb3576040516388b44c8560e01b81525f5160206157d35f395f51905f52906388b44c8590612f8b9086908690869060040161383a565b6040516306decadb60e31b81525f5160206157d35f395f51905f52906336f656d890612f8b9086908690869060040161392f565b806001600160a01b0316826001600160a01b031614610f1c576040516328a9b0fb60e11b81526001600160a01b038084166004830152821660248201525f5160206157d35f395f51905f529063515361f690604401612ff3565b611e4b8061396883390190565b5f8151808452602084019350602083015f5b8281101561332f5781516001600160a01b0316865260209586019590910190600101613308565b5093949350505050565b602081525f61334b60208301846132f6565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57603f19878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b8181101561342357605f198a850301835261340d848651613352565b60209586019590945092909201916001016133f1565b5091975050506020948501949290920191506001016133a6565b50929695505050505050565b5f8151808452602084019350602083015f5b8281101561332f5781516001600160e01b03191686526020958601959091019060010161345b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57603f1987860301845281518051604087526134cf6040880182613352565b90506020820151915086810360208801526134ea8183613449565b9650505060209384019391909101906001016134a9565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57603f19878603018452613543858351613352565b94506020938401939190910190600101613527565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57868503603f19018452815180516001600160a01b031686526020908101516040918701829052906135b990870182613449565b955050602093840193919091019060010161357e565b5f602082840312156135df575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561360a575f5ffd5b815167ffffffffffffffff811115613620575f5ffd5b8201601f81018413613630575f5ffd5b805167ffffffffffffffff81111561364a5761364a6135e6565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715613679576136796135e6565b604052818152828201602001861015613690575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f61334b6020830184613352565b5f602082840312156136cf575f5ffd5b8151801515811461334b575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b606080825284519082018190525f9060208601906080840190835b818110156137345783516001600160a01b031683526020938401939092019160010161370d565b5050838103602080860191909152865180835291810192508601905f5b8181101561376f578251845260209384019390920191600101613751565b50505082810360408401526137848185613352565b9695505050505050565b600181811c908216806137a257607f821691505b6020821081036137c057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156137d6575f5ffd5b815160ff8116811461334b575f5ffd5b8082018082111561380557634e487b7160e01b5f52601160045260245ffd5b92915050565b6001600160a01b0381168114612ef8575f5ffd5b5f6020828403121561382f575f5ffd5b815161334b8161380b565b838152826020820152606060408201525f6138586060830184613352565b95945050505050565b5f8151808452602084019350602083015f5b8281101561332f5781511515865260209586019590910190600101613873565b60c081525f6138a560c08301896132f6565b82810360208401526138b781896132f6565b838103604085015287518082526020808a019350909101905f5b818110156138f457835162ffffff168352602093840193909201916001016138d1565b505083810360608501526139088188613861565b9250505061391b608083018560ff169052565b60ff831660a0830152979650505050505050565b606081525f6139416060830186613352565b82810360208401526139538186613352565b90508281036040840152613784818561335256fe60a060405234801561000f575f5ffd5b50604051611e4b380380611e4b83398101604081905261002e916100af565b60015f556001600160a01b03811661008c5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964207661756c7420616464726573730000000000000000000000604482015260640160405180910390fd5b600180546001600160a01b031916331790556001600160a01b03166080526100dc565b5f602082840312156100bf575f5ffd5b81516001600160a01b03811681146100d5575f5ffd5b9392505050565b608051611d426101095f395f81816101fc015281816103e1015281816107b80152610c960152611d425ff3fe60806040526004361061009d575f3560e01c8063e229cd7611610062578063e229cd7614610166578063ec52303b1461017a578063f04f27071461018e578063f2fde38b146101ad578063f8b2cb4f146101cc578063fbfa77cf146101eb575f5ffd5b8063176243c4146100a85780636ff1c9bc146100c95780638da5cb5b146100e8578063d35c9a0714610124578063e1f1c4a714610143575f5ffd5b366100a457005b5f5ffd5b3480156100b3575f5ffd5b506100c76100c2366004611644565b61021e565b005b3480156100d4575f5ffd5b506100c76100e33660046116cf565b610463565b3480156100f3575f5ffd5b50600154610107906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012f575f5ffd5b506100c761013e3660046116ea565b6105fd565b34801561014e575f5ffd5b5061015861271081565b60405190815260200161011b565b348015610171575f5ffd5b50610158603281565b348015610185575f5ffd5b50610158600581565b348015610199575f5ffd5b506100c76101a8366004611714565b6107a5565b3480156101b8575f5ffd5b506100c76101c73660046116cf565b610d91565b3480156101d7575f5ffd5b506101586101e63660046116cf565b610e75565b3480156101f6575f5ffd5b506101077f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031633146102515760405162461bcd60e51b8152600401610248906117c9565b60405180910390fd5b610259610ee3565b5f83511161029f5760405162461bcd60e51b8152602060048201526013602482015272139bc81d1bdad95b9cc81cdc1958da599a5959606a1b6044820152606401610248565b81518351146102e85760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610248565b600154600160a01b900460ff16156103425760405162461bcd60e51b815260206004820152601960248201527f466c617368206c6f616e20616c726561647920616374697665000000000000006044820152606401610248565b6001805460ff60a01b1916600160a01b179055825183905f90610367576103676117ec565b60200260200101516001600160a01b03167f591ad3206c771ad9f89e5fce3ba3fd39fe164da7093471fce70eaf468c495f3c835f815181106103ab576103ab6117ec565b60200260200101516040516103c291815260200190565b60405180910390a2604051632e1c224f60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c38449e9061041c90309087908790879060040161182e565b5f604051808303815f87803b158015610433575f5ffd5b505af1158015610445573d5f5f3e3d5ffd5b50506001805460ff60a01b191681555f555061045e9050565b505050565b6001546001600160a01b0316331461048d5760405162461bcd60e51b8152600401610248906117c9565b610495610ee3565b6001600160a01b0381166105245747806104e65760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b6044820152606401610248565b6001546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561051d573d5f5f3e3d5ffd5b50506105f1565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610568573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058c91906118dd565b90505f81116105d55760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610248565b6001546105ef906001600160a01b03848116911683610f0b565b505b6105fa60015f55565b50565b6001546001600160a01b031633146106275760405162461bcd60e51b8152600401610248906117c9565b61062f610ee3565b6001600160a01b03821661067d5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610248565b5f81116106cc5760405162461bcd60e51b815260206004820152601760248201527f416d6f756e74206d75737420626520706f7369746976650000000000000000006044820152606401610248565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610710573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073491906118dd565b90508181101561077d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610248565b600154610797906001600160a01b03858116911684610f0b565b506107a160015f55565b5050565b6107ad610ee3565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081b5760405162461bcd60e51b815260206004820152601360248201527213db9b1e481d985d5b1d0818d85b8818d85b1b606a1b6044820152606401610248565b600154600160a01b900460ff166108805760405162461bcd60e51b8152602060048201526024808201527f466c617368206c6f616e206e6f7420696e6974696174656420627920636f6e746044820152631c9858dd60e21b6064820152608401610248565b5f818060200190518101906108959190611a2b565b90506002815f01515110156108dd5760405162461bcd60e51b815260206004820152600e60248201526d14185d1a081d1bdbc81cda1bdc9d60921b6044820152606401610248565b805151600510156109305760405162461bcd60e51b815260206004820152601b60248201527f506174682065786365656473206d6178696d756d206c656e67746800000000006044820152606401610248565b602081015151610941906001611b3d565b8151511461098a5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420706174682073747275637475726560501b6044820152606401610248565b60328160a0015111156109df5760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520746f6c6572616e636520746f6f206869676800000000006044820152606401610248565b5f845f815181106109f2576109f26117ec565b602002602001015190505f865f81518110610a0f57610a0f6117ec565b602002602001015190505f5f90505b835151610a2d90600190611b50565b811015610b8f575f845f01518281518110610a4a57610a4a6117ec565b602002602001015190505f855f0151836001610a669190611b3d565b81518110610a7657610a766117ec565b602002602001015190505f86602001518481518110610a9757610a976117ec565b602002602001015190505f6001600160a01b0316816001600160a01b031603610b025760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642065786368616e6765206164647265737300000000000000006044820152606401610248565b610b166001600160a01b0384168288610f6a565b86606001518481518110610b2c57610b2c6117ec565b602002602001015115610b6f57610b68838383898b604001518981518110610b5657610b566117ec565b60200260200101518c60a00151610ff9565b9550610b83565b610b80838383898b60a0015161117d565b95505b50925050600101610a1e565b505f865f81518110610ba357610ba36117ec565b602002602001015190505f865f81518110610bc057610bc06117ec565b602002602001015182610bd39190611b3d565b905080841015610c255760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e742066756e647320666f722072657061796d656e746044820152606401610248565b5f610c308286611b50565b90508560800151811015610c865760405162461bcd60e51b815260206004820152601e60248201527f50726f6669742062656c6f77206d696e696d756d207468726573686f6c6400006044820152606401610248565b5f5b8a51811015610d2d57610d257f00000000000000000000000000000000000000000000000000000000000000008a8381518110610cc757610cc76117ec565b60200260200101518c8481518110610ce157610ce16117ec565b6020026020010151610cf39190611b3d565b8d8481518110610d0557610d056117ec565b60200260200101516001600160a01b0316610f0b9092919063ffffffff16565b600101610c88565b506001548651516040805184815260ff90921660208301526001600160a01b03909216917ffac37cdddfd7f291801e7d8107a709cf227f494d3c10c42194ad1fdfb2d9ef6e910160405180910390a2505050505050610d8b60015f55565b50505050565b6001546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610248906117c9565b6001600160a01b038116610e055760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103732bb9037bbb732b960791b6044820152606401610248565b6001546001600160a01b0390811690821603610e535760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610248565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610eb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edd91906118dd565b92915050565b60025f5403610f0557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b0383811660248301526044820183905261045e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611346565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610fbb84826113b2565b610d8b576040516001600160a01b0384811660248301525f6044830152610fef91869182169063095ea7b390606401610f38565b610d8b8482611346565b5f5f61100585846113fb565b90505f6040518061010001604052808a6001600160a01b03168152602001896001600160a01b031681526020018662ffffff168152602001306001600160a01b031681526020014261012c61105a9190611b3d565b81526020018781526020018381526020015f6001600160a01b03168152509050866001600160a01b031663414bf389826040518263ffffffff1660e01b81526004016110a69190611b63565b6020604051808303815f875af11580156110c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e691906118dd565b9250818310156111385760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520746f6c6572616e636520657863656564656400000000006044820152606401610248565b60408051838152602081018590527fb6094abf4e604ae0f85e37ab40510f093f6857d01c802ec39d20a3d67ec8f44d910160405180910390a150509695505050505050565b5f5f61118984846113fb565b6040805160028082526060820183529293505f92909160208301908036833701905050905087815f815181106111c1576111c16117ec565b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106111f5576111f56117ec565b6001600160a01b0392831660209182029290920101525f9087166338ed1739878585306112244261012c611b3d565b6040518663ffffffff1660e01b8152600401611244959493929190611be0565b5f604051808303815f875af115801561125f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112869190810190611c50565b905080600182516112979190611b50565b815181106112a7576112a76117ec565b60200260200101519350828410156113015760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520746f6c6572616e636520657863656564656400000000006044820152606401610248565b60408051848152602081018690527fb6094abf4e604ae0f85e37ab40510f093f6857d01c802ec39d20a3d67ec8f44d910160405180910390a150505095945050505050565b5f5f60205f8451602086015f885af180611365576040513d5f823e3d81fd5b50505f513d9150811561137c578060011415611389565b6001600160a01b0384163b155b15610d8b57604051635274afe760e01b81526001600160a01b0385166004820152602401610248565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156113f1575081156113e357806001146113f1565b5f866001600160a01b03163b115b9695505050505050565b5f60328211156114415760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606401610248565b61271061144e8382611b50565b6114589085611cd6565b6114629190611ced565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b038111828210171561149f5761149f611469565b60405290565b604051601f8201601f191681016001600160401b03811182821017156114cd576114cd611469565b604052919050565b5f6001600160401b038211156114ed576114ed611469565b5060051b60200190565b6001600160a01b03811681146105fa575f5ffd5b5f82601f83011261151a575f5ffd5b813561152d611528826114d5565b6114a5565b8082825260208201915060208360051b86010192508583111561154e575f5ffd5b602085015b83811015611574578035611566816114f7565b835260209283019201611553565b5095945050505050565b5f82601f83011261158d575f5ffd5b813561159b611528826114d5565b8082825260208201915060208360051b8601019250858311156115bc575f5ffd5b602085015b838110156115745780358352602092830192016115c1565b5f82601f8301126115e8575f5ffd5b81356001600160401b0381111561160157611601611469565b611614601f8201601f19166020016114a5565b818152846020838601011115611628575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215611656575f5ffd5b83356001600160401b0381111561166b575f5ffd5b6116778682870161150b565b93505060208401356001600160401b03811115611692575f5ffd5b61169e8682870161157e565b92505060408401356001600160401b038111156116b9575f5ffd5b6116c5868287016115d9565b9150509250925092565b5f602082840312156116df575f5ffd5b8135611462816114f7565b5f5f604083850312156116fb575f5ffd5b8235611706816114f7565b946020939093013593505050565b5f5f5f5f60808587031215611727575f5ffd5b84356001600160401b0381111561173c575f5ffd5b6117488782880161150b565b94505060208501356001600160401b03811115611763575f5ffd5b61176f8782880161157e565b93505060408501356001600160401b0381111561178a575f5ffd5b6117968782880161157e565b92505060608501356001600160401b038111156117b1575f5ffd5b6117bd878288016115d9565b91505092959194509250565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03851681526080602080830182905285519183018290525f919086019060a0840190835b818110156118805783516001600160a01b0316835260209384019390920191600101611859565b50508381036040850152855180825260209182019250908601905f90815b818110156118bc57835185526020948501949093019260010161189e565b5050505082810360608401526118d28185611800565b979650505050505050565b5f602082840312156118ed575f5ffd5b5051919050565b5f82601f830112611903575f5ffd5b8151611911611528826114d5565b8082825260208201915060208360051b860101925085831115611932575f5ffd5b602085015b8381101561157457805161194a816114f7565b835260209283019201611937565b5f82601f830112611967575f5ffd5b8151611975611528826114d5565b8082825260208201915060208360051b860101925085831115611996575f5ffd5b602085015b8381101561157457805162ffffff811681146119b5575f5ffd5b83526020928301920161199b565b5f82601f8301126119d2575f5ffd5b81516119e0611528826114d5565b8082825260208201915060208360051b860101925085831115611a01575f5ffd5b602085015b838110156115745780518015158114611a1d575f5ffd5b835260209283019201611a06565b5f60208284031215611a3b575f5ffd5b81516001600160401b03811115611a50575f5ffd5b820160c08185031215611a61575f5ffd5b611a6961147d565b81516001600160401b03811115611a7e575f5ffd5b611a8a868285016118f4565b82525060208201516001600160401b03811115611aa5575f5ffd5b611ab1868285016118f4565b60208301525060408201516001600160401b03811115611acf575f5ffd5b611adb86828501611958565b60408301525060608201516001600160401b03811115611af9575f5ffd5b611b05868285016119c3565b6060830152506080828101519082015260a091820151918101919091529392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610edd57610edd611b29565b81810381811115610edd57610edd611b29565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015191821690830152610100820190506080830151608083015260a083015160a083015260c083015160c083015260e0830151611bd960e08401826001600160a01b03169052565b5092915050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015611c305783516001600160a01b0316835260209384019390920191600101611c09565b50506001600160a01b039590951660608401525050608001529392505050565b5f60208284031215611c60575f5ffd5b81516001600160401b03811115611c75575f5ffd5b8201601f81018413611c85575f5ffd5b8051611c93611528826114d5565b8082825260208201915060208360051b850101925086831115611cb4575f5ffd5b6020840193505b828410156113f1578351825260209384019390910190611cbb565b8082028115828204841417610edd57610edd611b29565b5f82611d0757634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212208ec4c5e728e5492fb182da1318cd974daf44eedbfbc1e6fa4080c5a827ecf4a864736f6c634300081e0033eb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831a26469706673582212200e4b5c1a14e3e72f61ca914cfb6b8a5c43b7574fa4fd6e798f98b39dc544f53e64736f6c634300081e0033","sourceMap":"323:11222:27:-:0;;;3160:44:3;;;3200:4;-1:-1:-1;;3160:44:3;;;;;;;;1065:26:14;;;;;;;;;;;323:11222:27;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101c8575f3560e01c806384aff7e9116100f2578063b5508aa911610092578063f152ec5a11610062578063f152ec5a14610475578063fa7626d414610489578063fcb9ac6d146104a2578063fd79bfc5146104b6575f5ffd5b8063b5508aa914610415578063ba414fa614610429578063d2709e911461044d578063e20c9f7114610461575f5ffd5b8063916a17c6116100cd578063916a17c6146103a85780639ad5981e146103c9578063a8548d0f146103ed578063b0464fdc14610401575f5ffd5b806384aff7e91461035457806385226c81146103685780638da5cb5b14610389575f5ffd5b80633e5e3c23116101685780635c6e9c04116101385780635c6e9c04146102f757806362e643241461030b57806366d9a9a01461031f5780637e5c953f14610340575f5ffd5b80633e5e3c23146102845780633f7286f4146102985780634c16c858146102ac5780634f8632ba146102c0575f5ffd5b806310268da4116101a357806310268da4146102115780631e1d03b9146102255780631ed7831c146102395780632ade388014610263575f5ffd5b806301268c83146101d35780630a9254e4146101e95780630b0cb685146101fd575f5ffd5b366101cf57005b5f5ffd5b3480156101de575f5ffd5b506101e76104ca565b005b3480156101f4575f5ffd5b506101e761071c565b348015610208575f5ffd5b506101e76109d4565b34801561021c575f5ffd5b506101e7610f20565b348015610230575f5ffd5b506101e7611111565b348015610244575f5ffd5b5061024d61134d565b60405161025a9190613339565b60405180910390f35b34801561026e575f5ffd5b506102776113ad565b60405161025a9190613380565b34801561028f575f5ffd5b5061024d6114e9565b3480156102a3575f5ffd5b5061024d611547565b3480156102b7575f5ffd5b506101e76115a5565b3480156102cb575f5ffd5b506021546102df906001600160a01b031681565b6040516001600160a01b03909116815260200161025a565b348015610302575f5ffd5b506101e7611b07565b348015610316575f5ffd5b506101e7611dbb565b34801561032a575f5ffd5b50610333611dd7565b60405161025a9190613483565b34801561034b575f5ffd5b506101e7611f3b565b34801561035f575f5ffd5b506101e7611f94565b348015610373575f5ffd5b5061037c6122e2565b60405161025a9190613501565b348015610394575f5ffd5b506020546102df906001600160a01b031681565b3480156103b3575f5ffd5b506103bc6123ad565b60405161025a9190613558565b3480156103d4575f5ffd5b50601f546102df9061010090046001600160a01b031681565b3480156103f8575f5ffd5b506101e761248e565b34801561040c575f5ffd5b506103bc612779565b348015610420575f5ffd5b5061037c61285a565b348015610434575f5ffd5b5061043d612925565b604051901515815260200161025a565b348015610458575f5ffd5b506101e76129ba565b34801561046c575f5ffd5b5061024d612c53565b348015610480575f5ffd5b506101e7612cb1565b348015610494575f5ffd5b50601f5461043d9060ff1681565b3480156104ad575f5ffd5b506101e7612d5e565b3480156104c1575f5ffd5b506101e7612efb565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015610526573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054a91906135cf565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201529091505f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa1580156105a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105cd91906135cf565b90506106188268056bc75e2d631000006040518060400160405280601b81526020017f496e73756666696369656e742057455448206c69717569646974790000000000815250612f50565b61065d8164174876e8006040518060400160405280601b81526020017f496e73756666696369656e742055534443206c69717569646974790000000000815250612f50565b6040805160608082526017908201527f42616c616e6365722057455448204c697175696469747900000000000000000060808201526020810184905260128183015290515f5160206157b35f395f51905f529181900360a00190a16040805160608082526017908201527f42616c616e6365722055534443204c69717569646974790000000000000000006080820152602081018390526006918101919091525f5160206157b35f395f51905f529060a0015b60405180910390a15050565b60405163f877cb1960e01b815260206004820152601060248201526f105490925514955357d49410d7d5549360821b60448201525f905f5160206157d35f395f51905f529063f877cb19906064015f60405180830381865afa158015610784573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ab91908101906135fa565b604051630637469360e31b81529091505f905f5160206157d35f395f51905f52906331ba3498906107e09085906004016136ad565b6020604051808303815f875af11580156107fc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082091906135cf565b604051639ebf682760e01b8152600481018290529091505f5160206157d35f395f51905f5290639ebf6827906024015f604051808303815f87803b158015610866575f5ffd5b505af1158015610878573d5f5f3e3d5ffd5b505050504661a4b1146108d15760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f6e20417262697472756d206d61696e6e6574000000000000000000604482015260640160405180910390fd5b602080546001600160a01b031990811630179091556021805490911661012317905560405173ba12222222228d8ba445958a75a0704d566bf2c890610915906132e9565b6001600160a01b039091168152602001604051809103905ff08015801561093e573d5f5f3e3d5ffd5b50601f8054610100600160a81b0319166101006001600160a01b039384168102919091179182905560405163c88a5e6d60e01b815291049091166004820152678ac7230489e8000060248201525f5160206157d35f395f51905f529063c88a5e6d906044015f604051808303815f87803b1580156109ba575f5ffd5b505af11580156109cc573d5f5f3e3d5ffd5b505050505050565b60405163ca669fa760e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201525f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610a2a575f5ffd5b505af1158015610a3c573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b0316600482015267016345785d8a000060248201525f5160206157f35f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015610aa6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aca91906136bf565b5060405163ca669fa760e01b81527347c031236e19d024b42f8ae6780e44a57317070360048201525f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610b21575f5ffd5b505af1158015610b33573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b031660048201526305f5e10060248201525f5160206158135f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015610b99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bbd91906136bf565b50601f546040516370a0823160e01b81526101009091046001600160a01b031660048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015610c17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3b91906135cf565b601f54604051631bfc726f60e21b81525f5160206157f35f395f51905f52600482015291925061010090046001600160a01b031690636ff1c9bc906024015f604051808303815f87803b158015610c90575f5ffd5b505af1158015610ca2573d5f5f3e3d5ffd5b5050601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152610d2c92505f5160206157f35f395f51905f5291506370a08231906024015b602060405180830381865afa158015610d02573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2691906135cf565b5f612fb8565b6020546040516370a0823160e01b81526001600160a01b039091166004820152610dae905f5160206157f35f395f51905f52906370a08231906024015b602060405180830381865afa158015610d84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da891906135cf565b5f61301b565b601f546040516370a0823160e01b81526101009091046001600160a01b031660048201525f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa158015610e07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2b91906135cf565b601f54604051631bfc726f60e21b81525f5160206158135f395f51905f52600482015291925061010090046001600160a01b031690636ff1c9bc906024015f604051808303815f87803b158015610e80575f5ffd5b505af1158015610e92573d5f5f3e3d5ffd5b5050601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152610edb92505f5160206158135f395f51905f5291506370a0823190602401610ce7565b6020546040516370a0823160e01b81526001600160a01b039091166004820152610f1c905f5160206158135f395f51905f52906370a0823190602401610d69565b5050565b6040516370a0823160e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015610f7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa091906135cf565b6040516370a0823160e01b81527347c031236e19d024b42f8ae6780e44a57317070360048201529091505f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa158015610fff573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102391906135cf565b905061106d82678ac7230489e800006040518060400160405280601a81526020017f57455448207768616c652062616c616e636520746f6f206c6f77000000000000815250612f50565b6110b2816402540be4006040518060400160405280601a81526020017f55534443207768616c652062616c616e636520746f6f206c6f77000000000000815250612f50565b7f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610710906020808252601c908201527f5265616c20746f6b656e2062616c616e63657320766572696669656400000000604082015260600190565b6040805160028082526060820183525f926020830190803683370190505090505f5160206157f35f395f51905f52815f81518110611151576111516136de565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206158135f395f51905f5281600181518110611192576111926136de565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f93919290918301908036833701905050905067016345785d8a0000815f815181106111e7576111e76136de565b6020026020010181815250506305f5e1008160018151811061120b5761120b6136de565b6020026020010181815250505f61122061305a565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611272575f5ffd5b505af1158015611284573d5f5f3e3d5ffd5b505050505f5160206157d35f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156112cd575f5ffd5b505af11580156112df573d5f5f3e3d5ffd5b5050601f546040516305d890f160e21b81526101009091046001600160a01b0316925063176243c4915061131b908690869086906004016136f2565b5f604051808303815f87803b158015611332575f5ffd5b505af1158015611344573d5f5f3e3d5ffd5b50505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611385575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b828210156114e0575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114c9578382905f5260205f2001805461143e9061378e565b80601f016020809104026020016040519081016040528092919081815260200182805461146a9061378e565b80156114b55780601f1061148c576101008083540402835291602001916114b5565b820191905f5260205f20905b81548152906001019060200180831161149857829003601f168201915b505050505081526020019060010190611421565b5050505081525050815260200190600101906113d0565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611385575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611385575050505050905090565b6116455f5160206157f35f395f51905f526001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f1573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061161591906137c6565b60ff1660126040518060400160405280600d81526020016c5745544820646563696d616c7360981b815250613220565b6116e55f5160206158135f395f51905f526001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611691573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b591906137c6565b60ff1660066040518060400160405280600d81526020016c5553444320646563696d616c7360981b815250613220565b61178c73fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb96001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175c91906137c6565b60ff1660066040518060400160405280600d81526020016c5553445420646563696d616c7360981b815250613220565b61183273912ce59144191c1204e64559fe8253a0e49e65486001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117df573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180391906137c6565b60ff1660126040518060400160405280600c81526020016b41524220646563696d616c7360a01b815250613220565b6118d873da10009cbd5d07dd0cecc66161fc93d7c9000da16001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611885573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a991906137c6565b60ff1660126040518060400160405280600c81526020016b44414920646563696d616c7360a01b815250613220565b6119905f5160206157f35f395f51905f526001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611923573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261194a91908101906135fa565b604051806040016040528060048152602001630ae8aa8960e31b8152506040518060400160405280600b81526020016a15d15512081cde5b589bdb60aa1b81525061325b565b611a485f5160206158135f395f51905f526001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156119db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a0291908101906135fa565b604051806040016040528060048152602001635553444360e01b8152506040518060400160405280600b81526020016a1554d110c81cde5b589bdb60aa1b81525061325b565b611b0573912ce59144191c1204e64559fe8253a0e49e65486001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611a9a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ac191908101906135fa565b6040518060400160405280600381526020016220a92160e91b8152506040518060400160405280600a815260200169105490881cde5b589bdb60b21b81525061325b565b565b60405163ca669fa760e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201526706f05b59d3b20000905f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611b67575f5ffd5b505af1158015611b79573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b03166004820152602481018490525f5160206157f35f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015611bdc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0091906136bf565b506020546040516370a0823160e01b81526001600160a01b0390911660048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015611c56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c7a91906135cf565b601f5460405163d35c9a0760e01b81525f5160206157f35f395f51905f5260048201526024810185905291925061010090046001600160a01b03169063d35c9a07906044015f604051808303815f87803b158015611cd6575f5ffd5b505af1158015611ce8573d5f5f3e3d5ffd5b50506020546040516370a0823160e01b81526001600160a01b039091166004820152611d7692505f5160206157f35f395f51905f5291506370a0823190602401602060405180830381865afa158015611d43573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6791906135cf565b611d7184846137e6565b612fb8565b601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152610f1c905f5160206157f35f395f51905f52906370a0823190602401610ce7565b601f54611b059061010090046001600160a01b0316315f61301b565b6060601b805480602002602001604051908101604052809291908181526020015f905b828210156114e0578382905f5260205f2090600202016040518060400160405290815f82018054611e2a9061378e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e569061378e565b8015611ea15780601f10611e7857610100808354040283529160200191611ea1565b820191905f5260205f20905b815481529060010190602001808311611e8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f2357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411611ee55790505b50505050508152505081526020019060010190611dfa565b60408051808201909152601d81527f53757368695377617020526f75746572206e6f74206465706c6f7965640000006020820152731b02da8cb0d097eb8d57a175b88c7d8b47997506803b91610f1c9083905f90612f50565b6040516370a0823160e01b815273f977814e90da44bfa03b6295a0616a897441acec60048201525f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa158015611ff0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201491906135cf565b6040516370a0823160e01b81527347c031236e19d024b42f8ae6780e44a57317070360048201529091505f905f5160206158135f395f51905f52906370a0823190602401602060405180830381865afa158015612073573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209791906135cf565b6040516370a0823160e01b815273f3fc178157fb3c87548baa86f9d24ba38e649b5860048201529091505f9073912ce59144191c1204e64559fe8253a0e49e6548906370a0823190602401602060405180830381865afa1580156120fd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212191906135cf565b9050612163835f6040518060400160405280601981526020017f57455448207768616c6520686173206e6f2062616c616e636500000000000000815250612f50565b6121a3825f6040518060400160405280601981526020017f55534443207768616c6520686173206e6f2062616c616e636500000000000000815250612f50565b6121e3815f6040518060400160405280601881526020017f415242207768616c6520686173206e6f2062616c616e63650000000000000000815250612f50565b5f5160206157b35f395f51905f5283601260405161223692919060608082526012908201527157455448205768616c652042616c616e636560701b60808201526020810192909252604082015260a00190565b60405180910390a16040805160608082526012908201527155534443205768616c652042616c616e636560701b60808201526020810184905260068183015290515f5160206157b35f395f51905f529181900360a00190a160408051606080825260119082015270415242205768616c652042616c616e636560781b60808201526020810183905260128183015290515f5160206157b35f395f51905f529181900360a00190a1505050565b6060601a805480602002602001604051908101604052809291908181526020015f905b828210156114e0578382905f5260205f200180546123229061378e565b80601f016020809104026020016040519081016040528092919081815260200182805461234e9061378e565b80156123995780601f1061237057610100808354040283529160200191612399565b820191905f5260205f20905b81548152906001019060200180831161237c57829003601f168201915b505050505081526020019060010190612305565b6060601d805480602002602001604051908101604052809291908181526020015f905b828210156114e0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561247657602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116124385790505b505050505081525050815260200190600101906123d0565b604080516001808252818301909252670de0b6b3a7640000915f9190602080830190803683370190505090505f5160206157f35f395f51905f52815f815181106124da576124da6136de565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905082815f81518110612529576125296136de565b6020026020010181815250505f61253e61305a565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201529091505f905f5160206157f35f395f51905f52906370a0823190602401602060405180830381865afa15801561259d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c191906135cf565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206157d35f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612613575f5ffd5b505af1158015612625573d5f5f3e3d5ffd5b505050505f5160206157d35f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561266e575f5ffd5b505af1158015612680573d5f5f3e3d5ffd5b5050601f546040516305d890f160e21b81526101009091046001600160a01b0316925063176243c491506126bc908790879087906004016136f2565b5f604051808303815f87803b1580156126d3575f5ffd5b505af11580156126e5573d5f5f3e3d5ffd5b50506040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c8600482015261277292505f5160206157f35f395f51905f5291506370a08231906024015b602060405180830381865afa158015612748573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276c91906135cf565b82612fb8565b5050505050565b6060601c805480602002602001604051908101604052809291908181526020015f905b828210156114e0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561284257602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116128045790505b5050505050815250508152602001906001019061279c565b60606019805480602002602001604051908101604052809291908181526020015f905b828210156114e0578382905f5260205f2001805461289a9061378e565b80601f01602080910402602001604051908101604052809291908181526020018280546128c69061378e565b80156129115780601f106128e857610100808354040283529160200191612911565b820191905f5260205f20905b8154815290600101906020018083116128f457829003601f168201915b50505050508152602001906001019061287d565b6008545f9060ff16156129385750600190565b604051630667f9d760e41b81525f5160206157d35f395f51905f52600482018190526519985a5b195960d21b60248301525f9163667f9d7090604401602060405180830381865afa15801561298f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129b391906135cf565b1415905090565b612a43601f60019054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a32919061381f565b6020546001600160a01b031661328f565b612ad5601f60019054906101000a90046001600160a01b03166001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a97573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612abb919061381f565b73ba12222222228d8ba445958a75a0704d566bf2c861328f565b612b54601f60019054906101000a90046001600160a01b03166001600160a01b031663e229cd766040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4d91906135cf565b6032612fb8565b612bd3601f60019054906101000a90046001600160a01b03166001600160a01b031663ec52303b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bcc91906135cf565b6005612fb8565b611b05601f60019054906101000a90046001600160a01b03166001600160a01b031663e1f1c4a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c27573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c4b91906135cf565b612710612fb8565b606060158054806020026020016040519081016040528092919081815260200182805480156113a357602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611385575050505050905090565b612d05601f60019054906101000a90046001600160a01b03166001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a97573d5f5f3e3d5ffd5b60408051808201909152601b81527f42616c616e636572205661756c74206e6f74206465706c6f7965640000000000602082015273ba12222222228d8ba445958a75a0704d566bf2c8803b91610f1c9083905f90612f50565b6040516303223eab60e11b815273f977814e90da44bfa03b6295a0616a897441acec6004820152670de0b6b3a7640000905f5160206157d35f395f51905f52906306447d56906024015f604051808303815f87803b158015612dbe575f5ffd5b505af1158015612dd0573d5f5f3e3d5ffd5b5050601f5460405163a9059cbb60e01b81526101009091046001600160a01b03166004820152602481018490525f5160206157f35f395f51905f52925063a9059cbb91506044016020604051808303815f875af1158015612e33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5791906136bf565b505f5160206157d35f395f51905f526001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612e9d575f5ffd5b505af1158015612eaf573d5f5f3e3d5ffd5b5050601f546040516370a0823160e01b81526101009091046001600160a01b03166004820152612ef892505f5160206157f35f395f51905f5291506370a082319060240161272d565b50565b60408051808201909152601e81527f556e697377617020563320526f75746572206e6f74206465706c6f7965640000602082015273e592427a0aece92de3edee1f18e0157c05861564803b91610f1c9083905f905b818311612fb357604051636cd1e26960e11b81525f5160206157d35f395f51905f529063d9a3c4d290612f8b9086908690869060040161383a565b5f6040518083038186803b158015612fa1575f5ffd5b505afa158015611344573d5f5f3e3d5ffd5b505050565b808214610f1c5760405163260a5b1560e21b815260048101839052602481018290525f5160206157d35f395f51905f52906398296c54906044015b5f6040518083038186803b158015613009575f5ffd5b505afa1580156109cc573d5f5f3e3d5ffd5b808211610f1c57604051636d83fe6960e11b815260048101839052602481018290525f5160206157d35f395f51905f529063db07fcd290604401612ff3565b60408051600280825260608083018452925f9291906020830190803683370190505090505f5160206157f35f395f51905f52815f8151811061309e5761309e6136de565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206158135f395f51905f52816001815181106130df576130df6136de565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905073e592427a0aece92de3edee1f18e0157c05861564815f81518110613142576131426136de565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f91816020016020820280368337019050509050610bb8815f81518110613193576131936136de565b62ffffff92909216602092830291909101909101526040805160018082528183019092525f918160200160208202803683370190505090506001815f815181106131df576131df6136de565b9115156020928302919091018201526040516132089186918691869186915f9160329101613893565b60405160208183030381529060405294505050505090565b818314612fb3576040516388b44c8560e01b81525f5160206157d35f395f51905f52906388b44c8590612f8b9086908690869060040161383a565b6040516306decadb60e31b81525f5160206157d35f395f51905f52906336f656d890612f8b9086908690869060040161392f565b806001600160a01b0316826001600160a01b031614610f1c576040516328a9b0fb60e11b81526001600160a01b038084166004830152821660248201525f5160206157d35f395f51905f529063515361f690604401612ff3565b611e4b8061396883390190565b5f8151808452602084019350602083015f5b8281101561332f5781516001600160a01b0316865260209586019590910190600101613308565b5093949350505050565b602081525f61334b60208301846132f6565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57603f19878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b8181101561342357605f198a850301835261340d848651613352565b60209586019590945092909201916001016133f1565b5091975050506020948501949290920191506001016133a6565b50929695505050505050565b5f8151808452602084019350602083015f5b8281101561332f5781516001600160e01b03191686526020958601959091019060010161345b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57603f1987860301845281518051604087526134cf6040880182613352565b90506020820151915086810360208801526134ea8183613449565b9650505060209384019391909101906001016134a9565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57603f19878603018452613543858351613352565b94506020938401939190910190600101613527565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561343d57868503603f19018452815180516001600160a01b031686526020908101516040918701829052906135b990870182613449565b955050602093840193919091019060010161357e565b5f602082840312156135df575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561360a575f5ffd5b815167ffffffffffffffff811115613620575f5ffd5b8201601f81018413613630575f5ffd5b805167ffffffffffffffff81111561364a5761364a6135e6565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715613679576136796135e6565b604052818152828201602001861015613690575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f61334b6020830184613352565b5f602082840312156136cf575f5ffd5b8151801515811461334b575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b606080825284519082018190525f9060208601906080840190835b818110156137345783516001600160a01b031683526020938401939092019160010161370d565b5050838103602080860191909152865180835291810192508601905f5b8181101561376f578251845260209384019390920191600101613751565b50505082810360408401526137848185613352565b9695505050505050565b600181811c908216806137a257607f821691505b6020821081036137c057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156137d6575f5ffd5b815160ff8116811461334b575f5ffd5b8082018082111561380557634e487b7160e01b5f52601160045260245ffd5b92915050565b6001600160a01b0381168114612ef8575f5ffd5b5f6020828403121561382f575f5ffd5b815161334b8161380b565b838152826020820152606060408201525f6138586060830184613352565b95945050505050565b5f8151808452602084019350602083015f5b8281101561332f5781511515865260209586019590910190600101613873565b60c081525f6138a560c08301896132f6565b82810360208401526138b781896132f6565b838103604085015287518082526020808a019350909101905f5b818110156138f457835162ffffff168352602093840193909201916001016138d1565b505083810360608501526139088188613861565b9250505061391b608083018560ff169052565b60ff831660a0830152979650505050505050565b606081525f6139416060830186613352565b82810360208401526139538186613352565b90508281036040840152613784818561335256fe60a060405234801561000f575f5ffd5b50604051611e4b380380611e4b83398101604081905261002e916100af565b60015f556001600160a01b03811661008c5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964207661756c7420616464726573730000000000000000000000604482015260640160405180910390fd5b600180546001600160a01b031916331790556001600160a01b03166080526100dc565b5f602082840312156100bf575f5ffd5b81516001600160a01b03811681146100d5575f5ffd5b9392505050565b608051611d426101095f395f81816101fc015281816103e1015281816107b80152610c960152611d425ff3fe60806040526004361061009d575f3560e01c8063e229cd7611610062578063e229cd7614610166578063ec52303b1461017a578063f04f27071461018e578063f2fde38b146101ad578063f8b2cb4f146101cc578063fbfa77cf146101eb575f5ffd5b8063176243c4146100a85780636ff1c9bc146100c95780638da5cb5b146100e8578063d35c9a0714610124578063e1f1c4a714610143575f5ffd5b366100a457005b5f5ffd5b3480156100b3575f5ffd5b506100c76100c2366004611644565b61021e565b005b3480156100d4575f5ffd5b506100c76100e33660046116cf565b610463565b3480156100f3575f5ffd5b50600154610107906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012f575f5ffd5b506100c761013e3660046116ea565b6105fd565b34801561014e575f5ffd5b5061015861271081565b60405190815260200161011b565b348015610171575f5ffd5b50610158603281565b348015610185575f5ffd5b50610158600581565b348015610199575f5ffd5b506100c76101a8366004611714565b6107a5565b3480156101b8575f5ffd5b506100c76101c73660046116cf565b610d91565b3480156101d7575f5ffd5b506101586101e63660046116cf565b610e75565b3480156101f6575f5ffd5b506101077f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031633146102515760405162461bcd60e51b8152600401610248906117c9565b60405180910390fd5b610259610ee3565b5f83511161029f5760405162461bcd60e51b8152602060048201526013602482015272139bc81d1bdad95b9cc81cdc1958da599a5959606a1b6044820152606401610248565b81518351146102e85760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610248565b600154600160a01b900460ff16156103425760405162461bcd60e51b815260206004820152601960248201527f466c617368206c6f616e20616c726561647920616374697665000000000000006044820152606401610248565b6001805460ff60a01b1916600160a01b179055825183905f90610367576103676117ec565b60200260200101516001600160a01b03167f591ad3206c771ad9f89e5fce3ba3fd39fe164da7093471fce70eaf468c495f3c835f815181106103ab576103ab6117ec565b60200260200101516040516103c291815260200190565b60405180910390a2604051632e1c224f60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c38449e9061041c90309087908790879060040161182e565b5f604051808303815f87803b158015610433575f5ffd5b505af1158015610445573d5f5f3e3d5ffd5b50506001805460ff60a01b191681555f555061045e9050565b505050565b6001546001600160a01b0316331461048d5760405162461bcd60e51b8152600401610248906117c9565b610495610ee3565b6001600160a01b0381166105245747806104e65760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b6044820152606401610248565b6001546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561051d573d5f5f3e3d5ffd5b50506105f1565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610568573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058c91906118dd565b90505f81116105d55760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610248565b6001546105ef906001600160a01b03848116911683610f0b565b505b6105fa60015f55565b50565b6001546001600160a01b031633146106275760405162461bcd60e51b8152600401610248906117c9565b61062f610ee3565b6001600160a01b03821661067d5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610248565b5f81116106cc5760405162461bcd60e51b815260206004820152601760248201527f416d6f756e74206d75737420626520706f7369746976650000000000000000006044820152606401610248565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610710573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073491906118dd565b90508181101561077d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610248565b600154610797906001600160a01b03858116911684610f0b565b506107a160015f55565b5050565b6107ad610ee3565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081b5760405162461bcd60e51b815260206004820152601360248201527213db9b1e481d985d5b1d0818d85b8818d85b1b606a1b6044820152606401610248565b600154600160a01b900460ff166108805760405162461bcd60e51b8152602060048201526024808201527f466c617368206c6f616e206e6f7420696e6974696174656420627920636f6e746044820152631c9858dd60e21b6064820152608401610248565b5f818060200190518101906108959190611a2b565b90506002815f01515110156108dd5760405162461bcd60e51b815260206004820152600e60248201526d14185d1a081d1bdbc81cda1bdc9d60921b6044820152606401610248565b805151600510156109305760405162461bcd60e51b815260206004820152601b60248201527f506174682065786365656473206d6178696d756d206c656e67746800000000006044820152606401610248565b602081015151610941906001611b3d565b8151511461098a5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420706174682073747275637475726560501b6044820152606401610248565b60328160a0015111156109df5760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520746f6c6572616e636520746f6f206869676800000000006044820152606401610248565b5f845f815181106109f2576109f26117ec565b602002602001015190505f865f81518110610a0f57610a0f6117ec565b602002602001015190505f5f90505b835151610a2d90600190611b50565b811015610b8f575f845f01518281518110610a4a57610a4a6117ec565b602002602001015190505f855f0151836001610a669190611b3d565b81518110610a7657610a766117ec565b602002602001015190505f86602001518481518110610a9757610a976117ec565b602002602001015190505f6001600160a01b0316816001600160a01b031603610b025760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642065786368616e6765206164647265737300000000000000006044820152606401610248565b610b166001600160a01b0384168288610f6a565b86606001518481518110610b2c57610b2c6117ec565b602002602001015115610b6f57610b68838383898b604001518981518110610b5657610b566117ec565b60200260200101518c60a00151610ff9565b9550610b83565b610b80838383898b60a0015161117d565b95505b50925050600101610a1e565b505f865f81518110610ba357610ba36117ec565b602002602001015190505f865f81518110610bc057610bc06117ec565b602002602001015182610bd39190611b3d565b905080841015610c255760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e742066756e647320666f722072657061796d656e746044820152606401610248565b5f610c308286611b50565b90508560800151811015610c865760405162461bcd60e51b815260206004820152601e60248201527f50726f6669742062656c6f77206d696e696d756d207468726573686f6c6400006044820152606401610248565b5f5b8a51811015610d2d57610d257f00000000000000000000000000000000000000000000000000000000000000008a8381518110610cc757610cc76117ec565b60200260200101518c8481518110610ce157610ce16117ec565b6020026020010151610cf39190611b3d565b8d8481518110610d0557610d056117ec565b60200260200101516001600160a01b0316610f0b9092919063ffffffff16565b600101610c88565b506001548651516040805184815260ff90921660208301526001600160a01b03909216917ffac37cdddfd7f291801e7d8107a709cf227f494d3c10c42194ad1fdfb2d9ef6e910160405180910390a2505050505050610d8b60015f55565b50505050565b6001546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610248906117c9565b6001600160a01b038116610e055760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103732bb9037bbb732b960791b6044820152606401610248565b6001546001600160a01b0390811690821603610e535760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610248565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610eb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edd91906118dd565b92915050565b60025f5403610f0557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b0383811660248301526044820183905261045e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611346565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610fbb84826113b2565b610d8b576040516001600160a01b0384811660248301525f6044830152610fef91869182169063095ea7b390606401610f38565b610d8b8482611346565b5f5f61100585846113fb565b90505f6040518061010001604052808a6001600160a01b03168152602001896001600160a01b031681526020018662ffffff168152602001306001600160a01b031681526020014261012c61105a9190611b3d565b81526020018781526020018381526020015f6001600160a01b03168152509050866001600160a01b031663414bf389826040518263ffffffff1660e01b81526004016110a69190611b63565b6020604051808303815f875af11580156110c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e691906118dd565b9250818310156111385760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520746f6c6572616e636520657863656564656400000000006044820152606401610248565b60408051838152602081018590527fb6094abf4e604ae0f85e37ab40510f093f6857d01c802ec39d20a3d67ec8f44d910160405180910390a150509695505050505050565b5f5f61118984846113fb565b6040805160028082526060820183529293505f92909160208301908036833701905050905087815f815181106111c1576111c16117ec565b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106111f5576111f56117ec565b6001600160a01b0392831660209182029290920101525f9087166338ed1739878585306112244261012c611b3d565b6040518663ffffffff1660e01b8152600401611244959493929190611be0565b5f604051808303815f875af115801561125f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112869190810190611c50565b905080600182516112979190611b50565b815181106112a7576112a76117ec565b60200260200101519350828410156113015760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520746f6c6572616e636520657863656564656400000000006044820152606401610248565b60408051848152602081018690527fb6094abf4e604ae0f85e37ab40510f093f6857d01c802ec39d20a3d67ec8f44d910160405180910390a150505095945050505050565b5f5f60205f8451602086015f885af180611365576040513d5f823e3d81fd5b50505f513d9150811561137c578060011415611389565b6001600160a01b0384163b155b15610d8b57604051635274afe760e01b81526001600160a01b0385166004820152602401610248565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156113f1575081156113e357806001146113f1565b5f866001600160a01b03163b115b9695505050505050565b5f60328211156114415760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606401610248565b61271061144e8382611b50565b6114589085611cd6565b6114629190611ced565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b038111828210171561149f5761149f611469565b60405290565b604051601f8201601f191681016001600160401b03811182821017156114cd576114cd611469565b604052919050565b5f6001600160401b038211156114ed576114ed611469565b5060051b60200190565b6001600160a01b03811681146105fa575f5ffd5b5f82601f83011261151a575f5ffd5b813561152d611528826114d5565b6114a5565b8082825260208201915060208360051b86010192508583111561154e575f5ffd5b602085015b83811015611574578035611566816114f7565b835260209283019201611553565b5095945050505050565b5f82601f83011261158d575f5ffd5b813561159b611528826114d5565b8082825260208201915060208360051b8601019250858311156115bc575f5ffd5b602085015b838110156115745780358352602092830192016115c1565b5f82601f8301126115e8575f5ffd5b81356001600160401b0381111561160157611601611469565b611614601f8201601f19166020016114a5565b818152846020838601011115611628575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215611656575f5ffd5b83356001600160401b0381111561166b575f5ffd5b6116778682870161150b565b93505060208401356001600160401b03811115611692575f5ffd5b61169e8682870161157e565b92505060408401356001600160401b038111156116b9575f5ffd5b6116c5868287016115d9565b9150509250925092565b5f602082840312156116df575f5ffd5b8135611462816114f7565b5f5f604083850312156116fb575f5ffd5b8235611706816114f7565b946020939093013593505050565b5f5f5f5f60808587031215611727575f5ffd5b84356001600160401b0381111561173c575f5ffd5b6117488782880161150b565b94505060208501356001600160401b03811115611763575f5ffd5b61176f8782880161157e565b93505060408501356001600160401b0381111561178a575f5ffd5b6117968782880161157e565b92505060608501356001600160401b038111156117b1575f5ffd5b6117bd878288016115d9565b91505092959194509250565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03851681526080602080830182905285519183018290525f919086019060a0840190835b818110156118805783516001600160a01b0316835260209384019390920191600101611859565b50508381036040850152855180825260209182019250908601905f90815b818110156118bc57835185526020948501949093019260010161189e565b5050505082810360608401526118d28185611800565b979650505050505050565b5f602082840312156118ed575f5ffd5b5051919050565b5f82601f830112611903575f5ffd5b8151611911611528826114d5565b8082825260208201915060208360051b860101925085831115611932575f5ffd5b602085015b8381101561157457805161194a816114f7565b835260209283019201611937565b5f82601f830112611967575f5ffd5b8151611975611528826114d5565b8082825260208201915060208360051b860101925085831115611996575f5ffd5b602085015b8381101561157457805162ffffff811681146119b5575f5ffd5b83526020928301920161199b565b5f82601f8301126119d2575f5ffd5b81516119e0611528826114d5565b8082825260208201915060208360051b860101925085831115611a01575f5ffd5b602085015b838110156115745780518015158114611a1d575f5ffd5b835260209283019201611a06565b5f60208284031215611a3b575f5ffd5b81516001600160401b03811115611a50575f5ffd5b820160c08185031215611a61575f5ffd5b611a6961147d565b81516001600160401b03811115611a7e575f5ffd5b611a8a868285016118f4565b82525060208201516001600160401b03811115611aa5575f5ffd5b611ab1868285016118f4565b60208301525060408201516001600160401b03811115611acf575f5ffd5b611adb86828501611958565b60408301525060608201516001600160401b03811115611af9575f5ffd5b611b05868285016119c3565b6060830152506080828101519082015260a091820151918101919091529392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610edd57610edd611b29565b81810381811115610edd57610edd611b29565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015191821690830152610100820190506080830151608083015260a083015160a083015260c083015160c083015260e0830151611bd960e08401826001600160a01b03169052565b5092915050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015611c305783516001600160a01b0316835260209384019390920191600101611c09565b50506001600160a01b039590951660608401525050608001529392505050565b5f60208284031215611c60575f5ffd5b81516001600160401b03811115611c75575f5ffd5b8201601f81018413611c85575f5ffd5b8051611c93611528826114d5565b8082825260208201915060208360051b850101925086831115611cb4575f5ffd5b6020840193505b828410156113f1578351825260209384019390910190611cbb565b8082028115828204841417610edd57610edd611b29565b5f82611d0757634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212208ec4c5e728e5492fb182da1318cd974daf44eedbfbc1e6fa4080c5a827ecf4a864736f6c634300081e0033eb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831a26469706673582212200e4b5c1a14e3e72f61ca914cfb6b8a5c43b7574fa4fd6e798f98b39dc544f53e64736f6c634300081e0033","sourceMap":"323:11222:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8765:596;;;;;;;;;;;;;:::i;:::-;;1487:635;;;;;;;;;;;;;:::i;7013:845::-;;;;;;;;;;;;;:::i;9506:473::-;;;;;;;;;;;;;:::i;5378:585::-;;;;;;;;;;;;;:::i;2907:134:7:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3823:151;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3684:133::-;;;;;;;;;;;;;:::i;3385:141::-;;;;;;;;;;;;;:::i;3512:667:27:-;;;;;;;;;;;;;:::i;1461:19::-;;;;;;;;;;-1:-1:-1;1461:19:27;;;;-1:-1:-1;;;;;1461:19:27;;;;;;-1:-1:-1;;;;;2820:32:28;;;2802:51;;2790:2;2775:18;1461:19:27;2656:203:28;6496:511:27;;;;;;;;;;;;;:::i;10511:153::-;;;;;;;;;;;;;:::i;3193:186:7:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8319:304:27:-;;;;;;;;;;;;;:::i;2791:715::-;;;;;;;;;;;;;:::i;3047:140:7:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1435:20:27:-;;;;;;;;;;-1:-1:-1;1435:20:27;;;;-1:-1:-1;;;;;1435:20:27;;;3532:146:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;385:40:27:-;;;;;;;;;;-1:-1:-1;385:40:27;;;;;;;-1:-1:-1;;;;;385:40:27;;;4322:1050;;;;;;;;;;;;;:::i;2754:147:7:-;;;;;;;;;;;;;:::i;2459:141::-;;;;;;;;;;;;;:::i;1306:195:2:-;;;;;;;;;;;;;:::i;:::-;;;6698:14:28;;6691:22;6673:41;;6661:2;6646:18;1306:195:2;6533:187:28;10128:377:27;;;;;;;;;;;;;:::i;2606:142:7:-;;;;;;;;;;;;;:::i;2352:433:27:-;;;;;;;;;;;;;:::i;1065:26:14:-;;;;;;;;;;-1:-1:-1;1065:26:14;;;;;;;;6110:380:27;;;;;;;;;;;;;:::i;8006:307::-;;;;;;;;;;;;;:::i;8765:596::-;8931:38;;-1:-1:-1;;;8931:38:27;;505:42;8931:38;;;2802:51:28;8909:19:27;;-1:-1:-1;;;;;;;;;;;577:42:27;8931:22;;2775:18:28;;8931:38:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9001;;-1:-1:-1;;;9001:38:27;;505:42;9001:38;;;2802:51:28;8909:60:27;;-1:-1:-1;8979:19:27;;-1:-1:-1;;;;;;;;;;;649:42:27;9001:22;;2775:18:28;;9001:38:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8979:60;;9050:63;9059:11;9072:9;9050:63;;;;;;;;;;;;;;;;;:8;:63::i;:::-;9123:69;9132:11;9145:15;9123:69;;;;;;;;;;;;;;;;;:8;:69::i;:::-;9208:66;;;7181:2:28;7163:21;;;7220:2;7200:18;;;7193:30;7260:25;7254:3;7239:19;;7232:54;7353:4;7338:20;;7331:36;;;9271:2:27;7383:18:28;;;7376:34;9208:66:27;;-1:-1:-1;;;;;;;;;;;9208:66:27;;;;7318:3:28;9208:66:27;;;9289:65;;;7687:2:28;7669:21;;;7726:2;7706:18;;;7699:30;7766:25;7760:3;7745:19;;7738:54;7859:4;7844:20;;7837:36;;;9352:1:27;7889:18:28;;;7882:34;;;;-1:-1:-1;;;;;;;;;;;9289:65:27;7824:3:28;7809:19;9289:65:27;;;;;;;;8820:541;;8765:596::o;1487:635::-;1613:32;;-1:-1:-1;;;1613:32:27;;8129:2:28;1613:32:27;;;8111:21:28;8168:2;8148:18;;;8141:30;-1:-1:-1;;;8187:18:28;;;8180:46;1590:20:27;;-1:-1:-1;;;;;;;;;;;336:42:1;1613:12:27;;8243:18:28;;1613:32:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1613:32:27;;;;;;;;;;;;:::i;:::-;1672:21;;-1:-1:-1;;;1672:21:27;;1590:55;;-1:-1:-1;1655:14:27;;-1:-1:-1;;;;;;;;;;;336:42:1;1672:13:27;;:21;;1590:55;;1672:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1703;;-1:-1:-1;;;1703:21:27;;;;;9715:25:28;;;1655:38:27;;-1:-1:-1;;;;;;;;;;;;336:42:1;1703:13:27;;9688:18:28;;1703:21:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:13;1796:5;1779:22;1771:58;;;;-1:-1:-1;;;1771:58:27;;9953:2:28;1771:58:27;;;9935:21:28;9992:2;9972:18;;;9965:30;10031:25;10011:18;;;10004:53;10074:18;;1771:58:27;;;;;;;;1840:5;:21;;-1:-1:-1;;;;;;1840:21:27;;;1856:4;1840:21;;;;1871:4;:21;;;;;1886:5;1871:21;;;1982:43;;505:42;;1982:43;;;:::i;:::-;-1:-1:-1;;;;;2820:32:28;;;2802:51;;2790:2;2775:18;1982:43:27;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:9:27;:55;;-1:-1:-1;;;;;;1970:55:27;;-1:-1:-1;;;;;1970:55:27;;;;;;;;;;;;;2078:37;;-1:-1:-1;;;2078:37:27;;2094:9;;;;;2078:37;;;10304:51:28;2106:8:27;10371:18:28;;;10364:34;-1:-1:-1;;;;;;;;;;;336:42:1;2078:7:27;;10277:18:28;;2078:37:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1511:611;;1487:635::o;7013:845::-;7136:20;;-1:-1:-1;;;7136:20:27;;1187:42;7136:20;;;2802:51:28;-1:-1:-1;;;;;;;;;;;336:42:1;7136:8:27;;2775:18:28;;7136:20:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7196:9:27;;7166:52;;-1:-1:-1;;;7166:52:27;;7196:9;;;;-1:-1:-1;;;;;7196:9:27;7166:52;;;10304:51:28;7208:9:27;10371:18:28;;;10364:34;-1:-1:-1;;;;;;;;;;;577:42:27;-1:-1:-1;7166:21:27;;-1:-1:-1;10277:18:28;;7166:52:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7229:20:27;;-1:-1:-1;;;7229:20:27;;1276:42;7229:20;;;2802:51:28;-1:-1:-1;;;;;;;;;;;336:42:1;7229:8:27;;2775:18:28;;7229:20:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7289:9:27;;7259:54;;-1:-1:-1;;;7259:54:27;;7289:9;;;;-1:-1:-1;;;;;7289:9:27;7259:54;;;10304:51:28;7301:11:27;10371:18:28;;;10364:34;-1:-1:-1;;;;;;;;;;;649:42:27;-1:-1:-1;7259:21:27;;-1:-1:-1;10277:18:28;;7259:54:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7411:9:27;;7380:42;;-1:-1:-1;;;7380:42:27;;7411:9;;;;-1:-1:-1;;;;;7411:9:27;7380:42;;;2802:51:28;-1:-1:-1;;;;;;;;;;;;;577:42:27;7380:22;;2775:18:28;;7380:42:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7432:9;;:33;;-1:-1:-1;;;7432:33:27;;-1:-1:-1;;;;;;;;;;;7432:33:27;;;2802:51:28;7359:63:27;;-1:-1:-1;7432:9:27;;;-1:-1:-1;;;;;7432:9:27;;:27;;2775:18:28;;7432:33:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7515:9:27;;7484:42;;-1:-1:-1;;;7484:42:27;;7515:9;;;;-1:-1:-1;;;;;7515:9:27;7484:42;;;2802:51:28;7475:55:27;;-1:-1:-1;;;;;;;;;;;;577:42:27;-1:-1:-1;7484:22:27;;2775:18:28;;7484:42:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7528:1;7475:8;:55::i;:::-;7572:5;;7549:29;;-1:-1:-1;;;7549:29:27;;-1:-1:-1;;;;;7572:5:27;;;7549:29;;;2802:51:28;7540:42:27;;-1:-1:-1;;;;;;;;;;;577:42:27;7549:22;;2775:18:28;;7549:29:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7580:1;7540:8;:42::i;:::-;7680:9;;7649:42;;-1:-1:-1;;;7649:42:27;;7680:9;;;;-1:-1:-1;;;;;7680:9:27;7649:42;;;2802:51:28;-1:-1:-1;;;;;;;;;;;;;649:42:27;7649:22;;2775:18:28;;7649:42:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7701:9;;:33;;-1:-1:-1;;;7701:33:27;;-1:-1:-1;;;;;;;;;;;7701:33:27;;;2802:51:28;7628:63:27;;-1:-1:-1;7701:9:27;;;-1:-1:-1;;;;;7701:9:27;;:27;;2775:18:28;;7701:33:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7784:9:27;;7753:42;;-1:-1:-1;;;7753:42:27;;7784:9;;;;-1:-1:-1;;;;;7784:9:27;7753:42;;;2802:51:28;7744:55:27;;-1:-1:-1;;;;;;;;;;;;649:42:27;-1:-1:-1;7753:22:27;;2775:18:28;;7753:42:27;2656:203:28;7744:55:27;7841:5;;7818:29;;-1:-1:-1;;;7818:29:27;;-1:-1:-1;;;;;7841:5:27;;;7818:29;;;2802:51:28;7809:42:27;;-1:-1:-1;;;;;;;;;;;649:42:27;7818:22;;2775:18:28;;7818:29:27;2656:203:28;7809:42:27;7075:783;;7013:845::o;9506:473::-;9641:34;;-1:-1:-1;;;9641:34:27;;1187:42;9641:34;;;2802:51:28;9619:19:27;;-1:-1:-1;;;;;;;;;;;577:42:27;9641:22;;2775:18:28;;9641:34:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9707;;-1:-1:-1;;;9707:34:27;;1276:42;9707:34;;;2802:51:28;9619:56:27;;-1:-1:-1;9685:19:27;;-1:-1:-1;;;;;;;;;;;649:42:27;9707:22;;2775:18:28;;9707:34:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9685:56;;9783:61;9792:11;9805:8;9783:61;;;;;;;;;;;;;;;;;:8;:61::i;:::-;9854:67;9863:11;9876:14;9854:67;;;;;;;;;;;;;;;;;:8;:67::i;:::-;9937:35;;;;;11492:2:28;11474:21;;;11531:2;11511:18;;;11504:30;11570;11565:2;11550:18;;11543:58;11633:2;11618:18;;11290:352;5378:585:27;5501:15;;;5514:1;5501:15;;;;;;;;5476:22;;5501:15;;;;;;;;;;-1:-1:-1;5501:15:27;5476:40;;-1:-1:-1;;;;;;;;;;;5526:6:27;5533:1;5526:9;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;5526:24:27;;;-1:-1:-1;;;;;5526:24:27;;;;;-1:-1:-1;;;;;;;;;;;5560:6:27;5567:1;5560:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5560:24:27;;;;:9;;;;;;;;;;:24;5622:16;;;5636:1;5622:16;;;;;;;;5595:24;;5622:16;;5636:1;;5622:16;;;;;;;;;-1:-1:-1;5622:16:27;5595:43;;5661:9;5648:7;5656:1;5648:10;;;;;;;;:::i;:::-;;;;;;:22;;;;;5693:11;5680:7;5688:1;5680:10;;;;;;;;:::i;:::-;;;;;;:24;;;;;5727:21;5751:23;:21;:23::i;:::-;5860:5;;5851:15;;-1:-1:-1;;;5851:15:27;;-1:-1:-1;;;;;5860:5:27;;;5851:15;;;2802:51:28;5727:47:27;;-1:-1:-1;;;;;;;;;;;;336:42:1;5851:8:27;;2775:18:28;;5851:15:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;5876:15:27;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5903:9:27;;:53;;-1:-1:-1;;;5903:53:27;;:9;;;;-1:-1:-1;;;;;5903:9:27;;-1:-1:-1;5903:26:27;;-1:-1:-1;5903:53:27;;5930:6;;5938:7;;5947:8;;5903:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5432:531;;;5378:585::o;2907:134:7:-;2954:33;3018:16;2999:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2999:35:7;;;;;;;;;;;;;;;;;;;;;;;2907:134;:::o;3823:151::-;3872:42;3948:19;3926:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3926:41:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:151;:::o;3684:133::-;3730:33;3794:16;3775:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3775:35:7;;;;;;;;;;;;;;;;;;;;;;3684:133;:::o;3385:141::-;3433:35;3501:18;3480:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3480:39:7;;;;;;;;;;;;;;;;;;;;;;3385:141;:::o;3512:667:27:-;3614:62;-1:-1:-1;;;;;;;;;;;;;;;;3623:29:27;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3614:62;;3656:2;3614:62;;;;;;;;;;;;;-1:-1:-1;;;3614:62:27;;;:8;:62::i;:::-;3686:61;-1:-1:-1;;;;;;;;;;;;;;;;3695:29:27;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3686:61;;3728:1;3686:61;;;;;;;;;;;;;-1:-1:-1;;;3686:61:27;;;:8;:61::i;:::-;3757;721:42;-1:-1:-1;;;;;3766:29:27;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3757:61;;3799:1;3757:61;;;;;;;;;;;;;-1:-1:-1;;;3757:61:27;;;:8;:61::i;:::-;3828:60;792:42;-1:-1:-1;;;;;3837:28:27;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3828:60;;3869:2;3828:60;;;;;;;;;;;;;-1:-1:-1;;;3828:60:27;;;:8;:60::i;:::-;3898;863:42;-1:-1:-1;;;;;3907:28:27;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3898:60;;3939:2;3898:60;;;;;;;;;;;;;-1:-1:-1;;;3898:60:27;;;:8;:60::i;:::-;3969:62;-1:-1:-1;;;;;;;;;;;;;;;;3978:27:27;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3978:29:27;;;;;;;;;;;;:::i;:::-;3969:62;;;;;;;;;;;;;-1:-1:-1;;;3969:62:27;;;;;;;;;;;;;;;;-1:-1:-1;;;3969:62:27;;;:8;:62::i;:::-;4041;-1:-1:-1;;;;;;;;;;;;;;;;4050:27:27;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4050:29:27;;;;;;;;;;;;:::i;:::-;4041:62;;;;;;;;;;;;;-1:-1:-1;;;4041:62:27;;;;;;;;;;;;;;;;-1:-1:-1;;;4041:62:27;;;:8;:62::i;:::-;4113:59;792:42;-1:-1:-1;;;;;4122:26:27;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4122:28:27;;;;;;;;;;;;:::i;:::-;4113:59;;;;;;;;;;;;;-1:-1:-1;;;4113:59:27;;;;;;;;;;;;;;;;-1:-1:-1;;;4113:59:27;;;:8;:59::i;:::-;3512:667::o;6496:511::-;6634:20;;-1:-1:-1;;;6634:20:27;;1187:42;6634:20;;;2802:51:28;6574:9:27;;-1:-1:-1;;;;;;;;;;;336:42:1;6634:8:27;;2775:18:28;;6634:20:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6694:9:27;;6664:49;;-1:-1:-1;;;6664:49:27;;6694:9;;;;-1:-1:-1;;;;;6694:9:27;6664:49;;;10304:51:28;10371:18;;;10364:34;;;-1:-1:-1;;;;;;;;;;;577:42:27;-1:-1:-1;6664:21:27;;-1:-1:-1;10277:18:28;;6664:49:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6776:5:27;;6753:29;;-1:-1:-1;;;6753:29:27;;-1:-1:-1;;;;;6776:5:27;;;6753:29;;;2802:51:28;6724:26:27;;-1:-1:-1;;;;;;;;;;;577:42:27;6753:22;;2775:18:28;;6753:29:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6818:9;;:38;;-1:-1:-1;;;6818:38:27;;-1:-1:-1;;;;;;;;;;;6818:38:27;;;10304:51:28;10371:18;;;10364:34;;;6724:58:27;;-1:-1:-1;6818:9:27;;;-1:-1:-1;;;;;6818:9:27;;:24;;10277:18:28;;6818:38:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6899:5:27;;6876:29;;-1:-1:-1;;;6876:29:27;;-1:-1:-1;;;;;6899:5:27;;;6876:29;;;2802:51:28;6867:68:27;;-1:-1:-1;;;;;;;;;;;;577:42:27;-1:-1:-1;6876:22:27;;2775:18:28;;6876:29:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6907:27;6928:6;6907:18;:27;:::i;:::-;6867:8;:68::i;:::-;6985:9;;6954:42;;-1:-1:-1;;;6954:42:27;;6985:9;;;;-1:-1:-1;;;;;6985:9:27;6954:42;;;2802:51:28;6945:55:27;;-1:-1:-1;;;;;;;;;;;577:42:27;6954:22;;2775:18:28;;6954:42:27;2656:203:28;10511:153:27;10635:9;;10618:39;;10635:9;;;-1:-1:-1;;;;;10635:9:27;10627:26;10655:1;10618:8;:39::i;3193:186:7:-;3249:56;3346:26;3317:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3317:55:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8319:304:27;8566:50;;;;;;;;;;;;;;;;;1059:42;8528:19;;;8566:50;;8528:19;;8432:12;;8566:8;:50::i;2791:715::-;2922:34;;-1:-1:-1;;;2922:34:27;;1187:42;2922:34;;;2802:51:28;2900:19:27;;-1:-1:-1;;;;;;;;;;;577:42:27;2922:22;;2775:18:28;;2922:34:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2988;;-1:-1:-1;;;2988:34:27;;1276:42;2988:34;;;2802:51:28;2900:56:27;;-1:-1:-1;2966:19:27;;-1:-1:-1;;;;;;;;;;;649:42:27;2988:22;;2775:18:28;;2988:34:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3053:32;;-1:-1:-1;;;3053:32:27;;1363:42;3053:32;;;2802:51:28;2966:56:27;;-1:-1:-1;3032:18:27;;792:42;;3053:21;;2775:18:28;;3053:32:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3032:53;;3096;3105:11;3118:1;3096:53;;;;;;;;;;;;;;;;;:8;:53::i;:::-;3159;3168:11;3181:1;3159:53;;;;;;;;;;;;;;;;;:8;:53::i;:::-;3222:51;3231:10;3243:1;3222:51;;;;;;;;;;;;;;;;;:8;:51::i;:::-;-1:-1:-1;;;;;;;;;;;3334:11:27;3347:2;3289:61;;;;;;14539:2:28;14521:21;;;14578:2;14558:18;;;14551:30;-1:-1:-1;;;14612:3:28;14597:19;;14590:49;14706:4;14691:20;;14684:36;;;;-1:-1:-1;14736:18:28;;14729:34;14671:3;14656:19;;14272:497;3289:61:27;;;;;;;;3365:60;;;15040:2:28;15022:21;;;15079:2;15059:18;;;15052:30;-1:-1:-1;;;15113:3:28;15098:19;;15091:49;15207:4;15192:20;;15185:36;;;3423:1:27;15237:18:28;;;15230:34;3365:60:27;;-1:-1:-1;;;;;;;;;;;3365:60:27;;;;15172:3:28;3365:60:27;;;3440:59;;;15542:2:28;15524:21;;;15581:2;15561:18;;;15554:30;-1:-1:-1;;;15615:3:28;15600:19;;15593:48;15708:4;15693:20;;15686:36;;;3496:2:27;15738:18:28;;;15731:34;3440:59:27;;-1:-1:-1;;;;;;;;;;;3440:59:27;;;;15673:3:28;3440:59:27;;;2843:663;;;2791:715::o;3047:140:7:-;3095:34;3162:18;3141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:146;3580:40;3653:18;3632:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3632:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3632:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4322:1050:27;4525:15;;;4538:1;4525:15;;;;;;;;;4441:7;;4420:18;;4525:15;;;;;;;;;;;;-1:-1:-1;4525:15:27;4500:40;;-1:-1:-1;;;;;;;;;;;4550:6:27;4557:1;4550:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4550:24:27;;;;:9;;;;;;;;;;;:24;4612:16;;;4626:1;4612:16;;;;;;;;;4585:24;;4612:16;;;;;;;;;;;;-1:-1:-1;4612:16:27;4585:43;;4651:10;4638:7;4646:1;4638:10;;;;;;;;:::i;:::-;;;;;;:23;;;;;4741:21;4765:23;:21;:23::i;:::-;4860:38;;-1:-1:-1;;;4860:38:27;;505:42;4860:38;;;2802:51:28;4741:47:27;;-1:-1:-1;4834:23:27;;-1:-1:-1;;;;;;;;;;;577:42:27;4860:22;;2775:18:28;;4860:38:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4948:5;;4939:15;;-1:-1:-1;;;4939:15:27;;-1:-1:-1;;;;;4948:5:27;;;4939:15;;;2802:51:28;4834:64:27;;-1:-1:-1;;;;;;;;;;;;336:42:1;4939:8:27;;2775:18:28;;4939:15:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;5090:15:27;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5172:9:27;;:53;;-1:-1:-1;;;5172:53:27;;:9;;;;-1:-1:-1;;;;;5172:9:27;;-1:-1:-1;5172:26:27;;-1:-1:-1;5172:53:27;;5199:6;;5207:7;;5216:8;;5172:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5309:38:27;;-1:-1:-1;;;5309:38:27;;505:42;5309:38;;;2802:51:28;5300:65:27;;-1:-1:-1;;;;;;;;;;;;577:42:27;-1:-1:-1;5309:22:27;;2775:18:28;;5309:38:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5349:15;5300:8;:65::i;:::-;4371:1001;;;;;4322:1050::o;2754:147:7:-;2803:40;2876:18;2855:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2855:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2855:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2459:141;2508:34;2575:18;2554:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1306:195:2;1365:7;;1345:4;;1365:7;;1361:134;;;-1:-1:-1;1395:4:2;;1306:195::o;1361:134::-;1437:33;;-1:-1:-1;;;1437:33:2;;-1:-1:-1;;;;;;;;;;;1437:33:2;;;10304:51:28;;;-1:-1:-1;;;10371:18:28;;;10364:34;1482:1:2;;1437:7;;10277:18:28;;1437:33:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;1430:54;;1306:195;:::o;10128:377:27:-;10249:34;10258:9;;;;;;;;;-1:-1:-1;;;;;10258:9:27;-1:-1:-1;;;;;10258:15:27;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10277:5;;-1:-1:-1;;;;;10277:5:27;10249:8;:34::i;:::-;10293:52;10310:9;;;;;;;;;-1:-1:-1;;;;;10310:9:27;-1:-1:-1;;;;;10310:15:27;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;505:42;10293:8;:52::i;:::-;10355:42;10364:9;;;;;;;;;-1:-1:-1;;;;;10364:9:27;-1:-1:-1;;;;;10364:26:27;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10394:2;10355:8;:42::i;:::-;10407:40;10416:9;;;;;;;;;-1:-1:-1;;;;;10416:9:27;-1:-1:-1;;;;;10416:25:27;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10445:1;10407:8;:40::i;:::-;10457:41;10466:9;;;;;;;;;-1:-1:-1;;;;;10466:9:27;-1:-1:-1;;;;;10466:22:27;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10492:5;10457:8;:41::i;2606:142:7:-;2655:35;2723:18;2702:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2702:39:7;;;;;;;;;;;;;;;;;;;;;;2606:142;:::o;2352:433:27:-;2473:52;2490:9;;;;;;;;;-1:-1:-1;;;;;2490:9:27;-1:-1:-1;;;;;2490:15:27;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2473:52;2730:48;;;;;;;;;;;;;;;;;505:42;2689:22;;;2730:48;;2689:22;;2592:12;;2730:8;:48::i;6110:380::-;6239:25;;-1:-1:-1;;;6239:25:27;;1187:42;6239:25;;;2802:51:28;6187:7:27;;-1:-1:-1;;;;;;;;;;;336:42:1;6239:13:27;;2775:18:28;;6239:25:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6342:9:27;;6312:49;;-1:-1:-1;;;6312:49:27;;6342:9;;;;-1:-1:-1;;;;;6342:9:27;6312:49;;;10304:51:28;10371:18;;;10364:34;;;-1:-1:-1;;;;;;;;;;;577:42:27;-1:-1:-1;6312:21:27;;-1:-1:-1;10277:18:28;;6312:49:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;;;;;;6371:12:27;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6463:9:27;;6432:42;;-1:-1:-1;;;6432:42:27;;6463:9;;;;-1:-1:-1;;;;;6463:9:27;6432:42;;;2802:51:28;6423:60:27;;-1:-1:-1;;;;;;;;;;;;577:42:27;-1:-1:-1;6432:22:27;;2775:18:28;;6432:42:27;2656:203:28;6423:60:27;6160:330;6110:380::o;8006:307::-;8255:51;;;;;;;;;;;;;;;;;975:42;8217:19;;;8255:51;;8217:19;;8120:12;;14795:177:2;14905:5;14897:4;:13;14893:73;;14926:29;;-1:-1:-1;;;14926:29:2;;-1:-1:-1;;;;;;;;;;;14926:11:2;;;:29;;14938:4;;14944:5;;14951:3;;14926:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14893:73;14795:177;;;:::o;2664:153::-;2755:5;2747:4;:13;2743:68;;2776:24;;-1:-1:-1;;;2776:24:2;;;;;17454:25:28;;;17495:18;;;17488:34;;;-1:-1:-1;;;;;;;;;;;2776:11:2;;;17427:18:28;;2776:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14636:153;14727:5;14719:4;:13;14715:68;;14748:24;;-1:-1:-1;;;14748:24:2;;;;;17454:25:28;;;17495:18;;;17488:34;;;-1:-1:-1;;;;;;;;;;;14748:11:2;;;17427:18:28;;14748:24:2;17280:248:28;10802:741:27;11035:16;;;11049:1;11035:16;;;10857:12;11035:16;;;;;10857:12;11009:23;;11035:16;11049:1;11035:16;;;;;;;;;;-1:-1:-1;11035:16:27;11009:42;;-1:-1:-1;;;;;;;;;;;11061:6:27;11068:1;11061:9;;;;;;;;:::i;:::-;;;;;;:16;-1:-1:-1;;;;;11061:16:27;;;-1:-1:-1;;;;;11061:16:27;;;;;-1:-1:-1;;;;;;;;;;;11087:6:27;11094:1;11087:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11087:16:27;;;;:9;;;;;;;;;;;:16;11143;;;11157:1;11143:16;;;;;;;;;11114:26;;11143:16;;;;;;;;;;;;-1:-1:-1;11143:16:27;11114:45;;975:42;11169:9;11179:1;11169:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11169:32:27;;;;:12;;;;;;;;;;;:32;11235:15;;;11248:1;11235:15;;;;;;;;;11212:20;;11235:15;;;;;;;;;;;;-1:-1:-1;11235:15:27;11212:38;;11270:4;11260;11265:1;11260:7;;;;;;;;:::i;:::-;:14;;;;;:7;;;;;;;;;;;:14;11323:13;;;11334:1;11323:13;;;;;;;;;11302:18;;11323:13;;;;;;;;;;;;-1:-1:-1;11323:13:27;11302:34;;11356:4;11346;11351:1;11346:7;;;;;;;;:::i;:::-;:14;;;:7;;;;;;;;;;:14;11378:158;;;;11402:6;;11422:9;;11445:4;;11463;;11481:1;;11509:2;;11378:158;;:::i;:::-;;;;;;;;;;;;;11371:165;;;;;;10802:741;:::o;2823:177:2:-;2933:5;2925:4;:13;2921:73;;2954:29;;-1:-1:-1;;;2954:29:2;;-1:-1:-1;;;;;;;;;;;2954:11:2;;;:29;;2966:4;;2972:5;;2979:3;;2954:29;;;:::i;5178:146::-;5288:29;;-1:-1:-1;;;5288:29:2;;-1:-1:-1;;;;;;;;;;;5288:11:2;;;:29;;5300:4;;5306:5;;5313:3;;5288:29;;;:::i;4020:153::-;4111:5;-1:-1:-1;;;;;4103:13:2;:4;-1:-1:-1;;;;;4103:13:2;;4099:68;;4132:24;;-1:-1:-1;;;4132:24:2;;-1:-1:-1;;;;;20159:32:28;;;4132:24:2;;;20141:51:28;20228:32;;20208:18;;;20201:60;-1:-1:-1;;;;;;;;;;;4132:11:2;;;20114:18:28;;4132:24:2;19967:300:28;-1:-1:-1;;;;;;;;:::o;14:446:28:-;67:3;105:5;99:12;132:6;127:3;120:19;164:4;159:3;155:14;148:21;;203:4;196:5;192:16;226:1;236:199;250:6;247:1;244:13;236:199;;;315:13;;-1:-1:-1;;;;;311:39:28;299:52;;380:4;371:14;;;;408:17;;;;347:1;265:9;236:199;;;-1:-1:-1;451:3:28;;14:446;-1:-1:-1;;;;14:446:28:o;465:261::-;644:2;633:9;626:21;607:4;664:56;716:2;705:9;701:18;693:6;664:56;:::i;:::-;656:64;465:261;-1:-1:-1;;;465:261:28:o;731:289::-;773:3;811:5;805:12;838:6;833:3;826:19;894:6;887:4;880:5;876:16;869:4;864:3;860:14;854:47;946:1;939:4;930:6;925:3;921:16;917:27;910:38;1009:4;1002:2;998:7;993:2;985:6;981:15;977:29;972:3;968:39;964:50;957:57;;;731:289;;;;:::o;1025:1626::-;1229:4;1277:2;1266:9;1262:18;1307:2;1296:9;1289:21;1330:6;1365;1359:13;1396:6;1388;1381:22;1434:2;1423:9;1419:18;1412:25;;1496:2;1486:6;1483:1;1479:14;1468:9;1464:30;1460:39;1446:53;;1534:2;1526:6;1522:15;1555:1;1565:1057;1579:6;1576:1;1573:13;1565:1057;;;-1:-1:-1;;1644:22:28;;;1640:36;1628:49;;1700:13;;1787:9;;-1:-1:-1;;;;;1783:35:28;1768:51;;1866:2;1858:11;;;1852:18;1752:2;1890:15;;;1883:27;;;1971:19;;1740:15;;;2003:24;;;2158:21;;;2061:2;2111:1;2107:16;;;2095:29;;2091:38;;;2049:15;;;;-1:-1:-1;2217:296:28;2233:8;2228:3;2225:17;2217:296;;;2339:2;2335:7;2326:6;2318;2314:19;2310:33;2303:5;2296:48;2371:42;2406:6;2395:8;2389:15;2371:42;:::i;:::-;2456:2;2442:17;;;;2361:52;;-1:-1:-1;2485:14:28;;;;;2261:1;2252:11;2217:296;;;-1:-1:-1;2536:6:28;;-1:-1:-1;;;2577:2:28;2600:12;;;;2565:15;;;;;-1:-1:-1;1601:1:28;1594:9;1565:1057;;;-1:-1:-1;2639:6:28;;1025:1626;-1:-1:-1;;;;;;1025:1626:28:o;2864:446::-;2916:3;2954:5;2948:12;2981:6;2976:3;2969:19;3013:4;3008:3;3004:14;2997:21;;3052:4;3045:5;3041:16;3075:1;3085:200;3099:6;3096:1;3093:13;3085:200;;;3164:13;;-1:-1:-1;;;;;;3160:40:28;3148:53;;3230:4;3221:14;;;;3258:17;;;;3121:1;3114:9;3085:200;;3315:1143;3533:4;3581:2;3570:9;3566:18;3611:2;3600:9;3593:21;3634:6;3669;3663:13;3700:6;3692;3685:22;3738:2;3727:9;3723:18;3716:25;;3800:2;3790:6;3787:1;3783:14;3772:9;3768:30;3764:39;3750:53;;3838:2;3830:6;3826:15;3859:1;3869:560;3883:6;3880:1;3877:13;3869:560;;;3976:2;3972:7;3960:9;3952:6;3948:22;3944:36;3939:3;3932:49;4010:6;4004:13;4056:2;4050:9;4087:2;4079:6;4072:18;4117:48;4161:2;4153:6;4149:15;4135:12;4117:48;:::i;:::-;4103:62;;4214:2;4210;4206:11;4200:18;4178:40;;4267:6;4259;4255:19;4250:2;4242:6;4238:15;4231:44;4298:51;4342:6;4326:14;4298:51;:::i;:::-;4288:61;-1:-1:-1;;;4384:2:28;4407:12;;;;4372:15;;;;;3905:1;3898:9;3869:560;;4463:782;4625:4;4673:2;4662:9;4658:18;4703:2;4692:9;4685:21;4726:6;4761;4755:13;4792:6;4784;4777:22;4830:2;4819:9;4815:18;4808:25;;4892:2;4882:6;4879:1;4875:14;4864:9;4860:30;4856:39;4842:53;;4930:2;4922:6;4918:15;4951:1;4961:255;4975:6;4972:1;4969:13;4961:255;;;5068:2;5064:7;5052:9;5044:6;5040:22;5036:36;5031:3;5024:49;5096:40;5129:6;5120;5114:13;5096:40;:::i;:::-;5086:50;-1:-1:-1;5171:2:28;5194:12;;;;5159:15;;;;;4997:1;4990:9;4961:255;;5250:1031;5452:4;5500:2;5489:9;5485:18;5530:2;5519:9;5512:21;5553:6;5588;5582:13;5619:6;5611;5604:22;5657:2;5646:9;5642:18;5635:25;;5719:2;5709:6;5706:1;5702:14;5691:9;5687:30;5683:39;5669:53;;5757:2;5749:6;5745:15;5778:1;5788:464;5802:6;5799:1;5796:13;5788:464;;;5867:22;;;-1:-1:-1;;5863:36:28;5851:49;;5923:13;;5968:9;;-1:-1:-1;;;;;5964:35:28;5949:51;;6047:2;6039:11;;;6033:18;6088:2;6071:15;;;6064:27;;;6033:18;6114:58;;6156:15;;6033:18;6114:58;:::i;:::-;6104:68;-1:-1:-1;;6207:2:28;6230:12;;;;6195:15;;;;;5824:1;5817:9;5788:464;;6725:184;6795:6;6848:2;6836:9;6827:7;6823:23;6819:32;6816:52;;;6864:1;6861;6854:12;6816:52;-1:-1:-1;6887:16:28;;6725:184;-1:-1:-1;6725:184:28:o;8272:127::-;8333:10;8328:3;8324:20;8321:1;8314:31;8364:4;8361:1;8354:15;8388:4;8385:1;8378:15;8404:935;8484:6;8537:2;8525:9;8516:7;8512:23;8508:32;8505:52;;;8553:1;8550;8543:12;8505:52;8586:9;8580:16;8619:18;8611:6;8608:30;8605:50;;;8651:1;8648;8641:12;8605:50;8674:22;;8727:4;8719:13;;8715:27;-1:-1:-1;8705:55:28;;8756:1;8753;8746:12;8705:55;8789:2;8783:9;8815:18;8807:6;8804:30;8801:56;;;8837:18;;:::i;:::-;8886:2;8880:9;8978:2;8940:17;;-1:-1:-1;;8936:31:28;;;8969:2;8932:40;8928:54;8916:67;;9013:18;8998:34;;9034:22;;;8995:62;8992:88;;;9060:18;;:::i;:::-;9096:2;9089:22;9120;;;9161:15;;;9178:2;9157:24;9154:37;-1:-1:-1;9151:57:28;;;9204:1;9201;9194:12;9151:57;9253:6;9248:2;9244;9240:11;9235:2;9227:6;9223:15;9217:43;9306:1;9280:19;;;9301:2;9276:28;9269:39;;;;9284:6;8404:935;-1:-1:-1;;;;8404:935:28:o;9344:220::-;9493:2;9482:9;9475:21;9456:4;9513:45;9554:2;9543:9;9539:18;9531:6;9513:45;:::i;10713:277::-;10780:6;10833:2;10821:9;10812:7;10808:23;10804:32;10801:52;;;10849:1;10846;10839:12;10801:52;10881:9;10875:16;10934:5;10927:13;10920:21;10913:5;10910:32;10900:60;;10956:1;10953;10946:12;11647:127;11708:10;11703:3;11699:20;11696:1;11689:31;11739:4;11736:1;11729:15;11763:4;11760:1;11753:15;11779:1319;12109:2;12121:21;;;12191:13;;12094:18;;;12213:22;;;12061:4;;12305;12293:17;;;12266:3;12251:19;;;12061:4;12338:199;12352:6;12349:1;12346:13;12338:199;;;12417:13;;-1:-1:-1;;;;;12413:39:28;12401:52;;12482:4;12510:17;;;;12473:14;;;;12449:1;12367:9;12338:199;;;-1:-1:-1;;12575:19:28;;;12568:4;12553:20;;;12546:49;;;;12645:13;;12667:21;;;12706:14;;;;-1:-1:-1;12745:17:28;;;12782:1;12792:193;12808:8;12803:3;12800:17;12792:193;;;12877:15;;12863:30;;12926:4;12915:16;;;;12956:19;;;;12836:1;12827:11;12792:193;;;12796:3;;;13032:9;13025:5;13021:21;13016:2;13005:9;13001:18;12994:49;13060:32;13086:5;13078:6;13060:32;:::i;:::-;13052:40;11779:1319;-1:-1:-1;;;;;;11779:1319:28:o;13103:380::-;13182:1;13178:12;;;;13225;;;13246:61;;13300:4;13292:6;13288:17;13278:27;;13246:61;13353:2;13345:6;13342:14;13322:18;13319:38;13316:161;;13399:10;13394:3;13390:20;13387:1;13380:31;13434:4;13431:1;13424:15;13462:4;13459:1;13452:15;13316:161;;13103:380;;;:::o;13488:273::-;13556:6;13609:2;13597:9;13588:7;13584:23;13580:32;13577:52;;;13625:1;13622;13615:12;13577:52;13657:9;13651:16;13707:4;13700:5;13696:16;13689:5;13686:27;13676:55;;13727:1;13724;13717:12;14045:222;14110:9;;;14131:10;;;14128:133;;;14183:10;14178:3;14174:20;14171:1;14164:31;14218:4;14215:1;14208:15;14246:4;14243:1;14236:15;14128:133;14045:222;;;;:::o;16244:131::-;-1:-1:-1;;;;;16319:31:28;;16309:42;;16299:70;;16365:1;16362;16355:12;16380:251;16450:6;16503:2;16491:9;16482:7;16478:23;16474:32;16471:52;;;16519:1;16516;16509:12;16471:52;16551:9;16545:16;16570:31;16595:5;16570:31;:::i;16913:362::-;17118:6;17107:9;17100:25;17161:6;17156:2;17145:9;17141:18;17134:34;17204:2;17199;17188:9;17184:18;17177:30;17081:4;17224:45;17265:2;17254:9;17250:18;17242:6;17224:45;:::i;:::-;17216:53;16913:362;-1:-1:-1;;;;;16913:362:28:o;17533:433::-;17583:3;17621:5;17615:12;17648:6;17643:3;17636:19;17680:4;17675:3;17671:14;17664:21;;17719:4;17712:5;17708:16;17742:1;17752:189;17766:6;17763:1;17760:13;17752:189;;;17841:13;;17834:21;17827:29;17815:42;;17886:4;17877:14;;;;17914:17;;;;17788:1;17781:9;17752:189;;18057:1354;18531:3;18520:9;18513:22;18494:4;18558:57;18610:3;18599:9;18595:19;18587:6;18558:57;:::i;:::-;18663:9;18655:6;18651:22;18646:2;18635:9;18631:18;18624:50;18697:44;18734:6;18726;18697:44;:::i;:::-;18777:22;;;18772:2;18757:18;;18750:50;18849:13;;18871:22;;;18921:2;18947:15;;;;-1:-1:-1;18909:15:28;;;;18980:1;18990:184;19004:6;19001:1;18998:13;18990:184;;;19069:13;;19084:8;19065:28;19053:41;;19123:2;19149:15;;;;19114:12;;;;19026:1;19019:9;18990:184;;;18994:3;;19219:9;19214:3;19210:19;19205:2;19194:9;19190:18;19183:47;19247:38;19281:3;19273:6;19247:38;:::i;:::-;19239:46;;;;19294:51;19340:3;19329:9;19325:19;19317:6;18044:4;18033:16;18021:29;;17971:81;19294:51;18044:4;18033:16;;19400:3;19385:19;;18021:29;18057:1354;;;;;;;;;:::o;19416:546::-;19661:2;19650:9;19643:21;19624:4;19687:45;19728:2;19717:9;19713:18;19705:6;19687:45;:::i;:::-;19780:9;19772:6;19768:22;19763:2;19752:9;19748:18;19741:50;19814:33;19840:6;19832;19814:33;:::i;:::-;19800:47;;19895:9;19887:6;19883:22;19878:2;19867:9;19863:18;19856:50;19923:33;19949:6;19941;19923:33;:::i","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","flashLoan()":"9ad5981e","owner()":"8da5cb5b","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","testIntegration_BalancerHasLiquidity()":"01268c83","testIntegration_ContractConfiguration()":"d2709e91","testIntegration_ContractHasGas()":"62e64324","testIntegration_EmergencyWithdrawRealTokens()":"0b0cb685","testIntegration_MultiTokenFlashLoan()":"1e1d03b9","testIntegration_RealBalancerVault()":"f152ec5a","testIntegration_RealTokenBalances()":"84aff7e9","testIntegration_RealTokenMetadata()":"4c16c858","testIntegration_ReceiveRealWETH()":"fcb9ac6d","testIntegration_SmallFlashLoan()":"a8548d0f","testIntegration_SushiswapRouterExists()":"7e5c953f","testIntegration_TokenPriceConsistency()":"10268da4","testIntegration_UniswapV3RouterExists()":"fd79bfc5","testIntegration_WithdrawRealWETH()":"5c6e9c04","user()":"4f8632ba"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flashLoan\",\"outputs\":[{\"internalType\":\"contract FlashLoanReceiverSecure\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_BalancerHasLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_ContractConfiguration\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_ContractHasGas\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_EmergencyWithdrawRealTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_MultiTokenFlashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_RealBalancerVault\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_RealTokenBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_RealTokenMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_ReceiveRealWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_SmallFlashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_SushiswapRouterExists\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_TokenPriceConsistency\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_UniswapV3RouterExists\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testIntegration_WithdrawRealWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"user\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Requires forking from Arbitrum mainnet\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Integration Tests with Real Arbitrum Mainnet Data\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"testIntegration_BalancerHasLiquidity()\":{\"notice\":\"============================================ REAL LIQUIDITY TESTS ============================================\"},\"testIntegration_ContractConfiguration()\":{\"notice\":\"============================================ CONTRACT STATE VERIFICATION ============================================\"},\"testIntegration_RealBalancerVault()\":{\"notice\":\"============================================ REAL CONTRACT INTERACTION TESTS ============================================\"},\"testIntegration_ReceiveRealWETH()\":{\"notice\":\"============================================ REAL TOKEN TRANSFER TESTS ============================================\"},\"testIntegration_SmallFlashLoan()\":{\"notice\":\"============================================ REAL FLASH LOAN TESTS ============================================\"},\"testIntegration_TokenPriceConsistency()\":{\"notice\":\"============================================ REAL PRICE ORACLE TESTS ============================================\"},\"testIntegration_UniswapV3RouterExists()\":{\"notice\":\"============================================ REAL DEX INTERACTION TESTS ============================================\"}},\"notice\":\"Tests against actual deployed contracts on Arbitrum\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"tests/contracts/FlashLoanReceiverSecure.integration.t.sol\":\"FlashLoanReceiverSecureIntegrationTest\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"contracts/balancer/FlashLoanReceiverSecure.sol\":{\"keccak256\":\"0x0fce6a56d36f528232b049416a54e922e5b6875d8772001ea42101a0313a7a73\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://431552cc7357e6246f15a3e00dd161e0f985175002dbd59300b061188e425d1c\",\"dweb:/ipfs/QmQUe2GK85PmeR6A2bTa6edET1HW276KfEJFt8Um1Z577d\"]},\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4b2a5a85e045dcf6a082700c7252e43854c2eed88f860aaa18ec1e85218ae2bf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98d060ed5be569a92d908fc358149039dc8f833d61973aa1b9d1d8235676bf6d\",\"dweb:/ipfs/QmaWQpn5dJmbMS5skwmPPMeUWZG35BLkignPpcA3zyagEs\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0xd8eec16034b53b52c90a3d720e121ce7d30d64cc57d854db7d817d5b382dda43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://612780755e32668c7e3b747d94d16c7291101144e084dd9ee563f071711e99e3\",\"dweb:/ipfs/QmQgtFJXEmDtSHT7tZQTMbb6PCDpq5UDYFvrBnWk1Xo2SY\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xae394f477769a38276d98d4854bc865fc8d281edbd4e72167507adb8236812aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34a0e609a4ec617b5c349f5e89a3352810cc5e4d3adaf939b32a27e4a5e46de2\",\"dweb:/ipfs/QmPfjimWAGGb6rzDjNMtLeZ93JJbCJJMov5gaNKyTy1doe\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x04102de0a79398e4bdea57b7a4818655b4cc66d6f81d1cff08bf428cd0b384cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53edc6c8f7f67cafc0129f039637c77d979880f7f1947defea31e8f0c05095bc\",\"dweb:/ipfs/QmUKXJd1vFCkxxrkXNLURdXrx2apoyWQFrFb5UqNkjdHVi\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0xb2469a902a326074034c4f7081d868113db0edbb7cf48b86528af2d6b07295f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1430a81c4978be875e2a3b31a8bfa4e1438fecd327f23771b690d64db63c020a\",\"dweb:/ipfs/QmW6aB2u1LNaRgGQFwjV7L7UbxsRg63iJ7AuujPouEa4cT\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x6f235e293b4406784ff3bd89b2e4d51d0922918cf6825e7a7a09413606932e39\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://afc4fceb24a18596a239e82eb354c41d9a4e28d3fc56fcce04146af2c692b1b9\",\"dweb:/ipfs/QmQCHSAb5k9KQW9kEzeoPdirSknkWso4q4t5CSVFLNnMLB\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"tests/contracts/FlashLoanReceiverSecure.integration.t.sol\":{\"keccak256\":\"0x663b299f1f2f695c3d3bde741010d1a95e2488714098f68a0fec4b881700790b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dc07841875e44570642bde4d8c07ddd31a6e8578ad82c8c46b10374bb2850cf8\",\"dweb:/ipfs/QmbUstdq2ajMGG5fDUEqoxXa3Xqr5H3P6rB6BjNNNhHKJp\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"flashLoan","outputs":[{"internalType":"contract FlashLoanReceiverSecure","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_BalancerHasLiquidity"},{"inputs":[],"stateMutability":"view","type":"function","name":"testIntegration_ContractConfiguration"},{"inputs":[],"stateMutability":"view","type":"function","name":"testIntegration_ContractHasGas"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_EmergencyWithdrawRealTokens"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_MultiTokenFlashLoan"},{"inputs":[],"stateMutability":"view","type":"function","name":"testIntegration_RealBalancerVault"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_RealTokenBalances"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_RealTokenMetadata"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_ReceiveRealWETH"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_SmallFlashLoan"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_SushiswapRouterExists"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_TokenPriceConsistency"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_UniswapV3RouterExists"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testIntegration_WithdrawRealWETH"},{"inputs":[],"stateMutability":"view","type":"function","name":"user","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"testIntegration_BalancerHasLiquidity()":{"notice":"============================================ REAL LIQUIDITY TESTS ============================================"},"testIntegration_ContractConfiguration()":{"notice":"============================================ CONTRACT STATE VERIFICATION ============================================"},"testIntegration_RealBalancerVault()":{"notice":"============================================ REAL CONTRACT INTERACTION TESTS ============================================"},"testIntegration_ReceiveRealWETH()":{"notice":"============================================ REAL TOKEN TRANSFER TESTS ============================================"},"testIntegration_SmallFlashLoan()":{"notice":"============================================ REAL FLASH LOAN TESTS ============================================"},"testIntegration_TokenPriceConsistency()":{"notice":"============================================ REAL PRICE ORACLE TESTS ============================================"},"testIntegration_UniswapV3RouterExists()":{"notice":"============================================ REAL DEX INTERACTION TESTS ============================================"}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"tests/contracts/FlashLoanReceiverSecure.integration.t.sol":"FlashLoanReceiverSecureIntegrationTest"},"evmVersion":"cancun","libraries":{}},"sources":{"contracts/balancer/FlashLoanReceiverSecure.sol":{"keccak256":"0x0fce6a56d36f528232b049416a54e922e5b6875d8772001ea42101a0313a7a73","urls":["bzz-raw://431552cc7357e6246f15a3e00dd161e0f985175002dbd59300b061188e425d1c","dweb:/ipfs/QmQUe2GK85PmeR6A2bTa6edET1HW276KfEJFt8Um1Z577d"],"license":"MIT"},"lib/forge-std/src/Base.sol":{"keccak256":"0x4b2a5a85e045dcf6a082700c7252e43854c2eed88f860aaa18ec1e85218ae2bf","urls":["bzz-raw://98d060ed5be569a92d908fc358149039dc8f833d61973aa1b9d1d8235676bf6d","dweb:/ipfs/QmaWQpn5dJmbMS5skwmPPMeUWZG35BLkignPpcA3zyagEs"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0xd8eec16034b53b52c90a3d720e121ce7d30d64cc57d854db7d817d5b382dda43","urls":["bzz-raw://612780755e32668c7e3b747d94d16c7291101144e084dd9ee563f071711e99e3","dweb:/ipfs/QmQgtFJXEmDtSHT7tZQTMbb6PCDpq5UDYFvrBnWk1Xo2SY"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xae394f477769a38276d98d4854bc865fc8d281edbd4e72167507adb8236812aa","urls":["bzz-raw://34a0e609a4ec617b5c349f5e89a3352810cc5e4d3adaf939b32a27e4a5e46de2","dweb:/ipfs/QmPfjimWAGGb6rzDjNMtLeZ93JJbCJJMov5gaNKyTy1doe"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0x04102de0a79398e4bdea57b7a4818655b4cc66d6f81d1cff08bf428cd0b384cd","urls":["bzz-raw://53edc6c8f7f67cafc0129f039637c77d979880f7f1947defea31e8f0c05095bc","dweb:/ipfs/QmUKXJd1vFCkxxrkXNLURdXrx2apoyWQFrFb5UqNkjdHVi"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0xb2469a902a326074034c4f7081d868113db0edbb7cf48b86528af2d6b07295f8","urls":["bzz-raw://1430a81c4978be875e2a3b31a8bfa4e1438fecd327f23771b690d64db63c020a","dweb:/ipfs/QmW6aB2u1LNaRgGQFwjV7L7UbxsRg63iJ7AuujPouEa4cT"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0x6f235e293b4406784ff3bd89b2e4d51d0922918cf6825e7a7a09413606932e39","urls":["bzz-raw://afc4fceb24a18596a239e82eb354c41d9a4e28d3fc56fcce04146af2c692b1b9","dweb:/ipfs/QmQCHSAb5k9KQW9kEzeoPdirSknkWso4q4t5CSVFLNnMLB"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d","urls":["bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100","dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc","urls":["bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037","dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44","urls":["bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d","dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5","urls":["bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508","dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c","urls":["bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617","dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"],"license":"MIT"},"tests/contracts/FlashLoanReceiverSecure.integration.t.sol":{"keccak256":"0x663b299f1f2f695c3d3bde741010d1a95e2488714098f68a0fec4b881700790b","urls":["bzz-raw://dc07841875e44570642bde4d8c07ddd31a6e8578ad82c8c46b10374bb2850cf8","dweb:/ipfs/QmbUstdq2ajMGG5fDUEqoxXa3Xqr5H3P6rB6BjNNNhHKJp"],"license":"MIT"}},"version":1},"id":27} |