[ { "inputs": [], "name": "CastingError", "type": "error" }, { "inputs": [], "name": "CollateralTokenAlreadyInitialized", "type": "error" }, { "inputs": [], "name": "DepositTooLarge", "type": "error" }, { "inputs": [], "name": "ExceedsMaximumRedemption", "type": "error" }, { "inputs": [], "name": "InvalidNotionalValue", "type": "error" }, { "inputs": [], "name": "InvalidTick", "type": "error" }, { "inputs": [], "name": "NotMarginCalled", "type": "error" }, { "inputs": [], "name": "NotOwner", "type": "error" }, { "inputs": [], "name": "NotPanopticPool", "type": "error" }, { "inputs": [], "name": "TicksNotInitializable", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "UnauthorizedDepositor", "type": "error" }, { "inputs": [], "name": "UnderOverFlow", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "int128", "name": "commissionFee", "type": "int128" }, { "internalType": "int128", "name": "ITMSpreadFee", "type": "int128" }, { "internalType": "int128", "name": "sellCollateralRatio", "type": "int128" }, { "internalType": "int128", "name": "buyCollateralRatio", "type": "int128" }, { "internalType": "int128", "name": "targetPoolUtilization", "type": "int128" }, { "internalType": "int128", "name": "saturatedPoolUtilization", "type": "int128" }, { "internalType": "int128", "name": "exerciseCost", "type": "int128" } ], "indexed": false, "internalType": "struct CollateralTracker.Parameters", "name": "newParameters", "type": "tuple" } ], "name": "ParametersUpdated", "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "allowance", "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": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "assetTokenAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[2][]", "name": "positionBalanceArray", "type": "uint256[2][]" }, { "internalType": "uint256", "name": "otherTokenData", "type": "uint256" }, { "internalType": "int24", "name": "twapTick", "type": "int24" }, { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" }, { "internalType": "int128", "name": "premium", "type": "int128" } ], "name": "computeBonus", "outputs": [ { "internalType": "int256", "name": "bonusAmounts", "type": "int256" }, { "internalType": "uint256", "name": "tokenData", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" }, { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "optionOwner", "type": "address" }, { "internalType": "int128", "name": "longAmount", "type": "int128" }, { "internalType": "int128", "name": "shortAmount", "type": "int128" }, { "internalType": "int128", "name": "swappedAmount", "type": "int128" }, { "internalType": "int128", "name": "currentPositionPremium", "type": "int128" } ], "name": "exercise", "outputs": [ { "internalType": "int128", "name": "realizedPremium", "type": "int128" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "currentTick", "type": "int24" }, { "internalType": "int24", "name": "medianTick", "type": "int24" }, { "internalType": "uint256", "name": "positionId", "type": "uint256" }, { "internalType": "uint128", "name": "positionBalance", "type": "uint128" }, { "internalType": "int256", "name": "longAmounts", "type": "int256" } ], "name": "exerciseCost", "outputs": [ { "internalType": "int256", "name": "exerciseFees", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "int24", "name": "currentTick", "type": "int24" }, { "internalType": "uint256[2][]", "name": "positionBalanceArray", "type": "uint256[2][]" }, { "internalType": "int128", "name": "premiumAllPositions", "type": "int128" } ], "name": "getAccountMarginDetails", "outputs": [ { "internalType": "uint256", "name": "tokenData", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPoolData", "outputs": [ { "internalType": "uint256", "name": "poolAssets", "type": "uint256" }, { "internalType": "uint256", "name": "insideAMM", "type": "uint256" }, { "internalType": "int128", "name": "currentPoolUtilization", "type": "int128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "maxAssets", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "maxAssets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "name", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "refunder", "type": "address" }, { "internalType": "address", "name": "refundee", "type": "address" }, { "internalType": "int256", "name": "assets", "type": "int256" } ], "name": "refund", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" }, { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "revoke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "underlyingToken", "type": "address" }, { "internalType": "contract IUniswapV3Pool", "name": "uniswapPool", "type": "address" }, { "internalType": "contract PanopticPool", "name": "panopticPool", "type": "address" }, { "internalType": "address", "name": "_merkleDistributor", "type": "address" } ], "name": "startToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "symbol", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tickStateCallContext", "type": "uint256" }, { "internalType": "int128", "name": "longAmount", "type": "int128" }, { "internalType": "int128", "name": "shortAmount", "type": "int128" }, { "internalType": "int128", "name": "swappedAmount", "type": "int128" } ], "name": "takeCommissionAddData", "outputs": [ { "internalType": "int128", "name": "utilization", "type": "int128" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "totalManagedAssets", "type": "uint256" } ], "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "int128", "name": "commissionFee", "type": "int128" }, { "internalType": "int128", "name": "ITMSpreadFee", "type": "int128" }, { "internalType": "int128", "name": "sellCollateralRatio", "type": "int128" }, { "internalType": "int128", "name": "buyCollateralRatio", "type": "int128" }, { "internalType": "int128", "name": "targetPoolUtilization", "type": "int128" }, { "internalType": "int128", "name": "saturatedPoolUtilization", "type": "int128" }, { "internalType": "int128", "name": "exerciseCost", "type": "int128" } ], "internalType": "struct CollateralTracker.Parameters", "name": "newParameters", "type": "tuple" } ], "name": "updateParameters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615429806100206000396000f3fe60806040526004361061026a5760003560e01c806370a0823111610153578063c26f3acf116100cb578063d905777e1161007f578063ef8b30f711610064578063ef8b30f714610741578063fb29238b14610761578063fc380c221461079457600080fd5b8063d905777e146106e9578063dd62ed3e1461070957600080fd5b8063c6e6f592116100b0578063c6e6f59214610689578063cd806c8b146106a9578063ce96cb77146106c957600080fd5b8063c26f3acf14610649578063c63d75b61461066957600080fd5b8063a9059cbb11610122578063b3d7f6b911610107578063b3d7f6b9146105e9578063b460af9414610609578063ba0876521461062957600080fd5b8063a9059cbb146105ae578063ac9650d8146105c957600080fd5b806370a082311461052c57806394bf804d1461055957806394fe14e11461057957806395d89b411461059957600080fd5b806338d52e0f116101e65780635b0db21d116101b557806368e7bb461161019a57806368e7bb46146104b757806369d2f188146104ec5780636e553f651461050c57600080fd5b80635b0db21d146104775780635c58a6c51461049757600080fd5b806338d52e0f146103e05780633bec831b14610408578063402d267d1461042a5780634cdad5061461045757600080fd5b8063095ea7b31161023d57806318160ddd1161022257806318160ddd1461038857806323b872dd1461039e578063313ce567146103b957600080fd5b8063095ea7b3146103385780630a28a4771461036857600080fd5b806301e1d1141461026f57806306fdde03146102c357806307a2d13a146102e5578063083953d914610305575b600080fd5b34801561027b57600080fd5b5060095470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691811691909101165b6040519081526020015b60405180910390f35b3480156102cf57600080fd5b506102d86107b4565b6040516102ba91906149b8565b3480156102f157600080fd5b506102b06103003660046149cb565b6108e3565b34801561031157600080fd5b50610325610320366004614a0e565b61093e565b604051600f9190910b81526020016102ba565b34801561034457600080fd5b50610358610353366004614a75565b610b7e565b60405190151581526020016102ba565b34801561037457600080fd5b506102b06103833660046149cb565b610beb565b34801561039457600080fd5b506102b060005481565b3480156103aa57600080fd5b5061035861026a366004614aa1565b3480156103c557600080fd5b506103ce610c33565b60405160ff90911681526020016102ba565b3480156103ec57600080fd5b506003546040516001600160a01b0390911681526020016102ba565b34801561041457600080fd5b50610428610423366004614aa1565b610ccf565b005b34801561043657600080fd5b506102b0610445366004614ae2565b506cffffffffffffffffffffffffff90565b34801561046357600080fd5b506102b06104723660046149cb565b610d45565b34801561048357600080fd5b50610428610492366004614aff565b610d50565b3480156104a357600080fd5b506104286104b2366004614b17565b61111b565b3480156104c357600080fd5b506104d76104d2366004614cf0565b6115aa565b604080519283526020830191909152016102ba565b3480156104f857600080fd5b50610325610507366004614d7e565b611878565b34801561051857600080fd5b506102b0610527366004614dcb565b611a43565b34801561053857600080fd5b506102b0610547366004614ae2565b60016020526000908152604090205481565b34801561056557600080fd5b506102b0610574366004614dcb565b611c93565b34801561058557600080fd5b506102b0610594366004614dfb565b611ed8565b3480156105a557600080fd5b506102d8611eef565b3480156105ba57600080fd5b5061035861026a366004614a75565b6105dc6105d7366004614e63565b611f80565b6040516102ba9190614ed8565b3480156105f557600080fd5b506102b06106043660046149cb565b612093565b34801561061557600080fd5b506102b0610624366004614f58565b612118565b34801561063557600080fd5b506102b0610644366004614f58565b6122fb565b34801561065557600080fd5b50610428610664366004614aa1565b6124df565b34801561067557600080fd5b506102b0610684366004614ae2565b612541565b34801561069557600080fd5b506102b06106a43660046149cb565b612598565b3480156106b557600080fd5b506104286106c4366004614aa1565b6125e5565b3480156106d557600080fd5b506102b06106e4366004614ae2565b6126e4565b3480156106f557600080fd5b506102b0610704366004614ae2565b6127cd565b34801561071557600080fd5b506102b0610724366004614f9a565b600260209081526000928352604080842090915290825290205481565b34801561074d57600080fd5b506102b061075c3660046149cb565b612851565b34801561076d57600080fd5b50610776612888565b604080519384526020840192909252600f0b908201526060016102ba565b3480156107a057600080fd5b506102b06107af366004614fc8565b6128c6565b60048054600554600a54604080518082018252600781527f504f50542d563100000000000000000000000000000000000000000000000000602082015290517f82f4055100000000000000000000000000000000000000000000000000000000815260609573cd328bb46116b137126ee418a63be69d0c56d18b956382f405519561087b956001600160a01b0392831695928216947401000000000000000000000000000000000000000090920460ff1693630100000090910462ffffff16929101615038565b600060405180830381865af4158015610898573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108de9190810190615077565b905090565b600080548015610935576109308361092a6009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b83612ad8565b610937565b825b9392505050565b6006546000906001600160a01b03163314610985576040517f2dd1912a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009546003546006546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600f87810b6fffffffffffffffffffffffffffffffff9095169490940393610a40939087900b9285929116906370a0823190602401602060405180830381865afa158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a9190615129565b03612b8a565b91506000829003600f90810b908688038603900b8015801590610a75575086600f0b6000141580610a75575087600f0b600014155b15610a7f57908101905b6000821315610ae1576000610acf83600054610aca6009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b612b99565b9050610adb8a82612bd9565b50610b06565b6000821215610b06576000610af883600003612598565b9050610b048a82612c52565b505b50506009805496909503600f90810b7001000000000000000000000000000000006fffffffffffffffffffffffffffffffff9285900b9390930182167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090981688178390048216031602909417909255509092915050565b3360008181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bd99086815260200190565b60405180910390a35060015b92915050565b600080548015610935576109308382610aca6009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b6003546040517fc2711c7f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260009073cd328bb46116b137126ee418a63be69d0c56d18b9063c2711c7f90602401602060405180830381865af4158015610cab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de9190615142565b6006546001600160a01b03163314610d13576040517f2dd1912a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000811315610d3457610d2f8383610d2a84612598565b612ca8565b505050565b610d2f8284610d2a84600003612598565b6000610be5826108e3565b600760009054906101000a90046001600160a01b03166001600160a01b0316634273601c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc79190615165565b6001600160a01b0316336001600160a01b031614610e11576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e1e6020820182615182565b600a80546fffffffffffffffffffffffffffffffff929092166901000000000000000000027fffffffffffffff00000000000000000000000000000000ffffffffffffffffff90921691909117908190556127109062ffffff63010000009091041660020b610e936040840160208501615182565b600f0b0281610ea457610ea461519d565b600b80547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091056fffffffffffffffffffffffffffffffff16919091179055610ef66060820160408301615182565b600b80546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905560006107d0610f3e6060840160408501615182565b03905064e8d4a51000600382600f0b0a61196e02600f0b81610f6257610f6261519d565b056305f5e100600283600f0b0a611e8402600f0b81610f8357610f8361519d565b056127106130d48402600f0b056108b6010101600a60066101000a81548162ffffff021916908362ffffff16021790555050806060016020810190610fc89190615182565b600c80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905561101960a0820160808301615182565b600d80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905561106a60c0820160a08301615182565b600d80546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556110ad60e0820160c08301615182565b600c80546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556040517f8d0254a4a4f57a27fe8bb3d11dc077471e98e9042b5d08e4a133dfd762c62954906111109083906151cc565b60405180910390a150565b60035474010000000000000000000000000000000000000000900460ff1615611170576040517f8f02272600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290516000916001600160a01b03861691630dfe1681916004808201926020929091908290030181865afa158015611211573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112359190615165565b90506000846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129b9190615165565b60078054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556008805482166001600160a01b03878116919091179091556003805483168a83161790556006805490921687821617909155604080517fd0c93a7c00000000000000000000000000000000000000000000000000000000815290519293509087169163d0c93a7c916004818101926020929091908290030181865afa158015611355573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611379919061525a565b600a60006101000a81548162ffffff021916908360020b62ffffff16021790555060006064866001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190615277565b62ffffff16816114125761141261519d565b600a8054600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03988916908117909155600580549789167fffffffffffffffffffffff000000000000000000000000000000000000000000909816979097179b9097169096147401000000000000000000000000000000000000000002999099179093557fffffffffffffff00000000000000000000000000000000ffffff000000ffffff90931663010000009390920462ffffff8116939093027fffffffffffffff00000000000000000000000000000000ffffffffffffffffff1691909117690a000000000000000000177fffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff166708b6000000000000179095556fffffffffffffffffffffffffffffffff600291820290910b167107d00000000000000000000000000000000017600b55505071232800000000000000000000000000001388600d5550507ffffffffffffffffffffffffffffffc00000000000000000000000000000003e8600c55565b6000806115b988868986612d38565b90506001600160a01b0384161561186d576000806001600160a01b0386166c01000000000000000000000000846fffffffffffffffffffffffffffffffff1602816116065761160661519d565b04915061162e886fffffffffffffffffffffffffffffffff16876001600160a01b0316612e22565b8201905060006116626116418a60801c90565b6fffffffffffffffffffffffffffffffff16886001600160a01b0316612e22565b876001600160a01b03166c010000000000000000000000006116848760801c90565b6fffffffffffffffffffffffffffffffff1602816116a4576116a461519d565b0401905060006001600160a01b038816836d27100000000000000000000000006fffffffffffffffffffffffffffffffff881602816116e5576116e561519d565b04816116f3576116f361519d565b04905081831061172f576040517f2a23f1ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808b6fffffffffffffffffffffffffffffffff1661174f8d60801c90565b6fffffffffffffffffffffffffffffffff161061179b57896001600160a01b03166c0100000000000000000000000084612710038787030202816117955761179561519d565b046117ca565b896001600160a01b03166c010000000000000000000000008461271003870202816117c8576117c861519d565b045b9150866fffffffffffffffffffffffffffffffff166117e98860801c90565b6fffffffffffffffffffffffffffffffff161061181c5761181783868603028b6001600160a01b0316612e22565b611831565b6118318386028b6001600160a01b0316612e22565b9050611864612710600f83810b829005916fffffffffffffffffffffffffffffffff9186900b05168a015b9060801b0190565b97505050505050505b965096945050505050565b6006546000906001600160a01b031633146118bf576040517f2dd1912a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954600f83900b6fffffffffffffffffffffffffffffffff9091160360006118e9868686612ea8565b9050600081131561195157600061193682600054610aca6009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b905061194b6119458960301c90565b82612bd9565b5061197f565b600081121561197f57600061196882600003612598565b905061197d6119778960301c90565b82612c52565b505b600980547001000000000000000000000000000000006fffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909316831782900481168a8a03600f0b01160217905560006119e98890565b905060006119f78960181c90565b9050600a60069054906101000a900462ffffff1660020b611a1c82840360020b612f24565b1315611a2c576127119450611a37565b611a34612f3f565b94505b50505050949350505050565b6008546000906001600160a01b03163314801590611ae95750600760009054906101000a90046001600160a01b03166001600160a01b0316634273601c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad39190615165565b6001600160a01b0316336001600160a01b031614155b15611b20576040517f05b014fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6cffffffffffffffffffffffffff831115611b67576040517fc56d46d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663f34f6c1a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bb757600080fd5b505af1158015611bcb573d6000803e3d6000fd5b50505050611bd883612851565b600354600654919250611bfa916001600160a01b039182169133911686612fd1565b611c048282612c52565b600980546fffffffffffffffffffffffffffffffff8082168601167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617905560408051848152602081018390526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a392915050565b6008546000906001600160a01b03163314801590611d395750600760009054906101000a90046001600160a01b03166001600160a01b0316634273601c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d239190615165565b6001600160a01b0316336001600160a01b031614155b15611d70576040517f05b014fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663f34f6c1a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dc057600080fd5b505af1158015611dd4573d6000803e3d6000fd5b50505050611de183612093565b90506cffffffffffffffffffffffffff811115611e2a576040517fc56d46d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600654611e49916001600160a01b039081169133911684612fd1565b611e538284612c52565b600980546fffffffffffffffffffffffffffffffff8082168401167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617905560408051828152602081018590526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79101611c85565b6000611ee685858585612d38565b95945050505050565b600354604080518082018252600281527f706f000000000000000000000000000000000000000000000000000000000000602082015290517f61de447b00000000000000000000000000000000000000000000000000000000815260609273cd328bb46116b137126ee418a63be69d0c56d18b926361de447b9261087b926001600160a01b0316919060040161529c565b60608167ffffffffffffffff811115611f9b57611f9b614b73565b604051908082528060200260200182016040528015611fce57816020015b6060815260200190600190039081611fb95790505b50905060005b8281101561208c5760008030868685818110611ff257611ff26152be565b905060200281019061200491906152ed565b604051612012929190615352565b600060405180830381855af49150503d806000811461204d576040519150601f19603f3d011682016040523d82523d6000602084013e612052565b606091505b50915091508161206457805160208201fd5b80848481518110612077576120776152be565b60209081029190910101525050600101611fd4565b5092915050565b6000805480156120e5576120e0836120da6009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b83612b99565b6120e7565b825b600a5461271069010000000000000000009091046fffffffffffffffffffffffffffffffff16820204019392505050565b6000612123826126e4565b84111561215c576040517f20adf2ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663f34f6c1a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121ac57600080fd5b505af11580156121c0573d6000803e3d6000fd5b505050506121cd84610beb565b9050336001600160a01b0383161461223d576001600160a01b0382166000908152600260209081526040808320338452909152902054600019811461223b576122168282615391565b6001600160a01b03841660009081526002602090815260408083203384529091529020555b505b6122478282612bd9565b600980546fffffffffffffffffffffffffffffffff808216879003167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091161790556003546006546122a8916001600160a01b0390811691168587612fd1565b60408051858152602081018390526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db91015b60405180910390a49392505050565b600654604080517ff34f6c1a00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f34f6c1a916004808301928692919082900301818387803b15801561235957600080fd5b505af115801561236d573d6000803e3d6000fd5b5050505061237a826127cd565b8411156123b3576040517f20adf2ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03831614612421576001600160a01b0382166000908152600260209081526040808320338452909152902054600019811461241f576123fa8582615391565b6001600160a01b03841660009081526002602090815260408083203384529091529020555b505b61242a84610d45565b90506124368285612bd9565b600980546fffffffffffffffffffffffffffffffff808216849003167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600354600654612497916001600160a01b0390811691168584612fd1565b60408051828152602081018690526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db91016122ec565b6006546001600160a01b03163314612523576040517f2dd1912a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061252e82612598565b905061253b848483612ca8565b50505050565b600a54600090690100000000000000000090046fffffffffffffffffffffffffffffffff16612710908101906125836cffffffffffffffffffffffffff612598565b02816125915761259161519d565b0492915050565b6000805480156109355761093083826125e06009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b612ad8565b6006546001600160a01b03163314612629576040517f2dd1912a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061263482612598565b6001600160a01b038416600090815260016020526040902054909150808211156126d257612663848683612ca8565b6126cd85826126be868560005461267a9190615391565b886126b46009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b6125e09190615391565b6126c89190615391565b612c52565b6126dd565b6126dd848684612ca8565b5050505050565b6009546001600160a01b03821660009081526001602052604081205490916fffffffffffffffffffffffffffffffff16908290612720906108e3565b6006546040517f7f96a0640000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152929350911690637f96a064906024015b602060405180830381865afa158015612786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127aa9190615129565b156127b65760006127c5565b8082116127c357816127c5565b805b949350505050565b60095460009081906127f0906fffffffffffffffffffffffffffffffff16612598565b6001600160a01b03848116600081815260016020526040908190205460065491517f7f96a064000000000000000000000000000000000000000000000000000000008152600481019390935293945090911690637f96a06490602401612769565b600a54600090610be59061271090690100000000000000000090046fffffffffffffffffffffffffffffffff168402048303612598565b6009546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041660006128bf612f3f565b9050909192565b6000808686825b6128d688613060565b811015612a53576128e78882613115565b15612a4b5760006128fd8983603002604c011c90565b600a54909150600090600290810b6129158c8661312c565b0260020b816129265761292661519d565b059050600081830360020b8660020b121561295f578160020b868385030360020b600202816129575761295761519d565b05905061298f565b81830160020b8660020b131561298f578160020b828488030360020b6002028161298b5761298b61519d565b0590505b86811161299c578661299e565b805b965060006129ac8c86613140565b600a549091506000906129c7908e9088908f9060020b613153565b90506000806129d68a8461324e565b915091506000806129e78b8661324e565b915091508560001480156129fa57508083105b80612a0f5750856001148015612a0f57508184105b15612a4157612a3e612a378483036fffffffffffffffffffffffffffffffff8786031661185c565b8f906132cd565b9d505b5050505050505050505b6001016128cd565b50600c547001000000000000000000000000000000009004600f90810b841d900b612aca61271082612a858960801d90565b600f0b0281612a9657612a9661519d565b0561185c612710848a600f0b0281612ab057612ab061519d565b899190056fffffffffffffffffffffffffffffffff160190565b9a9950505050505050505050565b6000808060001985870985870292508281108382030391505080600003612b115760008411612b0657600080fd5b508290049050610937565b808411612b1d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60008183126109355781610937565b6000612ba6848484612ad8565b905060008280612bb857612bb861519d565b8486091115610937576000198110612bcf57600080fd5b6001019392505050565b6001600160a01b03821660009081526001602052604081208054839290612c01908490615391565b90915550506000805482900381556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60008054820181556001600160a01b038316808252600160209081526040808420805486019055518481529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612c46565b6001600160a01b03831660009081526001602052604081208054839290612cd0908490615391565b90915550506001600160a01b03808316600081815260016020526040908190208054850190555190918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612d2b9085815260200190565b60405180910390a3505050565b600080600084511115612d7657612d4f8585613375565b9050600083600f0b1215612d76576fffffffffffffffffffffffffffffffff600084900316015b6001600160a01b038616600090815260016020526040812054612d98906108e3565b9050806000600f86900b1315612dbd576fffffffffffffffffffffffffffffffff8516015b612e16612dc98461345d565b612dec612dd58461345d565b6fffffffffffffffffffffffffffffffff16870190565b9060801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b98975050505050505050565b6000808060001984860984860292508281108382030391505080600003612e4e575060601c9050610be5565b806c0100000000000000000000000011612e6757600080fd5b60006c0100000000000000000000000085870980840360601c9310909103740100000000000000000000000000000000000000000291909117949350505050565b60008383038203600f0b8015612eea576000808212612ed357600b5461271090600f0b830205612ee4565b600b5461271090600f0b8302600003055b82019250505b612710600f0b600a60099054906101000a9004600f0b86860102600f0b81612f1457612f1461519d565b05600f0b82019150509392505050565b6000808213612f3b57612f36826153a4565b610be5565b5090565b600080612f7b6009546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091011690565b905080600003612f8d57600091505090565b60095481906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104166127100281612fca57612fca61519d565b0491505090565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528481600401528381602401528281604401526020600060648360008a5af13d15601f3d11600160005114161716915050806126dd576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007afe0000000000fe0000000000fe0000000000fe000000000000000082166801000000000000000081101561309a5750600092915050565b6e0100000000000000000000000000008110156130ba5750600192915050565b740100000000000000000000000000000000000000008110156130e05750600292915050565b7a01000000000000000000000000000000000000000000000000000081101561310c5750600392915050565b50600492915050565b600060026048603084020184901c5b069392505050565b60006110006064603084020184901c613124565b600060026049603084020184901c613124565b600080806131628787866134ae565b909250905060008061317489896135e0565b613190906fffffffffffffffffffffffffffffffff89166153dc565b905061319c89896135f3565b600003613206576131ff6131f9847fffffff000000000000000000000000000000000000000000000000000000000060e888901b165b9060d01b7cffffff0000000000000000000000000000000000000000000000000000160190565b82613606565b9150613242565b61323f613239847fffffff000000000000000000000000000000000000000000000000000000000060e888901b166131d2565b82613667565b91505b611a34858585856136b0565b60008061325b8360e81c90565b60020b8460020b1361327757613270836136f8565b91506132c6565b6132818360d01c90565b60020b8460020b1261329d5761329683613770565b90506132c6565b6132af6132aa84866137ba565b6136f8565b91506132c36132be8486613809565b613770565b90505b9250929050565b6000806132da8360801d90565b600f0b6132e78560801d90565b600f0b03905080600084600f0b86600f0b03905060008190508383600f0b14158061331557508181600f0b14155b1561334c576040517fd219017400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61336a836fffffffffffffffffffffffffffffffff8316870161185c565b979650505050505050565b8051600090815b81811015613455576000848281518110613398576133986152be565b60200260200101516000600281106133b2576133b26152be565b6020020151905060006133f28684815181106133d0576133d06152be565b60200260200101516001600281106133ea576133ea6152be565b602002015190565b9050600061343087858151811061340b5761340b6152be565b6020026020010151600160028110613425576134256152be565b602002015160801c90565b9050600061344084848b85613858565b969096019550506001909201915061337c9050565b505092915050565b806fffffffffffffffffffffffffffffffff811681146134a9576040517fb668004500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600080806134bc868661312c565b905060006134cf8787603002604c011c90565b9050600085600281900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618816135075761350761519d565b05029050600086600281900b620d89e8816135245761352461519d565b0502905060006002858902810b05808503975084810196509050600288810b9088900b816135545761355461519d565b0760020b15158061357c57508760020b8660020b816135755761357561519d565b0760020b15155b8061358c57508260020b8760020b125b8061359c57508160020b8660020b135b156135d3576040517fc82825f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050935093915050565b600060806041603084020184901c613124565b600060026040603084020184901c613124565b60008061361b6136168560e81c90565b6138d6565b9050600061362c6136168660d01c90565b9050611ee661366285613651846001600160a01b0316866001600160a01b0316612e22565b8585036001600160a01b0316612ad8565b61345d565b6000806136776136168560e81c90565b905060006136886136168660d01c90565b9050611ee6613662856c010000000000000000000000008585036001600160a01b0316612ad8565b6000611ee6837fffffff000000000000000000000000000000000000000000000000000000000060e887901b166fffffffffffffffffffffffffffffffff85168801016131d2565b6000806137086136168460e81c90565b905060006137196136168560d01c90565b90506001600160a01b03821661375a6060866fffffffffffffffffffffffffffffffff16901b8484036001600160a01b0316846001600160a01b0316612ad8565b816137675761376761519d565b04949350505050565b6000806137806136168460e81c90565b905060006137916136168560d01c90565b90506127c5846fffffffffffffffffffffffffffffffff168383036001600160a01b0316612e22565b60006109377cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84168360e81b7fffffff0000000000000000000000000000000000000000000000000000000000160190565b60006109377fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff84168360d01b7cffffff0000000000000000000000000000000000000000000000000000160190565b60055460009074010000000000000000000000000000000000000000900460ff168161388387613060565b905060005b818110156138cb578261389c57600161389f565b60005b60ff166138ac8983613140565b036138c3576138be8882898989613c1f565b840193505b600101613888565b505050949350505050565b60008060008360020b126138ed578260020b6138f5565b8260020b6000035b9050620d89e8811115613934576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816001166000036139585770010000000000000000000000000000000061396a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561399e576ffff97272373d413259a46990580e213a0260801c5b60048216156139bd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156139dc576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156139fb576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613a1a576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613a39576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613a58576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613a78576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613a98576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613ab8576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613ad8576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613af8576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613b18576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613b38576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613b58576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613b79576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613b99576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613bb8576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613bd5576b048a170391f7dc42444e8fa20260801c5b60008460020b1315613bf6578060001981613bf257613bf261519d565b0490505b640100000000810615613c0a576001613c0d565b60005b60ff16602082901c0192505050919050565b600084613c2c8782613c5a565b14613c4357613c3e8686868686613c6d565b613c50565b613c508686868686613d21565b9695505050505050565b60006004604a603084020184901c613124565b600080613c7a8787613c5a565b90506000613c888888613115565b90506000613c968984613115565b90506000613ca48a8a613140565b90506000613cb28b86613140565b9050828414158015613cc357508082145b15613cef57848a1015613cef57613cdc8b8a8c88613fa9565b9550613cea8b8a8c8861416e565b860195505b8284148015613cfe5750808214155b15613d1357613d108b8b8b8b8b614205565b95505b505050505095945050505050565b600a546000908190613d3b9088908790899060020b61425e565b90506000613d498888613140565b905060008115613d6f576040856fffffffffffffffffffffffffffffffff16901c613d71565b845b90506000613d848a8a603002604c011c90565b905060008315613d9d57613d988560801c90565b613d9f565b845b90506000613dad8c8c613115565b9050613dba8282866142ef565b965080600003613f9a5760008c81613dd2828f61312c565b600a54909150600290810b8202810b059250505080840160020b8a60020b12158015613dfe5750856001145b80613e19575080840360020b8a60020b128015613e19575085155b613f9857600086600114613e5e57613e596136168c87036002027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761861436a565b613e90565b613e90613616868d036002027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761861436a565b90506000613ea08760070b61437f565b600f0b61271003905082860360020b8c60020b128015613ec05750876001145b80613edc575082860160020b8c60020b12158015613edc575087155b15613f33576001600160a01b0382166c01000000000000000000000000038102612710613f1b6fffffffffffffffffffffffffffffffff881683612e22565b81613f2857613f2861519d565b048b019a5050613f95565b6000613f41846002026138d6565b90506000613f73838584036001600160a01b03166c01000000000000000000000000856001600160a01b031601612ad8565b90506127106fffffffffffffffffffffffffffffffff88168202048c019b5050505b50505b505b50505050505095945050505050565b600a546000908190613fc39087908790879060020b61425e565b600a54909150600090613fde9088908890879060020b61425e565b905081608081811c90839081901c6000613ff88c8b613140565b905060006140068d8c6135f3565b90508181146140b6578160000361406757836fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff161061404a5783860361404e565b8584035b6fffffffffffffffffffffffffffffffff16985061415e565b826fffffffffffffffffffffffffffffffff16856fffffffffffffffffffffffffffffffff161061409a5782850361404e565b8483036fffffffffffffffffffffffffffffffff16985061415e565b6000806000846001036140e35750506fffffffffffffffffffffffffffffffff80881691508516866140ff565b50506fffffffffffffffffffffffffffffffff80871691508416875b8183106141315781816fffffffffffffffffffffffffffffffff16838503028161412b5761412b61519d565b04614158565b82816fffffffffffffffffffffffffffffffff1684840302816141565761415661519d565b045b9b505050505b5050505050505050949350505050565b60008061417a86614443565b905060006141b261418b8887613115565b600114614198578761419a565b825b86886141ab8b89603002604c011c90565b6000613d21565b905060006141e36141c38987613115565b6001146141d057886141d2565b835b86896141ab8c8b603002604c011c90565b90508082106141fb576141f68183615391565b612e16565b612e168282615391565b6000604080836fffffffffffffffffffffffffffffffff16901c60000367ffffffffffffffff166fffffffffffffffffffffffffffffffff16901b8260000367ffffffffffffffff16019150613c508686868686613d21565b6000808061426d8786866134ae565b909250905060008061427f89886135f3565b6000036142b05761429089886135e0565b880291506142a98285856142a48d8c6135f3565b614541565b90506142d1565b6142ba89886135e0565b880290506142ce8185856142a48d8c6135f3565b91505b611a34816fffffffffffffffffffffffffffffffff84168701612dec565b60008260000361432d5760006143078360070b61437f565b600f0b90506127106fffffffffffffffffffffffffffffffff8616820204915050610937565b826001036109375760006143438360070b6145fa565b600f0b90506127106fffffffffffffffffffffffffffffffff861682020495945050505050565b60008160020b8360020b136109355781610937565b600d54600b54600091600f90810b917001000000000000000000000000000000009004810b9084900b8313156143cc57600281600f0b816143c2576143c261519d565b0590508360000393505b81600f0b84600f0b12156143e1579392505050565b600d547001000000000000000000000000000000009004600f90810b906127109086900b8212156144155795945050505050565b838203600f0b848703600f0b848303600f0b02816144355761443561519d565b048301945050505050919050565b60007afe0000000000fe0000000000fe0000000000fe000000000000000082166801000000000000000081101561447c575060006144ef565b6e01000000000000000000000000000081101561449b575060016144ef565b740100000000000000000000000000000000000000008110156144c0575060026144ef565b7a0100000000000000000000000000000000000000000000000000008110156144eb575060036144ef565b5060045b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000816004036030027b01000000000001000000000001000000000001000000000000000000901c168318915050919050565b600080821561457b576145766fffffffffffffffffffffffffffffffff87166145716002878901810b5b056138d6565b6146d4565b6145a5565b6145a56fffffffffffffffffffffffffffffffff87166145a06002878901810b61456b565b614757565b90508015806145c357506fffffffffffffffffffffffffffffffff81115b15611ee6576040517f7d0a9ef300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d54600c54600f90810b91810b9060009084900b121561463257600282600f0b816146285761462861519d565b0591508260000392505b80600f0b83600f0b12156146465750919050565b612710600f84900b131561465e575061271092915050565b600d547001000000000000000000000000000000009004600f90810b9084900b8112156146a157600283600f0b816146985761469861519d565b05949350505050565b6002828203600f0b858303600f0b85600f0b02816146c1576146c161519d565b048401600f0b816146985761469861519d565b60006ffffec4b135bb7f32a81b33b5fb40724a826001600160a01b0316101561472e576147278378010000000000000000000000000000000000000000000000006002856001600160a01b03160a612ad8565b9050610be5565b614727837001000000000000000000000000000000006125e06001600160a01b038616806147ac565b60006ffffec4b135bb7f32a81b33b5fb40724a826001600160a01b0316101561479057614727836002846001600160a01b03160a61482e565b614727836147a76001600160a01b038516806147ac565b6148c0565b60008080600019848609848602925082811083820303915050806000036147d8575060401c9050610be5565b8068010000000000000000116147ed57600080fd5b60006801000000000000000085870980840360401c931090910378010000000000000000000000000000000000000000000000000291909117949350505050565b600080806000198486098486029250828110838203039150508060000361485a575060c01c9050610be5565b8078010000000000000000000000000000000000000000000000001161487f57600080fd5b6000780100000000000000000000000000000000000000000000000085870980840360c01c9310909103680100000000000000000291909117949350505050565b60008080600019848609848602925082811083820303915050806000036148ec575060801c9050610be5565b807001000000000000000000000000000000001161490957600080fd5b600070010000000000000000000000000000000085870980840360801c93109091037001000000000000000000000000000000000291909117949350505050565b60005b8381101561496557818101518382015260200161494d565b50506000910152565b6000815180845261498681602086016020860161494a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610937602083018461496e565b6000602082840312156149dd57600080fd5b5035919050565b6001600160a01b03811681146149f957600080fd5b50565b8035600f81900b81146134a957600080fd5b600080600080600060a08688031215614a2657600080fd5b8535614a31816149e4565b9450614a3f602087016149fc565b9350614a4d604087016149fc565b9250614a5b606087016149fc565b9150614a69608087016149fc565b90509295509295909350565b60008060408385031215614a8857600080fd5b8235614a93816149e4565b946020939093013593505050565b600080600060608486031215614ab657600080fd5b8335614ac1816149e4565b92506020840135614ad1816149e4565b929592945050506040919091013590565b600060208284031215614af457600080fd5b8135610937816149e4565b600060e08284031215614b1157600080fd5b50919050565b60008060008060808587031215614b2d57600080fd5b8435614b38816149e4565b93506020850135614b48816149e4565b92506040850135614b58816149e4565b91506060850135614b68816149e4565b939692955090935050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614bc557614bc5614b73565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614c1257614c12614b73565b604052919050565b6000601f8381840112614c2c57600080fd5b8235602067ffffffffffffffff821115614c4857614c48614b73565b614c56818360051b01614bcb565b82815260069290921b85018101918181019087841115614c7557600080fd5b8287015b84811015614cd5578886820112614c905760008081fd5b614c98614ba2565b80604083018b811115614cab5760008081fd5b835b81811015614cc45780358452928701928701614cad565b505084525091830191604001614c79565b50979650505050505050565b8060020b81146149f957600080fd5b60008060008060008060c08789031215614d0957600080fd5b8635614d14816149e4565b9550602087013567ffffffffffffffff811115614d3057600080fd5b614d3c89828a01614c1a565b955050604087013593506060870135614d5481614ce1565b92506080870135614d64816149e4565b9150614d7260a088016149fc565b90509295509295509295565b60008060008060808587031215614d9457600080fd5b84359350614da4602086016149fc565b9250614db2604086016149fc565b9150614dc0606086016149fc565b905092959194509250565b60008060408385031215614dde57600080fd5b823591506020830135614df0816149e4565b809150509250929050565b60008060008060808587031215614e1157600080fd5b8435614e1c816149e4565b93506020850135614e2c81614ce1565b9250604085013567ffffffffffffffff811115614e4857600080fd5b614e5487828801614c1a565b925050614dc0606086016149fc565b60008060208385031215614e7657600080fd5b823567ffffffffffffffff80821115614e8e57600080fd5b818501915085601f830112614ea257600080fd5b813581811115614eb157600080fd5b8660208260051b8501011115614ec657600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614f4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614f3985835161496e565b94509285019290850190600101614eff565b5092979650505050505050565b600080600060608486031215614f6d57600080fd5b833592506020840135614f7f816149e4565b91506040840135614f8f816149e4565b809150509250925092565b60008060408385031215614fad57600080fd5b8235614fb8816149e4565b91506020830135614df0816149e4565b600080600080600060a08688031215614fe057600080fd5b8535614feb81614ce1565b94506020860135614ffb81614ce1565b93506040860135925060608601356fffffffffffffffffffffffffffffffff8116811461502757600080fd5b949793965091946080013592915050565b60006001600160a01b038088168352808716602084015250841515604083015262ffffff8416606083015260a0608083015261336a60a083018461496e565b60006020828403121561508957600080fd5b815167ffffffffffffffff808211156150a157600080fd5b818401915084601f8301126150b557600080fd5b8151818111156150c7576150c7614b73565b6150f860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614bcb565b915080825285602082850101111561510f57600080fd5b61512081602084016020860161494a565b50949350505050565b60006020828403121561513b57600080fd5b5051919050565b60006020828403121561515457600080fd5b815160ff8116811461093757600080fd5b60006020828403121561517757600080fd5b8151610937816149e4565b60006020828403121561519457600080fd5b610937826149fc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60e081016151d9836149fc565b600f81810b84526151ec602086016149fc565b810b60208501526151ff604086016149fc565b810b6040850152615212606086016149fc565b810b6060850152615225608086016149fc565b810b608085015261523860a086016149fc565b810b60a085015261524b60c086016149fc565b810b60c0850152505092915050565b60006020828403121561526c57600080fd5b815161093781614ce1565b60006020828403121561528957600080fd5b815162ffffff8116811461093757600080fd5b6001600160a01b03831681526040602082015260006127c5604083018461496e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261532257600080fd5b83018035915067ffffffffffffffff82111561533d57600080fd5b6020019150368190038213156132c657600080fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610be557610be5615362565b60007f800000000000000000000000000000000000000000000000000000000000000082036153d5576153d5615362565b5060000390565b8082028115828204841417610be557610be561536256fea264697066735822122088df15652b53d0bdbe825be150e5d03a9efd5a26f5933e2545bf475235ccebed64736f6c63430008120033