76 txs
128 calls
constructor
constructor(address _twabController, address _prizePool)
functions
calculateDrawIdAt
viewfunction calculateDrawIdAt(uint64 _timestamp) view returns (uint24)
claimedEpochs
viewfunction claimedEpochs(uint256 promotionId, address vault, address user) view returns (bytes32 claimMask)
epochBytesToIdArray
purefunction epochBytesToIdArray(bytes32 _epochClaimFlags) pure returns (uint8[])
epochIdArrayToBytes
purefunction epochIdArrayToBytes(uint8[] _epochIds) pure returns (bytes32)
epochRanges
viewfunction epochRanges(uint48 _promotionStartTimestamp, uint48 _promotionEpochDuration, uint8 _epochId) view returns (uint48 epochStartTimestamp, uint48 epochEndTimestamp, uint24 epochStartDrawId, uint24 epochEndDrawId)
epochRangesForPromotion
viewfunction epochRangesForPromotion(uint256 _promotionId, uint8 _epochId) view returns (uint48 epochStartTimestamp, uint48 epochEndTimestamp, uint24 epochStartDrawId, uint24 epochEndDrawId)
getEpochIdAt
viewfunction getEpochIdAt(uint256 _promotionId, uint256 _timestamp) view returns (uint8)
getEpochIdNow
viewfunction getEpochIdNow(uint256 _promotionId) view returns (uint8)
getPromotion
viewfunction getPromotion(uint256 _promotionId) view returns (tuple)
getRemainingRewards
viewfunction getRemainingRewards(uint256 _promotionId) view returns (uint128)
GRACE_PERIOD
viewfunction GRACE_PERIOD() view returns (uint32)
latestPromotionId
viewfunction latestPromotionId() view returns (uint256)
prizePool
viewfunction prizePool() view returns (address)
promotionCreators
viewfunction promotionCreators(uint256) view returns (address)
SPONSORSHIP_ADDRESS
viewfunction SPONSORSHIP_ADDRESS() view returns (address)
twabController
viewfunction twabController() view returns (address)
calculateRewards
nonpayablefunction calculateRewards(address _vault, address _user, uint256 _promotionId, uint8[] _epochIds) returns (uint256[] rewards)
claimRewardedEpochs
nonpayablefunction claimRewardedEpochs(address _vault, address _user, uint256 _promotionId, uint8 _startEpochId) returns (uint256)
claimRewards
nonpayablefunction claimRewards(address _vault, address _user, uint256 _promotionId, uint8[] _epochIds) returns (uint256)
claimTwabRewards
nonpayablefunction claimTwabRewards(address _twabRewards, address _user, uint256 _promotionId, uint8[] _epochIds) returns (uint256)
createPromotion
nonpayablefunction createPromotion(address _token, uint40 _startTimestamp, uint104 _tokensPerEpoch, uint40 _epochDuration, uint8 _numberOfEpochs) returns (uint256)
destroyPromotion
nonpayablefunction destroyPromotion(uint256 _promotionId, address _to) returns (bool)
endPromotion
nonpayablefunction endPromotion(uint256 _promotionId, address _to) returns (bool)
extendPromotion
nonpayablefunction extendPromotion(uint256 _promotionId, uint8 _numberOfEpochs) returns (bool)
getVaultRewardAmount
nonpayablefunction getVaultRewardAmount(address _vault, uint256 _promotionId, uint8 _epochId) returns (uint128)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
events
PromotionCreated
event PromotionCreated(uint256 indexed promotionId, address indexed token, uint40 startTimestamp, uint104 tokensPerEpoch, uint40 epochDuration, uint8 initialNumberOfEpochs)
PromotionDestroyed
event PromotionDestroyed(uint256 indexed promotionId, address indexed recipient, uint256 amount)
PromotionEnded
event PromotionEnded(uint256 indexed promotionId, address indexed recipient, uint256 amount, uint8 epochNumber)
PromotionExtended
event PromotionExtended(uint256 indexed promotionId, uint256 numberOfEpochs)
RewardsClaimed
event RewardsClaimed(uint256 indexed promotionId, bytes32 epochClaimFlags, address indexed vault, address indexed user, uint256 amount)
errors
EpochDurationLtDrawPeriod
error EpochDurationLtDrawPeriod()
EpochDurationNotMultipleOfDrawPeriod
error EpochDurationNotMultipleOfDrawPeriod()
EpochNotOver
error EpochNotOver(uint64 epochEndTimestamp)
ExceedsMaxEpochs
error ExceedsMaxEpochs(uint8 epochExtension, uint8 currentEpochs, uint8 maxEpochs)
GracePeriodActive
error GracePeriodActive(uint256 gracePeriodEndTimestamp)
InvalidEpochId
error InvalidEpochId(uint8 epochId, uint8 numberOfEpochs)
NoEpochsToClaim
error NoEpochsToClaim(uint8 startEpochId, uint8 currentEpochId)
OnlyPromotionCreator
error OnlyPromotionCreator(address sender, address creator)
PayeeZeroAddress
error PayeeZeroAddress()
PrizePoolZeroAddress
error PrizePoolZeroAddress()
PromotionInactive
error PromotionInactive(uint256 promotionId)
StartTimeLtFirstDrawOpensAt
error StartTimeLtFirstDrawOpensAt()
StartTimeNotAlignedWithDraws
error StartTimeNotAlignedWithDraws()
TokensReceivedLessThanExpected
error TokensReceivedLessThanExpected(uint256 received, uint256 expected)
TwabControllerZeroAddress
error TwabControllerZeroAddress()
ZeroEpochs
error ZeroEpochs()
ZeroTokensPerEpoch
error ZeroTokensPerEpoch()
creation bytecode
0x61010060405234801562000011575f80fd5b50604051620057943803806200579483398181016040528101906200003791906200033f565b8173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff16036200009d576040517f337302ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff160362000103576040517f1761cbcc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663ed88b77f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001dd9190620003c4565b65ffffffffffff1660c08165ffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c052b56e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000240573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002669190620003c4565b65ffffffffffff1660e08165ffffffffffff16815250505050620003f4565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620002b48262000289565b9050919050565b5f620002c782620002a8565b9050919050565b620002d981620002bb565b8114620002e4575f80fd5b50565b5f81519050620002f781620002ce565b92915050565b5f6200030982620002a8565b9050919050565b6200031b81620002fd565b811462000326575f80fd5b50565b5f81519050620003398162000310565b92915050565b5f806040838503121562000358576200035762000285565b5b5f6200036785828601620002e7565b92505060206200037a8582860162000329565b9150509250929050565b5f65ffffffffffff82169050919050565b620003a08162000384565b8114620003ab575f80fd5b50565b5f81519050620003be8162000395565b92915050565b5f60208284031215620003dc57620003db62000285565b5b5f620003eb84828501620003ae565b91505092915050565b60805160a05160c05160e051615311620004835f395f8181610870015281816108dd015281816117f1015261187c01525f81816108b4015281816117150152818161177f0152818161185b0152611f1301525f818161100c01528181612c340152612f6701525f818161166801528181611910015281816119c5015281816128950152612d0701526153115ff3fe608060405234801561000f575f80fd5b506004361061018c575f3560e01c8063719ce73e116100dc578063ac9650d811610095578063b7f9779b1161006f578063b7f9779b1461056b578063be4120071461059b578063be6ccf87146105cb578063c1a287e2146105fe5761018c565b8063ac9650d8146104ed578063ae4143cb1461051d578063b0812d7b1461054d5761018c565b8063719ce73e146103dc5780637dbf0a51146103fa57806381c84f7f1461042a5780638346e96b1461045a578063a3dc5b921461048a578063a4958845146104bd5761018c565b806320555db1116101495780635bbf224f116101235780635bbf224f1461032e5780635ffe152d1461035e57806362f0c0fe1461038e5780636aa72a67146103be5761018c565b806320555db11461029e57806339fe3913146102ce5780634c340e60146102fe5761018c565b806308ec9dcf14610190578063095d488a146101c0578063096fe668146101de5780630ea90ff51461020e578063120468a01461023e57806314fdecca1461026e575b5f80fd5b6101aa60048036038101906101a591906136b2565b61061c565b6040516101b79190613745565b60405180910390f35b6101c86106a7565b6040516101d5919061376d565b60405180910390f35b6101f860048036038101906101f391906137bc565b6106ac565b6040516102059190613814565b60405180910390f35b6102286004803603810190610223919061386a565b61086d565b60405161023591906138b2565b60405180910390f35b610258600480360381019061025391906138cb565b61092b565b6040516102659190613814565b60405180910390f35b61028860048036038101906102839190613909565b610b2b565b6040516102959190613a98565b60405180910390f35b6102b860048036038101906102b391906138cb565b610b43565b6040516102c59190613814565b60405180910390f35b6102e860048036038101906102e39190613909565b610de9565b6040516102f59190613ac0565b60405180910390f35b61031860048036038101906103139190613ad9565b610e1e565b6040516103259190613b41565b60405180910390f35b61034860048036038101906103439190613b5a565b610e49565b6040516103559190613745565b60405180910390f35b61037860048036038101906103739190613bbe565b610ee9565b6040516103859190613745565b60405180910390f35b6103a860048036038101906103a39190613c6c565b610f10565b6040516103b59190613d3f565b60405180910390f35b6103c6611004565b6040516103d39190613745565b60405180910390f35b6103e461100a565b6040516103f19190613d7f565b60405180910390f35b610414600480360381019061040f9190613bbe565b61102e565b6040516104219190613e4f565b60405180910390f35b610444600480360381019061043f9190613909565b611100565b604051610451919061376d565b60405180910390f35b610474600480360381019061046f9190613e6f565b611130565b6040516104819190613b41565b60405180910390f35b6104a4600480360381019061049f91906137bc565b611188565b6040516104b49493929190613eda565b60405180910390f35b6104d760048036038101906104d29190613909565b61134a565b6040516104e49190613f47565b60405180910390f35b61050760048036038101906105029190613fb5565b611373565b6040516105149190614145565b60405180910390f35b61053760048036038101906105329190614165565b611551565b6040516105449190613f47565b60405180910390f35b610555611666565b60405161056291906141d5565b60405180910390f35b610585600480360381019061058091906141ee565b61168a565b6040516105929190613ac0565b60405180910390f35b6105b560048036038101906105b091906142bb565b6116c1565b6040516105c29190613745565b60405180910390f35b6105e560048036038101906105e0919061435c565b611ece565b6040516105f59493929190613eda565b60405180910390f35b610606611f5d565b60405161061391906143ca565b60405180910390f35b5f8573ffffffffffffffffffffffffffffffffffffffff1663b2456c3a868686866040518563ffffffff1660e01b815260040161065c9493929190614469565b6020604051808303815f875af1158015610678573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069c91906144bb565b905095945050505050565b600181565b5f6106b682611f64565b5f6106c084611fa3565b90506106cc848261213f565b5f816060015190508060ff6106e19190614513565b60ff168460ff16111561073057838160ff6040517fa5bd653500000000000000000000000000000000000000000000000000000000815260040161072793929190614547565b60405180910390fd5b838161073c919061457c565b5f808781526020019081526020015f205f01601e6101000a81548160ff021916908360ff1602179055505f6107918360a001516cffffffffffffffffffffffffff168660ff1661078c91906145b0565b61218f565b9050808360c001516107a391906145f1565b5f808881526020019081526020015f2060010160126101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506108283330836dffffffffffffffffffffffffffff16865f015173ffffffffffffffffffffffffffffffffffffffff166121eb909392919063ffffffff16565b857fa9527ed49c1c2ab5449cfef5b611076ce228a0a0de4534874963b83abb6e7b46866040516108589190614662565b60405180910390a26001935050505092915050565b5f7f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff168267ffffffffffffffff1610156108b0575f9050610926565b60017f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff167f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff168461090f919061467b565b61091991906146e3565b6109239190614713565b90505b919050565b5f8173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff1603610991576040517f07b6dbc700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61099b84611fa3565b90506109d660015f8681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612274565b6109e0848261213f565b5f610a01826080015164ffffffffff16836020015164ffffffffff166122e9565b9050805f808781526020019081526020015f205f01601e6101000a81548160ff021916908360ff1602179055505f610a38836122fd565b9050808360c00151610a4a9190614749565b5f808881526020019081526020015f2060010160126101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550610acd85826dffffffffffffffffffffffffffff16855f015173ffffffffffffffffffffffffffffffffffffffff1661236d9092919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff16867f98f89153fa6ee40b2edcd2e1ce4a5a9edfb2f74818016fc24e6cfe7b6fcd12a98385604051610b169291906147ba565b60405180910390a36001935050505092915050565b610b3361349e565b610b3c82611fa3565b9050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff1603610ba9576040517f07b6dbc700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bb384611fa3565b9050610bee60015f8681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612274565b5f610bf8826123f3565b90505f826040015164ffffffffff1690505f624f1a0063ffffffff16828410610c215783610c23565b825b610c2d91906147e1565b905080421015610c7457806040517f948fa73e000000000000000000000000000000000000000000000000000000008152600401610c6b9190613745565b60405180910390fd5b5f8460c001516dffffffffffffffffffffffffffff1690505f808981526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f820160146101000a81549064ffffffffff02191690555f820160196101000a81549064ffffffffff02191690555f8201601e6101000a81549060ff0219169055600182015f6101000a81549064ffffffffff02191690556001820160056101000a8154906cffffffffffffffffffffffffff02191690556001820160126101000a8154906dffffffffffffffffffffffffffff02191690555050610d8b8782875f015173ffffffffffffffffffffffffffffffffffffffff1661236d9092919063ffffffff16565b8673ffffffffffffffffffffffffffffffffffffffff16887f6f804f2ef186cd4b2a6740c084b86f557a497a1fcf3a6b073068a55c51187b6f83604051610dd29190613745565b60405180910390a360019550505050505092915050565b5f80610df483611fa3565b9050610e16816080015164ffffffffff16826020015164ffffffffff166122e9565b915050919050565b6003602052825f5260405f20602052815f5260405f20602052805f5260405f205f9250925050505481565b5f805f610e5585610de9565b90508360ff168160ff1611610ea35783816040517fb53dc8f5000000000000000000000000000000000000000000000000000000008152600401610e9a929190614814565b60405180910390fd5b5f8490505b8160ff168160ff161015610ecf57610ec08382612416565b92508080600101915050610ea8565b50610edd878787858861242b565b92505050949350505050565b5f80610ef58484611130565b9050610f04878787845f61242b565b91505095945050505050565b60605f805f90505b610100811015610f4957610f2c8482612831565b15610f3e5781610f3b9061483b565b91505b806001019050610f18565b505f8160ff1667ffffffffffffffff811115610f6857610f67614863565b5b604051908082528060200260200182016040528015610f965781602001602082028036833780820191505090505b5090505f805b610100811015610ff857610fb08682612831565b15610fed5780838380610fc29061483b565b945060ff1681518110610fd857610fd7614890565b5b602002602001019060ff16908160ff16815250505b806001019050610f9c565b50819350505050919050565b60025481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60608282905067ffffffffffffffff81111561104d5761104c614863565b5b60405190808252806020026020018201604052801561107b5781602001602082028036833780820191505090505b5090505f61108885611fa3565b90505f5b848490508110156110f5576110cb888888858989878181106110b1576110b0614890565b5b90506020020160208101906110c691906148bd565b61284d565b8382815181106110de576110dd614890565b5b60200260200101818152505080600101905061108c565b505095945050505050565b6001602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f5b8484905081101561117d576111708286868481811061115657611155614890565b5b905060200201602081019061116b91906148bd565b612416565b9150806001019050611134565b508091505092915050565b5f805f805f805f8881526020019081526020015f206040518060e00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020015f820160199054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff168152602001600182015f9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160059054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff1681526020016001820160129054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815250509050611338816080015164ffffffffff16826020015164ffffffffff1688611ece565b94509450945094505092959194509250565b5f61135c61135783611fa3565b6122fd565b6dffffffffffffffffffffffffffff169050919050565b60605f61137e612a31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461141e575f366113ba612a38565b5f3690506113c891906148e8565b9080926113d793929190614923565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505061146c565b5f67ffffffffffffffff81111561143857611437614863565b5b6040519080825280601f01601f19166020018201604052801561146a5781602001600182028036833780820191505090505b505b90508383905067ffffffffffffffff81111561148b5761148a614863565b5b6040519080825280602002602001820160405280156114be57816020015b60608152602001906001900390816114a95790505b5091505f5b848490508110156115495761151e308686848181106114e5576114e4614890565b5b90506020028101906114f79190614969565b8560405160200161150a93929190614a37565b604051602081830303815290604052612a3c565b83828151811061153157611530614890565b5b602002602001018190525080806001019150506114c3565b505092915050565b5f8061155c84611fa3565b90505f805f80611583856080015164ffffffffff16866020015164ffffffffff1689611ece565b93509350935093506115a28786606001518565ffffffffffff16612a69565b5f6115b289898c88888888612b09565b90505f81602001516fffffffffffffffffffffffffffffffff16036115df575f965050505050505061165f565b5f6115ec8a8a8686612ec1565b90505f82602001516fffffffffffffffffffffffffffffffff168860a001516cffffffffffffffffffffffffff1661162491906145b0565b90505f825f01516fffffffffffffffffffffffffffffffff169050611653818361164e9190614a5c565b6130a3565b99505050505050505050505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8061169584611fa3565b90506116b8816080015164ffffffffff16826020015164ffffffffff1685613101565b91505092915050565b5f80846cffffffffffffffffffffffffff160361170a576040517f9e0bcf1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171382611f64565b7f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff168364ffffffffff16101561177c576040517f9ea02d5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000008464ffffffffff166117b09190614a8c565b65ffffffffffff16146117ef576040517f51a845f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff168564ffffffffff161015611858576040517f17c409d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008764ffffffffff166118ad9190614abc565b6118b79190614a8c565b65ffffffffffff16146118f6576040517f3bd76d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b5f783a888306040518363ffffffff1660e01b8152600401611969929190614af5565b602060405180830381865afa158015611984573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a89190614b30565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638ab656868760016040518363ffffffff1660e01b8152600401611a1f929190614af5565b5f604051808303815f87803b158015611a36575f80fd5b505af1158015611a48573d5f803e3d5ffd5b505050505b5f6001600254611a5d91906147e1565b9050806002819055505f611a8d8460ff16876cffffffffffffffffffffffffff16611a8891906145b0565b61218f565b90503360015f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060e001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018664ffffffffff168152602001611b1b4261313e565b64ffffffffff1681526020018560ff1681526020018864ffffffffff168152602001876cffffffffffffffffffffffffff168152602001826dffffffffffffffffffffffffffff168152505f808481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a81548164ffffffffff021916908364ffffffffff1602179055506040820151815f0160196101000a81548164ffffffffff021916908364ffffffffff1602179055506060820151815f01601e6101000a81548160ff021916908360ff1602179055506080820151816001015f6101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160010160056101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff16021790555060c08201518160010160126101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055509050505f8873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d03919061376d565b602060405180830381865afa158015611d1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4291906144bb565b9050611d813330846dffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff166121eb909392919063ffffffff16565b5f8973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611dbb919061376d565b602060405180830381865afa158015611dd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfa91906144bb565b9050826dffffffffffffffffffffffffffff1682611e1891906147e1565b811015611e69578181611e2b91906148e8565b836040517f4512ed95000000000000000000000000000000000000000000000000000000008152600401611e60929190614b5b565b60405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff16847f3f5ba8197aa0b8fc2ed9032b8078309a0b00dd1e94618cdfb3748900d63e09a28b8b8b8b604051611eb69493929190614ba0565b60405180910390a38394505050505095945050505050565b5f805f808460ff1686611ee19190614be3565b87611eec9190614c1f565b93508584611efa9190614c1f565b9250611f0d8465ffffffffffff1661086d565b915060017f000000000000000000000000000000000000000000000000000000000000000087611f3d9190614c58565b83611f489190614713565b611f529190614c88565b905093509350935093565b624f1a0081565b8060ff165f03611fa0576040517fa36a16cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b611fab61349e565b5f805f8481526020019081526020015f206040518060e00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020015f820160199054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff168152602001600182015f9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160059054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff1681526020016001820160129054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681525050905080915050919050565b42612149826123f3565b1161218b57816040517f1bffb7630000000000000000000000000000000000000000000000000000000081526004016121829190613745565b60405180910390fd5b5050565b5f6dffffffffffffffffffffffffffff80168211156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614d3e565b60405180910390fd5b819050919050565b61226e846323b872dd60e01b85858560405160240161220c93929190614d5c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613191565b50505050565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122e65733816040517fe9d5e7b00000000000000000000000000000000000000000000000000000000081526004016122dd929190614af5565b60405180910390fd5b50565b5f6122f5838342613101565b905092915050565b5f612307826123f3565b4210612315575f9050612368565b612335826080015164ffffffffff16836020015164ffffffffff166122e9565b82606001516123449190614513565b60ff168260a001516123569190614d91565b6cffffffffffffffffffffffffff1690505b919050565b6123ee8363a9059cbb60e01b848460405160240161238c929190614dcd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613191565b505050565b5f816060015160ff1682602001510282608001510164ffffffffff169050919050565b5f8160ff1660015f1b901b8317905092915050565b5f805f808681526020019081526020015f206040518060e00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020015f820160199054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff168152602001600182015f9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160059054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff1681526020016001820160129054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152505090505f8060035f8881526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508019861695505f8560ff1690505b610100811015612690576126658782612831565b15612685576126778a8a8a878561284d565b8361268291906147e1565b92505b806001019050612651565b5085811760035f8981526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612747828460c001516dffffffffffffffffffffffffffff1661274291906148e8565b61218f565b5f808981526020019081526020015f2060010160126101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506127ba8883855f015173ffffffffffffffffffffffffffffffffffffffff1661236d9092919063ffffffff16565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16887f6271dc4eb75db30bd9dad309127dd75e1f8e1f8deb6efc3300ad7da6f4b7c024898660405161281a929190614df4565b60405180910390a481935050505095945050505050565b5f806001808460ff16865f1c901c161490508091505092915050565b5f805f805f612873876080015164ffffffffff16886020015164ffffffffff1688611ece565b93509350935093506128928688606001518565ffffffffffff16612a69565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb35799a8c8c88886040518563ffffffff1660e01b81526004016128f29493929190614e4b565b602060405180830381865afa15801561290d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293191906144bb565b90505f811115612a1f575f61294b8a898e89898989612b09565b90505f81602001516fffffffffffffffffffffffffffffffff1603612978575f9650505050505050612a28565b5f6129858b8a8787612ec1565b90505f815f01516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff168c60a001516cffffffffffffffffffffffffff166129d391906145b0565b6129dd9190614a5c565b90505f835f01516fffffffffffffffffffffffffffffffff168286612a0291906145b0565b612a0c9190614a5c565b9050809950505050505050505050612a28565b5f955050505050505b95945050505050565b5f33905090565b5f90565b6060612a6183836040518060600160405280602781526020016152b560279139613257565b905092915050565b8067ffffffffffffffff16421015612ab857806040517facb91bdb000000000000000000000000000000000000000000000000000000008152600401612aaf9190614e9d565b60405180910390fd5b8160ff168360ff1610612b045782826040517f5f62d754000000000000000000000000000000000000000000000000000000008152600401612afb929190614814565b60405180910390fd5b505050565b612b11613521565b60055f8981526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208760ff166101008110612b7357612b72614890565b5b016040518060400160405290815f82015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020015f820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090505f81602001516fffffffffffffffffffffffffffffffff1603612eb657612cd37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a84037b68886866040518463ffffffff1660e01b8152600401612c8f93929190614eb6565b602060405180830381865afa158015612caa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cce91906144bb565b6130a3565b81602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff1681525050612da67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e7d7b2258888886040518463ffffffff1660e01b8152600401612d6293929190614eeb565b602060405180830381865afa158015612d7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da191906144bb565b6130a3565b815f01906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508060055f8a81526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208860ff166101008110612e3757612e36614890565b5b015f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506020820151815f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050505b979650505050505050565b612ec961355d565b60045f8681526020019081526020015f208460ff166101008110612ef057612eef614890565b5b016040518060200160405290815f82015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090505f815f01516fffffffffffffffffffffffffffffffff160361309b576130047f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166302abcc1e85856040518363ffffffff1660e01b8152600401612fc0929190614f20565b602060405180830381865afa158015612fdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fff91906144bb565b6130a3565b815f01906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508060045f8781526020019081526020015f208560ff16610100811061305a57613059614890565b5b015f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050505b949350505050565b5f6fffffffffffffffffffffffffffffffff80168211156130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f090614fb7565b60405180910390fd5b819050919050565b5f808483111561312157838584038161311d5761311c6146b6565b5b0490505b60ff801681116131315780613134565b60ff5b9150509392505050565b5f64ffffffffff8016821115613189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318090615045565b60405180910390fd5b819050919050565b5f6131f2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132d99092919063ffffffff16565b90505f81511480613213575080806020019051810190613212919061508d565b5b613252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324990615128565b60405180910390fd5b505050565b60605f808573ffffffffffffffffffffffffffffffffffffffff16856040516132809190615146565b5f60405180830381855af49150503d805f81146132b8576040519150601f19603f3d011682016040523d82523d5f602084013e6132bd565b606091505b50915091506132ce868383876132f0565b925050509392505050565b60606132e784845f85613364565b90509392505050565b60608315613351575f835103613349576133098561342d565b613348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333f906151a6565b60405180910390fd5b5b82905061335c565b61335b838361344f565b5b949350505050565b6060824710156133a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a090615234565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516133d19190615146565b5f6040518083038185875af1925050503d805f811461340b576040519150601f19603f3d011682016040523d82523d5f602084013e613410565b606091505b5091509150613421878383876132f0565b92505050949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f825111156134615781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134959190615294565b60405180910390fd5b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f64ffffffffff1681526020015f64ffffffffff1681526020015f60ff1681526020015f64ffffffffff1681526020015f6cffffffffffffffffffffffffff1681526020015f6dffffffffffffffffffffffffffff1681525090565b60405180604001604052805f6fffffffffffffffffffffffffffffffff1681526020015f6fffffffffffffffffffffffffffffffff1681525090565b60405180602001604052805f6fffffffffffffffffffffffffffffffff1681525090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135b282613589565b9050919050565b5f6135c3826135a8565b9050919050565b6135d3816135b9565b81146135dd575f80fd5b50565b5f813590506135ee816135ca565b92915050565b6135fd816135a8565b8114613607575f80fd5b50565b5f81359050613618816135f4565b92915050565b5f819050919050565b6136308161361e565b811461363a575f80fd5b50565b5f8135905061364b81613627565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261367257613671613651565b5b8235905067ffffffffffffffff81111561368f5761368e613655565b5b6020830191508360208202830111156136ab576136aa613659565b5b9250929050565b5f805f805f608086880312156136cb576136ca613581565b5b5f6136d8888289016135e0565b95505060206136e98882890161360a565b94505060406136fa8882890161363d565b935050606086013567ffffffffffffffff81111561371b5761371a613585565b5b6137278882890161365d565b92509250509295509295909350565b61373f8161361e565b82525050565b5f6020820190506137585f830184613736565b92915050565b613767816135a8565b82525050565b5f6020820190506137805f83018461375e565b92915050565b5f60ff82169050919050565b61379b81613786565b81146137a5575f80fd5b50565b5f813590506137b681613792565b92915050565b5f80604083850312156137d2576137d1613581565b5b5f6137df8582860161363d565b92505060206137f0858286016137a8565b9150509250929050565b5f8115159050919050565b61380e816137fa565b82525050565b5f6020820190506138275f830184613805565b92915050565b5f67ffffffffffffffff82169050919050565b6138498161382d565b8114613853575f80fd5b50565b5f8135905061386481613840565b92915050565b5f6020828403121561387f5761387e613581565b5b5f61388c84828501613856565b91505092915050565b5f62ffffff82169050919050565b6138ac81613895565b82525050565b5f6020820190506138c55f8301846138a3565b92915050565b5f80604083850312156138e1576138e0613581565b5b5f6138ee8582860161363d565b92505060206138ff8582860161360a565b9150509250929050565b5f6020828403121561391e5761391d613581565b5b5f61392b8482850161363d565b91505092915050565b5f819050919050565b5f61395761395261394d84613589565b613934565b613589565b9050919050565b5f6139688261393d565b9050919050565b5f6139798261395e565b9050919050565b6139898161396f565b82525050565b5f64ffffffffff82169050919050565b6139a88161398f565b82525050565b6139b781613786565b82525050565b5f6cffffffffffffffffffffffffff82169050919050565b6139de816139bd565b82525050565b5f6dffffffffffffffffffffffffffff82169050919050565b613a06816139e4565b82525050565b60e082015f820151613a205f850182613980565b506020820151613a33602085018261399f565b506040820151613a46604085018261399f565b506060820151613a5960608501826139ae565b506080820151613a6c608085018261399f565b5060a0820151613a7f60a08501826139d5565b5060c0820151613a9260c08501826139fd565b50505050565b5f60e082019050613aab5f830184613a0c565b92915050565b613aba81613786565b82525050565b5f602082019050613ad35f830184613ab1565b92915050565b5f805f60608486031215613af057613aef613581565b5b5f613afd8682870161363d565b9350506020613b0e8682870161360a565b9250506040613b1f8682870161360a565b9150509250925092565b5f819050919050565b613b3b81613b29565b82525050565b5f602082019050613b545f830184613b32565b92915050565b5f805f8060808587031215613b7257613b71613581565b5b5f613b7f8782880161360a565b9450506020613b908782880161360a565b9350506040613ba18782880161363d565b9250506060613bb2878288016137a8565b91505092959194509250565b5f805f805f60808688031215613bd757613bd6613581565b5b5f613be48882890161360a565b9550506020613bf58882890161360a565b9450506040613c068882890161363d565b935050606086013567ffffffffffffffff811115613c2757613c26613585565b5b613c338882890161365d565b92509250509295509295909350565b613c4b81613b29565b8114613c55575f80fd5b50565b5f81359050613c6681613c42565b92915050565b5f60208284031215613c8157613c80613581565b5b5f613c8e84828501613c58565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f613ccb83836139ae565b60208301905092915050565b5f602082019050919050565b5f613ced82613c97565b613cf78185613ca1565b9350613d0283613cb1565b805f5b83811015613d32578151613d198882613cc0565b9750613d2483613cd7565b925050600181019050613d05565b5085935050505092915050565b5f6020820190508181035f830152613d578184613ce3565b905092915050565b5f613d698261395e565b9050919050565b613d7981613d5f565b82525050565b5f602082019050613d925f830184613d70565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613dca8161361e565b82525050565b5f613ddb8383613dc1565b60208301905092915050565b5f602082019050919050565b5f613dfd82613d98565b613e078185613da2565b9350613e1283613db2565b805f5b83811015613e42578151613e298882613dd0565b9750613e3483613de7565b925050600181019050613e15565b5085935050505092915050565b5f6020820190508181035f830152613e678184613df3565b905092915050565b5f8060208385031215613e8557613e84613581565b5b5f83013567ffffffffffffffff811115613ea257613ea1613585565b5b613eae8582860161365d565b92509250509250929050565b5f65ffffffffffff82169050919050565b613ed481613eba565b82525050565b5f608082019050613eed5f830187613ecb565b613efa6020830186613ecb565b613f0760408301856138a3565b613f1460608301846138a3565b95945050505050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b613f4181613f1d565b82525050565b5f602082019050613f5a5f830184613f38565b92915050565b5f8083601f840112613f7557613f74613651565b5b8235905067ffffffffffffffff811115613f9257613f91613655565b5b602083019150836020820283011115613fae57613fad613659565b5b9250929050565b5f8060208385031215613fcb57613fca613581565b5b5f83013567ffffffffffffffff811115613fe857613fe7613585565b5b613ff485828601613f60565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614060578082015181840152602081019050614045565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61408582614029565b61408f8185614033565b935061409f818560208601614043565b6140a88161406b565b840191505092915050565b5f6140be838361407b565b905092915050565b5f602082019050919050565b5f6140dc82614000565b6140e6818561400a565b9350836020820285016140f88561401a565b805f5b85811015614133578484038952815161411485826140b3565b945061411f836140c6565b925060208a019950506001810190506140fb565b50829750879550505050505092915050565b5f6020820190508181035f83015261415d81846140d2565b905092915050565b5f805f6060848603121561417c5761417b613581565b5b5f6141898682870161360a565b935050602061419a8682870161363d565b92505060406141ab868287016137a8565b9150509250925092565b5f6141bf8261395e565b9050919050565b6141cf816141b5565b82525050565b5f6020820190506141e85f8301846141c6565b92915050565b5f806040838503121561420457614203613581565b5b5f6142118582860161363d565b92505060206142228582860161363d565b9150509250929050565b5f614236826135a8565b9050919050565b6142468161422c565b8114614250575f80fd5b50565b5f813590506142618161423d565b92915050565b6142708161398f565b811461427a575f80fd5b50565b5f8135905061428b81614267565b92915050565b61429a816139bd565b81146142a4575f80fd5b50565b5f813590506142b581614291565b92915050565b5f805f805f60a086880312156142d4576142d3613581565b5b5f6142e188828901614253565b95505060206142f28882890161427d565b9450506040614303888289016142a7565b93505060606143148882890161427d565b9250506080614325888289016137a8565b9150509295509295909350565b61433b81613eba565b8114614345575f80fd5b50565b5f8135905061435681614332565b92915050565b5f805f6060848603121561437357614372613581565b5b5f61438086828701614348565b935050602061439186828701614348565b92505060406143a2868287016137a8565b9150509250925092565b5f63ffffffff82169050919050565b6143c4816143ac565b82525050565b5f6020820190506143dd5f8301846143bb565b92915050565b5f819050919050565b5f6143fa60208401846137a8565b905092915050565b5f602082019050919050565b5f6144198385613ca1565b9350614424826143e3565b805f5b8581101561445c5761443982846143ec565b6144438882613cc0565b975061444e83614402565b925050600181019050614427565b5085925050509392505050565b5f60608201905061447c5f83018761375e565b6144896020830186613736565b818103604083015261449c81848661440e565b905095945050505050565b5f815190506144b581613627565b92915050565b5f602082840312156144d0576144cf613581565b5b5f6144dd848285016144a7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61451d82613786565b915061452883613786565b9250828203905060ff811115614541576145406144e6565b5b92915050565b5f60608201905061455a5f830186613ab1565b6145676020830185613ab1565b6145746040830184613ab1565b949350505050565b5f61458682613786565b915061459183613786565b9250828201905060ff8111156145aa576145a96144e6565b5b92915050565b5f6145ba8261361e565b91506145c58361361e565b92508282026145d38161361e565b915082820484148315176145ea576145e96144e6565b5b5092915050565b5f6145fb826139e4565b9150614606836139e4565b925082820190506dffffffffffffffffffffffffffff81111561462c5761462b6144e6565b5b92915050565b5f61464c61464761464284613786565b613934565b61361e565b9050919050565b61465c81614632565b82525050565b5f6020820190506146755f830184614653565b92915050565b5f6146858261382d565b91506146908361382d565b9250828203905067ffffffffffffffff8111156146b0576146af6144e6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6146ed8261382d565b91506146f88361382d565b925082614708576147076146b6565b5b828204905092915050565b5f61471d82613895565b915061472883613895565b9250828201905062ffffff811115614743576147426144e6565b5b92915050565b5f614753826139e4565b915061475e836139e4565b925082820390506dffffffffffffffffffffffffffff811115614784576147836144e6565b5b92915050565b5f6147a461479f61479a846139e4565b613934565b61361e565b9050919050565b6147b48161478a565b82525050565b5f6040820190506147cd5f8301856147ab565b6147da6020830184613ab1565b9392505050565b5f6147eb8261361e565b91506147f68361361e565b925082820190508082111561480e5761480d6144e6565b5b92915050565b5f6040820190506148275f830185613ab1565b6148346020830184613ab1565b9392505050565b5f61484582613786565b915060ff8203614858576148576144e6565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156148d2576148d1613581565b5b5f6148df848285016137a8565b91505092915050565b5f6148f28261361e565b91506148fd8361361e565b9250828203905081811115614915576149146144e6565b5b92915050565b5f80fd5b5f80fd5b5f80858511156149365761493561491b565b5b838611156149475761494661491f565b5b6001850283019150848603905094509492505050565b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126149855761498461495d565b5b80840192508235915067ffffffffffffffff8211156149a7576149a6614961565b5b6020830192506001820236038313156149c3576149c2614965565b5b509250929050565b5f81905092915050565b828183375f83830152505050565b5f6149ee83856149cb565b93506149fb8385846149d5565b82840190509392505050565b5f614a1182614029565b614a1b81856149cb565b9350614a2b818560208601614043565b80840191505092915050565b5f614a438285876149e3565b9150614a4f8284614a07565b9150819050949350505050565b5f614a668261361e565b9150614a718361361e565b925082614a8157614a806146b6565b5b828204905092915050565b5f614a9682613eba565b9150614aa183613eba565b925082614ab157614ab06146b6565b5b828206905092915050565b5f614ac682613eba565b9150614ad183613eba565b9250828203905065ffffffffffff811115614aef57614aee6144e6565b5b92915050565b5f604082019050614b085f83018561375e565b614b15602083018461375e565b9392505050565b5f81519050614b2a816135f4565b92915050565b5f60208284031215614b4557614b44613581565b5b5f614b5284828501614b1c565b91505092915050565b5f604082019050614b6e5f830185613736565b614b7b60208301846147ab565b9392505050565b614b8b8161398f565b82525050565b614b9a816139bd565b82525050565b5f608082019050614bb35f830187614b82565b614bc06020830186614b91565b614bcd6040830185614b82565b614bda6060830184613ab1565b95945050505050565b5f614bed82613eba565b9150614bf883613eba565b9250828202614c0681613eba565b9150808214614c1857614c176144e6565b5b5092915050565b5f614c2982613eba565b9150614c3483613eba565b9250828201905065ffffffffffff811115614c5257614c516144e6565b5b92915050565b5f614c6282613eba565b9150614c6d83613eba565b925082614c7d57614c7c6146b6565b5b828204905092915050565b5f614c9282613895565b9150614c9d83613895565b9250828203905062ffffff811115614cb857614cb76144e6565b5b92915050565b5f82825260208201905092915050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e20315f8201527f3132206269747300000000000000000000000000000000000000000000000000602082015250565b5f614d28602783614cbe565b9150614d3382614cce565b604082019050919050565b5f6020820190508181035f830152614d5581614d1c565b9050919050565b5f606082019050614d6f5f83018661375e565b614d7c602083018561375e565b614d896040830184613736565b949350505050565b5f614d9b826139bd565b9150614da6836139bd565b9250828202614db4816139bd565b9150808214614dc657614dc56144e6565b5b5092915050565b5f604082019050614de05f83018561375e565b614ded6020830184613736565b9392505050565b5f604082019050614e075f830185613b32565b614e146020830184613736565b9392505050565b5f614e35614e30614e2b84613eba565b613934565b61361e565b9050919050565b614e4581614e1b565b82525050565b5f608082019050614e5e5f83018761375e565b614e6b602083018661375e565b614e786040830185614e3c565b614e856060830184614e3c565b95945050505050565b614e978161382d565b82525050565b5f602082019050614eb05f830184614e8e565b92915050565b5f606082019050614ec95f83018661375e565b614ed660208301856138a3565b614ee360408301846138a3565b949350505050565b5f606082019050614efe5f83018661375e565b614f0b6020830185614e3c565b614f186040830184614e3c565b949350505050565b5f604082019050614f335f8301856138a3565b614f4060208301846138a3565b9392505050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e20315f8201527f3238206269747300000000000000000000000000000000000000000000000000602082015250565b5f614fa1602783614cbe565b9150614fac82614f47565b604082019050919050565b5f6020820190508181035f830152614fce81614f95565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e20345f8201527f3020626974730000000000000000000000000000000000000000000000000000602082015250565b5f61502f602683614cbe565b915061503a82614fd5565b604082019050919050565b5f6020820190508181035f83015261505c81615023565b9050919050565b61506c816137fa565b8114615076575f80fd5b50565b5f8151905061508781615063565b92915050565b5f602082840312156150a2576150a1613581565b5b5f6150af84828501615079565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f615112602a83614cbe565b915061511d826150b8565b604082019050919050565b5f6020820190508181035f83015261513f81615106565b9050919050565b5f6151518284614a07565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f615190601d83614cbe565b915061519b8261515c565b602082019050919050565b5f6020820190508181035f8301526151bd81615184565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f61521e602683614cbe565b9150615229826151c4565b604082019050919050565b5f6020820190508181035f83015261524b81615212565b9050919050565b5f81519050919050565b5f61526682615252565b6152708185614cbe565b9350615280818560208601614043565b6152898161406b565b840191505092915050565b5f6020820190508181035f8301526152ac818461525c565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122088079660ab1a69b253a33479e02a0b724dd02ff90a71d231160a6b8b1bb6ea5c64736f6c634300081800330000000000000000000000004d5f2cd31701f3e5de77b3f89ee7b80eb87b4acc0000000000000000000000007865d01da4c9ba2f69b7879e6d2483ab6b354d95