0 txs
0 calls
constructor
constructor((address admin, address definitiveAdmin, address[] definitive, address[] client) coreAccessControlConfig, (address[] swapTokens, address[] swapOutputTokens, address[] swapHandlers) coreSwapConfig, (address feeAccount) coreFeesConfig, (address[] lpUnderlyingTokens, address lpDepositPool, address lpStaking, address lpToken, uint256 stakingPoolId) lpConfig, (address convexRewarder, bool isMetapool) strategyConfig)
functions
_swapHandlers
viewfunction _swapHandlers(address) view returns (bool)
_swapOutputTokens
viewfunction _swapOutputTokens(address) view returns (bool)
_swapTokens
viewfunction _swapTokens(address) view returns (bool)
cfg
viewfunction cfg() view returns (address convexRewarder, bool isMetapool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
FEE_ACCOUNT
viewfunction FEE_ACCOUNT() view returns (address)
getAmountStaked
viewfunction getAmountStaked() view returns (uint256)
getBalance
viewfunction getBalance(address assetAddress) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
LP_DEPOSIT_POOL
viewfunction LP_DEPOSIT_POOL() view returns (address)
LP_STAKING
viewfunction LP_STAKING() view returns (address)
LP_TOKEN
viewfunction LP_TOKEN() view returns (address)
LP_UNDERLYING_TOKENS_COUNT
viewfunction LP_UNDERLYING_TOKENS_COUNT() view returns (uint256)
LP_UNDERLYING_TOKENS
viewfunction LP_UNDERLYING_TOKENS(uint256) view returns (address)
ROLE_CLIENT
viewfunction ROLE_CLIENT() view returns (bytes32)
ROLE_DEFINITIVE_ADMIN
viewfunction ROLE_DEFINITIVE_ADMIN() view returns (bytes32)
ROLE_DEFINITIVE
viewfunction ROLE_DEFINITIVE() view returns (bytes32)
SAFE_HARBOR_MODE_ENABLED
viewfunction SAFE_HARBOR_MODE_ENABLED() view returns (bool)
STOP_GUARDIAN_ENABLED
viewfunction STOP_GUARDIAN_ENABLED() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
supportsNativeAssets
purefunction supportsNativeAssets() pure returns (bool)
unclaimedRewards
viewfunction unclaimedRewards() view returns (address[] rewardTokens, uint256[] earnedAmounts)
addLiquidity
nonpayablefunction addLiquidity(uint256[] amounts, uint256 minAmount) returns (uint256 lpTokenAmount)
claimAllRewards
nonpayablefunction claimAllRewards(uint256 feePct) returns (address[] rewardTokens, uint256[] earnedAmounts)
deposit
payablefunction deposit(uint256[] amounts, address[] erc20Tokens) payable
disableSafeHarborMode
nonpayablefunction disableSafeHarborMode()
disableStopGuardian
nonpayablefunction disableStopGuardian()
disableSwapHandlers
nonpayablefunction disableSwapHandlers(address[] swapHandlers)
disableSwapOutputTokens
nonpayablefunction disableSwapOutputTokens(address[] swapOutputTokens)
disableSwapTokens
nonpayablefunction disableSwapTokens(address[] swapTokens)
enableSafeHarborMode
nonpayablefunction enableSafeHarborMode()
enableStopGuardian
nonpayablefunction enableStopGuardian()
enableSwapHandlers
nonpayablefunction enableSwapHandlers(address[] swapHandlers)
enableSwapOutputTokens
nonpayablefunction enableSwapOutputTokens(address[] swapOutputTokens)
enableSwapTokens
nonpayablefunction enableSwapTokens(address[] swapTokens)
enter
nonpayablefunction enter(uint256[] amounts, uint256 minAmount) returns (uint256 stakedAmount)
executeOperation
payablefunction executeOperation(address target, bytes payload) payable
exit
nonpayablefunction exit(uint256 lpTokenAmount, uint256[] minAmounts) returns (uint256[] amounts)
exitOne
nonpayablefunction exitOne(uint256 lpTokenAmount, uint256 minAmount, uint8 index) returns (uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
removeLiquidity
nonpayablefunction removeLiquidity(uint256 lpTokenAmount, uint256[] minAmounts) returns (uint256[] amounts)
removeLiquidityOneCoin
nonpayablefunction removeLiquidityOneCoin(uint256 lpTokenAmount, uint256 minAmount, uint8 index) returns (uint256[] amounts)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
stake
nonpayablefunction stake(uint256 amount)
swap
nonpayablefunction swap(tuple[] payloads, address outputToken, uint256 amountOutMin, uint256 feePct) returns (uint256)
unstake
nonpayablefunction unstake(uint256 amount)
updateFeeAccount
nonpayablefunction updateFeeAccount(address _feeAccount)
withdraw
nonpayablefunction withdraw(uint256 amount, address erc20Token) returns (bool)
withdrawAll
nonpayablefunction withdrawAll(address[] tokens) returns (bool)
withdrawAllTo
nonpayablefunction withdrawAllTo(address[] tokens, address to) returns (bool)
withdrawTo
nonpayablefunction withdrawTo(uint256 amount, address erc20Token, address to) returns (bool)
events
AddLiquidity
event AddLiquidity(uint256[] amounts, uint256 lpTokenAmount)
Deposit
event Deposit(address indexed actor, address[] assetAddresses, uint256[] amounts)
Enter
event Enter(uint256[] amounts, uint256 stakedAmount)
Exit
event Exit(uint256 unstakedAmount, uint256[] amounts)
ExitOne
event ExitOne(uint256 unstakedAmount, address erc20Token, uint256 amount)
FeeAccountUpdated
event FeeAccountUpdated(address actor, address feeAccount)
RemoveLiquidity
event RemoveLiquidity(uint256 lpTokenAmount, uint256[] amounts)
RewardsClaimed
event RewardsClaimed(address[] rewardTokens, uint256[] rewardAmounts, uint256[] feeAmounts)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SafeHarborModeUpdate
event SafeHarborModeUpdate(address indexed actor, bool indexed isEnabled)
Stake
event Stake(uint256 amount)
StopGuardianUpdate
event StopGuardianUpdate(address indexed actor, bool indexed isEnabled)
SwapHandled
event SwapHandled(address[] swapTokens, uint256[] swapAmounts, address outputToken, uint256 outputAmount, uint256 feeAmount)
SwapHandlerUpdate
event SwapHandlerUpdate(address actor, address swapHandler, bool isEnabled)
SwapOutputTokenUpdate
event SwapOutputTokenUpdate(address actor, address swapOutputToken, bool isEnabled)
SwapTokenUpdate
event SwapTokenUpdate(address actor, address swapToken, bool isEnabled)
Unstake
event Unstake(uint256 amount)
Withdrawal
event Withdrawal(address indexed erc20Token, uint256 amount, address indexed recipient)
errors
AccountMissingRole
error AccountMissingRole(address _account, bytes32 _role)
AccountNotAdmin
error AccountNotAdmin(address)
AccountNotWhitelisted
error AccountNotWhitelisted(address)
AddLiquidityFailed
error AddLiquidityFailed()
EnterAllFailed
error EnterAllFailed()
InputGreaterThanStaked
error InputGreaterThanStaked()
InsufficientBalance
error InsufficientBalance()
InsufficientSwapTokenBalance
error InsufficientSwapTokenBalance()
InvalidAmount
error InvalidAmount()
InvalidAmounts
error InvalidAmounts()
InvalidERC20Address
error InvalidERC20Address()
InvalidExecutedOutputAmount
error InvalidExecutedOutputAmount()
InvalidFeePercent
error InvalidFeePercent()
InvalidInputs
error InvalidInputs()
InvalidOutputToken
error InvalidOutputToken()
InvalidReportedOutputAmount
error InvalidReportedOutputAmount()
InvalidRewardsClaim
error InvalidRewardsClaim()
InvalidSwapHandler
error InvalidSwapHandler()
InvalidSwapOutputToken
error InvalidSwapOutputToken()
InvalidSwapPayload
error InvalidSwapPayload()
RemoveLiquidityFailed
error RemoveLiquidityFailed()
SlippageExceeded
error SlippageExceeded(uint256 _outputAmount, uint256 _outputAmountMin)
StakeFailed
error StakeFailed()
StopGuardianEnabled
error StopGuardianEnabled()
SwapLimitExceeded
error SwapLimitExceeded()
SwapTokenIsOutputToken
error SwapTokenIsOutputToken()
UnstakeFailed
error UnstakeFailed()
creation bytecode
0x6101206040523480156200001257600080fd5b5060405162005dab38038062005dab8339810160408190526200003591620009c7565b8484848484848484848484848484828083808780620000626000801b82600001516200050e60201b60201c565b6200008760008051602062005d8b83398151915282602001516200050e60201b60201c565b620000a260008051602062005d8b833981519152806200051e565b60408101515160005b818110156200010f57620001067fd9c9e1a27f80559d0ef9cb96900d3b37cb5d56df00dca6d004c3b26d13df789884604001518381518110620000f257620000f262000b04565b60200260200101516200050e60201b60201c565b600101620000ab565b506200014b7fd9c9e1a27f80559d0ef9cb96900d3b37cb5d56df00dca6d004c3b26d13df789860008051602062005d8b8339815191526200051e565b60608201515160005b81811015620001a4576200019b7f43023f179164d629e1d761fb32e2db4dbd5ce417a23159d7da9cc7b56268928585606001518381518110620000f257620000f262000b04565b60010162000154565b50509251600180546001600160a01b0390921661010002610100600160a81b031990921691909117905550508251519150600090505b818110156200023d576001600460008560000151848151811062000202576200020262000b04565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620001da565b5060208201515160005b81811015620002aa57600160056000866020015184815181106200026f576200026f62000b04565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000247565b5060408301515160005b81811015620003175760016006600087604001518481518110620002dc57620002dc62000b04565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620002b4565b505060016007555050825180516200033a93506009925060209091019062000609565b5080515160809081526020808301516001600160a01b0390811660a0526040840151811660c0526060840151811660e0529190920151610100528551600a805497909301511515600160a01b026001600160a81b0319909716911617949094179093555060039a50620003b39950505050505050505050565b604051908082528060200260200182016040528015620003dd578160200160208202803683370190505b508051620003f491600b9160209091019062000609565b5073da47862a83dac0c112ba89c6abc2159b95afd71c600b60008154811062000421576200042162000b04565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555073d533a949740bb3306d119cc777fa900ba034cd52600b6001815481106200047b576200047b62000b04565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550734e3fbd56cd56c3e72c1403e103b45db9da5b9d2b600b600281548110620004d557620004d562000b04565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050505062000b1a565b6200051a828262000569565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200051a576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620005c53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b82805482825590600052602060002090810192821562000661579160200282015b828111156200066157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200062a565b506200066f92915062000673565b5090565b5b808211156200066f576000815560010162000674565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006c557620006c56200068a565b60405290565b6001600160a01b0381168114620006e157600080fd5b50565b600082601f830112620006f657600080fd5b815160206001600160401b03808311156200071557620007156200068a565b8260051b604051601f19603f830116810181811084821117156200073d576200073d6200068a565b6040529384528581018301938381019250878511156200075c57600080fd5b83870191505b84821015620007885781516200077881620006cb565b8352918301919083019062000762565b979650505050505050565b600060608284031215620007a657600080fd5b604051606081016001600160401b038082118383101715620007cc57620007cc6200068a565b816040528293508451915080821115620007e557600080fd5b620007f386838701620006e4565b835260208501519150808211156200080a57600080fd5b6200081886838701620006e4565b602084015260408501519150808211156200083257600080fd5b506200084185828601620006e4565b6040830152505092915050565b6000602082840312156200086157600080fd5b604051602081016001600160401b03811182821017156200088657620008866200068a565b806040525080915082516200089b81620006cb565b905292915050565b600060a08284031215620008b657600080fd5b60405160a081016001600160401b038082118383101715620008dc57620008dc6200068a565b816040528293508451915080821115620008f557600080fd5b506200090485828601620006e4565b82525060208301516200091781620006cb565b602082015260408301516200092c81620006cb565b604082015260608301516200094181620006cb565b6060820152608092830151920191909152919050565b6000604082840312156200096a57600080fd5b604080519081016001600160401b03811182821017156200098f576200098f6200068a565b80604052508091508251620009a481620006cb565b815260208301518015158114620009ba57600080fd5b6020919091015292915050565b600080600080600060c08688031215620009e057600080fd5b85516001600160401b0380821115620009f857600080fd5b908701906080828a03121562000a0d57600080fd5b62000a17620006a0565b825162000a2481620006cb565b8152602083015162000a3681620006cb565b602082015260408301518281111562000a4e57600080fd5b62000a5c8b828601620006e4565b60408301525060608301518281111562000a7557600080fd5b62000a838b828601620006e4565b606083015250602089015190975091508082111562000aa157600080fd5b62000aaf89838a0162000793565b955062000ac08960408a016200084e565b9450606088015191508082111562000ad757600080fd5b5062000ae688828901620008a3565b92505062000af8876080880162000957565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051610100516151b862000bd3600039600050506000818161094a01528181611a17015281816122c60152818161252d015281816128c001528181612c0f01526131d401526000818161045c01528181611f9e0152818161246d01528181612b5a01528181612c300152612d4c0152600061071301526000818161049001528181610c8a0152818161105b0152818161127e015281816121ab01528181612352015261315001526151b86000f3fe6080604052600436106103535760003560e01c80637ebd739f116101bb578063c4cdee8f116100f7578063e221633011610095578063f6a1e2bd1161006f578063f6a1e2bd14610a85578063f85f91b414610aa5578063f8b2cb4f14610aba578063fff13ee714610ada57600080fd5b8063e221633014610a32578063ec5486be14610a52578063f31cc89414610a7257600080fd5b8063cc0eb6c8116100d1578063cc0eb6c8146109c1578063cdfe4fd5146109db578063d547741f146109fd578063df1714f514610a1d57600080fd5b8063c4cdee8f1461096c578063c5bb31681461098c578063ca6b7f19146109ac57600080fd5b8063a694fc3a11610164578063b2178c1d1161013e578063b2178c1d146108d8578063b5afbe5c146108f8578063b630252814610918578063bfd9041b1461093857600080fd5b8063a694fc3a14610876578063a9bdbf8914610896578063ac9650d8146108ab57600080fd5b80638d65a916116101955780638d65a916146107ed57806391d148541461081d578063a217fddf1461086157600080fd5b80637ebd739f1461076f5780637f3c505e1461079d5780638acd025e146107bd57600080fd5b80632f2ff15d116102955780635c09967a11610233578063685dd6551161020d578063685dd655146106ec5780637a4ed234146107015780637c8bcbc0146107355780637cca687b1461074a57600080fd5b80635c09967a146106995780636568a279146106ac57806365fdaf96146106cc57600080fd5b806338a5132b1161026f57806338a5132b1461062357806342bd05671461064357806343520fe1146106635780635bec2a5a1461068557600080fd5b80632f2ff15d146105c35780632f7d6d5b146105e357806336568abe1461060357600080fd5b8063142a4fa61161030257806323ff31a2116102dc57806323ff31a214610524578063248a9ca3146105515780632e17de78146105815780632edd39c1146105a357600080fd5b8063142a4fa61461047e578063194fe0ef146104c05780631ace952b146104f457600080fd5b80630457dad2116103335780630457dad2146103c75780630e98c8a514610412578063114c20f01461044a57600080fd5b80621eab8314610358578062f714ce1461038757806301ffc9a7146103a7575b600080fd5b34801561036457600080fd5b506008546103729060ff1681565b60405190151581526020015b60405180910390f35b34801561039357600080fd5b506103726103a2366004614522565b610afa565b3480156103b357600080fd5b506103726103c2366004614552565b610b5b565b3480156103d357600080fd5b50600a546103f3906001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835290151560208301520161037e565b34801561041e57600080fd5b5061043261042d36600461457c565b610bc2565b6040516001600160a01b03909116815260200161037e565b34801561045657600080fd5b506104327f000000000000000000000000000000000000000000000000000000000000000081565b34801561048a57600080fd5b506104b27f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161037e565b3480156104cc57600080fd5b506104b27f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98681565b34801561050057600080fd5b5061037261050f366004614595565b60066020526000908152604090205460ff1681565b34801561053057600080fd5b5061054461053f3660046145f7565b610bec565b60405161037e919061467e565b34801561055d57600080fd5b506104b261056c36600461457c565b60009081526020819052604090206001015490565b34801561058d57600080fd5b506105a161059c36600461457c565b610d54565b005b3480156105af57600080fd5b506104b26105be366004614691565b610df5565b3480156105cf57600080fd5b506105a16105de366004614522565b610ef3565b3480156105ef57600080fd5b506105a16105fe366004614771565b610f1d565b34801561060f57600080fd5b506105a161061e366004614522565b610f59565b34801561062f57600080fd5b5061054461063e3660046145f7565b610fe1565b34801561064f57600080fd5b5061037261065e366004614805565b6110db565b34801561066f57600080fd5b506104b260008051602061514583398151915281565b34801561069157600080fd5b506000610372565b6105a16106a736600461485c565b611171565b3480156106b857600080fd5b506103726106c73660046148c8565b6111d0565b3480156106d857600080fd5b506105446106e736600461490a565b61121f565b3480156106f857600080fd5b506105a16112c2565b34801561070d57600080fd5b506104327f000000000000000000000000000000000000000000000000000000000000000081565b34801561074157600080fd5b506105a161134d565b34801561075657600080fd5b506001546104329061010090046001600160a01b031681565b34801561077b57600080fd5b5061078f61078a36600461457c565b611361565b60405161037e929190614977565b3480156107a957600080fd5b506105a16107b8366004614771565b61152f565b3480156107c957600080fd5b506103726107d8366004614595565b60056020526000908152604090205460ff1681565b3480156107f957600080fd5b50610372610808366004614595565b60046020526000908152604090205460ff1681565b34801561082957600080fd5b50610372610838366004614522565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561086d57600080fd5b506104b2600081565b34801561088257600080fd5b506105a161089136600461457c565b611583565b3480156108a257600080fd5b506104b2611612565b3480156108b757600080fd5b506108cb6108c63660046148c8565b611621565b60405161037e91906149ec565b3480156108e457600080fd5b506103726108f3366004614a4e565b61170d565b34801561090457600080fd5b506104b261091336600461490a565b6117ae565b34801561092457600080fd5b506105a1610933366004614771565b611955565b34801561094457600080fd5b506104327f000000000000000000000000000000000000000000000000000000000000000081565b34801561097857600080fd5b506105a1610987366004614771565b61198e565b34801561099857600080fd5b506104b26109a7366004614691565b6119c7565b3480156109b857600080fd5b506105a1611aa1565b3480156109cd57600080fd5b506001546103729060ff1681565b3480156109e757600080fd5b506104b260008051602061516583398151915281565b348015610a0957600080fd5b506105a1610a18366004614522565b611af0565b348015610a2957600080fd5b506105a1611b15565b348015610a3e57600080fd5b506104b2610a4d366004614b0e565b611b68565b348015610a5e57600080fd5b506105a1610a6d366004614771565b611d93565b6105a1610a80366004614c80565b611de7565b348015610a9157600080fd5b506105a1610aa0366004614771565b611e6b565b348015610ab157600080fd5b5061078f611ebf565b348015610ac657600080fd5b506104b2610ad5366004614595565b6120a1565b348015610ae657600080fd5b506105a1610af5366004614595565b6120ac565b6000610b136000805160206151458339815191526120de565b610b1b6120e8565b60015460ff1615610b3f576040516363238ca360e01b815260040160405180910390fd5b610b498383612141565b9050610b556001600755565b92915050565b60006001600160e01b031982167f7965db0b000000000000000000000000000000000000000000000000000000001480610b5557507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610b55565b60098181548110610bd257600080fd5b6000918252602090912001546001600160a01b0316905081565b60606000610c0860008051602061514583398151915233610838565b80610c265750610c2660008051602061516583398151915233610838565b905080610c7257335b6040517fd52b8d2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b610c7a6120e8565b610c8385612155565b6000610cf07f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff811115610cc157610cc16146dd565b604051908082528060200260200182016040528015610cea578160200160208202803683370190505b5061218f565b9050610cfd8686866122c4565b610d068161218f565b92507f9993ad19602725ab63a156d5cc8896910f278ecb257d29b394eee5d3e296a7218684604051610d39929190614d05565b60405180910390a150610d4c6001600755565b509392505050565b6000610d6e60008051602061514583398151915233610838565b80610d8c5750610d8c60008051602061516583398151915233610838565b905080610d995733610c2f565b610da16120e8565b610daa82612155565b610db3826123f4565b6040518281527ff1f1db1ecefb0a90b3cd6a1903d29374b4a935df69fd25c7fc6ed397d3683c26906020015b60405180910390a1610df16001600755565b5050565b600080610e1060008051602061514583398151915233610838565b80610e2e5750610e2e60008051602061516583398151915233610838565b905080610e3b5733610c2f565b60015460ff1615610e5f576040516363238ca360e01b815260040160405180910390fd5b610e676120e8565b610e7285858561251b565b915081600003610eae576040517f4cb8842400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fe07e6b2941a9d313f61afa38db71393898c8b00b72a8c4513f1523f21a7e7b28858584604051610ee193929190614d69565b60405180910390a1610d4c6001600755565b600082815260208190526040902060010154610f0e816120de565b610f18838361255c565b505050565b610f2760006120de565b60015460ff1615610f4b576040516363238ca360e01b815260040160405180910390fd5b610f568160016125fa565b50565b6001600160a01b0381163314610fd75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610c69565b610df182826126cb565b60606000610ffd60008051602061514583398151915233610838565b8061101b575061101b60008051602061516583398151915233610838565b9050806110285733610c2f565b60015460ff161561104c576040516363238ca360e01b815260040160405180910390fd5b6110546120e8565b60006110927f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff811115610cc157610cc16146dd565b905061109f86868661274a565b6110a88161218f565b92507f5595ab2bdce96e9266d98e3e7210c857f1326de5957d994b0a60e069cc88de608684604051610d39929190614d05565b6000806110f660008051602061514583398151915233610838565b80611114575061111460008051602061516583398151915233610838565b9050806111215733610c2f565b60015460ff1615611145576040516363238ca360e01b815260040160405180910390fd5b61115d6000805160206151458339815191528461275e565b6111688585856127ca565b95945050505050565b6111886000805160206151458339815191526120de565b6111906120e8565b60015460ff16156111b4576040516363238ca360e01b815260040160405180910390fd5b6111c084848484612858565b6111ca6001600755565b50505050565b60006111e96000805160206151458339815191526120de565b6111f16120e8565b60015460ff1615611215576040516363238ca360e01b815260040160405180910390fd5b610b4983836128b1565b6060600061123b60008051602061514583398151915233610838565b80611259575061125960008051602061516583398151915233610838565b9050806112665733610c2f565b61126e6120e8565b61127785612155565b60006112b57f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff811115610cc157610cc16146dd565b9050610cfd8686866128be565b60006112ce8133610838565b806112fe57506112fe7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610838565b90508061134557335b6040517f3ba76d110000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610c69565b610f56612a24565b61135760006120de565b61135f612a69565b565b606080600061137e60008051602061514583398151915233610838565b8061139c575061139c60008051602061516583398151915233610838565b9050806113a95733610c2f565b6113b16120e8565b60015460ff16156113d5576040516363238ca360e01b815260040160405180910390fd5b6113dd612a7b565b8151919450925060008167ffffffffffffffff8111156113ff576113ff6146dd565b604051908082528060200260200182016040528015611428578160200160208202803683370190505b5060015490915061010090046001600160a01b03161580159061144b5750600086115b156114e25760005b828110156114e05784818151811061146d5761146d614d8d565b60200260200101516000146114d8576114b986828151811061149157611491614d8d565b60200260200101518683815181106114ab576114ab614d8d565b602002602001015189612bab565b8282815181106114cb576114cb614d8d565b6020026020010181815250505b600101611453565b505b7fc7eae855adfe2fa05433c7329cfb31d150a38d037e9e7dabc4c2a6ea05b05dbb85858360405161151593929190614da3565b60405180910390a150506115296001600755565b50915091565b600061153b8133610838565b8061156b575061156b7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610838565b9050806115785733611307565b610df18260006125fa565b600061159d60008051602061514583398151915233610838565b806115bb57506115bb60008051602061516583398151915233610838565b9050806115c85733610c2f565b6115d06120e8565b6115d982612155565b6115e282612c0d565b6040518281527f227a473b70d2f893cc7659219575c030a63b5743024fe1e0c1a680e708b1525a90602001610ddf565b600061161c612d34565b905090565b6060818067ffffffffffffffff81111561163d5761163d6146dd565b60405190808252806020026020018201604052801561167057816020015b606081526020019060019003908161165b5790505b50915060005b81811015611705576116e03086868481811061169457611694614d8d565b90506020028101906116a69190614ddc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612dbf92505050565b8382815181106116f2576116f2614d8d565b6020908102919091010152600101611676565b505092915050565b60008061172860008051602061514583398151915233610838565b80611746575061174660008051602061516583398151915233610838565b9050806117535733610c2f565b61175b6120e8565b60015460ff161561177f576040516363238ca360e01b815260040160405180910390fd5b6117976000805160206151458339815191528461275e565b6117a2858585612de4565b9150610d4c6001600755565b6000806117c960008051602061514583398151915233610838565b806117e757506117e760008051602061516583398151915233610838565b9050806117f45733610c2f565b60015460ff1615611818576040516363238ca360e01b815260040160405180910390fd5b6118206120e8565b6000600980548060200260200160405190810160405280929190818152602001828054801561187857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161185a575b5050505050905060006118a6828660ff168151811061189957611899614d8d565b6020026020010151612e84565b90506118b3878787612f1f565b806118cc838760ff168151811061189957611899614d8d565b6118d69190614e39565b93507f32e18e4eab2d2d6de4b048cc12958789f6a9a56237f4d15e8641c46815d21b2787838760ff168151811061190f5761190f614d8d565b602002602001015186604051611941939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a15050610d4c6001600755565b61195f60006120de565b60015460ff1615611983576040516363238ca360e01b815260040160405180910390fd5b610f56816001612f33565b61199860006120de565b60015460ff16156119bc576040516363238ca360e01b815260040160405180910390fd5b610f56816001613004565b6000806119e260008051602061514583398151915233610838565b80611a005750611a0060008051602061516583398151915233610838565b905080611a0d5733610c2f565b611a156120e8565b7f0000000000000000000000000000000000000000000000000000000000000000611a4086866130d5565b6000611a4b82612e84565b9050611a5887878761314c565b80611a6283612e84565b611a6c9190614e39565b93507f445e97e04b71816478e7b37d58055c44d36f05aff862225bca7ea58038c1867587878660405161194193929190614d69565b6000611abb60008051602061514583398151915233610838565b80611ad95750611ad960008051602061516583398151915233610838565b905080611ae65733610c2f565b610f566001613383565b600082815260208190526040902060010154611b0b816120de565b610f1883836126cb565b6000611b218133610838565b80611b515750611b517f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610838565b905080611b5e5733611307565b610f566000613383565b600080611b8360008051602061514583398151915233610838565b80611ba15750611ba160008051602061516583398151915233610838565b905080611bae5733610c2f565b611bb66120e8565b60015460ff1615611bda576040516363238ca360e01b815260040160405180910390fd5b612710831115611bfd57604051638a81d3b360e01b815260040160405180910390fd5b600080611c0a88886133c2565b9150915085811015611c52576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101879052604401610c69565b6000885167ffffffffffffffff811115611c6e57611c6e6146dd565b604051908082528060200260200182016040528015611c97578160200160208202803683370190505b50805190915060005b81811015611cf8578a8181518110611cba57611cba614d8d565b602002602001015160400151838281518110611cd857611cd8614d8d565b6001600160a01b0390921660209283029190910190910152600101611ca0565b5060015460009061010090046001600160a01b031615801590611d1b5750600084115b8015611d275750600088115b15611d3a57611d378a858a612bab565b90505b7ffbc1db932504c9fa40e26af5592335c371e6e180dd0c10c75d7ce23bb8a1ccde83868c8785604051611d71959493929190614e4c565b60405180910390a150919450505050611d8a6001600755565b50949350505050565b6000611d9f8133610838565b80611dcf5750611dcf7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610838565b905080611ddc5733611307565b610df1826000613004565b611df160006120de565b600080846001600160a01b0316348585604051611e0f929190614eca565b60006040518083038185875af1925050503d8060008114611e4c576040519150601f19603f3d011682016040523d82523d6000602084013e611e51565b606091505b509150915081611e6457611e648161371b565b5050505050565b6000611e778133610838565b80611ea75750611ea77f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610838565b905080611eb45733611307565b610df1826000612f33565b606080600b805480602002602001604051908101604052809291908181526020018280548015611f1857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611efa575b50508351939550839250505067ffffffffffffffff811115611f3c57611f3c6146dd565b604051908082528060200260200182016040528015611f65578160200160208202803683370190505b5091508060030361206f576040517fe95034250000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e950342590602401606060405180830381865afa158015611fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120119190614eda565b8460008151811061202457612024614d8d565b602002602001018560018151811061203e5761203e614d8d565b602002602001018660028151811061205857612058614d8d565b602090810291909101019290925291905252509091565b6040517faf73709900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b5582612e84565b6120d57f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc9866120de565b610f568161383f565b610f56813361275e565b60026007540361213a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c69565b6002600755565b600061214e838333612de4565b9392505050565b80600003610f56576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60098054604080516020808402820181019092528281526060937f00000000000000000000000000000000000000000000000000000000000000009360009383018282801561220757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121e9575b505050505090508167ffffffffffffffff811115612227576122276146dd565b604051908082528060200260200182016040528015612250578160200160208202803683370190505b50925060005b828110156122bc5784818151811061227057612270614d8d565b602002602001015161228d83838151811061189957611899614d8d565b6122979190614e39565b8482815181106122a9576122a9614d8d565b6020908102919091010152600101612256565b505050919050565b7f00000000000000000000000000000000000000000000000000000000000000006122ef81856138bd565b600a546040517f4129fb5d000000000000000000000000000000000000000000000000000000008152600091735f53e3b7d29acecffb9ee9adb3b76ee0c84d223291634129fb5d9161237a91869182918b918b918b91600160a01b900460ff16907f000000000000000000000000000000000000000000000000000000000000000090600401614f08565b602060405180830381865af4158015612397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bb9190614f51565b905080611e64576040517ffcb8383900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806123fd612d34565b1015612435576040517fc28c185e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a3000000000000000000000000000000000000000000000000000000008152306004820152602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f3fef3a3906044016020604051808303816000875af11580156124be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e29190614f51565b905080610df1576040517fce3a19d200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061252884848461314c565b6125517f0000000000000000000000000000000000000000000000000000000000000000612e84565b905061214e81612c0d565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610df1576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556125b63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b815160005b818110156111ca57826004600086848151811061261e5761261e614d8d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790557fb7fb7a204fdbb641615538cf2a147d3682ea2307c8f45a172d8fed1addb1bcc13385838151811061268457612684614d8d565b6020026020010151856040516126bb939291906001600160a01b039384168152919092166020820152901515604082015260600190565b60405180910390a16001016125ff565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610df1576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b612753836123f4565b610f188383836122c4565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610df1576040517f106571f00000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610c69565b600082815b8181101561284c5760006128088787848181106127ee576127ee614d8d565b90506020020160208101906128039190614595565b612e84565b90508015612843576128418188888581811061282657612826614d8d565b905060200201602081019061283b9190614595565b87612de4565b505b506001016127cf565b50600195945050505050565b612864848484846138f5565b336001600160a01b03167f83c419f8f26f4f5e29c5cde4c8ad1698228be27d717a8954b2465009955428ae838387876040516128a39493929190614f6e565b60405180910390a250505050565b600061214e8383336127ca565b7f00000000000000000000000000000000000000000000000000000000000000006128e981856138bd565b600a54600160a01b900460ff161561298d576040517f29ed28620000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482018190526024820186905260ff8416600f0b604483015260648201859052906329ed286290608401600060405180830381600087803b15801561297057600080fd5b505af1158015612984573d6000803e3d6000fd5b505050506111ca565b6040517f1a4d01d20000000000000000000000000000000000000000000000000000000081526004810185905260ff8316600f0b6024820152604481018490526001600160a01b03821690631a4d01d2906064016020604051808303816000875af1158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e649190614fd1565b6001805460ff191681178155335b6001600160a01b03167fddde86bf56483edaa0fa1fc39207f2c0b047851d6969f86042875f26c432580e60405160405180910390a3565b6001805460ff19169055600033612a32565b606080600b805480602002602001604051908101604052809291908181526020018280548015612ad457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612ab6575b50508351939550839250505067ffffffffffffffff811115612af857612af86146dd565b604051908082528060200260200182016040528015612b21578160200160208202803683370190505b5091508060030361206f576040517fd279c1910000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d279c191906024016060604051808303816000875af1158015611fed573d6000803e3d6000fd5b600061271080831115612bd157604051638a81d3b360e01b815260040160405180910390fd5b80612bdc8486614fea565b612be69190615001565b91508115610d4c57600154610d4c906001600160a01b0387811691610100900416846139a0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612c5982846138bd565b612c6e6001600160a01b0383163083866139f0565b6040517f47e7ef24000000000000000000000000000000000000000000000000000000008152306004820152602481018490526000906001600160a01b038316906347e7ef24906044016020604051808303816000875af1158015612cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfb9190614f51565b9050806111ca576040517f0e5ee9cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612d9b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190614fd1565b606061214e838360405180606001604052806027815260200161518560279139613ac2565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601612e1a57612e158285613b3a565b612e2e565b612e2e6001600160a01b03841683866139a0565b816001600160a01b0316836001600160a01b03167e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a86604051612e7291815260200190565b60405180910390a35060019392505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03831601612eb2575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b559190614fd1565b919050565b612f28836123f4565b610f188383836128be565b815160005b818110156111ca578260066000868481518110612f5757612f57614d8d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790557f5733671486228f19db2618b94a60764871edfd11635129ec2f88a9e76163784a33858381518110612fbd57612fbd614d8d565b602002602001015185604051612ff4939291906001600160a01b039384168152919092166020820152901515604082015260600190565b60405180910390a1600101612f38565b815160005b818110156111ca57826005600086848151811061302857613028614d8d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790557f022b5880fc0cf768365ffc145d8cf634cd8d1de03ea1f32b925ac5ddfe7a690e3385838151811061308e5761308e614d8d565b6020026020010151856040516130c5939291906001600160a01b039384168152919092166020820152901515604082015260600190565b60405180910390a1600101613009565b600081815b818110156131145760008585838181106130f6576130f6614d8d565b90506020020135111561310c5760019250613114565b6001016130da565b50816111ca576040517fd856fc5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000009050600060098054806020026020016040519081016040528092919081815260200182805480156131c957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116131ab575b5050505050905060007f0000000000000000000000000000000000000000000000000000000000000000905060005b838110156132945761323b83828151811061321557613215614d8d565b602002602001015188888481811061322f5761322f614d8d565b905060200201356138bd565b61328c308389898581811061325257613252614d8d565b9050602002013586858151811061326b5761326b614d8d565b60200260200101516001600160a01b03166139f0909392919063ffffffff16565b6001016131f8565b50600a546040517f6c9afa43000000000000000000000000000000000000000000000000000000008152600091735f53e3b7d29acecffb9ee9adb3b76ee0c84d223291636c9afa439161330091869182918d918d918d91600160a01b900460ff16908d90600401615023565b602060405180830381865af415801561331d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133419190614f51565b90508061337a576040517ff498281a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b6008805460ff191682151590811790915560405133907f1d77290adeca4b6b665ebfa3cc7baa148cb14968d7c4b3fdfef9527a29d91d6590600090a350565b606060008360035443146133da574360035560006002555b8051600260008282546133ed919061506f565b90915550506002546019101561342f576040517f7468c7a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526005602052604090205460ff16613481576040517fd49aa89300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84518067ffffffffffffffff81111561349c5761349c6146dd565b6040519080825280602002602001820160405280156134c5578160200160208202803683370190505b50935060006134d386612e84565b905060005b828110156136fa5760008882815181106134f4576134f4614d8d565b60209081029190910181015180516001600160a01b03166000908152600690925260409091205490915060ff16613557576040517f2de948b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80604001516001600160a01b0316886001600160a01b0316036135a6576040517ff7d6ef2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006135b189612e84565b90506135c08260400151612e84565b8884815181106135d2576135d2614d8d565b6020026020010181815250506000806135eb848c613b4a565b915091508a6001600160a01b0316816001600160a01b031614613620576040516231010160e51b815260040160405180910390fd5b836060015182101561365e576040517fa9fe672d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006136698c612e84565b606086015190915061367b8583614e39565b10156136b3576040517fc73b8cbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136c08560400151612e84565b8b87815181106136d2576136d2614d8d565b602002602001018181516136e69190614e39565b90525050600190940193506134d892505050565b508061370587612e84565b61370f9190614e39565b93505050509250929050565b60048151101561376d5760405162461bcd60e51b815260206004820152601a60248201527f43616c6c5574696c733a207461726765742072657665727428290000000000006044820152606401610c69565b60208101517fb1b7848f000000000000000000000000000000000000000000000000000000006001600160e01b03198216016138365760408051808201825260208082527f43616c6c5574696c733a207461726765742070616e69636b65643a2030785f5f90820190815260248501517f43616c6c5574696c733a207461726765742070616e69636b65643a2030780000600482811c600f908116603090810160081b918516011791909117909252925162461bcd60e51b8152919291610c6991849101615082565b81518060208401fd5b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416021790557f63f8f609737c2dc01ff1d619040ccd6cb6d0e1e7b04f5271d959deefa09ef54b33604080516001600160a01b03928316815291841660208301520160405180910390a150565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038316016138eb57610df181613cb3565b610df18282613cf0565b8281811461392f576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561399857613990333088888581811061395157613951614d8d565b9050602002013587878681811061396a5761396a614d8d565b905060200201602081019061397f9190614595565b6001600160a01b0316929190613d58565b600101613932565b505050505050565b8273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038216016139df576040516376fe282b60e11b815260040160405180910390fd5b81156111ca576111ca848484613da9565b8373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601613a2f576040516376fe282b60e11b815260040160405180910390fd5b604051636eb1769f60e11b81526001600160a01b03858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa158015613a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa59190614fd1565b1115613ab757613ab785846000613e3a565b611e64858484613f56565b6060600080856001600160a01b031685604051613adf9190615095565b600060405180830381855af49150503d8060008114613b1a576040519150601f19603f3d011682016040523d82523d6000602084013e613b1f565b606091505b5091509150613b3086838387614003565b9695505050505050565b8015610df157610df18282614084565b600080613b56846140df565b6020808601919091526040808601516001600160a01b031660009081526004909252812054608086015160ff909116159190613b979087908790859061415a565b905060006060876080015115613c0e5787600001516001600160a01b031683604051613bc39190615095565b600060405180830381855af49150503d8060008114613bfe576040519150601f19603f3d011682016040523d82523d6000602084013e613c03565b606091505b509092509050613c81565b613c1c8889602001516142be565b87600001516001600160a01b031683604051613c389190615095565b6000604051808303816000865af19150503d8060008114613c75576040519150601f19603f3d011682016040523d82523d6000602084013e613c7a565b606091505b5090925090505b81613c8f57613c8f8161371b565b80806020019051810190613ca391906150b1565b95509550505050505b9250929050565b80613cd173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee612e84565b1015610f5657604051631e9acf1760e31b815260040160405180910390fd5b8173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601613d2f576040516376fe282b60e11b815260040160405180910390fd5b81613d3984612e84565b1015610f1857604051631e9acf1760e31b815260040160405180910390fd5b8373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601613d97576040516376fe282b60e11b815260040160405180910390fd5b8115611e6457611e648585858561431a565b6040516001600160a01b038316602482015260448101829052610f189084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915261436b565b801580613eb45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015613e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb29190614fd1565b155b613f265760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610c69565b6040516001600160a01b038316602482015260448101829052610f1890849063095ea7b360e01b90606401613dee565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fca9190614fd1565b90506111ca8463095ea7b360e01b85613fe3868661506f565b6040516001600160a01b0390921660248301526044820152606401613dee565b6060831561407257825160000361406b576001600160a01b0385163b61406b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c69565b508161407c565b61407c8383614453565b949350505050565b600080600080600085875af1905080610f185760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610c69565b6000806140ef8360400151612e84565b90506140fa81612155565b60208301519150811580159061410f57508181105b15614146576040517fd852310600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816000036141545792915050565b50919050565b60608280156141665750815b1561419d576040517fad54954000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083156141cc57507f40eb440900000000000000000000000000000000000000000000000000000000614202565b826141dd5762edfd6d60e81b6141ff565b7f6a89cd49000000000000000000000000000000000000000000000000000000005b90505b60006040518060c0016040528088604001516001600160a01b0316815260200188602001518152602001876001600160a01b03168152602001886060015181526020018860a0015181526020018860c001518152509050818160405160240161426b91906150d6565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915292505050949350505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b031682604001516001600160a01b0316036142fb578151610df19082613b3a565b81516040830151610df1916001600160a01b03909116903090846139f0565b6040516001600160a01b03808516602483015283166044820152606481018290526111ca9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613dee565b60006143c0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661447d9092919063ffffffff16565b90508051600014806143e15750808060200190518101906143e19190614f51565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c69565b8151156144635781518083602001fd5b8060405162461bcd60e51b8152600401610c699190615082565b606061407c848460008585600080866001600160a01b031685876040516144a49190615095565b60006040518083038185875af1925050503d80600081146144e1576040519150601f19603f3d011682016040523d82523d6000602084013e6144e6565b606091505b50915091506144f787838387614003565b979650505050505050565b6001600160a01b0381168114610f5657600080fd5b8035612f1a81614502565b6000806040838503121561453557600080fd5b82359150602083013561454781614502565b809150509250929050565b60006020828403121561456457600080fd5b81356001600160e01b03198116811461214e57600080fd5b60006020828403121561458e57600080fd5b5035919050565b6000602082840312156145a757600080fd5b813561214e81614502565b60008083601f8401126145c457600080fd5b50813567ffffffffffffffff8111156145dc57600080fd5b6020830191508360208260051b8501011115613cac57600080fd5b60008060006040848603121561460c57600080fd5b83359250602084013567ffffffffffffffff81111561462a57600080fd5b614636868287016145b2565b9497909650939450505050565b600081518084526020808501945080840160005b8381101561467357815187529582019590820190600101614657565b509495945050505050565b60208152600061214e6020830184614643565b6000806000604084860312156146a657600080fd5b833567ffffffffffffffff8111156146bd57600080fd5b6146c9868287016145b2565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715614716576147166146dd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614745576147456146dd565b604052919050565b600067ffffffffffffffff821115614767576147676146dd565b5060051b60200190565b6000602080838503121561478457600080fd5b823567ffffffffffffffff81111561479b57600080fd5b8301601f810185136147ac57600080fd5b80356147bf6147ba8261474d565b61471c565b81815260059190911b820183019083810190878311156147de57600080fd5b928401925b828410156144f75783356147f681614502565b825292840192908401906147e3565b60008060006040848603121561481a57600080fd5b833567ffffffffffffffff81111561483157600080fd5b61483d868287016145b2565b909450925050602084013561485181614502565b809150509250925092565b6000806000806040858703121561487257600080fd5b843567ffffffffffffffff8082111561488a57600080fd5b614896888389016145b2565b909650945060208701359150808211156148af57600080fd5b506148bc878288016145b2565b95989497509550505050565b600080602083850312156148db57600080fd5b823567ffffffffffffffff8111156148f257600080fd5b6148fe858286016145b2565b90969095509350505050565b60008060006060848603121561491f57600080fd5b8335925060208401359150604084013560ff8116811461485157600080fd5b600081518084526020808501945080840160005b838110156146735781516001600160a01b031687529582019590820190600101614952565b60408152600061498a604083018561493e565b82810360208401526111688185614643565b60005b838110156149b757818101518382015260200161499f565b50506000910152565b600081518084526149d881602086016020860161499c565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614a4157603f19888603018452614a2f8583516149c0565b94509285019290850190600101614a13565b5092979650505050505050565b600080600060608486031215614a6357600080fd5b833592506020840135614a7581614502565b9150604084013561485181614502565b8015158114610f5657600080fd5b8035612f1a81614a85565b600082601f830112614aaf57600080fd5b813567ffffffffffffffff811115614ac957614ac96146dd565b614adc601f8201601f191660200161471c565b818152846020838601011115614af157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215614b2457600080fd5b67ffffffffffffffff8086351115614b3b57600080fd5b8535860187601f820112614b4e57600080fd5b614b5b6147ba823561474d565b81358082526020808301929160051b8401018a811115614b7a57600080fd5b602084015b81811015614c56578581351115614b9557600080fd5b8035850160e0818e03601f19011215614bad57600080fd5b614bb56146f3565b614bc160208301614517565b815260408201356020820152614bd960608301614517565b604082015260808201356060820152614bf460a08301614a93565b608082015260c082013588811115614c0b57600080fd5b614c1a8f602083860101614a9e565b60a08301525060e082013588811115614c3257600080fd5b614c418f602083860101614a9e565b60c08301525085525060209384019301614b7f565b505080975050505050614c6b60208601614517565b93969395505050506040820135916060013590565b600080600060408486031215614c9557600080fd5b8335614ca081614502565b9250602084013567ffffffffffffffff80821115614cbd57600080fd5b818601915086601f830112614cd157600080fd5b813581811115614ce057600080fd5b876020828501011115614cf257600080fd5b6020830194508093505050509250925092565b82815260406020820152600061407c6040830184614643565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115614d5057600080fd5b8260051b80836020870137939093016020019392505050565b604081526000614d7d604083018587614d1e565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b606081526000614db6606083018661493e565b8281036020840152614dc88186614643565b90508281036040840152613b308185614643565b6000808335601e19843603018112614df357600080fd5b83018035915067ffffffffffffffff821115614e0e57600080fd5b602001915036819003821315613cac57600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610b5557610b55614e23565b60a0808252865190820181905260009060209060c0840190828a01845b82811015614e8e5781516001600160a01b031684529284019290840190600101614e69565b50505083810382850152614ea28189614643565b6001600160a01b03979097166040850152505050606081019290925260809091015292915050565b8183823760009101908152919050565b600080600060608486031215614eef57600080fd5b8351925060208401519150604084015190509250925092565b60006001600160a01b03808a16835280891660208401525086604083015260c06060830152614f3b60c083018688614d1e565b93151560808301525060a0015295945050505050565b600060208284031215614f6357600080fd5b815161214e81614a85565b6040808252810184905260008560608301825b87811015614fb1578235614f9481614502565b6001600160a01b0316825260209283019290910190600101614f81565b508381036020850152614fc5818688614d1e565b98975050505050505050565b600060208284031215614fe357600080fd5b5051919050565b8082028115828204841417610b5557610b55614e23565b60008261501e57634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160a01b03808a16835280891660208401525060c0604083015261505060c083018789614d1e565b606083019590955250911515608083015260a090910152949350505050565b80820180821115610b5557610b55614e23565b60208152600061214e60208301846149c0565b600082516150a781846020870161499c565b9190910192915050565b600080604083850312156150c457600080fd5b82519150602083015161454781614502565b6020815260006001600160a01b03808451166020840152602084015160408401528060408501511660608401525060608301516080830152608083015160c060a084015261512760e08401826149c0565b905060a0840151601f198483030160c085015261116882826149c056fe43023f179164d629e1d761fb32e2db4dbd5ce417a23159d7da9cc7b562689285d9c9e1a27f80559d0ef9cb96900d3b37cb5d56df00dca6d004c3b26d13df7898416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000003b016025cd3d213c5779e10fe94a35ba440bd1c90000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b016025cd3d213c5779e10fe94a35ba440bd1c90000000000000000000000003b016025cd3d213c5779e10fe94a35ba440bd1c9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d056c0eee354b24fe7c5d4ee762c4d7574badac10000000000000000000000000000000000000000000000000000000000000002000000000000000000000000036a0ff78ff35947eb05ec7c2434df3feaae93ef000000000000000000000000dee05b997d114790bd3072848ea933d514d55b22000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000da47862a83dac0c112ba89c6abc2159b95afd71c0000000000000000000000004e3fbd56cd56c3e72c1403e103b45db9da5b9d2b000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd520000000000000000000000000000000000000000000000000000000000000007000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e0000000000000000000000004591dbff62656e7859afe5e45f6f47d3669fbb28000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000003000000000000000000000000f155735395a323b2a12051b5bc076c2c49eebeb300000000000000000000000081261c3ae484d2c0873bbea019eaecebc0056f950000000000000000000000000aedebf012847dfe8b87054cbe2154b0488a906800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003de254a0f838a844f727fee81040e0fa7884b935000000000000000000000000f6aa46869220ae703924d5331d88a21dcef3b19d0000000000000000000000003de254a0f838a844f727fee81040e0fa7884b93500000000000000000000000000000000000000000000000000000000000000e200000000000000000000000000000000000000000000000000000000000000020000000000000000000000004591dbff62656e7859afe5e45f6f47d3669fbb28000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e