0 txs
8 calls
constructor
constructor(address _verifierContract, bytes32 _imageId, bytes32 _configHash, uint64 _proposalOutputCount, uint64 _outputBlockSpan, uint32 _gameType, address _optimismPortal, bytes32 _rootClaim, uint64 _l2BlockNumber)
functions
blobsHash
viewfunction blobsHash() view returns (bytes32 blobsHash_)
childCount
viewfunction childCount() view returns (uint256 count_)
children
viewfunction children(uint256) view returns (address)
contenderDuplicates
viewfunction contenderDuplicates(uint256) view returns (uint64)
contenderIndex
viewfunction contenderIndex() view returns (uint64)
createdAt
viewfunction createdAt() view returns (uint64)
DISPUTE_GAME_FACTORY
viewfunction DISPUTE_GAME_FACTORY() view returns (address)
eliminationRound
viewfunction eliminationRound(address) view returns (uint256)
eliminations
viewfunction eliminations(address, uint256) view returns (address)
eliminationsPaid
viewfunction eliminationsPaid(address) view returns (uint256)
extraData
purefunction extraData() pure returns (bytes extraData_)
FPVM_IMAGE_ID
viewfunction FPVM_IMAGE_ID() view returns (bytes32)
GAME_TYPE
viewfunction GAME_TYPE() view returns (uint32)
gameCreator
purefunction gameCreator() pure returns (address creator_)
gameData
viewfunction gameData() view returns (uint32 gameType_, bytes32 rootClaim_, bytes extraData_)
gameIndex
viewfunction gameIndex() view returns (uint256)
gameType
viewfunction gameType() view returns (uint32 gameType_)
getChallengerDuration
purefunction getChallengerDuration(uint256) pure returns (uint64 duration_)
isProposing
viewfunction isProposing() view returns (bool)
isViableSignature
viewfunction isViableSignature(bytes32 childSignature) view returns (bool isViableSignature_)
KAILUA_TREASURY
viewfunction KAILUA_TREASURY() view returns (address)
l1Head
purefunction l1Head() pure returns (bytes32 l1Head_)
L2_BLOCK_NUMBER
viewfunction L2_BLOCK_NUMBER() view returns (uint64)
l2BlockNumber
purefunction l2BlockNumber() pure returns (uint256 l2BlockNumber_)
lastProposal
viewfunction lastProposal(address) view returns (address)
lastResolved
viewfunction lastResolved() view returns (address)
minCreationTime
viewfunction minCreationTime() view returns (uint64 minCreationTime_)
opponentIndex
viewfunction opponentIndex() view returns (uint64)
OPTIMISM_PORTAL
viewfunction OPTIMISM_PORTAL() view returns (address)
OUTPUT_BLOCK_SPAN
viewfunction OUTPUT_BLOCK_SPAN() view returns (uint64)
paidBonds
viewfunction paidBonds(address) view returns (uint256)
parentGame
viewfunction parentGame() view returns (address parentGame_)
participationBond
viewfunction participationBond() view returns (uint256)
proofStatus
viewfunction proofStatus(bytes32) view returns (uint8)
PROPOSAL_BLOBS
viewfunction PROPOSAL_BLOBS() view returns (uint64)
PROPOSAL_OUTPUT_COUNT
viewfunction PROPOSAL_OUTPUT_COUNT() view returns (uint64)
proposalBlobHashes
viewfunction proposalBlobHashes(uint256) view returns (bytes32)
proposer
viewfunction proposer() view returns (address proposer_)
proposerOf
viewfunction proposerOf(address) view returns (address)
provenAt
viewfunction provenAt(bytes32) view returns (uint64)
prover
viewfunction prover(bytes32) view returns (address)
resolvedAt
viewfunction resolvedAt() view returns (uint64)
RISC_ZERO_VERIFIER
viewfunction RISC_ZERO_VERIFIER() view returns (address)
ROLLUP_CONFIG_HASH
viewfunction ROLLUP_CONFIG_HASH() view returns (bytes32)
ROOT_CLAIM
viewfunction ROOT_CLAIM() view returns (bytes32)
rootClaim
purefunction rootClaim() pure returns (bytes32 rootClaim_)
signature
viewfunction signature() view returns (bytes32 signature_)
status
viewfunction status() view returns (uint8)
treasuryAddress
purefunction treasuryAddress() pure returns (address treasuryAddress_)
validChildSignature
viewfunction validChildSignature() view returns (bytes32)
vanguard
viewfunction vanguard() view returns (address)
vanguardAdvantage
viewfunction vanguardAdvantage() view returns (uint64)
verifyIntermediateOutput
purefunction verifyIntermediateOutput(uint64, uint256, bytes, bytes) pure returns (bool success)
version
viewfunction version() view returns (string)
wasRespectedGameTypeWhenCreated
viewfunction wasRespectedGameTypeWhenCreated() view returns (bool)
appendChild
nonpayablefunction appendChild()
assignVanguard
nonpayablefunction assignVanguard(address _vanguard, uint64 _vanguardAdvantage)
claimEliminationBonds
nonpayablefunction claimEliminationBonds(uint256 claims)
claimProposerBond
nonpayablefunction claimProposerBond()
eliminate
nonpayablefunction eliminate(address _child, address prover)
initialize
payablefunction initialize() payable
propose
payablefunction propose(bytes32 _rootClaim, bytes _extraData) payable returns (address tournament)
proveOutputFault
nonpayablefunction proveOutputFault(address[2] prHs, uint64[2] co, bytes encodedSeal, bytes32[2] ac, uint256 proposedOutputFe, bytes[][2] kzgCommitmentsProofs)
proveTrailFault
nonpayablefunction proveTrailFault(address payoutRecipient, uint64[2] co, uint256 proposedOutputFe, bytes blobCommitment, bytes kzgProof)
proveValidity
nonpayablefunction proveValidity(address payoutRecipient, address l1HeadSource, uint64 childIndex, bytes encodedSeal)
pruneChildren
nonpayablefunction pruneChildren(uint256 stepLimit) returns (address)
resolve
nonpayablefunction resolve() returns (uint8 status_)
setParticipationBond
nonpayablefunction setParticipationBond(uint256 amount)
updateLastResolved
nonpayablefunction updateLastResolved()
events
BondUpdated
event BondUpdated(uint256 amount)
Proven
event Proven(bytes32 indexed signature, uint8 indexed status)
Resolved
event Resolved(uint8 indexed status)
errors
AlreadyEliminated
error AlreadyEliminated()
AlreadyInitialized
error AlreadyInitialized()
AlreadyProven
error AlreadyProven()
BadAuth
error BadAuth()
BadExtraData
error BadExtraData()
Blacklisted
error Blacklisted(address source, address expected)
BlockNumberMismatch
error BlockNumberMismatch(uint256 anchored, uint256 initialized)
BondTransferFailed
error BondTransferFailed()
ClaimAlreadyResolved
error ClaimAlreadyResolved()
GameNotInProgress
error GameNotInProgress()
GameNotResolved
error GameNotResolved()
IncorrectBondAmount
error IncorrectBondAmount()
InvalidDataRemainder
error InvalidDataRemainder()
InvalidDisputedClaimIndex
error InvalidDisputedClaimIndex()
InvalidParent
error InvalidParent()
NoConflict
error NoConflict()
NoCreditToClaim
error NoCreditToClaim()
NotProposed
error NotProposed()
NotProven
error NotProven()
UnexpectedRootClaim
error UnexpectedRootClaim(bytes32 rootClaim)
UnknownGame
error UnknownGame()
VanguardError
error VanguardError(address parentGame)
creation bytecode
0x61020060405234801562000011575f80fd5b5060405162005ecd38038062005ecd8339810160408190526200003491620001b4565b3060808190526001600160a01b038a1660a05260c089905260e08890526001600160401b03808816610100528616610120528989898989898983620000798162000272565b94506200008b905061100085620002aa565b6001600160401b031615620000a2576001620000a4565b5f5b60ff16620000b561100086620002d2565b620000c19190620002fa565b6001600160401b03166101405263ffffffff8216610160526001600160a01b0381166101808190526040805163f2b4e61760e01b8152905163f2b4e617916004808201926020929091908290030181865afa15801562000123573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000149919062000324565b6001600160a01b03166101a0525050506101c096909652505050506001600160401b03166101e05250620003499650505050505050565b6001600160a01b038116811462000195575f80fd5b50565b80516001600160401b0381168114620001af575f80fd5b919050565b5f805f805f805f805f6101208a8c031215620001ce575f80fd5b8951620001db8162000180565b60208b015160408c0151919a5098509650620001fa60608b0162000198565b95506200020a60808b0162000198565b945060a08a015163ffffffff8116811462000223575f80fd5b60c08b0151909450620002368162000180565b60e08b015190935091506200024f6101008b0162000198565b90509295985092959850929598565b634e487b7160e01b5f52601160045260245ffd5b5f6001600160401b038216806200028d576200028d6200025e565b5f190192915050565b634e487b7160e01b5f52601260045260245ffd5b5f6001600160401b0383811680620002c657620002c662000296565b92169190910692915050565b5f6001600160401b0383811680620002ee57620002ee62000296565b92169190910492915050565b6001600160401b038181168382160190808211156200031d576200031d6200025e565b5092915050565b5f6020828403121562000335575f80fd5b8151620003428162000180565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516159ef620004de5f395f818161068b01528181612b970152612c1801525f81816106fe0152612b0f01525f818161091c01528181610eb1015281816135cf01528181613d400152818161424a0152614ce001525f818161094f0152614d8a01525f8181610c0401528181610d5c01528181613d6d015281816143870152614d5a01525f8181610d8f015261188801525f81816109ba01528181611db6015261475e01525f8181610d29015281816117ae01528181611d5801528181611d9501528181611f6201528181612f6f01526131f101525f81816105f8015261482001525f8181610a3c0152818161484601526148b101525f8181610e19015261488001525f8181610b33015281816110a701528181611119015281816122e40152818161241d01528181612556015281816129a101528181612c4f0152818161355b0152818161466a015281816149bd01528181614a6301528181614bda0152614c5401526159ef5ff3fe608060405260043610610435575f3560e01c806382ff53a111610237578063bb7ecb211161013c578063cfa45128116100b7578063e854e31a11610087578063f3c0ce221161006d578063f3c0ce2214610e08578063fa24f74314610e3b578063fcddca9814610e5e575f80fd5b8063e854e31a14610dd0578063eb45ec0d14610def575f80fd5b8063cfa4512814610d18578063dbbf2c4714610d4b578063dce87e6814610d7e578063e1f3c01014610db1575f80fd5b8063bd8da9561161010c578063c7265bc6116100f2578063c7265bc614610cb1578063ca0dc97314610ce5578063cf09e0d014610cf8575f80fd5b8063bd8da95614610c6e578063c5f956af14610c8d575f80fd5b8063bb7ecb2114610bc2578063bbdc02db14610bf6578063bc586c4814610c39578063bcef3b5514610c4d575f80fd5b8063a09159a6116101cc578063a9b51cb61161019c578063afdaec5011610182578063afdaec5014610b22578063b425dcb714610b55578063b84c278614610b8d575f80fd5b8063a9b51cb614610ae4578063aebda6f814610b03575f80fd5b8063a09159a614610a5e578063a401bc8c14610a7d578063a875459414610a9c578063a8e4fb9014610ad0575f80fd5b80638e8abdb1116102075780638e8abdb1146109a95780638f0ac453146109dc57806393294bc314610a00578063971805d814610a2b575f80fd5b806382ff53a11461090b57806385734ee11461093e5780638b85902b146109715780638bc3bbc014610995575f80fd5b80634a1890f01161033d57806369d5324d116102d2578063716e5b4a116102a257806377e4b3d51161028857806377e4b3d5146108d05780638129fc1c146108ef578063817804af146108f7575f80fd5b8063716e5b4a1461089b578063768c7204146108b0575f80fd5b806369d5324d146108105780636e0234431461082f5780637002ce421461085d57806370a87a981461087c575f80fd5b806354fd4d501161030d57806354fd4d50146107715780635654a341146107c6578063609d3334146107db5780636361506d146107ef575f80fd5b80634a1890f0146106ed5780634c6f8414146107205780634dafd7891461073e57806351ff48471461075d575f80fd5b8063250e69bd116103cd5780632a90b48f1161039d578063326f819511610383578063326f81951461067a57806337b1b229146106ad578063429e88d0146106ce575f80fd5b80632a90b48f146106305780632b44606d1461064f575f80fd5b8063250e69bd146105a55780632810e1d6146105d35780632a6375da146105e75780632a6648741461061a575f80fd5b80631bbd66f3116104085780631bbd66f3146104f05780631d9e47f4146105105780631e24fdd514610536578063200d2ed21461056b575f80fd5b8063077fb4691461043957806312f9650f1461047657806316112bcf1461049957806319effeb4146104c4575b5f80fd5b348015610444575f80fd5b50610458610453366004614eec565b610e72565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610481575f80fd5b5061048b600e5481565b60405190815260200161046d565b3480156104a4575f80fd5b5061048b6104b3366004614f1a565b600b6020525f908152604090205481565b3480156104cf575f80fd5b50600a546104589068010000000000000000900467ffffffffffffffff1681565b3480156104fb575f80fd5b506008546104589067ffffffffffffffff1681565b34801561051b575f80fd5b50305b6040516001600160a01b03909116815260200161046d565b348015610541575f80fd5b5061055b610550366004614f96565b5f9695505050505050565b604051901515815260200161046d565b348015610576575f80fd5b50600a5461059890700100000000000000000000000000000000900460ff1681565b60405161046d919061507e565b3480156105b0575f80fd5b50600a5461055b9071010000000000000000000000000000000000900460ff1681565b3480156105de575f80fd5b50610598610ead565b3480156105f2575f80fd5b5061048b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610625575f80fd5b5061062e611117565b005b34801561063b575f80fd5b5061062e61064a366004615091565b61136e565b34801561065a575f80fd5b5061048b610669366004614f1a565b60116020525f908152604090205481565b348015610685575f80fd5b506104587f000000000000000000000000000000000000000000000000000000000000000081565b3480156106b8575f80fd5b503660011981013560f01c90033560601c61051e565b3480156106d9575f80fd5b5061048b6106e8366004614eec565b61159a565b3480156106f8575f80fd5b5061048b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561072b575f80fd5b50600a5467ffffffffffffffff16610458565b348015610749575f80fd5b5061062e6107583660046150d8565b6115b8565b348015610768575f80fd5b5061048b611a6b565b34801561077c575f80fd5b506107b96040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161046d91906151bc565b3480156107d1575f80fd5b5061048b60015481565b3480156107e6575f80fd5b506107b9611af1565b3480156107fa575f80fd5b503660011981013560f01c90036034013561048b565b34801561081b575f80fd5b5061062e61082a3660046151ce565b611aff565b34801561083a575f80fd5b50610598610849366004614eec565b60046020525f908152604090205460ff1681565b348015610868575f80fd5b5061051e610877366004614eec565b611f96565b348015610887575f80fd5b5061051e610896366004614eec565b611fbe565b3480156108a6575f80fd5b5061048b60095481565b3480156108bb575f80fd5b506006546104589067ffffffffffffffff1681565b3480156108db575f80fd5b5060135461051e906001600160a01b031681565b61062e612acb565b348015610902575f80fd5b5061062e612cbb565b348015610916575f80fd5b5061051e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610949575f80fd5b5061051e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561097c575f80fd5b503660011981013560f01c90036054013560c01c61048b565b3480156109a0575f80fd5b5060055461048b565b3480156109b4575f80fd5b506104587f000000000000000000000000000000000000000000000000000000000000000081565b3480156109e7575f80fd5b50600d5461051e9061010090046001600160a01b031681565b348015610a0b575f80fd5b5061048b610a1a366004614f1a565b600f6020525f908152604090205481565b348015610a36575f80fd5b5061048b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a69575f80fd5b5061055b610a78366004614eec565b612d39565b348015610a88575f80fd5b5061062e610a9736600461529b565b612d79565b348015610aa7575f80fd5b5061051e610ab6366004614eec565b60026020525f90815260409020546001600160a01b031681565b348015610adb575f80fd5b5061051e61352b565b348015610aef575f80fd5b5061062e610afe366004615379565b6135cc565b348015610b0e575f80fd5b5061062e610b1d366004614eec565b61372a565b348015610b2d575f80fd5b5061051e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b60575f80fd5b506013546104589074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b348015610b98575f80fd5b50610458610ba7366004614eec565b60036020525f908152604090205467ffffffffffffffff1681565b348015610bcd575f80fd5b5061051e610bdc366004614f1a565b600c6020525f90815260409020546001600160a01b031681565b348015610c01575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405163ffffffff909116815260200161046d565b348015610c44575f80fd5b5061062e6138c6565b348015610c58575f80fd5b503660011981013560f01c90036014013561048b565b348015610c79575f80fd5b50610458610c88366004614eec565b505f90565b348015610c98575f80fd5b503660011981013560f01c9003605c013560601c61051e565b348015610cbc575f80fd5b5061051e610ccb366004614f1a565b60126020525f90815260409020546001600160a01b031681565b61051e610cf33660046153a5565b613c2b565b348015610d03575f80fd5b50600a546104589067ffffffffffffffff1681565b348015610d23575f80fd5b506104587f000000000000000000000000000000000000000000000000000000000000000081565b348015610d56575f80fd5b50610c247f000000000000000000000000000000000000000000000000000000000000000081565b348015610d89575f80fd5b506104587f000000000000000000000000000000000000000000000000000000000000000081565b348015610dbc575f80fd5b5061051e610dcb3660046153ed565b614213565b348015610ddb575f80fd5b5061062e610dea366004614eec565b614247565b348015610dfa575f80fd5b50600d5461055b9060ff1681565b348015610e13575f80fd5b5061051e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610e46575f80fd5b50610e4f614381565b60405161046d93929190615417565b348015610e69575f80fd5b5061048b614473565b60078181548110610e81575f80fd5b905f5260205f209060049182820401919006600802915054906101000a900467ffffffffffffffff1681565b5f807f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f329190615444565b6001600160a01b0316336001600160a01b031614610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5f600a54700100000000000000000000000000000000900460ff166002811115610fdd57610fdd61501c565b14611014576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff1670020000000000000000000000000000000017905560029150816040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60905f90a242600a60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663817804af6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156110fd575f80fd5b505af115801561110f573d5f803e3d5ffd5b505050505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eb45ec0d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611173573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611197919061545f565b6111cd576040517f9d3e7d2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b303303611206576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460065467ffffffffffffffff161080156112dc57506006546005805460029267ffffffffffffffff169081106112415761124161547e565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa1580156112a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c991906154ab565b60028111156112da576112da61501c565b145b15611313576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580546001810182555f919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b5f8290505f816001600160a01b0316631d9e47f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d39190615444565b9050336001600160a01b03821614611428576040517fd36871fd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610fa8565b6001600160a01b038083165f908152600c60205260409020541680611479576040517ff2a87d5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f908152600b6020526040902054156114c8576040517f8b1dfa2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316635654a3416040518163ffffffff1660e01b8152600401602060405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152891906154c9565b6001600160a01b039182165f818152600b60209081526040808320949094559690931683526010865290822080546001810182559083529490912090930180547fffffffffffffffffffffffff000000000000000000000000000000000000000016909317909255505050565b905090565b5f81815481106115a8575f80fd5b5f91825260209091200154905081565b5f60056115c860208901896154e0565b67ffffffffffffffff16815481106115e2576115e261547e565b5f9182526020822001546001600160a01b03169150816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611633573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165791906154ab565b60028111156116685761166861501c565b1461169f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460065467ffffffffffffffff1610801561177557506006546005805460029267ffffffffffffffff169081106116da576116da61547e565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa15801561173e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176291906154ab565b60028111156117735761177361501c565b145b156117ac576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166117e76040890160208a016154e0565b67ffffffffffffffff161015611829576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611862576040517f7412124e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600161187560408a0160208b016154e0565b61187f9190615528565b90506118ac60017f0000000000000000000000000000000000000000000000000000000000000000615528565b67ffffffffffffffff166118c98267ffffffffffffffff16614487565b14611900576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e24fdd50000000000000000000000000000000000000000000000000000000081526001600160a01b03831690631e24fdd59061194f9084908b908b908b908b908b90600401615579565b6020604051808303815f875af115801561196b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198f919061545f565b6119f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6261642070726f706f7365644f7574707574206b7a67000000000000000000006044820152606401610fa8565b611a6089836001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5991906154c9565b600161449a565b505050505050505050565b5f6002611a873660011981013560f01c90036014013590565b90565b5f604051602001611a999291906155f6565b60408051601f1981840301815290829052611ab39161560f565b602060405180830381855afa158015611ace573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061159591906154c9565b60606115956054601c6145fd565b5f60058467ffffffffffffffff1681548110611b1d57611b1d61547e565b5f9182526020822001546001600160a01b03169150816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9291906154ab565b6002811115611ba357611ba361501c565b14611bda576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3a91906154c9565b60095560055460065467ffffffffffffffff16108015611d1357506006546005805460029267ffffffffffffffff16908110611c7857611c7861547e565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa158015611cdc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0091906154ab565b6002811115611d1157611d1161501c565b145b15611d4a576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161115611ee15760023660011981013560f01c90036054013560c01c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856001600160a01b031663fcddca986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3591906154c9565b6040517fffffffffffffffff00000000000000000000000000000000000000000000000060c095861b8116602083015293851b841660288201529190931b9091166030820152603881019190915260580160408051601f1981840301815290829052611ea09161560f565b602060405180830381855afa158015611ebb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611ede91906154c9565b90505b611f8d868883611efd3660011981013560f01c90036014013590565b611f60876001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a8491906154c9565b7f00000000000000000000000000000000000000000000000000000000000000008a8a6009546002614630565b50505050505050565b60058181548110611fa5575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f6002600a54700100000000000000000000000000000000900460ff166002811115611fec57611fec61501c565b14612023576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005545f0361205e576040517ff2a87d5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460085460055467ffffffffffffffff9283169290911690820361208757505f9392505050565b8167ffffffffffffffff168167ffffffffffffffff16116120b0576120ad82600161562a565b90505b5f60058367ffffffffffffffff16815481106120ce576120ce61547e565b5f918252602080832090910154604080517f51ff484700000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216945084926351ff4847926004808401938290030181865afa158015612136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215a91906154c9565b90506002826001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121be91906154ab565b60028111156121cf576121cf61501c565b036121dd5750949350505050565b6121e681612d39565b15806121f657506121f682614981565b1561266c575f61220582614b51565b6007549091505b5f8111801561221a57505f88115b156123bc575f6005600761222f60018561564b565b8154811061223f5761223f61547e565b905f5260205f2090600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff16815481106122815761228161547e565b5f918252602090912001546001600160a01b031690506122a081614981565b61233c576040517f2a90b48f0000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001690632a90b48f906044015f604051808303815f87803b158015612325575f80fd5b505af1158015612337573d5f803e3d5ffd5b505050505b600780548061234d5761234d61565e565b5f8281526020902060047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191820401805467ffffffffffffffff600860038516026101000a0219169055905550806123a78161568b565b9150886123b38161568b565b9950505061220c565b50865f036123d057505f9695505050505050565b6123d983614981565b612475576040517f2a90b48f0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690632a90b48f906044015f604051808303815f87803b15801561245e575f80fd5b505af1158015612470573d5f803e3d5ffd5b505050505b8661247f8161568b565b9750508394505b60055467ffffffffffffffff86161080156124a057505f87115b156126295760058567ffffffffffffffff16815481106124c2576124c261547e565b5f918252602090912001546001600160a01b031692506124e183614981565b61260a57826001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa158015612521573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061254591906154c9565b915061255082612d39565b612605577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a90b48f8461258d85614b51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156125ea575f80fd5b505af11580156125fc573d5f803e3d5ffd5b5050505061260a565b612629565b84612614816156bf565b9550876126208161568b565b98505050612486565b600680547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff871617905561266885600161562a565b9350505b60055467ffffffffffffffff851610801561272a575061272a60058567ffffffffffffffff16815481106126a2576126a261547e565b5f9182526020918290200154604080517f51ff484700000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216926351ff4847926004808401938290030181865afa158015612706573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a7891906154c9565b15612ac0575b60055467ffffffffffffffff841610801561274a57505f86115b15612a6d575f60058467ffffffffffffffff168154811061276d5761276d61547e565b905f5260205f20015f9054906101000a90046001600160a01b03169050612867836001600160a01b031663bd8da95661280c846001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127ff91906156e5565b67ffffffffffffffff1690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa1580156127db573d5f803e3d5ffd5b67ffffffffffffffff165f0361287d5750612a6d565b61288681614981565b156128915750612a4e565b5f816001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f291906154c9565b905082810361295f575050600780546001810182555f919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6886004820401805460039092166008026101000a67ffffffffffffffff8181021990931692861602919091179055612a4e565b61296881612d39565b1561299f576040517fa506d33400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a90b48f836129d884614b51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b158015612a35575f80fd5b505af1158015612a47573d5f803e3d5ffd5b5050505050505b82612a58816156bf565b935086612a648161568b565b97505050612730565b600880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091556005541480612ab257505f86115b15612ac05750949350505050565b505f95945050505050565b612ad3614b8c565b60763614612b0d576040517f9824bdab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000612b443660011981013560f01c90036014013590565b14612b8c576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c9003601401356004820152602401610fa8565b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c90036054013560c01c14612c45576040517feaa0996e0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036054013560c01c600482015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610fa8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c9003605c013560601c14612cb9576040517f9824bdab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b335f908152600c60205260409020546001600160a01b0316612d09576040517ff2a87d5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff163361010002179055565b6009545f9015612d4b57506009541490565b60015f8381526004602052604090205460ff166002811115612d6f57612d6f61501c565b141590505b919050565b5f6005612d8960208901896154e0565b67ffffffffffffffff1681548110612da357612da361547e565b5f9182526020822001546001600160a01b03169150816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e1891906154ab565b6002811115612e2957612e2961501c565b14612e60576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460065467ffffffffffffffff16108015612f3657506006546005805460029267ffffffffffffffff16908110612e9b57612e9b61547e565b5f9182526020918290200154604080517f200d2ed200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263200d2ed2926004808401938290030181865afa158015612eff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2391906154ab565b6002811115612f3457612f3461501c565b145b15612f6d576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16612fa86040890160208a016154e0565b67ffffffffffffffff1610612fe9576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ff960408801602089016154e0565b67ffffffffffffffff165f0361308d5761301f3660011981013560f01c90036014013590565b845114613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6261642061636365707465644f757470757400000000000000000000000000006044820152606401610fa8565b6131ea565b6001600160a01b038116631e24fdd560016130ae60408b0160208c016154e0565b6130b89190615528565b6130c8875f5b6020020151614e33565b6130d28680615700565b5f8181106130e2576130e261547e565b90506020028101906130f49190615764565b6131016020890189615700565b5f8181106131115761311161547e565b90506020028101906131239190615764565b6040518763ffffffff1660e01b815260040161314496959493929190615579565b6020604051808303815f875af1158015613160573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613184919061545f565b6131ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6261642061636365707465644f7574707574206b7a67000000000000000000006044820152606401610fa8565b61321560017f0000000000000000000000000000000000000000000000000000000000000000615528565b67ffffffffffffffff1661322f6040890160208a016154e0565b67ffffffffffffffff16036132be5761327d816001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f3c573d5f803e3d5ffd5b6020850151036132b9576040517f7412124e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613472565b6001600160a01b038116631e24fdd56132dd60408a0160208b016154e0565b856132e88680615700565b60016132f48980615700565b6132ff92915061564b565b81811061330e5761330e61547e565b90506020028101906133209190615764565b61332d6020890189615700565b600161333c60208c018c615700565b61334792915061564b565b8181106133565761335661547e565b90506020028101906133689190615764565b6040518763ffffffff1660e01b815260040161338996959493929190615579565b6020604051808303815f875af11580156133a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c9919061545f565b61342f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6261642070726f706f7365644f7574707574206b7a67000000000000000000006044820152606401610fa8565b8261343b8560016130be565b03613472576040517f7412124e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61352161348560408a0160208b01614f1a565b61349260208b018b614f1a565b86516020808901515f92916134ad9060408f01908f016154e0565b6134b890600161562a565b8c8c896001600160a01b03166351ff48476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061351a91906154c9565b6001614630565b5050505050505050565b6040517fbb7ecb210000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bb7ecb2190602401602060405180830381865afa1580156135a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115959190615444565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561362c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136509190615444565b6001600160a01b0316336001600160a01b0316146136ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610fa8565b506013805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009092166001600160a01b0390931692909217179055565b6013547c0100000000000000000000000000000000000000000000000000000000900460ff1615613759575f80fd5b601380547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000179055335f9081526011602052604081205481905b83831080156137ce5750335f9081526010602052604090205481105b1561385e57335f9081526010602052604081208054839081106137f3576137f361547e565b5f9182526020808320909101546001600160a01b0316808352600f90915260409091205490915061382490846157c5565b6001600160a01b039091165f908152600f6020526040812055915080613849816157d8565b915083613855816157d8565b945050506137b2565b50811561388957335f90815260116020526040812080548492906138839084906157c5565b90915550505b8015613899576138998133614e5e565b5050601380547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905550565b6013547c0100000000000000000000000000000000000000000000000000000000900460ff16156138f5575f80fd5b601380547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000179055335f908152600b602052604090205415613982576040517f8b1dfa2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152601260205260409020546001600160a01b03168015613b9c575f816001600160a01b0316631d9e47f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a019190615444565b90506002816001600160a01b0316637002ce42836001600160a01b031663768c72046040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a7491906156e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015613acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af39190615444565b6001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b5291906154ab565b6002811115613b6357613b6361501c565b14613b9a576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b335f908152600f602052604081205490819003613be5576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f818152600f6020526040812055613bff908290614e5e565b5050601380547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff169055565b335f908152600b602052604081205415613c71576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415613c9b57335f908152600f602052604081208054349290613c959084906157c5565b90915550505b600e54335f908152600f60205260409020541015613ce5576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f82ecf2f60000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906382ecf2f690613d9b907f00000000000000000000000000000000000000000000000000000000000000009088908890889060040161580f565b6020604051808303815f875af1158015613db7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ddb9190615444565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055335f908152601260205260409020549091506001600160a01b03168015613fe457816001600160a01b0316638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8491906154c9565b816001600160a01b0316638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ec0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ee491906154c9565b10613fe457806001600160a01b0316638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f4991906154c9565b826001600160a01b0316638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fa991906154c9565b6040517feaa0996e00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610fa8565b6013546001600160a01b03161580159061400957506013546001600160a01b03163314155b156141b0575f826001600160a01b0316631d9e47f46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561404b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061406f9190615444565b9050806001600160a01b0316638bc3bbc06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140d191906154c9565b6001036141ae575f614118846001600160a01b0316634c6f84146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127db573d5f803e3d5ffd5b61412c9067ffffffffffffffff164261564b565b60135490915074010000000000000000000000000000000000000000900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1610156141ac576040517f627fad6e0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610fa8565b505b505b506001600160a01b0381165f818152600c602090815260408083208054337fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092559084526012909252909120805490911690911790559392505050565b6010602052815f5260405f20818154811061422c575f80fd5b5f918252602090912001546001600160a01b03169150829050565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142cb9190615444565b6001600160a01b0316336001600160a01b031614614345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610fa8565b600e8290556040518281527f344368f837b372e83f2e2044df76bd67c40d4a4d9fce6710769e8ed7393b45ed9060200160405180910390a15050565b5f8060607f00000000000000000000000000000000000000000000000000000000000000009250306001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061440891906154c9565b9150306001600160a01b031663609d33346040518163ffffffff1660e01b81526004015f60405180830381865afa158015614445573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261446c919081019061583e565b9050909192565b5f60025f604051602001611a9991906158e6565b5f6144946110008361591e565b92915050565b5f8281526004602052604081205460ff1660028111156144bc576144bc61501c565b146144f3576040517f2c06a36400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260046020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600281111561453b5761453b61501c565b02179055508060028111156145525761455261501c565b60405183907f2d4e0491b639866a8d4d57a9faeb546a13f536e3e916a20af0aa4ae33f7bfc2d905f90a3505f90815260026020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039590951694909417909355600390522080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055565b6040518181523660011981013560f01c90038284820160208401378260208301015f815260208101604052505092915050565b6040517fbb7ecb210000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063bb7ecb2190602401602060405180830381865afa1580156146b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146d59190615444565b6001600160a01b031603614715576040517f9d3e7d2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f89896147578d6001600160a01b0316636361506d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f3c573d5f803e3d5ffd5b8a8a6147837f00000000000000000000000000000000000000000000000000000000000000008c615931565b67ffffffffffffffff163660011981013560f01c90036054013560c01c6147aa91906157c5565b60405160609690961b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020870152603486019490945260548501929092526074840152609483015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660b48201527f000000000000000000000000000000000000000000000000000000000000000060bc8201527f000000000000000000000000000000000000000000000000000000000000000060dc82015260fc0160405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab750e7586867f00000000000000000000000000000000000000000000000000000000000000006002866040516148e0919061560f565b602060405180830381855afa1580156148fb573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061491e91906154c9565b6040518563ffffffff1660e01b815260040161493d949392919061595d565b5f6040518083038186803b158015614953575f80fd5b505afa158015614965573d5f803e3d5ffd5b505050506149748a848461449a565b5050505050505050505050565b6040517fbb7ecb210000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063bb7ecb2190602401602060405180830381865afa158015614a02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a269190615444565b6040517f16112bcf0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906316112bcf90602401602060405180830381865afa158015614aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614acc91906154c9565b9050801580614b395750836001600160a01b0316635654a3416040518163ffffffff1660e01b8152600401602060405180830381865afa158015614b12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b3691906154c9565b81115b15614b4757505f9392505050565b5060019392505050565b5f818152600260205260409020546001600160a01b031680612d745750506009545f908152600260205260409020546001600160a01b031690565b600a5467ffffffffffffffff1615614bd0576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c90033560601c14614c81576040517fd36871fd0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90033560601c60048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610fa8565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517f4d1975b400000000000000000000000000000000000000000000000000000000815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691634d1975b49160048083019260209291908290030181865afa158015614d31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d5591906154c9565b6001557f000000000000000000000000000000000000000000000000000000000000000063ffffffff1663ffffffff16614e117f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633c9f397c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614de4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e089190615983565b63ffffffff1690565b63ffffffff1614600a60116101000a81548160ff021916908315150217905550565b5f6144947f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001836159a6565b5f816001600160a01b0316836040515f6040518083038185875af1925050503d805f8114614ea7576040519150601f19603f3d011682016040523d82523d5f602084013e614eac565b606091505b5050905080614ee7576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f60208284031215614efc575f80fd5b5035919050565b6001600160a01b0381168114614f17575f80fd5b50565b5f60208284031215614f2a575f80fd5b8135614f3581614f03565b9392505050565b67ffffffffffffffff81168114614f17575f80fd5b5f8083601f840112614f61575f80fd5b50813567ffffffffffffffff811115614f78575f80fd5b602083019150836020828501011115614f8f575f80fd5b9250929050565b5f805f805f8060808789031215614fab575f80fd5b8635614fb681614f3c565b955060208701359450604087013567ffffffffffffffff80821115614fd9575f80fd5b614fe58a838b01614f51565b90965094506060890135915080821115614ffd575f80fd5b5061500a89828a01614f51565b979a9699509497509295939492505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60038110614f17577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810161508b83615049565b91905290565b5f80604083850312156150a2575f80fd5b82356150ad81614f03565b915060208301356150bd81614f03565b809150509250929050565b8060408101831015614494575f80fd5b5f805f805f805f60c0888a0312156150ee575f80fd5b87356150f981614f03565b96506151088960208a016150c8565b955060608801359450608088013567ffffffffffffffff8082111561512b575f80fd5b6151378b838c01614f51565b909650945060a08a013591508082111561514f575f80fd5b5061515c8a828b01614f51565b989b979a50959850939692959293505050565b5f5b83811015615189578181015183820152602001615171565b50505f910152565b5f81518084526151a881602086016020860161516f565b601f01601f19169290920160200192915050565b602081525f614f356020830184615191565b5f805f805f608086880312156151e2575f80fd5b85356151ed81614f03565b945060208601356151fd81614f03565b9350604086013561520d81614f3c565b9250606086013567ffffffffffffffff811115615228575f80fd5b61523488828901614f51565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561529557615295615245565b60405290565b5f805f805f805f610120888a0312156152b2575f80fd5b6152bc89896150c8565b96506152cb8960408a016150c8565b9550608088013567ffffffffffffffff808211156152e7575f80fd5b6152f38b838c01614f51565b9250809750508195508a60bf8b011261530a575f80fd5b615312615272565b91508160e08b018c811115615325575f80fd5b60a08c015b8181101561534257803585526020948501940161532a565b509095503593506101008a013591508082111561535d575f80fd5b5061536a8a828b016150c8565b91505092959891949750929550565b5f806040838503121561538a575f80fd5b823561539581614f03565b915060208301356150bd81614f3c565b5f805f604084860312156153b7575f80fd5b83359250602084013567ffffffffffffffff8111156153d4575f80fd5b6153e086828701614f51565b9497909650939450505050565b5f80604083850312156153fe575f80fd5b823561540981614f03565b946020939093013593505050565b63ffffffff84168152826020820152606060408201525f61543b6060830184615191565b95945050505050565b5f60208284031215615454575f80fd5b8151614f3581614f03565b5f6020828403121561546f575f80fd5b81518015158114614f35575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156154bb575f80fd5b815160038110614f35575f80fd5b5f602082840312156154d9575f80fd5b5051919050565b5f602082840312156154f0575f80fd5b8135614f3581614f3c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff828116828216039080821115615549576155496154fb565b5092915050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b67ffffffffffffffff87168152856020820152608060408201525f6155a2608083018688615550565b82810360608401526155b5818587615550565b9998505050505050505050565b5f8154825f526020805f205f5b838110156155eb578154875295820195600191820191016155cf565b509495945050505050565b8281525f61560760208301846155c2565b949350505050565b5f825161562081846020870161516f565b9190910192915050565b67ffffffffffffffff818116838216019080821115615549576155496154fb565b81810381811115614494576144946154fb565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81615699576156996154fb565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b5f67ffffffffffffffff8083168181036156db576156db6154fb565b6001019392505050565b5f602082840312156156f5575f80fd5b8151614f3581614f3c565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615733575f80fd5b83018035915067ffffffffffffffff82111561574d575f80fd5b6020019150600581901b3603821315614f8f575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615797575f80fd5b83018035915067ffffffffffffffff8211156157b1575f80fd5b602001915036819003821315614f8f575f80fd5b80820180821115614494576144946154fb565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615808576158086154fb565b5060010190565b63ffffffff85168152836020820152606060408201525f615834606083018486615550565b9695505050505050565b5f6020828403121561584e575f80fd5b815167ffffffffffffffff80821115615865575f80fd5b818401915084601f830112615878575f80fd5b81518181111561588a5761588a615245565b604051601f8201601f19908116603f011681019083821181831017156158b2576158b2615245565b816040528281528760208487010111156158ca575f80fd5b6158db83602083016020880161516f565b979650505050505050565b5f614f3582846155c2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261592c5761592c6158f1565b500490565b67ffffffffffffffff818116838216028082169190828114615955576159556154fb565b505092915050565b606081525f615970606083018688615550565b6020830194909452506040015292915050565b5f60208284031215615993575f80fd5b815163ffffffff81168114614f35575f80fd5b5f826159b4576159b46158f1565b50069056fea264697066735822122026a3741c70b872247b4f4ec94a0bd3fa91f542158d060f34c9fd3d236e4b5a3864736f6c634300081800330000000000000000000000008eab2d97dfce405a1692a21b3ff3a172d593d3193918344017507b670b2de3344d656d74e4b7a82c6e10c6c693a824af3598cc241cf5ac2f28510eb143eb2fc357482af2d1b1059ac632ac1664efd2284f1950560000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000005390000000000000000000000008adee124447435fe03e3cd24df3f4cae32e65a3e78a478ad70ab245123081e8ecefafd8741c879c4868c61f6fadad2ba25b9449b000000000000000000000000000000000000000000000000000000000134d360