0 txs
3 calls
constructor
constructor((address prizeToken, address twabController, address creator, uint256 tierLiquidityUtilizationRate, uint48 drawPeriodSeconds, uint48 firstDrawOpensAt, uint24 grandPrizePeriodDraws, uint8 numberOfTiers, uint8 tierShares, uint8 canaryShares, uint8 reserveShares, uint24 drawTimeout) params)
functions
accountedBalance
viewfunction accountedBalance() view returns (uint256)
canaryShares
viewfunction canaryShares() view returns (uint8)
claimCount
viewfunction claimCount() view returns (uint24)
computeNextNumberOfTiers
viewfunction computeNextNumberOfTiers(uint32 _claimCount) view returns (uint8)
computeRangeStartDrawIdInclusive
purefunction computeRangeStartDrawIdInclusive(uint24 _endDrawIdInclusive, uint24 _rangeSize) pure returns (uint24)
computeShutdownPortion
viewfunction computeShutdownPortion(address _vault, address _account) view returns (tuple)
computeTotalShares
viewfunction computeTotalShares(uint8 _numberOfTiers) view returns (uint256)
DONATOR
viewfunction DONATOR() view returns (address)
drawClosesAt
viewfunction drawClosesAt(uint24 drawId) view returns (uint48)
drawManager
viewfunction drawManager() view returns (address)
drawOpensAt
viewfunction drawOpensAt(uint24 drawId) view returns (uint48)
drawPeriodSeconds
viewfunction drawPeriodSeconds() view returns (uint48)
drawTimeout
viewfunction drawTimeout() view returns (uint24)
drawTimeoutAt
viewfunction drawTimeoutAt() view returns (uint256)
estimatedPrizeCount
viewfunction estimatedPrizeCount() view returns (uint32)
estimatedPrizeCount
viewfunction estimatedPrizeCount(uint8 numTiers) view returns (uint32)
estimatedPrizeCountWithBothCanaries
viewfunction estimatedPrizeCountWithBothCanaries() view returns (uint32)
estimatedPrizeCountWithBothCanaries
viewfunction estimatedPrizeCountWithBothCanaries(uint8 numTiers) view returns (uint32)
estimateNextNumberOfTiers
viewfunction estimateNextNumberOfTiers() view returns (uint8)
firstDrawOpensAt
viewfunction firstDrawOpensAt() view returns (uint48)
getContributedBetween
viewfunction getContributedBetween(address _vault, uint24 _startDrawIdInclusive, uint24 _endDrawIdInclusive) view returns (uint256)
getDonatedBetween
viewfunction getDonatedBetween(uint24 _startDrawIdInclusive, uint24 _endDrawIdInclusive) view returns (uint256)
getDrawId
viewfunction getDrawId(uint256 _timestamp) view returns (uint24)
getDrawIdToAward
viewfunction getDrawIdToAward() view returns (uint24)
getLastAwardedDrawId
viewfunction getLastAwardedDrawId() view returns (uint24)
getOpenDrawId
viewfunction getOpenDrawId() view returns (uint24)
getShutdownDrawId
viewfunction getShutdownDrawId() view returns (uint24)
getTierAccrualDurationInDraws
viewfunction getTierAccrualDurationInDraws(uint8 _tier) view returns (uint24)
getTierOdds
viewfunction getTierOdds(uint8 _tier, uint8 _numTiers) view returns (int256)
getTierPrizeCount
purefunction getTierPrizeCount(uint8 _tier) pure returns (uint32)
getTierPrizeSize
viewfunction getTierPrizeSize(uint8 _tier) view returns (uint104)
getTierRemainingLiquidity
viewfunction getTierRemainingLiquidity(uint8 _tier) view returns (uint256)
getTotalAccumulatorNewestObservation
viewfunction getTotalAccumulatorNewestObservation() view returns (tuple)
getTotalContributedBetween
viewfunction getTotalContributedBetween(uint24 _startDrawIdInclusive, uint24 _endDrawIdInclusive) view returns (uint256)
getTotalShares
viewfunction getTotalShares() view returns (uint256)
getVaultAccumulatorNewestObservation
viewfunction getVaultAccumulatorNewestObservation(address _vault) view returns (tuple)
getVaultPortion
viewfunction getVaultPortion(address _vault, uint24 _startDrawIdInclusive, uint24 _endDrawIdInclusive) view returns (int256)
getVaultUserBalanceAndTotalSupplyTwab
viewfunction getVaultUserBalanceAndTotalSupplyTwab(address _vault, address _user, uint24 _startDrawIdInclusive, uint24 _endDrawIdInclusive) view returns (uint256 twab, uint256 twabTotalSupply)
getWinningRandomNumber
viewfunction getWinningRandomNumber() view returns (uint256)
grandPrizePeriodDraws
viewfunction grandPrizePeriodDraws() view returns (uint24)
isCanaryTier
viewfunction isCanaryTier(uint8 _tier) view returns (bool)
isDrawFinalized
viewfunction isDrawFinalized(uint24 drawId) view returns (bool)
isShutdown
viewfunction isShutdown() view returns (bool)
isWinner
viewfunction isWinner(address _vault, address _user, uint8 _tier, uint32 _prizeIndex) view returns (bool)
lastAwardedDrawAwardedAt
viewfunction lastAwardedDrawAwardedAt() view returns (uint48)
numberOfTiers
viewfunction numberOfTiers() view returns (uint8)
pendingReserveContributions
viewfunction pendingReserveContributions() view returns (uint256)
prizeToken
viewfunction prizeToken() view returns (address)
prizeTokenPerShare
viewfunction prizeTokenPerShare() view returns (uint128)
reserve
viewfunction reserve() view returns (uint96)
reserveShares
viewfunction reserveShares() view returns (uint8)
rewardBalance
viewfunction rewardBalance(address _recipient) view returns (uint256)
shutdownAt
viewfunction shutdownAt() view returns (uint256)
tierLiquidityUtilizationRate
viewfunction tierLiquidityUtilizationRate() view returns (uint256)
tierShares
viewfunction tierShares() view returns (uint8)
totalWithdrawn
viewfunction totalWithdrawn() view returns (uint256)
twabController
viewfunction twabController() view returns (address)
wasClaimed
viewfunction wasClaimed(address _vault, address _winner, uint24 _drawId, uint8 _tier, uint32 _prizeIndex) view returns (bool)
wasClaimed
viewfunction wasClaimed(address _vault, address _winner, uint8 _tier, uint32 _prizeIndex) view returns (bool)
allocateRewardFromReserve
nonpayablefunction allocateRewardFromReserve(address _to, uint96 _amount)
awardDraw
nonpayablefunction awardDraw(uint256 winningRandomNumber_) returns (uint24)
claimPrize
nonpayablefunction claimPrize(address _winner, uint8 _tier, uint32 _prizeIndex, address _prizeRecipient, uint96 _claimReward, address _claimRewardRecipient) returns (uint256)
contributePrizeTokens
nonpayablefunction contributePrizeTokens(address _prizeVault, uint256 _amount) returns (uint256)
contributeReserve
nonpayablefunction contributeReserve(uint96 _amount)
donatePrizeTokens
nonpayablefunction donatePrizeTokens(uint256 _amount)
getShutdownInfo
nonpayablefunction getShutdownInfo() returns (uint256 balance, tuple observation)
setDrawManager
nonpayablefunction setDrawManager(address _drawManager)
shutdownBalanceOf
nonpayablefunction shutdownBalanceOf(address _vault, address _account) returns (uint256)
withdrawRewards
nonpayablefunction withdrawRewards(address _to, uint256 _amount)
withdrawShutdownBalance
nonpayablefunction withdrawShutdownBalance(address _vault, address _recipient) returns (uint256)
events
AllocateRewardFromReserve
event AllocateRewardFromReserve(address indexed to, uint256 amount)
ClaimedPrize
event ClaimedPrize(address indexed vault, address indexed winner, address indexed recipient, uint24 drawId, uint8 tier, uint32 prizeIndex, uint152 payout, uint96 claimReward, address claimRewardRecipient)
ContributedReserve
event ContributedReserve(address indexed user, uint256 amount)
ContributePrizeTokens
event ContributePrizeTokens(address indexed vault, uint24 indexed drawId, uint256 amount)
DrawAwarded
event DrawAwarded(uint24 indexed drawId, uint256 winningRandomNumber, uint8 lastNumTiers, uint8 numTiers, uint104 reserve, uint128 prizeTokensPerShare, uint48 drawOpenedAt)
IncreaseClaimRewards
event IncreaseClaimRewards(address indexed to, uint256 amount)
ReserveConsumed
event ReserveConsumed(uint256 amount)
SetDrawManager
event SetDrawManager(address indexed drawManager)
WithdrawRewards
event WithdrawRewards(address indexed account, address indexed to, uint256 amount, uint256 available)
errors
AddToDrawZero
error AddToDrawZero()
AlreadyClaimed
error AlreadyClaimed(address vault, address winner, uint8 tier, uint32 prizeIndex)
AwardingDrawNotClosed
error AwardingDrawNotClosed(uint48 drawClosesAt)
CallerNotDrawManager
error CallerNotDrawManager(address caller, address drawManager)
ClaimPeriodExpired
error ClaimPeriodExpired()
ContributionGTDeltaBalance
error ContributionGTDeltaBalance(uint256 amount, uint256 available)
CreatorIsZeroAddress
error CreatorIsZeroAddress()
DidNotWin
error DidNotWin(address vault, address winner, uint8 tier, uint32 prizeIndex)
DrawAwarded
error DrawAwarded(uint24 drawId, uint24 newestDrawId)
DrawManagerAlreadySet
error DrawManagerAlreadySet()
DrawTimeoutGTGrandPrizePeriodDraws
error DrawTimeoutGTGrandPrizePeriodDraws()
DrawTimeoutIsZero
error DrawTimeoutIsZero()
FirstDrawOpensInPast
error FirstDrawOpensInPast()
GrandPrizePeriodDrawsTooLarge
error GrandPrizePeriodDrawsTooLarge(uint24 grandPrizePeriodDraws, uint24 maxGrandPrizePeriodDraws)
IncompatibleTwabPeriodLength
error IncompatibleTwabPeriodLength()
IncompatibleTwabPeriodOffset
error IncompatibleTwabPeriodOffset()
InsufficientLiquidity
error InsufficientLiquidity(uint104 requestedLiquidity)
InsufficientReserve
error InsufficientReserve(uint104 amount, uint104 reserve)
InsufficientRewardsError
error InsufficientRewardsError(uint256 requested, uint256 available)
InvalidDrawRange
error InvalidDrawRange(uint24 startDrawId, uint24 endDrawId)
InvalidPrizeIndex
error InvalidPrizeIndex(uint32 invalidPrizeIndex, uint32 prizeCount, uint8 tier)
InvalidTier
error InvalidTier(uint8 tier, uint8 numberOfTiers)
NoDrawsAwarded
error NoDrawsAwarded()
NumberOfTiersGreaterThanMaximum
error NumberOfTiersGreaterThanMaximum(uint8 numTiers)
NumberOfTiersLessThanMinimum
error NumberOfTiersLessThanMinimum(uint8 numTiers)
OnlyCreator
error OnlyCreator()
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
PRBMath_MulDiv18_Overflow
error PRBMath_MulDiv18_Overflow(uint256 x, uint256 y)
PRBMath_SD59x18_Ceil_Overflow
error PRBMath_SD59x18_Ceil_Overflow(int256 x)
PRBMath_SD59x18_Convert_Overflow
error PRBMath_SD59x18_Convert_Overflow(int256 x)
PRBMath_SD59x18_Convert_Underflow
error PRBMath_SD59x18_Convert_Underflow(int256 x)
PRBMath_SD59x18_Div_InputTooSmall
error PRBMath_SD59x18_Div_InputTooSmall()
PRBMath_SD59x18_Div_Overflow
error PRBMath_SD59x18_Div_Overflow(int256 x, int256 y)
PRBMath_SD59x18_Exp2_InputTooBig
error PRBMath_SD59x18_Exp2_InputTooBig(int256 x)
PRBMath_SD59x18_Log_InputTooSmall
error PRBMath_SD59x18_Log_InputTooSmall(int256 x)
PRBMath_SD59x18_Mul_InputTooSmall
error PRBMath_SD59x18_Mul_InputTooSmall()
PRBMath_SD59x18_Mul_Overflow
error PRBMath_SD59x18_Mul_Overflow(int256 x, int256 y)
PRBMath_SD59x18_Sqrt_NegativeInput
error PRBMath_SD59x18_Sqrt_NegativeInput(int256 x)
PRBMath_SD59x18_Sqrt_Overflow
error PRBMath_SD59x18_Sqrt_Overflow(int256 x)
PRBMath_UD60x18_Convert_Overflow
error PRBMath_UD60x18_Convert_Overflow(uint256 x)
PrizeIsZero
error PrizeIsZero()
PrizePoolNotShutdown
error PrizePoolNotShutdown()
PrizePoolShutdown
error PrizePoolShutdown()
RandomNumberIsZero
error RandomNumberIsZero()
RangeSizeZero
error RangeSizeZero()
RewardRecipientZeroAddress
error RewardRecipientZeroAddress()
RewardTooLarge
error RewardTooLarge(uint256 reward, uint256 maxReward)
TierLiquidityUtilizationRateCannotBeZero
error TierLiquidityUtilizationRateCannotBeZero()
TierLiquidityUtilizationRateGreaterThanOne
error TierLiquidityUtilizationRateGreaterThanOne()
UpperBoundGtZero
error UpperBoundGtZero()
creation bytecode
0x6106a06040523480156200001257600080fd5b5060405162007cfe38038062007cfe833981016040819052620000359162001c53565b606081015160e082015161010083015161012084015161014085015160c0860151600460ff861610156200008657604051630ea0e9f960e01b815260ff861660048201526024015b60405180910390fd5b600b60ff86161115620000b25760405163269d5ed360e11b815260ff861660048201526024016200007d565b670de0b6b3a7640000861115620000dc5760405163587c36fd60e01b815260040160405180910390fd5b85600003620000fe57604051631d01c47d60e01b815260040160405180910390fd5b6105c08690526001805460ff808816600160801b0260ff60801b1990921691909117909155848116610560528381166105805282166105a05262ffffff8116610540526200015b62000151600283900b90565b60015b9062000729565b608052670de0b6b3a764000060a05262000179600160038362000809565b60c0526200018b600160048362000809565b60e0526200019d600260048362000809565b61010052620001b0600160058362000809565b61012052620001c3600260058362000809565b61014052620001d6600360058362000809565b61016052620001e9600160068362000809565b61018052620001fc600260068362000809565b6101a0526200020f600360068362000809565b6101c05262000222600460068362000809565b6101e05262000235600160078362000809565b6102005262000248600260078362000809565b610220526200025b600360078362000809565b610240526200026e600460078362000809565b6102605262000281600560078362000809565b6102805262000294600160088362000809565b6102a052620002a7600260088362000809565b6102c052620002ba600360088362000809565b6102e052620002cd600460088362000809565b61030052620002e0600560088362000809565b61032052620002f3600660088362000809565b6103405262000306600160098362000809565b6103605262000319600260098362000809565b610380526200032c600360098362000809565b6103a0526200033f600460098362000809565b6103c05262000352600560098362000809565b6103e05262000365600660098362000809565b6104005262000378600760098362000809565b6104205262000388600462000869565b63ffffffff16610440526200039e600562000869565b63ffffffff1661046052620003b4600662000869565b63ffffffff1661048052620003ca600762000869565b63ffffffff166104a052620003e0600862000869565b63ffffffff166104c052620003f6600962000869565b63ffffffff166104e0526200040c600a62000869565b63ffffffff166105005262000422600b62000869565b63ffffffff166105205250505061016084015162ffffff1660000392506200046091505057604051638bc24f2b60e01b815260040160405180910390fd5b8060c0015162ffffff1681610160015162ffffff1611156200049557604051635e44714960e01b815260040160405180910390fd5b428160a0015165ffffffffffff161015620004c3576040516309f5296560e11b815260040160405180910390fd5b61016e61ffff168160c0015162ffffff1610620005195760c0810151620004ee600161016e62001d67565b6040516321288fed60e01b815262ffffff909216600483015261ffff1660248201526044016200007d565b600081602001516001600160a01b0316634c08d8e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200055e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000584919062001d8c565b63ffffffff169050600082602001516001600160a01b031663e7a891b96040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f7919062001d8c565b63ffffffff1690508065ffffffffffff16836080015165ffffffffffff1610806200063a57508083608001516200062f919062001dca565b65ffffffffffff1615155b156200065957604051635cbc82cb60e11b815260040160405180910390fd5b80828460a001516200066c919062001df2565b62000678919062001dca565b65ffffffffffff16156200069f576040516317d5b2ab60e11b815260040160405180910390fd5b60408301516001600160a01b0316620006cb5760405163f0d1a69360e01b815260040160405180910390fd5b505060408101516001600160a01b039081166106805261016082015162ffffff1661066052815181166105e05260208201511661060052608081015165ffffffffffff9081166106205260a090910151166106405262001ffc565b90565b60008282600160ff1b821480620007435750600160ff1b81145b1562000762576040516309fe2b4560e41b815260040160405180910390fd5b600080600084126200077557836200077a565b836000035b9150600083126200078c578262000791565b826000035b90506000620007aa83670de0b6b3a764000084620008c5565b90506001600160ff1b03811115620007e05760405163d49c26b360e01b815260048101899052602481018890526044016200007d565b60001985851813620007fc81620007f8578260000390565b8290565b9998505050505050505050565b6000806200081984600162001e14565b90506200085e6200084862000842600084900b620001546200083c868b62001e38565b60000b90565b620009a0565b62000857600286900b62000151565b9062000a2c565b9150505b9392505050565b60008060005b620008868162000880818762000ae0565b62000eba565b62000892908362001e5c565b915080620008a08162001e7c565b9150620008b1905060018562001e9e565b60ff168160ff16106200086f575092915050565b60008080600019858709858702925082811083820303915050806000036200090457838281620008f957620008f962001db4565b049250505062000862565b8381106200093757604051630c740aef60e31b81526004810187905260248101869052604481018590526064016200007d565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008181811215620009c95760405163b9b0f49b60e01b8152600481018490526024016200007d565b620009e4670de0b6b3a76400006001600160ff1b0362001eba565b81131562000a095760405163063103bf60e01b8152600481018490526024016200007d565b600062000a20670de0b6b3a7640000830262000ed8565b9050805b949350505050565b6000828281830362000a5b57801562000a4757600062000a51565b670de0b6b3a76400005b9250505062000ada565b670de0b6b3a7640000820362000a7e57670de0b6b3a76400009250505062000ada565b8060000362000a9a57670de0b6b3a76400009250505062000ada565b670de0b6b3a7640000810362000ab557849250505062000ada565b62000ad562000acf62000ac88762001071565b86620011e5565b62001293565b925050505b92915050565b60008260ff1660000362000af8575060805162000ada565b8160ff1660030362000b205760028360ff161162000b1a575060a05162000ada565b62000eb2565b8160ff1660040362000b425760038360ff161162000b1a575060a05162000ada565b8160ff1660050362000b7a578260ff1660010362000b64575060c05162000ada565b60048360ff161162000b1a575060a05162000ada565b8160ff1660060362000bc9578260ff1660010362000b9c575060e05162000ada565b8260ff1660020362000bb357506101005162000ada565b60058360ff161162000b1a575060a05162000ada565b8160ff1660070362000c30578260ff1660010362000bec57506101205162000ada565b8260ff1660020362000c0357506101405162000ada565b8260ff1660030362000c1a57506101605162000ada565b60068360ff161162000b1a575060a05162000ada565b8160ff1660080362000cae578260ff1660010362000c5357506101805162000ada565b8260ff1660020362000c6a57506101a05162000ada565b8260ff1660030362000c8157506101c05162000ada565b8260ff1660040362000c9857506101e05162000ada565b60078360ff161162000b1a575060a05162000ada565b8160ff1660090362000d43578260ff1660010362000cd157506102005162000ada565b8260ff1660020362000ce857506102205162000ada565b8260ff1660030362000cff57506102405162000ada565b8260ff1660040362000d1657506102605162000ada565b8260ff1660050362000d2d57506102805162000ada565b60088360ff161162000b1a575060a05162000ada565b8160ff16600a0362000def578260ff1660010362000d6657506102a05162000ada565b8260ff1660020362000d7d57506102c05162000ada565b8260ff1660030362000d9457506102e05162000ada565b8260ff1660040362000dab57506103005162000ada565b8260ff1660050362000dc257506103205162000ada565b8260ff1660060362000dd957506103405162000ada565b60098360ff161162000b1a575060a05162000ada565b8160ff16600b0362000eb2578260ff1660010362000e1257506103605162000ada565b8260ff1660020362000e2957506103805162000ada565b8260ff1660030362000e4057506103a05162000ada565b8260ff1660040362000e5757506103c05162000ada565b8260ff1660050362000e6e57506103e05162000ada565b8260ff1660060362000e8557506104005162000ada565b8260ff1660070362000e9c57506104205162000ada565b600a8360ff161162000eb2575060a05162000ada565b600062000862565b600062000862620007268362000ed1828762001350565b90620011e5565b60008160000362000eeb57506000919050565b50600181600160801b811062000f065760409190911b9060801c5b68010000000000000000811062000f225760209190911b9060401c5b640100000000811062000f3a5760109190911b9060201c5b62010000811062000f505760089190911b9060101c5b610100811062000f655760049190911b9060081c5b6010811062000f795760029190911b9060041c5b6004811062000f8a57600182901b91505b600182848162000f9e5762000f9e62001db4565b048301901c9150600182848162000fb95762000fb962001db4565b048301901c9150600182848162000fd45762000fd462001db4565b048301901c9150600182848162000fef5762000fef62001db4565b048301901c915060018284816200100a576200100a62001db4565b048301901c9150600182848162001025576200102562001db4565b048301901c9150600182848162001040576200104062001db4565b048301901c915060008284816200105b576200105b62001db4565b0490508083106200106a578092505b5050919050565b600081818113620010995760405163059b101b60e01b8152600481018490526024016200007d565b6000670de0b6b3a76400008212620010b457506001620010dd565b50600019816ec097ce7bc90715b34b9f100000000081620010d957620010d962001db4565b0591505b600062001160670de0b6b3a7640000840560016001600160801b03821160071b91821c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810283821d670de0b6b3a763ffff1981016200118d5750909102949350505050565b671bc16d674ec800006706f05b59d3b200005b6000811315620011d657670de0b6b3a7640000838002059250818312620011cd579283019260019290921d915b60011d620011a0565b50505091909102949350505050565b60008282600160ff1b821480620011ff5750600160ff1b81145b156200121e5760405163a6070c2560e01b815260040160405180910390fd5b6000806000841262001231578362001236565b836000035b9150600083126200124857826200124d565b826000035b905060006200125d83836200135f565b90506001600160ff1b03811115620007e05760405163120b5b4360e01b815260048101899052602481018890526044016200007d565b60008181811215620012fe5768033dd1780914b9711419811215620012bb5750600092915050565b620012f6620012d262000726600084900362001293565b6ec097ce7bc90715b34b9f100000000081620012f257620012f262001db4565b0590565b91506200134a565b680a688906bd8affffff8113156200132c57604051626c1a0560e31b8152600481018490526024016200007d565b670de0b6b3a7640000604082901b0562000a24620007268262001419565b50919050565b600062000ada82600462001feb565b6000808060001984860984860292508281108382030391505080600003620013955750670de0b6b3a76400009004905062000ada565b670de0b6b3a76400008110620013c957604051635173648d60e01b815260048101869052602481018590526044016200007d565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b600160bf1b67ff000000000000008216156200152f576780000000000000008216156200144f5768016a09e667f3bcc9090260401c5b6740000000000000008216156200146f576801306fe0a31b7152df0260401c5b6720000000000000008216156200148f576801172b83c7d517adce0260401c5b671000000000000000821615620014af5768010b5586cf9890f62a0260401c5b670800000000000000821615620014cf576801059b0d31585743ae0260401c5b670400000000000000821615620014ef57680102c9a3e778060ee70260401c5b6702000000000000008216156200150f5768010163da9fb33356d80260401c5b6701000000000000008216156200152f57680100b1afa5abcbed610260401c5b66ff000000000000821615620016375766800000000000008216156200155e5768010058c86da1c09ea20260401c5b66400000000000008216156200157d576801002c605e2e8cec500260401c5b66200000000000008216156200159c57680100162f3904051fa10260401c5b6610000000000000821615620015bb576801000b175effdc76ba0260401c5b6608000000000000821615620015da57680100058ba01fb9f96d0260401c5b6604000000000000821615620015f95768010002c5cc37da94920260401c5b660200000000000082161562001618576801000162e525ee05470260401c5b6601000000000000821615620016375768010000b17255775c040260401c5b65ff000000000082161562001736576580000000000082161562001664576801000058b91b5bc9ae0260401c5b654000000000008216156200168257680100002c5c89d5ec6d0260401c5b65200000000000821615620016a05768010000162e43f4f8310260401c5b65100000000000821615620016be57680100000b1721bcfc9a0260401c5b65080000000000821615620016dc5768010000058b90cf1e6e0260401c5b65040000000000821615620016fa576801000002c5c863b73f0260401c5b650200000000008216156200171857680100000162e430e5a20260401c5b6501000000000082161562001736576801000000b1721835510260401c5b64ff000000008216156200182c576480000000008216156200176157680100000058b90c0b490260401c5b6440000000008216156200177e5768010000002c5c8601cc0260401c5b6420000000008216156200179b576801000000162e42fff00260401c5b641000000000821615620017b85768010000000b17217fbb0260401c5b640800000000821615620017d5576801000000058b90bfce0260401c5b640400000000821615620017f257680100000002c5c85fe30260401c5b6402000000008216156200180f5768010000000162e42ff10260401c5b6401000000008216156200182c57680100000000b17217f80260401c5b63ff00000082161562001919576380000000821615620018555768010000000058b90bfc0260401c5b634000000082161562001871576801000000002c5c85fe0260401c5b63200000008216156200188d57680100000000162e42ff0260401c5b6310000000821615620018a9576801000000000b17217f0260401c5b6308000000821615620018c557680100000000058b90c00260401c5b6304000000821615620018e15768010000000002c5c8600260401c5b6302000000821615620018fd576801000000000162e4300260401c5b6301000000821615620019195768010000000000b172180260401c5b62ff0000821615620019fd576280000082161562001940576801000000000058b90c0260401c5b624000008216156200195b57680100000000002c5c860260401c5b62200000821615620019765768010000000000162e430260401c5b621000008216156200199157680100000000000b17210260401c5b62080000821615620019ac5768010000000000058b910260401c5b62040000821615620019c7576801000000000002c5c80260401c5b62020000821615620019e257680100000000000162e40260401c5b62010000821615620019fd576801000000000000b1720260401c5b61ff0082161562001ad85761800082161562001a2257680100000000000058b90260401c5b61400082161562001a3c5768010000000000002c5d0260401c5b61200082161562001a56576801000000000000162e0260401c5b61100082161562001a705768010000000000000b170260401c5b61080082161562001a8a576801000000000000058c0260401c5b61040082161562001aa457680100000000000002c60260401c5b61020082161562001abe57680100000000000001630260401c5b61010082161562001ad857680100000000000000b10260401c5b60ff82161562001baa57608082161562001afb57680100000000000000590260401c5b604082161562001b14576801000000000000002c0260401c5b602082161562001b2d57680100000000000000160260401c5b601082161562001b46576801000000000000000b0260401c5b600882161562001b5f57680100000000000000060260401c5b600482161562001b7857680100000000000000030260401c5b600282161562001b9157680100000000000000010260401c5b600182161562001baa57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405161018081016001600160401b038111828210171562001bf357634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b038116811462001c1157600080fd5b919050565b805165ffffffffffff8116811462001c1157600080fd5b805162ffffff8116811462001c1157600080fd5b805160ff8116811462001c1157600080fd5b6000610180828403121562001c6757600080fd5b62001c7162001bc1565b62001c7c8362001bf9565b815262001c8c6020840162001bf9565b602082015262001c9f6040840162001bf9565b60408201526060830151606082015262001cbc6080840162001c16565b608082015262001ccf60a0840162001c16565b60a082015262001ce260c0840162001c2d565b60c082015262001cf560e0840162001c41565b60e082015261010062001d0a81850162001c41565b9082015261012062001d1e84820162001c41565b9082015261014062001d3284820162001c41565b9082015261016062001d4684820162001c2d565b908201529392505050565b634e487b7160e01b600052601160045260246000fd5b61ffff82811682821603908082111562001d855762001d8562001d51565b5092915050565b60006020828403121562001d9f57600080fd5b815163ffffffff811681146200086257600080fd5b634e487b7160e01b600052601260045260246000fd5b600065ffffffffffff8084168062001de65762001de662001db4565b92169190910692915050565b65ffffffffffff82811682821603908082111562001d855762001d8562001d51565b600082810b9082900b03607f198112607f8213171562000ada5762000ada62001d51565b600081810b9083900b01607f8113607f198212171562000ada5762000ada62001d51565b63ffffffff81811683821601908082111562001d855762001d8562001d51565b600060ff821660ff810362001e955762001e9562001d51565b60010192915050565b60ff828116828216039081111562000ada5762000ada62001d51565b60008262001ecc5762001ecc62001db4565b600160ff1b82146000198414161562001ee95762001ee962001d51565b500590565b600181815b8085111562001f2f57816000190482111562001f135762001f1362001d51565b8085161562001f2157918102915b93841c939080029062001ef3565b509250929050565b60008262001f485750600162000ada565b8162001f575750600062000ada565b816001811462001f70576002811462001f7b5762001f9b565b600191505062000ada565b60ff84111562001f8f5762001f8f62001d51565b50506001821b62000ada565b5060208310610133831016604e8410600b841016171562001fc0575081810a62000ada565b62001fcc838362001eee565b806000190482111562001fe35762001fe362001d51565b029392505050565b60006200086260ff84168362001f37565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e05161030051610320516103405161036051610380516103a0516103c0516103e05161040051610420516104405161046051610480516104a0516104c0516104e05161050051610520516105405161056051610580516105a0516105c0516105e05161060051610620516106405161066051610680516159c86200233660003960006113a101526000818161044a01526113580152600081816108cd015281816119eb0152611ffc015260008181610a0501528181611a1b01528181611fbd0152818161238501526125390152600081816108650152818161152b0152818161178e0152611833015260008181610935015281816113060152818161196e01528181611a86015281816121760152818161230c0152612e850152600081816104a8015261494901526000818161066b015281816115fa0152613fb1015260008181610754015281816115cf01526140d50152600081816106d50152818161161e01526140af0152600081816109de01526123e3015260008181611d290152613a9f015260008181611cf70152613a62015260008181611cc50152613a25015260008181611c9301526139e8015260008181611c6101526139ab015260008181611c2f015261396e015260008181611bfd015261393101526000611bcb01526000612e0801526000612dd601526000612da401526000612d7201526000612d4001526000612d0e01526000612cdc01526000612c6d01526000612c3b01526000612c0901526000612bd701526000612ba501526000612b7301526000612b0401526000612ad201526000612aa001526000612a6e01526000612a3c015260006129cd0152600061299b0152600061296901526000612937015260006128c80152600061289601526000612864015260006127f5015260006127c3015260006127540152600081816126d5015281816127170152818161278601528181612827015281816128fa015281816129ff01528181612b3601528181612c9f0152612e3a0152600061269801526159c86000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c80638cd8b2f611610220578063c052b56e11610130578063e4ff7a89116100b8578063eedfb45011610087578063eedfb45014610a27578063f8632be414610a3a578063face493214610a42578063fc8a081014610a55578063fe77315114610a8057600080fd5b8063e4ff7a89146109b3578063e631674a146109c6578063e8196f63146109d9578063ed88b77f14610a0057600080fd5b8063d0ef024a116100ff578063d0ef024a14610930578063d5002f2e14610957578063d6ef7af01461095f578063dd1ecaec14610972578063e37a85481461098557600080fd5b8063c052b56e146108c8578063cd3293de146108ef578063cefa23381461090a578063cf7b0df81461091d57600080fd5b8063a84037b6116101b3578063b0812d7b11610182578063b0812d7b14610860578063b31b69e014610887578063b7b02fc81461089a578063bcb00910146108ad578063bf86d690146108c057600080fd5b8063a84037b61461082a578063aa7e4f891461083d578063aa8de0ea14610850578063aff78fbb1461085857600080fd5b8063948231fb116101ef578063948231fb146107e6578063980bfca9146107f9578063a1270e2e1461080f578063a55b9c351461082257600080fd5b80638cd8b2f61461079e5780638da4d3c9146107b15780639199687a146107c057806393b72539146107d357600080fd5b80634b319713116103265780636067e20f116102ae5780636e27a2e51161027d5780636e27a2e514610720578063771de8a714610734578063790e3d47146107475780637d3fba051461074f57806380fffbd91461077657600080fd5b80636067e20f1461068d57806360df8caa146106bd57806364909dbd146106d057806367b40cf7146106f757600080fd5b806355203645116102f5578063552036451461060e578063559a692014610616578063571d0223146106365780635758e7051461065e57806358c7aa0f1461066657600080fd5b80634b319713146105bd5780634e0dd782146105d55780634f051a72146105e8578063543c7445146105fb57600080fd5b80632f695cc9116103a957806345e167781161037857806345e1677814610550578063479cdd7c14610563578063494219961461057657806349d1059b1461058a5780634a767a4e146105b557600080fd5b80632f695cc9146105135780633f0192eb1461051b578063447d41b51461052e578063452266421461053657600080fd5b806313c846ee116103e557806313c846ee146104a35780631d522f1a146104ca578063269fdac8146104eb5780632b2261e3146104fe57600080fd5b806302abcc1e146104175780630937eb541461043d5780630aa955881461044557806310501d0414610480575b600080fd5b61042a61042536600461509f565b610a93565b6040519081526020015b60405180910390f35b61042a610aaa565b61046c7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff9091168152602001610434565b61049361048e3660046150d2565b610ac3565b6040519015158152602001610434565b61042a7f000000000000000000000000000000000000000000000000000000000000000081565b6104d361f2ee81565b6040516001600160a01b039091168152602001610434565b6104936104f9366004615129565b610ae4565b61051161050c366004615194565b610b48565b005b61046c610d25565b61042a6105293660046151be565b610d32565b61046c610da6565b61053e610de0565b60405160ff9091168152602001610434565b61053e61055e366004615201565b610df0565b61042a61057136600461521c565b610e7a565b600154600160881b900462ffffff1661046c565b60015461059d906001600160801b031681565b6040516001600160801b039091168152602001610434565b61042a611348565b602f54630100000090046001600160801b031661042a565b6105116105e3366004615290565b611396565b61042a6105f636600461509f565b611453565b61046c61060936600461509f565b61148b565b602d5461042a565b610629610624366004615290565b6114e6565b60405161043491906152ab565b6106496106443660046152d4565b61151b565b60405163ffffffff9091168152602001610434565b61042a611526565b61053e7f000000000000000000000000000000000000000000000000000000000000000081565b6001546106a690600160a01b900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610434565b61042a6106cb3660046152d4565b6115c6565b61053e7f000000000000000000000000000000000000000000000000000000000000000081565b61042a610705366004615290565b6001600160a01b031660009081526005602052604090205490565b60015461053e90600160801b900460ff1681565b6106496107423660046152d4565b61166a565b61042a6116b7565b61053e7f000000000000000000000000000000000000000000000000000000000000000081565b6107896107843660046152ef565b611733565b60408051928352602083019190915201610434565b6105116107ac366004615338565b6118ad565b602f5461046c9062ffffff1681565b61046c6107ce366004615353565b6119e7565b6105116107e1366004615353565b611a79565b602e546104d3906001600160a01b031681565b610801611abe565b60405161043492919061536c565b61064961081d3660046152d4565b611bbb565b610629611d4d565b61042a6108383660046151be565b611d6b565b61049361084b3660046152d4565b611d8e565b610649611dba565b61046c611dd3565b6104d37f000000000000000000000000000000000000000000000000000000000000000081565b610493610895366004615129565b611e1d565b6106a66108a83660046150d2565b611fb9565b61042a6108bb3660046152d4565b612020565b610493612071565b6106a67f000000000000000000000000000000000000000000000000000000000000000081565b6002546040516001600160601b039091168152602001610434565b61049361091836600461539c565b612083565b61042a61092b366004615401565b6120df565b6104d37f000000000000000000000000000000000000000000000000000000000000000081565b61042a6121ec565b61051161096d36600461542b565b612205565b6106a66109803660046150d2565b61237e565b610998610993366004615401565b6123af565b60408051825181526020928301519281019290925201610434565b61046c6109c1366004615353565b61248f565b61042a6109d4366004615455565b612688565b61046c7f000000000000000000000000000000000000000000000000000000000000000081565b6106a67f000000000000000000000000000000000000000000000000000000000000000081565b61042a610a3536600461542b565b612e65565b610649612fbe565b61046c610a503660046152d4565b612fd7565b610a68610a633660046152d4565b612ffa565b6040516001600160681b039091168152602001610434565b61042a610a8e366004615401565b613029565b6000610aa1600684846131fa565b90505b92915050565b6000610abe610ab96006613624565b61368c565b905090565b6000610ad3610980836001615495565b65ffffffffffff1642101592915050565b6001600160a01b0384811660009081526004602090815260408083209387168352928152828220600154600160881b900462ffffff168352815282822060ff868116845290825283832063ffffffff8616845290915291902054165b949350505050565b602e546001600160a01b03163314610b8d57602e546040516311fb346360e01b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b610b95612071565b15610bb35760405163bee46da560e01b815260040160405180910390fd5b6001600160a01b038216610bda57604051633467947f60e21b815260040160405180910390fd5b6002546001600160601b039081169082161115610c215760025460405163046b156b60e41b81526001600160601b0380841660048301529091166024820152604401610b84565b600280546bffffffffffffffffffffffff1981166001600160601b039182168490038216179091556001600160a01b0383166000908152600560205260408120805492841692909190610c759084906154b1565b9091555050602f54610cb390610ca5906001600160601b03841690600160981b90046001600160681b03166154c4565b6001600160681b03166136e9565b602f80546001600160681b0392909216600160981b026001600160981b039092169190911790556040516001600160601b03821681526001600160a01b038316907fecb1c952c58fd78de1639daecf690934ce9017bbd60ceaf3355f80ee8d24e7379060200160405180910390a25050565b6000610abe6107ce611526565b600061f2ed196001600160a01b03851601610d515760005b9050610d9f565b600080610d5f868686613756565b9150915080600003610d7657600092505050610d9f565b610d9a610d88610d85836137df565b90565b610d94610d85856137df565b90613849565b925050505b9392505050565b600080610db1610d25565b90506000610dbe426119e7565b90508162ffffff168162ffffff1611610dd75780610dd9565b815b9250505090565b602f54600090610abe9062ffffff165b600154600090600160881b900462ffffff1615610e63576000610e128361391f565b60015490915060ff600160801b9091048116908216811015610e4057610e398160016154e4565b9150610e5c565b8060ff168260ff161015610e5c57610e596001826154fd565b91505b5092915050565b5050600154600160801b900460ff1690565b919050565b600154600090600160881b900462ffffff16610e9581610ac3565b15610eb357604051632253b77960e01b815260040160405180910390fd5b6001600160a01b038316158015610ed357506000846001600160601b0316115b15610ef157604051633467947f60e21b815260040160405180910390fd5b600154600160801b900460ff166000610f0a8983613ae3565b905080602001516001600160681b0316866001600160601b03161115610f6357602081015160405163499c160960e11b81526001600160601b03881660048201526001600160681b039091166024820152604401610b84565b80602001516001600160681b0316600003610f91576040516331d7a46d60e01b815260040160405180910390fd5b610f9d338b8b8b611e1d565b610fe057604051637032605160e11b81523360048201526001600160a01b038b16602482015260ff8a16604482015263ffffffff89166064820152608401610b84565b3360009081526004602090815260408083206001600160a01b038e168452825280832062ffffff87168452825280832060ff808e16855290835281842063ffffffff8d168552909252909120541615611072576040516336ce4d6360e21b81523360048201526001600160a01b038b16602482015260ff8a16604482015263ffffffff89166064820152608401610b84565b3360009081526004602090815260408083206001600160a01b038e168452825280832062ffffff87168452825280832060ff8d168452825280832063ffffffff8c1684528252909120805460ff191660011790558101516110d69082908b90613baa565b60006001600160601b03871615611184576040516001600160601b03881681526001600160a01b038716907feeb4ea63ac93d08466c88060e80ed42f0641debf45e931025fbb35faf5f2ad1a9060200160405180910390a26001600160a01b038616600090815260056020526040812080546001600160601b038a16929061115f9084906154b1565b90915550505060208101516001600160601b03871690036001600160681b0316611194565b5060208101516001600160681b03165b602f805462ffffff169060006111a983615516565b91906101000a81548162ffffff021916908362ffffff160217905550506111f881602f60039054906101000a90046001600160801b03166001600160801b03166111f391906154b1565b613e0f565b602f80546001600160801b03929092166301000000026301000000600160981b0319909216919091179081905561124e90610ca5906001600160601b038a16906001600160681b03600160981b909104166154c4565b602f80546001600160681b0392909216600160981b026001600160981b039283161790556040805162ffffff8716815260ff8d16602082015263ffffffff8c169181019190915290821660608201526001600160601b03881660808201526001600160a01b0387811660a0830152808a1691908d169033907f81d4e3306aa30f56dc9c3949abd8c27539b445f9ef380425f39f3f7114888e4f9060c00160405180910390a4801561132d5761132d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168983613e78565b50602001516001600160681b03169998505050505050505050565b60015460009061138990610980907f000000000000000000000000000000000000000000000000000000000000000090600160881b900462ffffff16615495565b65ffffffffffff16905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113df576040516308f78f9960e31b815260040160405180910390fd5b602e546001600160a01b0316156114095760405163f113e20d60e01b815260040160405180910390fd5b602e80546001600160a01b0319166001600160a01b0383169081179091556040517f358e588c5cd5d2bb706322d2e830055eeabb50b8db83d24061f87aff7dd0852690600090a250565b61f2ee60009081526003602052610aa17f1d8e29c4e3375eb7ea0a68899d0c1506ffa0d406a1bddf68d17aeb693ef45d5184846131fa565b600062ffffff8216156114cd578262ffffff168262ffffff16116114c3576114b38284615538565b6114be906001615495565b6114c6565b60015b9050610aa4565b60405163b948ace160e01b815260040160405180910390fd5b60408051808201909152600080825260208201526001600160a01b0382166000908152600360205260409020610aa490613624565b6000610aa482613ee0565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663495b77466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190615554565b905060006115b7611348565b9050818110610aa45781610dd9565b60006115f660ff7f000000000000000000000000000000000000000000000000000000000000000016600261556d565b60ff7f00000000000000000000000000000000000000000000000000000000000000008116907f0000000000000000000000000000000000000000000000000000000000000000166116496002866154fd565b60ff16611656919061556d565b61166091906154b1565b610aa491906154b1565b6000600460ff8316108015906116845750600b60ff831611155b156116af5761169c6116976001846154fd565b613ee0565b6116a583611bbb565b610aa49190615584565b506000919050565b600154600090600160801b810460ff1690600160881b900462ffffff16826117218383156116f557602f546116f09062ffffff16610df0565b6116f7565b845b600180546001600160801b03169061171c90611714908890615495565b610425611dd3565b613eed565b506001600160601b0316949350505050565b600080600061174185611fb9565b9050600061174e8561237e565b604051635d9abccd60e11b81526001600160a01b038a81166004830152898116602483015265ffffffffffff8086166044840152831660648301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bb35799a90608401602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190615554565b60405163e7d7b22560e01b81526001600160a01b038a8116600483015265ffffffffffff8086166024840152841660448301529195507f00000000000000000000000000000000000000000000000000000000000000009091169063e7d7b22590606401602060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a09190615554565b9250505094509492505050565b6118b5612071565b156118d35760405163bee46da560e01b815260040160405180910390fd5b600280548291906000906118f19084906001600160601b03166155a1565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080602e60148282829054906101000a90046001600160601b031661193991906155a1565b92506101000a8154816001600160601b0302191690836001600160601b031602179055506119a63330836001600160601b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613fff909392919063ffffffff16565b6040516001600160601b038216815233907f1d0cc8799b7a2ca858861054abd7190041668c65caaae12953b2b3ca09ac2c2d9060200160405180910390a250565b60007f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff81168310611a70577f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff168165ffffffffffff1684611a5691906155c1565b611a6091906155ea565b611a6b906001615495565b610d9f565b60019392505050565b611aae6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084613fff565b611aba61f2ee82612e65565b5050565b6000611ada604080518082019091526000808252602082015290565b611ae2612071565b611aea579091565b603054611b11906001600160601b03811690600160601b90046001600160a01b03166155fe565b6001600160a01b0316600003611b8557611b2b6006613624565b805160208201516001600160a01b0316600160601b026001600160601b0390911617603055602f549091506001600160681b03600160981b90910416611b708261368c565b611b7a91906155c1565b603181905591509091565b5050604080518082019091526030546001600160601b0381168252600160601b90046001600160a01b0316602082015260315491565b60008160ff16600403611bef57507f0000000000000000000000000000000000000000000000000000000000000000919050565b8160ff16600503611c2157507f0000000000000000000000000000000000000000000000000000000000000000919050565b8160ff16600603611c5357507f0000000000000000000000000000000000000000000000000000000000000000919050565b8160ff16600703611c8557507f0000000000000000000000000000000000000000000000000000000000000000919050565b8160ff16600803611cb757507f0000000000000000000000000000000000000000000000000000000000000000919050565b8160ff16600903611ce957507f0000000000000000000000000000000000000000000000000000000000000000919050565b8160ff16600a03611d1b57507f0000000000000000000000000000000000000000000000000000000000000000919050565b8160ff16600b036116af57507f0000000000000000000000000000000000000000000000000000000000000000919050565b6040805180820190915260008082526020820152610abe6006613624565b6001600160a01b0383166000908152600360205260408120610b409084846131fa565b600154600090611daa90600290600160801b900460ff166154fd565b60ff168260ff1610159050919050565b600154600090610abe90600160801b900460ff1661166a565b600080611dde610da6565b6001805491925090611dfc90600160881b900462ffffff1683615538565b62ffffff1611611e0c5780611e17565b611e17600182615538565b91505090565b600154600090600160881b900462ffffff16808203611e4f5760405163bd7210dd60e01b815260040160405180910390fd5b60015460ff600160801b909104811690851610611e985760015460405163014560a960e41b815260ff8681166004830152600160801b9092049091166024820152604401610b84565b6000611eb385600160109054906101000a900460ff16612688565b90506000611ec4836106098461403d565b90506000611ed187613ee0565b90508063ffffffff168663ffffffff1610611f185760405163dae230d160e01b815263ffffffff80881660048301528216602482015260ff88166044820152606401610b84565b602d546040805162ffffff87166020808301919091526001600160a01b03808e16838501528c16606083015260ff8b16608083015263ffffffff8a1660a083015260c0808301949094528251808303909401845260e090910190915281519101206000611f868b8588610d32565b9050600080611f978d8d888b611733565b91509150611fa8848383868b614061565b9d9c50505050505050505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611fe7600184615538565b62ffffff16611ff6919061561e565b610aa4907f0000000000000000000000000000000000000000000000000000000000000000615648565b60015460009060ff600160801b909104811690831681111561206857610d9f6120498483613ae3565b604001516001546001600160801b03166120638685614093565b6140fc565b50600092915050565b600061207b611526565b421015905090565b6001600160a01b038086166000908152600460209081526040808320938816835292815282822062ffffff87168352815282822060ff808716845290825283832063ffffffff8616845290915291902054165b95945050505050565b60006120e9612071565b6121065760405163f84b2b3360e01b815260040160405180910390fd5b60006121128433613029565b905061211e6006613624565b6001600160a01b038086166000908152603260209081526040808320338452825290912083519390910151909116600160601b026001600160601b039092169190911790558015610aa15761219d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168483613e78565b80602f60038282829054906101000a90046001600160801b03166121c19190615667565b92506101000a8154816001600160801b0302191690836001600160801b031602179055509392505050565b600154600090610abe90600160801b900460ff166115c6565b33600090815260056020526040902054808211156122405760405163353d47df60e21b81526004810183905260248101829052604401610b84565b3360009081526005602052604090208282039055602f54612276906111f3908490630100000090046001600160801b03166154b1565b602f80546001600160801b03929092166301000000026301000000600160981b031990921691909117908190556122c8906122c39084906001600160681b03600160981b909104166155c1565b6136e9565b602f80546001600160681b0392909216600160981b026001600160981b039092169190911790556001600160a01b0383163014612333576123336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484613e78565b60408051838152602081018390526001600160a01b0385169133917ff4e9e956ba4b65051e84982c3ade043c89890cdbc452e9e446afe09cd4db40c8910160405180910390a3505050565b6000611ff67f000000000000000000000000000000000000000000000000000000000000000062ffffff841661561e565b6040805180820190915260008082526020820152600060016123cf610d25565b6123d99190615538565b90506000612407827f000000000000000000000000000000000000000000000000000000000000000061148b565b9050600080612417878486613756565b9150915060008061242a89898789611733565b915091508060000361245a5760405180604001604052806000815260200160008152509650505050505050610aa4565b60405180604001604052808386612471919061556d565b8152602001612480838661556d565b90529998505050505050505050565b602e546000906001600160a01b031633146124d257602e546040516311fb346360e01b81523360048201526001600160a01b039091166024820152604401610b84565b6124da612071565b156124f85760405163bee46da560e01b815260040160405180910390fd5b81600003612519576040516327c57e9d60e21b815260040160405180910390fd5b6000612523611dd3565b9050600061253082611fb9565b9050600061255e7f000000000000000000000000000000000000000000000000000000000000000083615648565b90508065ffffffffffff1642101561259357604051630fb8a1cf60e41b815265ffffffffffff82166004820152602401610b84565b600154602f5462ffffff600160881b830481169291169060ff600160801b90910416806125bf83610df0565b90506125df87826125da6125d4886001615495565b8b610a93565b61414a565b602d89905563ffffffff8316156125fd57602f805462ffffff191690555b600254600154604080518c815260ff86811660208301528516818301526001600160601b0390931660608401526001600160801b03909116608083015265ffffffffffff881660a08301525162ffffff8916917f60785c409db91938793d3f74013b06843f82ea0588265495b262b016fe5323ae919081900360c00190a25094979650505050505050565b60008260ff166000036126bc57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff166003036126fe5760028360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b612e5e565b8160ff1660040361273b5760038360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff166005036127aa578260ff1660010361277857507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b60048360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff1660060361284b578260ff166001036127e757507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff1660020361281957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b60058360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff1660070361291e578260ff1660010361288857507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff166002036128ba57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff166003036128ec57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b60068360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff16600803612a23578260ff1660010361295b57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff1660020361298d57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff166003036129bf57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff166004036129f157507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b60078360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff16600903612b5a578260ff16600103612a6057507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600203612a9257507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600303612ac457507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600403612af657507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600503612b2857507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b60088360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff16600a03612cc3578260ff16600103612b9757507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600203612bc957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600303612bfb57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600403612c2d57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600503612c5f57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600603612c9157507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b60098360ff16116126f957507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8160ff16600b03612e5e578260ff16600103612d0057507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600203612d3257507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600303612d6457507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600403612d9657507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600503612dc857507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600603612dfa57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b8260ff16600703612e2c57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b600a8360ff1611612e5e57507f0000000000000000000000000000000000000000000000000000000000000000610aa4565b6000610aa1565b600080612e70610aaa565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef89190615554565b612f0291906155c1565b905082811015612f2f576040516304b4846b60e51b81526004810184905260248101829052604401610b84565b6000612f39610da6565b6001600160a01b0386166000908152600360205260409020909150612f5f90858361430f565b50612f6c6006858361430f565b508062ffffff16856001600160a01b03167f5003852720160444a61076ba7bfd246c7fbe2529223dfefc1386c8459dc80cd486604051612fae91815260200190565b60405180910390a3509392505050565b600154600090610abe90600160801b900460ff16611bbb565b6000610aa4612ff583600160109054906101000a900460ff16612688565b61403d565b60015460009060ff600160801b9091048116908316811115612068576130208382613ae3565b60200151610d9f565b6000613033612071565b61303f57506000610aa4565b6001600160a01b038084166000908152603260209081526040808320868516845282528083208151808301835290546001600160601b0381168252600160601b900490941684830152805180820190915282815290810191909152602082015182516000916130b6916001600160601b03166155fe565b6001600160a01b0316600003613118576130ce611abe565b935090506130dc86866123af565b6001600160a01b038088166000908152603360209081526040808320938a16835292815291902082518155908201516001909101559150613157565b6001600160a01b038087166000908152603360209081526040808320938916835292815290829020825180840190935280548352600101549082015291505b816020015160000361316f5760009350505050610aa4565b600061317b6006613624565b60208501518551919250613197916001600160601b03166155fe565b602082015182516131b191906001600160601b03166155fe565b6131bb9190615687565b6131ce906001600160a01b0316836154b1565b915082602001518284600001516131e5919061556d565b6131ef91906155ea565b979650505050505050565b60008162ffffff168362ffffff1611156132365760405163147b8d8560e01b815262ffffff808516600483015283166024820152604401610b84565b60408051808201909152845461ffff808216835262010000909104166020820181905260000361326a576000915050610d9f565b600061328d826000015161ffff16836020015161ffff1661016e61ffff16614650565b905060006132ab836000015161ffff16846020015161ffff16614675565b90506000876001018361ffff1661016e81106132c9576132c96156a7565b600a91828204019190066003029054906101000a900462ffffff1690506000886001018361ffff1661016e8110613302576133026156a7565b600a91828204019190066003029054906101000a900462ffffff1690508162ffffff168762ffffff16108061334057508062ffffff168862ffffff16115b1561335357600095505050505050610d9f565b60408051808201909152600080825260208201528262ffffff168962ffffff161115806133885750856020015161ffff166001145b156133d6575062ffffff8216600090815260268a0160209081526040918290208251808401909352546001600160601b0381168352600160601b90046001600160a01b03169082015261349b565b5062ffffff8816600090815260268a0160209081526040918290208251808401909352546001600160601b038116808452600160601b9091046001600160a01b031691830191909152158015613437575060208101516001600160a01b0316155b1561349b5760006134528b60010187878a602001518e6146a0565b62ffffff16600090815260268f0160209081526040918290208251808401909352546001600160601b0381168352600160601b90046001600160a01b0316908201529450505050505b60408051808201909152600080825260208201528262ffffff168962ffffff161015806134d05750866020015161ffff166001145b1561351e575062ffffff8216600090815260268b0160209081526040918290208251808401909352546001600160601b0381168352600160601b90046001600160a01b0316908201526135e3565b5062ffffff8816600090815260268b0160209081526040918290208251808401909352546001600160601b038116808452600160601b9091046001600160a01b03169183019190915215801561357f575060208101516001600160a01b0316155b156135e357600061359a8c60010188888b602001518e6146a0565b505062ffffff16600090815260268e0160209081526040918290208251808401909352546001600160601b0381168352600160601b90046001600160a01b031690820152925050505b60208083015190820151825161360291906001600160601b03166155fe565b61360c9190615687565b6001600160a01b03169b9a5050505050505050505050565b6040805180820190915260008082526020820152816026016000613647846147ec565b815260208082019290925260409081016000208151808301909252546001600160601b0381168252600160601b90046001600160a01b03169181019190915292915050565b602f54602e5460208301518351600093630100000090046001600160801b031692600160a01b90046001600160601b03908116926136cc929091166155fe565b6001600160a01b03166136df91906154b1565b610aa491906155c1565b60006001600160681b038211156137525760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663034206269747360c81b6064820152608401610b84565b5090565b60008080613766600686866131fa565b61f2ee600090815260036020529091506137a17f1d8e29c4e3375eb7ea0a68899d0c1506ffa0d406a1bddf68d17aeb693ef45d5187876131fa565b90506137ad81836155c1565b6001600160a01b03881660009081526003602052604090209093506137d39087876131fa565b93505050935093915050565b60006001600160ff1b038211156137525760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610b84565b60008282600160ff1b8214806138625750600160ff1b81145b15613880576040516309fe2b4560e41b815260040160405180910390fd5b600080600084126138915783613896565b836000035b9150600083126138a657826138ab565b826000035b905060006138c283670de0b6b3a76400008461483e565b90506001600160ff1b038111156138f65760405163d49c26b360e01b81526004810189905260248101889052604401610b84565b600019858518136139128161390e5782600003610d85565b8290565b9998505050505050505050565b60008061392d8360026156bd565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561396c5750600492915050565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1610156139a95750600592915050565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1610156139e65750600692915050565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015613a235750600792915050565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015613a605750600892915050565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015613a9d5750600992915050565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015613ada5750600a92915050565b50600b92915050565b604080516060810182526000808252602082018190529181019190915260ff8316600090815260208181526040918290208251606081018452905462ffffff808216808452630100000083046001600160681b031694840194909452600160801b9091046001600160801b0316938201939093526001549092600160881b90910416908114613ba25762ffffff811682526040820151600154613b939187918791906001600160801b0316614912565b6001600160681b031660208301525b509392505050565b6000613bc583600160109054906101000a900460ff16614093565b6040850151600154919250600091613bea916122c3916001600160801b0316856140fc565b9050806001600160681b0316836001600160681b03161115613cd5576000613c23613c1583866156dd565b6001600160681b03166149ad565b6002549091506001600160601b039081169082161115613c6157604051631bc48d3f60e11b81526001600160681b0385166004820152602401610b84565b600280546bffffffffffffffffffffffff1981166001600160601b0391821684900382161790915560405190821681527f01b0c36286a79b0a18a8ac370c284b84f47d521151940da35082feb5aace3fea9060200160405180910390a1506001546001600160801b03166040860152613da6565b6000613ce460ff8416856156fd565b9050600060ff821615613d0057613cfb82856154fd565b613d03565b60005b905060ff811615613d54576002805460ff83169190600090613d2f9084906001600160601b03166155a1565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b8360ff16613d738260ff16876001600160681b03166122c391906154b1565b613d7d9190615723565b6001600160681b031687604001818151613d979190615667565b6001600160801b031690525050505b50505060ff1660009081526020818152604091829020835181549285015193909401516001600160801b03908116600160801b026001600160681b039094166301000000026001600160801b031990931662ffffff909516949094179190911792909216179055565b60006001600160801b038211156137525760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610b84565b6040516001600160a01b038316602482015260448101829052613edb90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614a15565b505050565b6000610aa482600461582d565b600080600080613efd8888614aea565b905087815b8160ff168160ff161015613f565760ff8116600090815260208190526040902054613f4290600160801b90046001600160801b031689612063848e614093565b613f4c90856154b1565b9350600101613f02565b50505060008185613f6791906154b1565b90506000613f74886115c6565b90506000613f8282846155ea565b9050613f9a6111f3826001600160801b038b166154b1565b9450613ff0613fa9838361556d565b84613fd760ff7f0000000000000000000000000000000000000000000000000000000000000000168561556d565b613fe191906154b1565b613feb91906155c1565b6149ad565b95505050505094509492505050565b6040516001600160a01b03808516602483015283166044820152606481018290526140379085906323b872dd60e01b90608401613ea4565b50505050565b6000610aa461405c61405784670de0b6b3a7640000610d94565b614b0d565b614b89565b600083600003614073575060006120d6565b61407e858484614b9d565b6140888786614bb9565b109695505050505050565b6000806140a16003846154fd565b60ff168460ff16116140d3577f0000000000000000000000000000000000000000000000000000000000000000610e59565b7f0000000000000000000000000000000000000000000000000000000000000000949350505050565b600080836001600160801b0316856001600160801b0316101561413f5760ff8316614127868661583c565b6001600160801b031661413a919061556d565b6120d6565b600095945050505050565b600460ff8316101561417457604051630ea0e9f960e01b815260ff83166004820152602401610b84565b60015460ff600160801b820416906001600160801b031660008061419a84878588613eed565b9150915060006141aa8588614aea565b905086815b8160ff168160ff1610156142575760405180606001604052808b62ffffff1681526020016141df838c8a89614912565b6001600160681b0390811682526001600160801b03808a1660209384015260ff85166000908152808452604090819020855181549587015196909201518316600160801b02959093166301000000026001600160801b031990941662ffffff90911617929092179091169190911790556001016141af565b50600180546001600160801b03851670ffffffffffffffffffffffffffffffffff1990911617600160801b60ff8b16021768ffffffffffffffffff60881b1916600160881b62ffffff8c160265ffffffffffff60a01b191617600160a01b4265ffffffffffff1602179055600280548591906000906142e09084906001600160601b03166155a1565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550505050505050505050565b60008162ffffff1660000361433757604051631136607d60e01b815260040160405180910390fd5b60408051808201909152845461ffff80821680845262010000909204166020830152600090600187019061436d9061016e614675565b61016e811061437e5761437e6156a7565b600a91828204019190066003029054906101000a900462ffffff1690508062ffffff168462ffffff1610156143d5576040516374876e6960e11b815262ffffff808616600483015282166024820152604401610b84565b62ffffff81811660008181526026890160208181526040928390208351808501909452546001600160601b0381168452600160601b90046001600160a01b031690830152929091908716146145d157602084015161016e61ffff821610156144495761444260018261585c565b9050614499565b8260008a600101876000015161ffff1661016e811061446a5761446a6156a7565b600a80820492909201549190066003026101000a900462ffffff16815260208101919091526040016000908120555b8689600101866000015161ffff1661016e81106144b8576144b86156a7565b600a91828204019190066003026101000a81548162ffffff021916908362ffffff16021790555060405180604001604052806144f38a6149ad565b6001600160601b0316815260200161452f84600001516001600160601b0316856020015161452191906155fe565b6001600160a01b0316614c3c565b6001600160a01b0390811690915262ffffff89166000908152602086815260409182902084519490910151909216600160601b026001600160601b039093169290921790558051808201909152855181906145909061ffff1661016e614ca5565b61ffff908116825292831660209182015281518b5492909101518316620100000263ffffffff199092169216919091171788555060019350610d9f92505050565b60405180604001604052806145f88984600001516001600160601b0316613feb91906154b1565b6001600160601b0390811682526020938401516001600160a01b039081169285019290925262ffffff9095166000908152938352604084208251929093015116600160601b029316929092179091559150610d9f9050565b60008183101561466257506000610d9f565b610d4a61466f83866154b1565b83614cb5565b60008160000361468757506000610aa4565b610aa1600161469684866154b1565b61466f91906155c1565b6000808080878161ffff808316908a16106146bb57886146d1565b60016146c7898461585c565b6146d19190615877565b905060005b60026146e2838561585c565b6146ec9190615892565b90506147008161ffff168a61ffff16614cb5565b96508b8761ffff1661016e8110614719576147196156a7565b600a91828204019190066003029054906101000a900462ffffff1695506147488161ffff168a61ffff16614ca5565b94508b8561ffff1661016e8110614761576147616156a7565b600a91828204019190066003029054906101000a900462ffffff16935060008862ffffff168762ffffff16111590508080156147a757508462ffffff168962ffffff1611155b156147b257506147dd565b806147c9576147c2600183615877565b92506147d7565b6147d482600161585c565b93505b506146d6565b50505095509550955095915050565b805460009060018301906148069061ffff1661016e614675565b61016e8110614817576148176156a7565b600a91828204019190066003029054906101000a900462ffffff1662ffffff169050919050565b60008080600019858709858702925082811083820303915050806000036148785783828161486e5761486e6155d4565b0492505050610d9f565b8381106148a957604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610b84565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008061491e86613ee0565b9050600061493185856120638a8a614093565b9050600061498261497d61494485614cc1565b6149777f000000000000000000000000000000000000000000000000000000000000000061497187614cc1565b90614d08565b90614d17565b614d2f565b90506001600160681b03811161499857806149a1565b6001600160681b035b98975050505050505050565b60006001600160601b038211156137525760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610b84565b6000614a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614d439092919063ffffffff16565b9050805160001480614a8b575080806020019051810190614a8b91906158a7565b613edb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b84565b600060028360ff168360ff1611614b015782614b03565b835b610aa191906154fd565b600081670afdc366fbc00000600160ff1b03811315614b4257604051631d0bee6360e21b815260048101849052602401610b84565b6000614b56670de0b6b3a7640000836158c9565b905080600003614b6857839250614b82565b8082036000831315614b7f57670de0b6b3a7640000015b92505b5050919050565b6000610aa4670de0b6b3a7640000836158dd565b6000610b4061405c84614bb385614bb389614d52565b90614dc9565b600081600003614bdc5760405163d1d533f160e01b815260040160405180910390fd5b600082614beb816000196155c1565b614bf69060016154b1565b614c00919061590b565b9050835b81811015614c3257604080516020808201939093528151808203840181529082019091528051910120614c04565b6120d6848261590b565b60006001600160a01b038211156137525760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663630206269747360c81b6064820152608401610b84565b6000610aa161466f8460016154b1565b6000610aa1828461590b565b6000614cd7670de0b6b3a76400006000196155ea565b821115614cfa57604051631cd951a760e01b815260048101839052602401610b84565b50670de0b6b3a76400000290565b6000610aa1610d858484614e6d565b6000610aa1610d8584670de0b6b3a76400008561483e565b6000610aa4670de0b6b3a7640000836155ea565b6060610b408484600085614f23565b6000614d6a670de0b6b3a7640000600160ff1b6158dd565b821215614d8d576040516399474eeb60e01b815260048101839052602401610b84565b614da6670de0b6b3a76400006001600160ff1b036158dd565b821315614cfa57604051639d58109160e01b815260048101839052602401610b84565b60008282600160ff1b821480614de25750600160ff1b81145b15614e005760405163a6070c2560e01b815260040160405180910390fd5b60008060008412614e115783614e16565b836000035b915060008312614e265782614e2b565b826000035b90506000614e398383614e6d565b90506001600160ff1b038111156138f65760405163120b5b4360e01b81526004810189905260248101889052604401610b84565b6000808060001984860984860292508281108382030391505080600003614ea15750670de0b6b3a764000090049050610aa4565b670de0b6b3a76400008110614ed357604051635173648d60e01b81526004810186905260248101859052604401610b84565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b606082471015614f845760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b84565b600080866001600160a01b03168587604051614fa09190615943565b60006040518083038185875af1925050503d8060008114614fdd576040519150601f19603f3d011682016040523d82523d6000602084013e614fe2565b606091505b50915091506131ef878383876060831561505d578251600003615056576001600160a01b0385163b6150565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b84565b5081610b40565b610b4083838151156150725781518083602001fd5b8060405162461bcd60e51b8152600401610b84919061595f565b803562ffffff81168114610e7557600080fd5b600080604083850312156150b257600080fd5b6150bb8361508c565b91506150c96020840161508c565b90509250929050565b6000602082840312156150e457600080fd5b610aa18261508c565b80356001600160a01b0381168114610e7557600080fd5b803560ff81168114610e7557600080fd5b803563ffffffff81168114610e7557600080fd5b6000806000806080858703121561513f57600080fd5b615148856150ed565b9350615156602086016150ed565b925061516460408601615104565b915061517260608601615115565b905092959194509250565b80356001600160601b0381168114610e7557600080fd5b600080604083850312156151a757600080fd5b6151b0836150ed565b91506150c96020840161517d565b6000806000606084860312156151d357600080fd5b6151dc846150ed565b92506151ea6020850161508c565b91506151f86040850161508c565b90509250925092565b60006020828403121561521357600080fd5b610aa182615115565b60008060008060008060c0878903121561523557600080fd5b61523e876150ed565b955061524c60208801615104565b945061525a60408801615115565b9350615268606088016150ed565b92506152766080880161517d565b915061528460a088016150ed565b90509295509295509295565b6000602082840312156152a257600080fd5b610aa1826150ed565b81516001600160601b031681526020808301516001600160a01b03169082015260408101610aa4565b6000602082840312156152e657600080fd5b610aa182615104565b6000806000806080858703121561530557600080fd5b61530e856150ed565b935061531c602086016150ed565b925061532a6040860161508c565b91506151726060860161508c565b60006020828403121561534a57600080fd5b610aa18261517d565b60006020828403121561536557600080fd5b5035919050565b82815260608101610d9f602083018480516001600160601b031682526020908101516001600160a01b0316910152565b600080600080600060a086880312156153b457600080fd5b6153bd866150ed565b94506153cb602087016150ed565b93506153d96040870161508c565b92506153e760608701615104565b91506153f560808701615115565b90509295509295909350565b6000806040838503121561541457600080fd5b61541d836150ed565b91506150c9602084016150ed565b6000806040838503121561543e57600080fd5b615447836150ed565b946020939093013593505050565b6000806040838503121561546857600080fd5b61547183615104565b91506150c960208401615104565b634e487b7160e01b600052601160045260246000fd5b62ffffff818116838216019080821115610e5c57610e5c61547f565b80820180821115610aa457610aa461547f565b6001600160681b03818116838216019080821115610e5c57610e5c61547f565b60ff8181168382160190811115610aa457610aa461547f565b60ff8281168282160390811115610aa457610aa461547f565b600062ffffff80831681810361552e5761552e61547f565b6001019392505050565b62ffffff828116828216039080821115610e5c57610e5c61547f565b60006020828403121561556657600080fd5b5051919050565b8082028115828204841417610aa457610aa461547f565b63ffffffff818116838216019080821115610e5c57610e5c61547f565b6001600160601b03818116838216019080821115610e5c57610e5c61547f565b81810381811115610aa457610aa461547f565b634e487b7160e01b600052601260045260246000fd5b6000826155f9576155f96155d4565b500490565b6001600160a01b03818116838216019080821115610e5c57610e5c61547f565b65ffffffffffff8181168382160280821691908281146156405761564061547f565b505092915050565b65ffffffffffff818116838216019080821115610e5c57610e5c61547f565b6001600160801b03818116838216019080821115610e5c57610e5c61547f565b6001600160a01b03828116828216039080821115610e5c57610e5c61547f565b634e487b7160e01b600052603260045260246000fd5b63ffffffff8181168382160280821691908281146156405761564061547f565b6001600160681b03828116828216039080821115610e5c57610e5c61547f565b60006001600160681b0380841680615717576157176155d4565b92169190910692915050565b60006001600160681b038084168061573d5761573d6155d4565b92169190910492915050565b600181815b8085111561578457816000190482111561576a5761576a61547f565b8085161561577757918102915b93841c939080029061574e565b509250929050565b60008261579b57506001610aa4565b816157a857506000610aa4565b81600181146157be57600281146157c8576157e4565b6001915050610aa4565b60ff8411156157d9576157d961547f565b50506001821b610aa4565b5060208310610133831016604e8410600b8410161715615807575081810a610aa4565b6158118383615749565b80600019048211156158255761582561547f565b029392505050565b6000610aa160ff84168361578c565b6001600160801b03828116828216039080821115610e5c57610e5c61547f565b61ffff818116838216019080821115610e5c57610e5c61547f565b61ffff828116828216039080821115610e5c57610e5c61547f565b600061ffff8084168061573d5761573d6155d4565b6000602082840312156158b957600080fd5b81518015158114610aa157600080fd5b6000826158d8576158d86155d4565b500790565b6000826158ec576158ec6155d4565b600160ff1b8214600019841416156159065761590661547f565b500590565b60008261591a5761591a6155d4565b500690565b60005b8381101561593a578181015183820152602001615922565b50506000910152565b6000825161595581846020870161591f565b9190910192915050565b602081526000825180602084015261597e81604085016020870161591f565b601f01601f1916919091016040019291505056fea2646970667358221220bde9c7ed083250a28851a22bb16dd44b8da20a6a548e28570adbdb39dbcc145964736f6c63430008180033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000f4cfa53df258d78aad153ac11c644703651983f5000000000000000000000000c516fe1fee5122d66e9427721a63d6c27e1201ca00000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000024ea000000000000000000000000000000000000000000000000000000000066da29e00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000005