[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "feesToVault0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feesToVault1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feesToProtocol0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feesToProtocol1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feesToManager0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feesToManager1", "type": "uint256" } ], "name": "CollectFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "CollectManager", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "CollectProtocol", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int24", "name": "tick", "type": "int24" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Snapshot", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int24", "name": "threshold", "type": "int24" } ], "name": "UpdateBaseThreshold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint24", "name": "weight", "type": "uint24" } ], "name": "UpdateFullRangeWeight", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int24", "name": "threshold", "type": "int24" } ], "name": "UpdateLimitThreshold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "manager", "type": "address" } ], "name": "UpdateManager", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint24", "name": "managerFee", "type": "uint24" } ], "name": "UpdateManagerFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maxTotalSupply", "type": "uint256" } ], "name": "UpdateMaxTotalSupply", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int24", "name": "maxTwapDeviation", "type": "int24" } ], "name": "UpdateMaxTwapDeviation", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int24", "name": "minTickMove", "type": "int24" } ], "name": "UpdateMinTickMove", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "manager", "type": "address" } ], "name": "UpdatePendingManager", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "period", "type": "uint32" } ], "name": "UpdatePeriod", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "delegate", "type": "address" } ], "name": "UpdateRebalanceDelegate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "twapDuration", "type": "uint32" } ], "name": "UpdateTwapDuration", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accruedManagerFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedManagerFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedProtocolFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedProtocolFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseThreshold", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkCanRebalance", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "collectManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "collectProtocol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" } ], "name": "emergencyBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "contract AlphaProVaultFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fullLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fullRangeWeight", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fullUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBalance0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBalance1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" } ], "name": "getPositionAmounts", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalAmounts", "outputs": [ { "internalType": "uint256", "name": "total0", "type": "uint256" }, { "internalType": "uint256", "name": "total1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTwap", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "pool", "type": "address" }, { "internalType": "address", "name": "manager", "type": "address" }, { "internalType": "uint24", "name": "managerFee", "type": "uint24" }, { "internalType": "address", "name": "rebalanceDelegate", "type": "address" }, { "internalType": "uint256", "name": "maxTotalSupply", "type": "uint256" }, { "internalType": "int24", "name": "baseThreshold", "type": "int24" }, { "internalType": "int24", "name": "limitThreshold", "type": "int24" }, { "internalType": "uint24", "name": "fullRangeWeight", "type": "uint24" }, { "internalType": "uint32", "name": "period", "type": "uint32" }, { "internalType": "int24", "name": "minTickMove", "type": "int24" }, { "internalType": "int24", "name": "maxTwapDeviation", "type": "int24" }, { "internalType": "uint32", "name": "twapDuration", "type": "uint32" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "internalType": "struct VaultParams", "name": "_params", "type": "tuple" }, { "internalType": "address", "name": "_factory", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastTick", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitThreshold", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "manager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "managerFee", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTwapDeviation", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minTickMove", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingManagerFee", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "period", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "contract IUniswapV3Pool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolFee", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rebalanceDelegate", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "_baseThreshold", "type": "int24" } ], "name": "setBaseThreshold", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint24", "name": "_fullRangeWeight", "type": "uint24" } ], "name": "setFullRangeWeight", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "_limitThreshold", "type": "int24" } ], "name": "setLimitThreshold", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_manager", "type": "address" } ], "name": "setManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint24", "name": "_pendingManagerFee", "type": "uint24" } ], "name": "setManagerFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxTotalSupply", "type": "uint256" } ], "name": "setMaxTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "_maxTwapDeviation", "type": "int24" } ], "name": "setMaxTwapDeviation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "_minTickMove", "type": "int24" } ], "name": "setMinTickMove", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_period", "type": "uint32" } ], "name": "setPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rebalanceDelegate", "type": "address" } ], "name": "setRebalanceDelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_twapDuration", "type": "uint32" } ], "name": "setTwapDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20Upgradeable", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "sweep", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tickSpacing", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "twapDuration", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3SwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615b4080620000216000396000f3fe608060405234801561001057600080fd5b506004361061041d5760003560e01c806395d89b411161022b578063d0c93a7c11610130578063eae989a2116100b8578063f4005cae11610087578063f4005cae146107ca578063f8d01c9d146107dd578063fa082743146107f0578063fa461e33146107f8578063fa9430e11461080b5761041d565b8063eae989a2146107aa578063ebaf2d3b146107b2578063ecb5468e146107ba578063ef78d4fd146107c25761041d565b8063d3487997116100ff578063d348799714610761578063dc2c256f14610774578063dd62ed3e14610787578063e4d2b8aa1461079a578063e7c7cb91146107a25761041d565b8063d0c93a7c1461072b578063d0ebdbe714610733578063d21220a714610746578063d331bef71461074e5761041d565b8063abbffcb9116101b3578063ba9a7a5611610182578063ba9a7a56146106ed578063c0aeff9f146106f5578063c433c80a14610708578063c45a01551461071b578063c4a7761e146107235761041d565b8063abbffcb9146106ac578063af794480146106bf578063b0e21e8a146106d2578063b8ec2d38146106da5761041d565b8063a457c2d7116101fa578063a457c2d71461064a578063a63293551461065d578063a87bab9c14610670578063a9059cbb14610678578063a91ef6eb1461068b5761041d565b806395d89b411461062a5780639c7632fc14610632578063a00fa77f1461063a578063a00fff6f146106425761041d565b80633dfa5d8711610331578063629d9405116102b957806371bd0ea71161028857806371bd0ea7146105f75780637d7c2a1c146105ff578063846fdf6014610607578063854360ef1461061a578063888a9134146106225761041d565b8063629d9405146105bf5780636c395821146105c75780636f00b077146105cf57806370a08231146105e45761041d565b806348ff15b31161030057806348ff15b31461059757806351e87af71461059f5780635d752a9a146105a75780635da07868146105af57806360e1592a146105b75761041d565b80633dfa5d871461056c5780633f3e4c111461057457806341aec53814610587578063481c6a751461058f5761041d565b806319d8ac61116103b45780632ab4d052116103835780632ab4d05214610507578063313ce5671461050f578063365d0ed71461052457806339509351146105465780633cbff3fe146105595761041d565b806319d8ac61146104c45780631d769828146104cc57806323b872dd146104df57806326d89545146104f25761041d565b806316947fec116103f057806316947fec1461048a57806316c3e29d1461049f57806316f0115b146104a757806318160ddd146104af5761041d565b806306fdde0314610422578063095ea7b3146104405780630dfe1681146104605780630f35bcac14610475575b600080fd5b61042a61081e565b60405161043791906153ef565b60405180910390f35b61045361044e366004614cc3565b6108b4565b6040516104379190615387565b6104686108d2565b60405161043791906152aa565b61047d6108e1565b604051610437919061539b565b61049d610498366004615187565b6108f1565b005b61047d6109a3565b6104686109b3565b6104b76109c2565b6040516104379190615392565b6104b76109c8565b61049d6104da366004614c13565b6109ce565b6104536104ed366004614c83565b610b0e565b6104fa610b96565b604051610437919061587c565b6104b7610ba2565b610517610ba8565b604051610437919061588d565b610537610532366004615252565b610bb1565b6040516104379392919061583e565b610453610554366004614cc3565b610e43565b61049d610567366004614df7565b610e91565b61047d610f2f565b61049d6105823660046151bf565b610f3f565b6104b7610f9e565b61046861103c565b61049d61104b565b61047d6110c2565b61047d6110d2565b61046861121a565b6104b7611229565b6104b761122f565b61047d611272565b6105d7611282565b6040516104379190615820565b6104b76105f2366004614c13565b611294565b61049d6112b3565b61049d611504565b61049d610615366004615187565b611a75565b61047d611b13565b61047d611b23565b61042a611b33565b6105d7611b94565b6104b7611ba6565b610468611bac565b610453610658366004614cc3565b611bbb565b61049d61066b366004614df7565b611c23565b61047d611cb5565b610453610686366004614cc3565b611cc5565b61069e610699366004614e2f565b611cd9565b604051610437929190615830565b61049d6106ba366004614e5c565b611d8a565b61049d6106cd366004614df7565b611ed2565b6105d7611f64565b61049d6106e8366004615290565b611f76565b6104b7611fe5565b61049d610703366004614eec565b611feb565b61049d610716366004615290565b61259e565b610468612633565b61069e612642565b61047d612705565b61049d610741366004614c13565b612715565b61046861278a565b61069e61075c366004615212565b612799565b61049d61076f366004614e9b565b612a23565b61049d610782366004614db6565b612a7a565b6104b7610795366004614c4b565b612b00565b6105d7612b2b565b61047d612b3d565b6104b7612b4d565b61047d612b53565b6104b7612b63565b6104fa612b69565b61049d6107d8366004614df7565b612b75565b61049d6107eb366004614c13565b612c13565b61047d612c88565b61049d610806366004614e9b565b612c98565b61049d610819366004614c13565b612cef565b60368054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c86108c1612d96565b8484612d9a565b5060015b92915050565b6098546001600160a01b031681565b60a554600160981b900460020b81565b609b546001600160a01b031633146109245760405162461bcd60e51b815260040161091b90615519565b60405180910390fd5b62030d408162ffffff16111561094c5760405162461bcd60e51b815260040161091b906157e9565b60a4805462ffffff60501b1916600160501b62ffffff8416021790556040517f218e2de5d78d8a72c25f717811481b5563d21963b758fddb0643d18fa38c7a6790610998908390615820565b60405180910390a150565b60a454600160981b900460020b81565b6097546001600160a01b031681565b60355490565b60a35481565b609a60009054906101000a90046001600160a01b03166001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1c57600080fd5b505afa158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a549190614c2f565b6001600160a01b0316336001600160a01b031614610a845760405162461bcd60e51b815260040161091b9061571e565b609f805460a08054600093849055929055908115610ab357609854610ab3906001600160a01b03168484612e86565b8015610ad057609954610ad0906001600160a01b03168483612e86565b7fd63986ca13f11502796aee70ba80ac7317d99f08e5871fd9fd602a2764c7ef308282604051610b01929190615830565b60405180910390a1505050565b6000610b1b848484612ed8565b610b8b84610b27612d96565b610b8685604051806060016040528060288152602001615a2a602891396001600160a01b038a16600090815260346020526040812090610b65612d96565b6001600160a01b031681526020810191909152604001600020549190613035565b612d9a565b5060015b9392505050565b60a55463ffffffff1681565b609e5481565b60385460ff1690565b600080600060026065541415610c0e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260655587151580610c215750600087115b610c3d5760405162461bcd60e51b815260040161091b90615683565b6001600160a01b03841615801590610c5e57506001600160a01b0384163014155b610c7a5760405162461bcd60e51b815260040161091b906154fd565b60a554610c9c90600160201b8104600290810b91600160381b9004900b6130cc565b60a554610cbe90600160501b8104600290810b91600160681b9004900b6130cc565b60a554610ce090600160801b8104600290810b91600160981b9004900b6130cc565b610cea8888613176565b9194509250905082610d0e5760405162461bcd60e51b815260040161091b90615742565b85821015610d2e5760405162461bcd60e51b815260040161091b90615495565b84811015610d4e5760405162461bcd60e51b815260040161091b90615781565b610d566109c2565b610d7257609a54610d72906001600160a01b03166103e86132a6565b8115610d9057609854610d90906001600160a01b0316333085613398565b8015610dae57609954610dae906001600160a01b0316333084613398565b610db884846132a6565b836001600160a01b0316336001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6858585604051610dff9392919061583e565b60405180910390a3609e54610e126109c2565b1115610e305760405162461bcd60e51b815260040161091b906157c1565b6001606581905550955095509592505050565b60006108c8610e50612d96565b84610b868560346000610e61612d96565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906133f2565b609b546001600160a01b03163314610ebb5760405162461bcd60e51b815260040161091b90615519565b60008160020b1215610edf5760405162461bcd60e51b815260040161091b9061559d565b60a4805462ffffff60e01b1916600160e01b62ffffff600285900b16021790556040517f957dddabc1ac2b52bf67ebbe53150c1b46f57ec0e1dc487632d5bcc3a36a2d829061099890839061539b565b60a554600160b01b900460020b81565b609b546001600160a01b03163314610f695760405162461bcd60e51b815260040161091b90615519565b609e8190556040517f49e8da6bc2b1ffc75cb81c88d1a8e64d5b1224c626dc9be8787d6ff982b46a3990610998908390615392565b60a25460a0546099546040516370a0823160e01b8152600093611037939092611031926001600160a01b03909116906370a0823190610fe19030906004016152aa565b60206040518083038186803b158015610ff957600080fd5b505afa15801561100d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103191906151d7565b9061344c565b905090565b609b546001600160a01b031681565b609c546001600160a01b031633146110755760405162461bcd60e51b815260040161091b906154b9565b609b80546001600160a01b031916339081179091556040517f5c18ab5c697b63d102fc7e14c77bfaef0f1013206eca139920fd389277814e09916110b8916152aa565b60405180910390a1565b60a554600160801b900460020b81565b60a55460408051600280825260608201835260009363ffffffff169284929190602083019080368337019050509050818160008151811061110f57fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061113857fe5b63ffffffff9092166020928302919091019091015260975460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd9061117e90859060040161533d565b60006040518083038186803b15801561119657600080fd5b505afa1580156111aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111d29190810190614cee565b5090508263ffffffff16816000815181106111e957fe5b6020026020010151826001815181106111fe57fe5b60200260200101510360060b8161121157fe5b05935050505090565b609d546001600160a01b031681565b60a25481565b60a154609f546098546040516370a0823160e01b8152600093611037939092611031926001600160a01b03909116906370a0823190610fe19030906004016152aa565b60a554600160381b900460020b81565b60a454600160681b900462ffffff1681565b6001600160a01b0381166000908152603360205260409020545b919050565b60a35460a4546112ce90829063ffffffff908116906133f216565b4210156112ed5760405162461bcd60e51b815260040161091b906154e1565b60975460408051633850c7bd60e01b815290516000926001600160a01b031691633850c7bd9160048083019260e0929190829003018186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136a91906150ed565b5050505050915050600060a560169054906101000a900460020b60020b8260020b136113a55760a554600160b01b900460020b8290036113b5565b60a554600160b01b900460020b82035b90508215806113d7575060a454600160b01b9004600290810b810b9082900b12155b6113f35760405162461bcd60e51b815260040161091b90615442565b60006113fd6110d2565b905060008160020b8460020b136114165783820361141a565b8184035b905060a4601c9054906101000a900460020b60020b8160020b13156114515760405162461bcd60e51b815260040161091b90615702565b60a454600090600160981b8104600290810b810b600160801b909204810b900b136114885760a454600160981b900460020b611496565b60a454600160801b900460020b5b905060a460199054906101000a900460020b81620d89e719010160020b8560020b121580156114e0575060a454600160c81b9004600290810b620d89e883900303810b9086900b13155b6114fc5760405162461bcd60e51b815260040161091b906157a5565b505050505050565b6002606554141561155c576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026065556115696112b3565b609d546001600160a01b0316156115b957609b546001600160a01b031633148061159d5750609d546001600160a01b031633145b6115b95760405162461bcd60e51b815260040161091b906156d7565b60a554600160201b8104600290810b91600160381b9004900b60006115de83836134a9565b505060a55492935060009261160b9250600160501b8104600290810b9250600160681b909104900b6134a9565b505060a5549293506000926116389250600160801b8104600290810b9250600160981b909104900b6134a9565b505050509050611649858585613552565b505060a5546116719250600160501b8104600290810b9250600160681b909104900b84613552565b505060a5546116999250600160801b8104600290810b9250600160981b909104900b83613552565b505060975460408051633850c7bd60e01b81529051600097506001600160a01b039092169550633850c7bd94506004808201945060e0935090829003018186803b1580156116e657600080fd5b505afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e91906150ed565b50505050509150506000611731826137db565b60a454909150600160c81b8104600290810b830191600160801b8104820b8085039290840191600160981b9004900b80850390859085908101600061177461122f565b90506000611780610f9e565b90507f210f60adf1db7a02e9db9a49ec7c2eb2060c516cbcfd01a0c05288144738ee5d8b83836117ae6109c2565b6040516117be94939291906153cf565b60405180910390a160006117d48e8e858561384e565b60a4549091506000906118159061181090620f42409061180a906001600160801b03871690600160681b900462ffffff16613906565b9061395f565b6139c6565b90506118228f8f836139dd565b505061182c61122f565b9150611836610f9e565b905060006118468989858561384e565b90506118538989836139dd565b5060a5805460028a810b62ffffff908116600160501b0262ffffff60501b19928c900b909116600160681b0262ffffff60681b19909316929092171617905561189a61122f565b91506118a4610f9e565b905060006118b48787858561384e565b905060006118c48686868661384e565b9050806001600160801b0316826001600160801b0316111561192e576118eb8888846139dd565b60a5805460028a810b62ffffff908116600160801b0262ffffff60801b19928c900b909116600160981b0262ffffff60981b199093169290921716179055611978565b6119398686836139dd565b60a58054600288810b62ffffff908116600160801b0262ffffff60801b19928a900b909116600160981b0262ffffff60981b1990931692909217161790555b4260a35560a5805460028f900b62ffffff16600160b01b0262ffffff60b01b19909116179055609a54604080516358710f4560e11b815290516001600160a01b039092169163b0e21e8a91600480820192602092909190829003018186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b91906151a3565b60a4805469ffffff000000000000001966ffffff0000000019909116600160201b62ffffff9485160217908116600160501b909104909216600160381b029190911790555050600160655550505050505050505050505050565b609b546001600160a01b03163314611a9f5760405162461bcd60e51b815260040161091b90615519565b620f42408162ffffff161115611ac75760405162461bcd60e51b815260040161091b9061561d565b60a4805462ffffff60681b1916600160681b62ffffff8416021790556040517f4bc6c62e4a5f6773e54d33316555e789b37ac3b4758897c87c705c5d55fdd88190610998908390615820565b60a454600160b01b900460020b81565b60a554600160681b900460020b81565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108aa5780601f1061087f576101008083540402835291602001916108aa565b60a454600160381b900462ffffff1681565b60a05481565b609c546001600160a01b031681565b60006108c8611bc8612d96565b84610b8685604051806060016040528060258152602001615ae66025913960346000611bf2612d96565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613035565b609b546001600160a01b03163314611c4d5760405162461bcd60e51b815260040161091b90615519565b60a454611c65908290600160c81b900460020b613a22565b60a4805462ffffff60801b1916600160801b62ffffff600285900b16021790556040517ff1759909677b9c42577caba6b12efd5bcf3a398d02a2c1c97d23bbd312b561a79061099890839061539b565b60a454600160801b900460020b81565b60006108c8611cd2612d96565b8484612ed8565b6000806000806000611ceb87876134a9565b9450945050509250611cfe878785613aa0565b60a4549196509450600090611d319062ffffff600160381b820481169161103191620f424091600160201b90041661344c565b9050611d57611d50620f424061180a6001600160801b03871685613906565b87906133f2565b9550611d7d611d76620f424061180a6001600160801b03861685613906565b86906133f2565b9450505050509250929050565b609b546001600160a01b03163314611db45760405162461bcd60e51b815260040161091b90615519565b60975460405163a34123a760e01b81526001600160a01b039091169063a34123a790611de8908690869086906004016153a9565b6040805180830381600087803b158015611e0157600080fd5b505af1158015611e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3991906151ef565b50506097546040516309e3d67b60e31b81526001600160a01b0390911690634f1eb3d890611e7a903090879087906001600160801b03908190600401615300565b6040805180830381600087803b158015611e9357600080fd5b505af1158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb919061505e565b5050505050565b609b546001600160a01b03163314611efc5760405162461bcd60e51b815260040161091b90615519565b60a454611f14908290600160c81b900460020b613a22565b60a4805462ffffff60981b1916600160981b62ffffff600285900b16021790556040517fc797ac22933a04255304effee6a7d3c3e4bbfaa0b2897c52c61a8b1fb027b9f29061099890839061539b565b60a454600160201b900462ffffff1681565b609b546001600160a01b03163314611fa05760405162461bcd60e51b815260040161091b90615519565b60a4805463ffffffff191663ffffffff83161790556040517fa55d4ed589bc280e365d3ff1dc7fe4f59dff2d75e22716e29d6a9158fe0598469061099890839061587c565b6103e881565b600054610100900460ff16806120045750612004613b5c565b80612012575060005460ff16155b61204d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159db602e913960400191505060405180910390fd5b600054610100900460ff16158015612078576000805460ff1961ff0019909116610100171660011790555b61208c836101800151846101a00151613b6d565b612094613c22565b8251609780546001600160a01b0319166001600160a01b03928316179081905560408051630dfe168160e01b815290519190921691630dfe1681916004808301926020929190829003018186803b1580156120ee57600080fd5b505afa158015612102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121269190614c2f565b609880546001600160a01b0319166001600160a01b039283161790556097546040805163d21220a760e01b81529051919092169163d21220a7916004808301926020929190829003018186803b15801561217f57600080fd5b505afa158015612193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b79190614c2f565b609980546001600160a01b0319166001600160a01b03928316179055609754604080516334324e9f60e21b81529051600093929092169163d0c93a7c91600480820192602092909190829003018186803b15801561221457600080fd5b505afa158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c9190614e13565b90508060a460196101000a81548162ffffff021916908360020b62ffffff1602179055508360200151609b60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508360600151609d60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550836040015160a4600a6101000a81548162ffffff021916908362ffffff1602179055508360800151609e819055508360a0015160a460106101000a81548162ffffff021916908360020b62ffffff1602179055508360c0015160a460136101000a81548162ffffff021916908360020b62ffffff1602179055508360e0015160a4600d6101000a81548162ffffff021916908362ffffff16021790555083610100015160a460006101000a81548163ffffffff021916908363ffffffff16021790555083610120015160a460166101000a81548162ffffff021916908360020b62ffffff16021790555083610140015160a4601c6101000a81548162ffffff021916908360020b62ffffff16021790555083610160015160a560006101000a81548163ffffffff021916908363ffffffff16021790555082609a60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550808160020b620d89e71960020b8161243857fe5b050260a560046101000a81548162ffffff021916908360020b62ffffff160217905550808160020b620d89e71960000360020b8161247257fe5b050260a560076101000a81548162ffffff021916908360020b62ffffff1602179055506124a38460a0015182613a22565b6124b18460c0015182613a22565b620f42408460e0015162ffffff1611156124dd5760405162461bcd60e51b815260040161091b9061561d565b600084610120015160020b12156125065760405162461bcd60e51b815260040161091b9061553a565b600084610140015160020b121561252f5760405162461bcd60e51b815260040161091b9061559d565b600084610160015163ffffffff161161255a5760405162461bcd60e51b815260040161091b9061545e565b62030d40846040015162ffffff1611156125865760405162461bcd60e51b815260040161091b906157e9565b508015612599576000805461ff00191690555b505050565b609b546001600160a01b031633146125c85760405162461bcd60e51b815260040161091b90615519565b60008163ffffffff16116125ee5760405162461bcd60e51b815260040161091b9061545e565b60a5805463ffffffff191663ffffffff83161790556040517f2402faf0100aca3dc010189fd1fb0e310ab05da61ce9a65457e0fe7018e920d99061099890839061587c565b609a546001600160a01b031681565b60a55460009081908190819061266d90600160201b8104600290810b91600160381b9004900b611cd9565b60a5549193509150600090819061269990600160501b8104600290810b91600160681b9004900b611cd9565b60a554919350915060009081906126c590600160801b8104600290810b91600160981b9004900b611cd9565b915091506126e3826126dd866126dd8a6126dd61122f565b906133f2565b97506126f9816126dd856126dd896126dd610f9e565b96505050505050509091565b60a454600160c81b900460020b81565b609b546001600160a01b0316331461273f5760405162461bcd60e51b815260040161091b90615519565b609c80546001600160a01b0319166001600160a01b0383161790556040517f4d3334a0a69f5f1c54636cf743914f0b34fb2e7849b55ee7c1faddd0e06b4dfd906109989083906152aa565b6099546001600160a01b031681565b600080600260655414156127f4576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002606555856128165760405162461bcd60e51b815260040161091b90615742565b6001600160a01b0383161580159061283757506001600160a01b0383163014155b6128535760405162461bcd60e51b815260040161091b906154fd565b600061285d6109c2565b90506128693388613ccc565b61287f8161180a8961287961122f565b90613906565b92506128918161180a89612879610f9e565b60a55490925060009081906128bd90600160201b8104600290810b91600160381b9004900b8b86613dc8565b60a554919350915060009081906128eb90600160501b8104600290810b91600160681b9004900b8d88613dc8565b60a5549193509150600090819061291990600160801b8104600290810b91600160981b9004900b8f8a613dc8565b909250905061292e826126dd86818d8b6133f2565b9850612940816126dd85818c8a6133f2565b97508b8910156129625760405162461bcd60e51b815260040161091b90615495565b8a8810156129825760405162461bcd60e51b815260040161091b90615781565b881561299f5760985461299f906001600160a01b03168b8b612e86565b87156129bc576099546129bc906001600160a01b03168b8a612e86565b896001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8f8c8c604051612a039392919061583e565b60405180910390a350505050505050600160658190555094509492505050565b6097546001600160a01b03163314612a3a57600080fd5b8315612a5757609854612a57906001600160a01b03163386612e86565b8215612a7457609954612a74906001600160a01b03163385612e86565b50505050565b609b546001600160a01b03163314612aa45760405162461bcd60e51b815260040161091b90615519565b6098546001600160a01b03848116911614801590612ad057506099546001600160a01b03848116911614155b612aec5760405162461bcd60e51b815260040161091b906156b8565b6125996001600160a01b0384168284612e86565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60a454600160501b900462ffffff1681565b60a454600160e01b900460020b81565b609f5481565b60a554600160201b900460020b81565b60a15481565b60a45463ffffffff1681565b609b546001600160a01b03163314612b9f5760405162461bcd60e51b815260040161091b90615519565b60008160020b1215612bc35760405162461bcd60e51b815260040161091b9061553a565b60a4805462ffffff60b01b1916600160b01b62ffffff600285900b16021790556040517f52a3cbe96b59de1055b9b043e8906557387b821f26af47beea677164a7f26b629061099890839061539b565b609b546001600160a01b03163314612c3d5760405162461bcd60e51b815260040161091b90615519565b609d80546001600160a01b0319166001600160a01b0383161790556040517f02d71f3b54d658df30617ce7b33fa5f9835dd21a1da2a6dce6368dc9e5a40a97906109989083906152aa565b60a554600160501b900460020b81565b6097546001600160a01b03163314612caf57600080fd5b6000841315612ccf57609854612ccf906001600160a01b03163386612e86565b6000831315612a7457609954612a74906001600160a01b03163385612e86565b609b546001600160a01b03163314612d195760405162461bcd60e51b815260040161091b90615519565b60a1805460a28054600093849055929055908115612d4857609854612d48906001600160a01b03168484612e86565b8015612d6557609954612d65906001600160a01b03168483612e86565b7f17f6807ba08fcbc6bc82aff717379b30802e04cff0756017bf22b2a490d0ab658282604051610b01929190615830565b3390565b6001600160a01b038316612ddf5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a986024913960400191505060405180910390fd5b6001600160a01b038216612e245760405162461bcd60e51b815260040180806020018281038252602281526020018061596d6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612599908490613e6e565b6001600160a01b038316612f1d5760405162461bcd60e51b8152600401808060200182810382526025815260200180615a736025913960400191505060405180910390fd5b6001600160a01b038216612f625760405162461bcd60e51b81526004018080602001828103825260238152602001806159286023913960400191505060405180910390fd5b612f6d838383612599565b612faa8160405180606001604052806026815260200161598f602691396001600160a01b0386166000908152603360205260409020549190613035565b6001600160a01b038085166000908152603360205260408082209390935590841681522054612fd990826133f2565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156130c45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613089578181015183820152602001613071565b50505050905090810190601f1680156130b65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006130d883836134a9565b5050505090506000816001600160801b031611156125995760975460405163a34123a760e01b81526001600160a01b039091169063a34123a79061312590869086906000906004016153a9565b6040805180830381600087803b15801561313e57600080fd5b505af1158015613152573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb91906151ef565b6000806000806131846109c2565b9050600080613191612642565b9150915082600014806131a45750600082115b806131af5750600081115b6131b557fe5b826131e1578794508693506131da6103e88587116131d35785611031565b869061344c565b955061329c565b816131f7578693506131da8161180a8686613906565b8061320d578794506131da8261180a8786613906565b60006132198983613906565b905060006132278985613906565b90506000818311613238578261323a565b815b90506000811161325c5760405162461bcd60e51b815260040161091b90615762565b61326f60016126dd8661180a858461344c565b975061328460016126dd8761180a858461344c565b96506132968461180a8781858b613906565b98505050505b5050509250925092565b6001600160a01b038216613301576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61330d60008383612599565b60355461331a90826133f2565b6035556001600160a01b03821660009081526033602052604090205461334090826133f2565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612a74908590613e6e565b600082820183811015610b8f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000828211156134a3576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806000806134bd308989613f1f565b60975460405163514ea4bf60e01b81529192506001600160a01b03169063514ea4bf906134ee908490600401615392565b60a06040518083038186803b15801561350657600080fd5b505afa15801561351a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353e919061508c565b939c929b5090995097509095509350505050565b60008080806001600160801b038516156135f15760975460405163a34123a760e01b81526001600160a01b039091169063a34123a79061359a908a908a908a906004016153a9565b6040805180830381600087803b1580156135b357600080fd5b505af11580156135c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135eb91906151ef565b90945092505b6097546040516309e3d67b60e31b815260009182916001600160a01b0390911690634f1eb3d8906136359030908d908d906001600160801b03908190600401615300565b6040805180830381600087803b15801561364e57600080fd5b505af1158015613662573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613686919061505e565b6001600160801b0391821693501690506136a0828761344c565b93506136ac818661344c565b60a454909350600160201b900462ffffff1660006136d1620f424061180a8885613906565b905060006136e6620f424061180a8886613906565b609f549091506136f690836133f2565b609f5560a05461370690826133f2565b60a05560a454600160381b900462ffffff16600080821561376957613732620f424061180a8c86613906565b9150613745620f424061180a8b86613906565b60a15490915061375590836133f2565b60a15560a25461376590826133f2565b60a2555b613777826110318c8861344c565b9950613787816110318b8761344c565b98507f3d6c49c42d0f03a60a09b6137b84abbd7a0bf738324602cb48343f830e3db4708a8a878786866040516137c296959493929190615854565b60405180910390a1505050505050505093509350935093565b60008060a460199054906101000a900460020b60020b8360020b816137fc57fe5b05905060008360020b128015613830575060a454600160c81b9004600290810b810b9084900b8161382957fe5b0760020b15155b1561383a57600019015b60a454600160c81b900460020b0292915050565b600080609760009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561389f57600080fd5b505afa1580156138b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d791906150ed565b50505050505090506138fc816138ec88613f75565b6138f588613f75565b87876142a6565b9695505050505050565b600082613915575060006108cc565b8282028284828161392257fe5b0414610b8f5760405162461bcd60e51b8152600401808060200182810382526021815260200180615a096021913960400191505060405180910390fd5b60008082116139b5576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816139be57fe5b049392505050565b60006001600160801b038211156139d957fe5b5090565b6001600160801b0381161561259957609754604051633c8a7d8d60e01b81526001600160a01b0390911690633c8a7d8d906131259030908790879087906004016152be565b60008260020b13613a455760405162461bcd60e51b815260040161091b90615654565b620d89e8600283900b1315613a6c5760405162461bcd60e51b815260040161091b90615571565b8060020b8260020b81613a7b57fe5b0760020b15613a9c5760405162461bcd60e51b815260040161091b906155d4565b5050565b6000806000609760009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613af357600080fd5b505afa158015613b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2b91906150ed565b5050505050509050613b4f81613b4088613f75565b613b4988613f75565b8761436a565b9250925050935093915050565b6000613b6730614406565b15905090565b600054610100900460ff1680613b865750613b86613b5c565b80613b94575060005460ff16155b613bcf5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159db602e913960400191505060405180910390fd5b600054610100900460ff16158015613bfa576000805460ff1961ff0019909116610100171660011790555b613c0261440c565b613c0c83836144ac565b8015612599576000805461ff0019169055505050565b600054610100900460ff1680613c3b5750613c3b613b5c565b80613c49575060005460ff16155b613c845760405162461bcd60e51b815260040180806020018281038252602e8152602001806159db602e913960400191505060405180910390fd5b600054610100900460ff16158015613caf576000805460ff1961ff0019909116610100171660011790555b613cb7614584565b8015613cc9576000805461ff00191690555b50565b6001600160a01b038216613d115760405162461bcd60e51b8152600401808060200182810382526021815260200180615a526021913960400191505060405180910390fd5b613d1d82600083612599565b613d5a8160405180606001604052806022815260200161594b602291396001600160a01b0385166000908152603360205260409020549190613035565b6001600160a01b038316600090815260336020526040902055603554613d80908261344c565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000806000613dd787876134a9565b5050505090506000613dff8561180a88856001600160801b031661390690919063ffffffff16565b90508015613e6357600080600080613e208c8c613e1b886139c6565b613552565b92965090945092509050613e42613e3b8a61180a858e613906565b85906133f2565b9750613e5c613e558a61180a848e613906565b84906133f2565b9650505050505b505094509492505050565b6000613ec3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661462a9092919063ffffffff16565b80519091501561259957808060200190516020811015613ee257600080fd5b50516125995760405162461bcd60e51b815260040180806020018281038252602a815260200180615abc602a913960400191505060405180910390fd5b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a9093019052815191012090565b60008060008360020b12613f8c578260020b613f94565b8260020b6000035b9050620d89e8811115613fd2576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216613fe657600160801b613ff8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561402c576ffff97272373d413259a46990580e213a0260801c5b600482161561404b576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561406a576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615614089576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156140a8576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156140c7576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156140e6576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614106576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614126576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614146576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614166576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614186576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156141a6576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156141c6576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156141e6576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614207576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614227576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614246576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614263576b048a170391f7dc42444e8fa20260801c5b60008460020b131561427e57806000198161427a57fe5b0490505b600160201b810615614291576001614294565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b031611156142c6579293925b846001600160a01b0316866001600160a01b0316116142f1576142ea858585614641565b9050614361565b836001600160a01b0316866001600160a01b03161015614353576000614318878686614641565b905060006143278789866146a4565b9050806001600160801b0316826001600160801b031610614348578061434a565b815b92505050614361565b61435e8585846146a4565b90505b95945050505050565b600080836001600160a01b0316856001600160a01b0316111561438b579293925b846001600160a01b0316866001600160a01b0316116143b6576143af8585856146e1565b91506143fd565b836001600160a01b0316866001600160a01b031610156143ef576143db8685856146e1565b91506143e885878561474a565b90506143fd565b6143fa85858561474a565b90505b94509492505050565b3b151590565b600054610100900460ff16806144255750614425613b5c565b80614433575060005460ff16155b61446e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159db602e913960400191505060405180910390fd5b600054610100900460ff16158015613cb7576000805460ff1961ff0019909116610100171660011790558015613cc9576000805461ff001916905550565b600054610100900460ff16806144c557506144c5613b5c565b806144d3575060005460ff16155b61450e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159db602e913960400191505060405180910390fd5b600054610100900460ff16158015614539576000805460ff1961ff0019909116610100171660011790555b825161454c906036906020860190614a13565b508151614560906037906020850190614a13565b506038805460ff191660121790558015612599576000805461ff0019169055505050565b600054610100900460ff168061459d575061459d613b5c565b806145ab575060005460ff16155b6145e65760405162461bcd60e51b815260040180806020018281038252602e8152602001806159db602e913960400191505060405180910390fd5b600054610100900460ff16158015614611576000805460ff1961ff0019909116610100171660011790555b60016065558015613cc9576000805461ff001916905550565b6060614639848460008561478d565b949350505050565b6000826001600160a01b0316846001600160a01b03161115614661579192915b6000614684856001600160a01b0316856001600160a01b0316600160601b6148e8565b905061436161469f84838888036001600160a01b03166148e8565b614997565b6000826001600160a01b0316846001600160a01b031611156146c4579192915b61463961469f83600160601b8787036001600160a01b03166148e8565b6000826001600160a01b0316846001600160a01b03161115614701579192915b836001600160a01b031661473a606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b03166148e8565b8161474157fe5b04949350505050565b6000826001600160a01b0316846001600160a01b0316111561476a579192915b614639826001600160801b03168585036001600160a01b0316600160601b6148e8565b6060824710156147ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806159b56026913960400191505060405180910390fd5b6147d785614406565b614828576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106148665780518252601f199092019160209182019101614847565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146148c8576040519150601f19603f3d011682016040523d82523d6000602084013e6148cd565b606091505b50915091506148dd8282866149ad565b979650505050505050565b600080806000198587098686029250828110908390030390508061491e576000841161491357600080fd5b508290049050610b8f565b80841161492a57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b03811681146112ae57600080fd5b606083156149bc575081610b8f565b8251156149cc5782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315613089578181015183820152602001613071565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614a495760008555614a8f565b82601f10614a6257805160ff1916838001178555614a8f565b82800160010185558215614a8f579182015b82811115614a8f578251825591602001919060010190614a74565b506139d99291505b808211156139d95760008155600101614a97565b80356112ae816158dd565b600082601f830112614ac6578081fd5b81516020614adb614ad6836158bf565b61589b565b8281528181019085830183850287018401881015614af7578586fd5b855b85811015614b1e578151614b0c816158dd565b84529284019290840190600101614af9565b5090979650505050505050565b60008083601f840112614b3c578182fd5b50813567ffffffffffffffff811115614b53578182fd5b602083019150836020828501011115614b6b57600080fd5b9250929050565b80356112ae816158f2565b600082601f830112614b8d578081fd5b813567ffffffffffffffff811115614ba157fe5b614bb4601f8201601f191660200161589b565b818152846020838601011115614bc8578283fd5b816020850160208301379081016020019190915292915050565b805161ffff811681146112ae57600080fd5b80356112ae81615916565b803563ffffffff811681146112ae57600080fd5b600060208284031215614c24578081fd5b8135610b8f816158dd565b600060208284031215614c40578081fd5b8151610b8f816158dd565b60008060408385031215614c5d578081fd5b8235614c68816158dd565b91506020830135614c78816158dd565b809150509250929050565b600080600060608486031215614c97578081fd5b8335614ca2816158dd565b92506020840135614cb2816158dd565b929592945050506040919091013590565b60008060408385031215614cd5578182fd5b8235614ce0816158dd565b946020939093013593505050565b60008060408385031215614d00578182fd5b825167ffffffffffffffff80821115614d17578384fd5b818501915085601f830112614d2a578384fd5b81516020614d3a614ad6836158bf565b82815281810190858301838502870184018b1015614d56578889fd5b8896505b84871015614d865780518060060b8114614d7257898afd5b835260019690960195918301918301614d5a565b5091880151919650909350505080821115614d9f578283fd5b50614dac85828601614ab6565b9150509250929050565b600080600060608486031215614dca578081fd5b8335614dd5816158dd565b9250602084013591506040840135614dec816158dd565b809150509250925092565b600060208284031215614e08578081fd5b8135610b8f816158f2565b600060208284031215614e24578081fd5b8151610b8f816158f2565b60008060408385031215614e41578182fd5b8235614e4c816158f2565b91506020830135614c78816158f2565b600080600060608486031215614e70578081fd5b8335614e7b816158f2565b92506020840135614e8b816158f2565b91506040840135614dec81615901565b60008060008060608587031215614eb0578182fd5b8435935060208501359250604085013567ffffffffffffffff811115614ed4578283fd5b614ee087828801614b2b565b95989497509550505050565b60008060408385031215614efe578182fd5b823567ffffffffffffffff80821115614f15578384fd5b81850191506101c0808388031215614f2b578485fd5b614f348161589b565b9050614f3f83614aab565b8152614f4d60208401614aab565b6020820152614f5e60408401614bf4565b6040820152614f6f60608401614aab565b606082015260808301356080820152614f8a60a08401614b72565b60a0820152614f9b60c08401614b72565b60c0820152614fac60e08401614bf4565b60e0820152610100614fbf818501614bff565b90820152610120614fd1848201614b72565b90820152610140614fe3848201614b72565b90820152610160614ff5848201614bff565b90820152610180838101358381111561500c578687fd5b61501889828701614b7d565b8284015250506101a08084013583811115615031578687fd5b61503d89828701614b7d565b82840152505080945050505061505560208401614aab565b90509250929050565b60008060408385031215615070578182fd5b825161507b81615901565b6020840151909250614c7881615901565b600080600080600060a086880312156150a3578283fd5b85516150ae81615901565b80955050602086015193506040860151925060608601516150ce81615901565b60808701519092506150df81615901565b809150509295509295909350565b600080600080600080600060e0888a031215615107578485fd5b8751615112816158dd565b6020890151909750615123816158f2565b955061513160408901614be2565b945061513f60608901614be2565b935061514d60808901614be2565b925060a088015160ff81168114615162578283fd5b60c08901519092508015158114615177578182fd5b8091505092959891949750929550565b600060208284031215615198578081fd5b8135610b8f81615916565b6000602082840312156151b4578081fd5b8151610b8f81615916565b6000602082840312156151d0578081fd5b5035919050565b6000602082840312156151e8578081fd5b5051919050565b60008060408385031215615201578182fd5b505080516020909101519092909150565b60008060008060808587031215615227578182fd5b8435935060208501359250604085013591506060850135615247816158dd565b939692955090935050565b600080600080600060a08688031215615269578283fd5b8535945060208601359350604086013592506060860135915060808601356150df816158dd565b6000602082840312156152a1578081fd5b610b8f82614bff565b6001600160a01b0391909116815260200190565b6001600160a01b03949094168452600292830b6020850152910b60408301526001600160801b0316606082015260a06080820181905260009082015260c00190565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252825182820181905260009190848201906040850190845b8181101561537b57835163ffffffff1683529284019291840191600101615359565b50909695505050505050565b901515815260200190565b90815260200190565b60029190910b815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60029490940b845260208401929092526040830152606082015260800190565b6000602080835283518082850152825b8181101561541b578581018301518582016040015282016153ff565b8181111561542c5783604083870101525b50601f01601f1916929092016040019392505050565b602080825260029082015261544d60f01b604082015260600190565b60208082526018908201527f747761704475726174696f6e206d757374206265203e20300000000000000000604082015260600190565b6020808252600a908201526930b6b7bab73a1826b4b760b11b604082015260600190565b6020808252600e908201526d3832b73234b733a6b0b730b3b2b960911b604082015260600190565b602080825260029082015261504560f01b604082015260600190565b602080825260029082015261746f60f01b604082015260600190565b60208082526007908201526636b0b730b3b2b960c91b604082015260600190565b60208082526018908201527f6d696e5469636b4d6f7665206d757374206265203e3d20300000000000000000604082015260600190565b6020808252601290820152710e8d0e4cae6d0ded8c840e8dede40d0d2ced60731b604082015260600190565b6020808252601d908201527f6d617854776170446576696174696f6e206d757374206265203e3d2030000000604082015260600190565b60208082526029908201527f7468726573686f6c64206d757374206265206d756c7469706c65206f66207469604082015268636b53706163696e6760b81b606082015260800190565b6020808252601e908201527f66756c6c52616e6765576569676874206d757374206265203c3d203165360000604082015260600190565b60208082526015908201527407468726573686f6c64206d757374206265203e203605c1b604082015260600190565b6020808252818101527f616d6f756e743044657369726564206f7220616d6f756e743144657369726564604082015260600190565b6020808252600590820152643a37b5b2b760d91b604082015260600190565b602080825260119082015270726562616c616e636544656c656761746560781b604082015260600190565b602080825260029082015261054560f41b604082015260600190565b6020808252600a9082015269676f7665726e616e636560b01b604082015260600190565b60208082526006908201526573686172657360d01b604082015260600190565b60208082526005908201526463726f737360d81b604082015260600190565b6020808252600a908201526930b6b7bab73a18a6b4b760b11b604082015260600190565b602080825260029082015261282160f11b604082015260600190565b6020808252600e908201526d6d6178546f74616c537570706c7960901b604082015260600190565b6020808252601c908201527f6d616e61676572466565206d757374206265203c3d2032303030303000000000604082015260600190565b62ffffff91909116815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156158b757fe5b604052919050565b600067ffffffffffffffff8211156158d357fe5b5060209081020190565b6001600160a01b0381168114613cc957600080fd5b8060020b8114613cc957600080fd5b6001600160801b0381168114613cc957600080fd5b62ffffff81168114613cc957600080fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205e1a87b91f95804f95998a63022ca313bc97982018deee297db71083c3253b9864736f6c63430007060033