0 txs
15 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
BASIS_POINT_SCALE
viewfunction BASIS_POINT_SCALE() view returns (uint256)
configuredMinimumVouchAmount
viewfunction configuredMinimumVouchAmount() view returns (uint256)
contractAddressManager
viewfunction contractAddressManager() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
entryDonationFeeBasisPoints
viewfunction entryDonationFeeBasisPoints() view returns (uint256)
entryProtocolFeeBasisPoints
viewfunction entryProtocolFeeBasisPoints() view returns (uint256)
entryVouchersPoolFeeBasisPoints
viewfunction entryVouchersPoolFeeBasisPoints() view returns (uint256)
exitFeeBasisPoints
viewfunction exitFeeBasisPoints() view returns (uint256)
expectedSigner
viewfunction expectedSigner() view returns (address)
frozenAuthors
viewfunction frozenAuthors(uint256) view returns (bool)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAX_SLASH_PERCENTAGE
viewfunction MAX_SLASH_PERCENTAGE() view returns (uint256)
MAX_TOTAL_FEES
viewfunction MAX_TOTAL_FEES() view returns (uint256)
maximumVouches
viewfunction maximumVouches() view returns (uint256)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
protocolFeeAddress
viewfunction protocolFeeAddress() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rewardsByAddress
viewfunction rewardsByAddress(address) view returns (uint256)
rewardsByAttestationHash
viewfunction rewardsByAttestationHash(bytes32) view returns (uint256)
rewardsByProfileId
viewfunction rewardsByProfileId(uint256) view returns (uint256)
signatureUsed
viewfunction signatureUsed(bytes) view returns (bool)
signatureVerifier
viewfunction signatureVerifier() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
targetExistsAndAllowedForId
viewfunction targetExistsAndAllowedForId(uint256 targetId) view returns (bool exists, bool allowed)
unhealthyResponsePeriod
viewfunction unhealthyResponsePeriod() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
verifiedVouchByAuthorForSubjectAddress
viewfunction verifiedVouchByAuthorForSubjectAddress(uint256 author, address subjectAddress) view returns (tuple)
verifiedVouchByAuthorForSubjectProfileId
viewfunction verifiedVouchByAuthorForSubjectProfileId(uint256 author, uint256 subjectProfileId) view returns (tuple)
vouchCount
viewfunction vouchCount() view returns (uint256)
vouches
viewfunction vouches(uint256) view returns (bool archived, bool unhealthy, uint256 authorProfileId, address authorAddress, uint256 vouchId, uint256 subjectProfileId, uint256 balance, string comment, string metadata, tuple activityCheckpoints)
vouchExistsFor
viewfunction vouchExistsFor(uint256 author, uint256 subjectProfileId) view returns (bool)
vouchIdByAuthorForSubjectProfileId
viewfunction vouchIdByAuthorForSubjectProfileId(uint256, uint256) view returns (uint256)
vouchIdsByAuthor
viewfunction vouchIdsByAuthor(uint256, uint256) view returns (uint256)
vouchIdsByAuthorIndex
viewfunction vouchIdsByAuthorIndex(uint256, uint256) view returns (uint256)
vouchIdsForSubjectProfileId
viewfunction vouchIdsForSubjectProfileId(uint256, uint256) view returns (uint256)
vouchIdsForSubjectProfileIdIndex
viewfunction vouchIdsForSubjectProfileIdIndex(uint256, uint256) view returns (uint256)
addAdmin
nonpayablefunction addAdmin(address admin)
claimRewards
nonpayablefunction claimRewards()
claimRewardsByAttestation
nonpayablefunction claimRewardsByAttestation(bytes32 attestationHash)
freeze
nonpayablefunction freeze(uint256 authorProfileId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
increaseVouch
payablefunction increaseVouch(uint256 vouchId, bytes32 attestationHash, address subjectAddress) payable
initialize
nonpayablefunction initialize(address _owner, address _admin, address _expectedSigner, address _signatureVerifier, address _contractAddressManagerAddr, address _feeProtocolAddress, uint256 _entryProtocolFeeBasisPoints, uint256 _entryDonationFeeBasisPoints, uint256 _entryVouchersPoolFeeBasisPoints, uint256 _exitFeeBasisPoints)
markUnhealthy
nonpayablefunction markUnhealthy(uint256 vouchId)
pause
nonpayablefunction pause()
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setEntryDonationFeeBasisPoints
nonpayablefunction setEntryDonationFeeBasisPoints(uint256 _newEntryDonationFeeBasisPoints)
setEntryProtocolFeeBasisPoints
nonpayablefunction setEntryProtocolFeeBasisPoints(uint256 _newEntryProtocolFeeBasisPoints)
setEntryVouchersPoolFeeBasisPoints
nonpayablefunction setEntryVouchersPoolFeeBasisPoints(uint256 _newEntryVouchersPoolFeeBasisPoints)
setExitFeeBasisPoints
nonpayablefunction setExitFeeBasisPoints(uint256 _newExitFeeBasisPoints)
setMinimumVouchAmount
nonpayablefunction setMinimumVouchAmount(uint256 amount)
setProtocolFeeAddress
nonpayablefunction setProtocolFeeAddress(address _protocolFeeAddress)
slash
nonpayablefunction slash(uint256 authorProfileId, uint256 slashBasisPoints) returns (uint256)
unfreeze
nonpayablefunction unfreeze(uint256 authorProfileId)
unpause
nonpayablefunction unpause()
unvouch
nonpayablefunction unvouch(uint256 vouchId)
unvouchUnhealthy
nonpayablefunction unvouchUnhealthy(uint256 vouchId)
updateContractAddressManager
nonpayablefunction updateContractAddressManager(address contractAddressesAddr)
updateExpectedSigner
nonpayablefunction updateExpectedSigner(address signer)
updateMaximumVouches
nonpayablefunction updateMaximumVouches(uint256 maximumVouches_)
updateOwner
nonpayablefunction updateOwner(address owner)
updateSignatureVerifier
nonpayablefunction updateSignatureVerifier(address sinatureVerifier)
updateUnhealthyResponsePeriod
nonpayablefunction updateUnhealthyResponsePeriod(uint256 unhealthyResponsePeriodDuration)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
vouchByAddress
payablefunction vouchByAddress(address subjectAddress, string comment, string metadata) payable
vouchByAttestation
payablefunction vouchByAttestation(bytes32 attestationHash, string comment, string metadata) payable
vouchByProfileId
payablefunction vouchByProfileId(uint256 subjectProfileId, string comment, string metadata) payable
events
DepositedToRewards
event DepositedToRewards(uint256 indexed recipientProfileId, uint256 amount)
EntryDonationFeeBasisPointsUpdated
event EntryDonationFeeBasisPointsUpdated(uint256 newDonationFeeBasisPoints)
EntryProtocolFeeBasisPointsUpdated
event EntryProtocolFeeBasisPointsUpdated(uint256 newProtocolFeeBasisPoints)
EntryVouchersPoolFeeBasisPointsUpdated
event EntryVouchersPoolFeeBasisPointsUpdated(uint256 newVouchersPoolFeeBasisPoints)
ExitFeeBasisPointsUpdated
event ExitFeeBasisPointsUpdated(uint256 newExitFeeBasisPoints)
Frozen
event Frozen(uint256 indexed authorProfileId, bool isFrozen)
Initialized
event Initialized(uint64 version)
MarkedUnhealthy
event MarkedUnhealthy(uint256 indexed vouchId, uint256 indexed authorProfileId, uint256 indexed subjectProfileId)
Paused
event Paused(address account)
ProtocolFeeAddressUpdated
event ProtocolFeeAddressUpdated(address newFeeProtocolAddress)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Slashed
event Slashed(uint256 indexed authorProfileId, uint256 slashBasisPoints, uint256 totalSlashed)
Unpaused
event Unpaused(address account)
Unvouched
event Unvouched(uint256 indexed vouchId, uint256 indexed authorProfileId, uint256 indexed subjectProfileId, uint256 amountWithdrawn)
Upgraded
event Upgraded(address indexed implementation)
Vouched
event Vouched(uint256 indexed vouchId, uint256 indexed authorProfileId, uint256 indexed subjectProfileId, address subjectAddress, bytes32 attestationHash, uint256 amountStaked, uint256 amountDeposited)
VouchIncreased
event VouchIncreased(uint256 indexed vouchId, uint256 indexed authorProfileId, uint256 indexed subjectProfileId, address subjectAddress, bytes32 attestationHash, uint256 amountStaked, uint256 amountDeposited)
WithdrawnFromRewards
event WithdrawnFromRewards(uint256 indexed accountProfileId, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressNotVouchAuthor
error AddressNotVouchAuthor(uint256 vouchId, address caller, address author)
AlreadyUnvouched
error AlreadyUnvouched(uint256 vouchId)
AlreadyVouched
error AlreadyVouched(uint256 author, uint256 voucheeEthosProfileId)
CannotMarkVouchAsUnhealthy
error CannotMarkVouchAsUnhealthy(uint256 vouchId)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
FeesExceedMaximum
error FeesExceedMaximum(uint256 totalFees, uint256 maxFees)
FeeTransferFailed
error FeeTransferFailed(string message)
InsufficientProtocolFeeBalance
error InsufficientProtocolFeeBalance()
InsufficientRewardsBalance
error InsufficientRewardsBalance()
InvalidAttestationHash
error InvalidAttestationHash(bytes32 attestationHash)
InvalidEthosProfileForVouch
error InvalidEthosProfileForVouch(uint256 ethosProfileId)
InvalidFeeMultiplier
error InvalidFeeMultiplier(uint256 newFee)
InvalidFeeProtocolAddress
error InvalidFeeProtocolAddress()
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
InvalidSlashPercentage
error InvalidSlashPercentage()
MaximumVouchesExceeded
error MaximumVouchesExceeded(uint256 vouches, string message)
MinimumVouchAmount
error MinimumVouchAmount(uint256 amount)
NotAuthorForVouch
error NotAuthorForVouch(uint256 vouchId, uint256 user)
NotInitializing
error NotInitializing()
NotSlasher
error NotSlasher()
PendingSlash
error PendingSlash(uint256 vouchId, uint256 authorProfileId)
ProfileNotFoundForAddress
error ProfileNotFoundForAddress(address userAddress)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SelfVouch
error SelfVouch(uint256 author, uint256 voucheeEthosProfileId)
SignatureWasUsed
error SignatureWasUsed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
VouchNotFound
error VouchNotFound(uint256 vouchId)
WrongSubjectProfileIdForVouch
error WrongSubjectProfileIdForVouch(uint256 vouchId, uint256 subjectProfileId)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040523461003257610011610037565b6040516158ae61021b8239608051818181613d150152613ef501526158ae90f35b600080fd5b61003f61008e565b61004761016c565b565b6100566100566100569290565b90565b6100566001610049565b90600019905b9181191691161790565b9061008361005661008a92610049565b8254610063565b9055565b6100966100a8565b6100476100a1610059565b6036610073565b6100476100e2565b610056906100c4906001600160a01b031682565b6001600160a01b031690565b610056906100b0565b610056906100d0565b6100ea6100f8565b6100f3306100d9565b608052565b61004761003f565b6100569060401c60ff1690565b6100569054610100565b610056905b6001600160401b031690565b6100569054610117565b906001600160401b0390610069565b6100569061011c906001600160401b031682565b9061016561005661008a92610141565b8254610132565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006101968161010d565b610208576101a381610128565b6001600160401b03919082908116036101ba575050565b816101e97fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29361020393610155565b604051918291826001600160401b03909116815260200190565b0390a1565b63f92ee8a960e01b6000908152600490fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146104bd5780630723550f146104b857806308473f64146104b357806308b91ff8146104ae57806309bc67e0146104a95780630adb6cdc146104a45780631785f53c1461049f5780631e3e84e91461049a578063248a9ca3146104955780632bdd87ff146104905780632cb3e4941461048b5780632e5ff094146104865780632f2ff15d1461048157806336568abe1461047c578063372500ab146104775780633986de6a146104725780633f4ba83a1461046d5780633fadfc0a146104685780634f1ef28614610463578063502ff96b1461045e57806352368f2f1461045957806352d1902d146104545780635667981b1461044f5780635b201d831461044a5780635b63b05c146104455780635c975abb14610440578063626f78f21461043b5780636623fc461461043657806366f1e306146104315780636b6a575d1461042c5780636b7b911214610427578063704802751461042257806375b238fc1461041d5780637bd4f28e14610418578063828afa29146104135780638456cb591461040e5780638691557314610409578063880cdc31146104045780638e5ec774146103ff5780639010d07c146103fa57806391d14854146103f557806398be1d9c146103f05780639a4de7ea146103eb5780639c00ba4a146103e65780639d5091de146103e1578063a12c64b5146103dc578063a217fddf146103d7578063a22a6428146103d2578063a3246ad3146103cd578063a660ce97146103c8578063a817c68a146103c3578063ac7e0f86146103be578063acedd274146103b9578063ad3cb1cc146103b4578063ade9ae97146103af578063b36fed5f146103aa578063b4846d84146103a5578063b59abd19146103a0578063b6e7ec921461039b578063bb10c82914610396578063c3a1ed4814610355578063ca15c87314610391578063cb2a78171461038c578063cce516b714610387578063cde1395614610382578063d34790b61461037d578063d547741f14610378578063d745c07f14610373578063d7a78db81461036e578063e2d31d5f14610369578063e58378bb14610364578063f3eda2501461035f578063f570332a1461035a578063fc69603c146103555763fde919f6036104d5576117be565b6115ea565b611796565b611767565b611726565b61170e565b6116f6565b6116da565b6116ad565b611692565b61166a565b611644565b611620565b611605565b6115bc565b61151b565b6114ec565b6114ba565b61149f565b61146c565b6113fa565b611389565b611355565b611264565b610f4e565b610f27565b610e9b565b610e80565b610e32565b610e1a565b610e03565b610de8565b610dc4565b610da8565b610d8c565b610d74565b610d5c565b610d41565b610d1d565b610d09565b610cc8565b610ca1565b610c89565b610c71565b610c5a565b610bb7565b610b9f565b610b87565b610b6c565b610b54565b610b39565b610b0e565b610af3565b610adb565b610ac0565b610aa0565b61098a565b610966565b610941565b61089d565b610884565b61086b565b61082c565b6107de565b61079c565b610781565b610766565b61071f565b610703565b610660565b61060e565b6105ca565b610562565b610504565b6001600160e01b031981165b036104d557565b600080fd5b905035906104e7826104c2565b565b906020828203126104d5576104fd916104da565b90565b9052565b346104d55761053161051f61051a3660046104e9565b6117d9565b60405191829182901515815260200190565b0390f35b60009103126104d557565b6104fd916008021c81565b906104fd9154610540565b6104fd6000603761054b565b346104d557610572366004610535565b61053161057d610556565b6040515b9182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166104ce565b905035906104e78261059a565b906020828203126104d5576104fd916105a9565b346104d5576105e26105dd3660046105b6565b61186a565b604051005b806104ce565b905035906104e7826105e7565b906020828203126104d5576104fd916105ed565b346104d5576105e26106213660046105fa565b6118cb565b6104fd6104fd6104fd9290565b9061063d90610626565b600052602052604060002090565b600061065b6104fd926046610633565b61054b565b346104d55761053161057d6106763660046105fa565b61064b565b91906040838203126104d5576104fd90602061069782866105ed565b94016105ed565b634e487b7160e01b600052603260045260246000fd5b80548210156106d7576106ce600191600052602060002090565b91020190600090565b61069e565b6106e7906041610633565b80548210156104d5576104fd916106fd916106b4565b9061054b565b346104d55761053161057d61071936600461067b565b906106dc565b346104d5576105e26107323660046105b6565b61190a565b6104fd916008021c5b60ff1690565b906104fd9154610737565b60006107616104fd926049610633565b610746565b346104d55761053161051f61077c3660046105fa565b610751565b346104d55761053161057d6107973660046105fa565b611913565b346104d5576105e26107af3660046105b6565b611961565b6104fd916008021c6001600160a01b031690565b906104fd91546107b4565b6104fd6000806107c8565b346104d5576107ee366004610535565b6105316107f96107d3565b604051918291826001600160a01b03909116815260200190565b61065b6104fd926108276000936044610633565b610633565b346104d55761053161057d61084236600461067b565b90610813565b91906040838203126104d5576104fd90602061086482866105ed565b94016105a9565b346104d5576105e261087e366004610848565b90611985565b346104d5576105e2610897366004610848565b9061198f565b346104d5576108ad366004610535565b6105e2611c72565b610140818303126104d5576108ca82826105a9565b926108d883602084016105a9565b926108e681604085016105a9565b926108f482606083016105a9565b9261090283608084016105a9565b926109108160a085016105a9565b9261091e8260c083016105ed565b926104fd61092f8460e085016105ed565b936101206106978261010087016105ed565b346104d5576105e26109543660046108b5565b98979097969196959295949394611f87565b346104d557610976366004610535565b6105e26120ff565b6104fd6000603961054b565b346104d55761099a366004610535565b61053161057d61097e565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176109dc57604052565b6109a5565b906104e76109ee60405190565b92836109bb565b6001600160401b0381116109dc57602090601f01601f19160190565b0190565b90826000939282370152565b90929192610a36610a31826109f5565b6109e1565b93818552818301116104d5576104e7916020850190610a15565b9080601f830112156104d5578160206104fd93359101610a21565b9190916040818403126104d557610a8283826105a9565b9260208201356001600160401b0381116104d5576104fd9201610a50565b6105e2610aae366004610a6b565b90612127565b6104fd6000603a61054b565b346104d557610ad0366004610535565b61053161057d610ab4565b346104d5576105e2610aee3660046105fa565b61218f565b346104d557610b03366004610535565b61053161057d6121db565b346104d5576105e2610b213660046105b6565b612209565b6104fd612710610626565b6104fd610b26565b346104d557610b49366004610535565b61053161057d610b31565b346104d5576105e2610b673660046105fa565b61226b565b346104d557610b7c366004610535565b61053161051f612274565b346104d5576105e2610b9a3660046105fa565b6122d5565b346104d5576105e2610bb23660046105fa565b612428565b346104d55761053161051f610bcd36600461067b565b90612431565b909182601f830112156104d5578135916001600160401b0383116104d55760200192600183028401116104d557565b6060818303126104d557610c1682826105ed565b9260208201356001600160401b0381116104d55783610c36918401610bd3565b92909360408201356001600160401b0381116104d557610c569201610bd3565b9091565b6105e2610c68366004610c02565b9392909261266b565b346104d5576105e2610c843660046105b6565b6126ea565b346104d5576105e2610c9c3660046105b6565b612726565b346104d557610cb1366004610535565b61053160008051602061585983398151915261057d565b346104d5576105e2610cdb3660046105fa565b6127d8565b90916060828403126104d5576104fd610cf984846105ed565b93604061086482602087016105ed565b6105e2610d17366004610ce0565b91612b50565b346104d557610d2d366004610535565b6105e2612bbe565b6104fd6000603f61054b565b346104d557610d51366004610535565b61053161057d610d35565b346104d5576105e2610d6f3660046105b6565b612c16565b346104d5576105e2610d873660046105fa565b612d63565b346104d5576105316107f9610da236600461067b565b90612d6c565b346104d55761053161051f610dbe366004610848565b90612dad565b346104d5576105e2610dd73660046105fa565b612e3c565b6104fd6000603d61054b565b346104d557610df8366004610535565b61053161057d610ddc565b6105e2610e11366004610c02565b93929092612e72565b346104d5576105e2610e2d3660046105fa565b613099565b346104d557610e4a610e453660046105fa565b6130a2565b90610531610e5760405190565b928392839015158152901515602082015260400190565b6104fd6000610626565b6104fd610e6e565b346104d557610e90366004610535565b61053161057d610e78565b346104d55761053161057d610eb136600461067b565b90613320565b90610ed7610ed0610ec6845190565b8084529260200190565b9260200190565b9060005b818110610ee85750505090565b909192610f0e610f0760019286516001600160a01b0316815260200190565b9460200190565b929101610edb565b60208082526104fd92910190610eb7565b346104d557610531610f42610f3d3660046105fa565b61332c565b60405191829182610f16565b346104d5576105e2610f613660046105fa565b61349d565b6104fd90610740565b6104fd9054610f66565b6104fd9060081c610740565b6104fd9054610f79565b6104fd9081565b6104fd9054610f8f565b6104fd9061058e565b6104fd9054610fa0565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610fe9575b6020831014610fe457565b610fb3565b91607f1691610fd9565b8054600093929161101061100683610fc9565b8085529360200190565b9160018116908115611062575060011461102957505050565b61103c9192939450600052602060002090565b916000925b81841061104e5750500190565b805484840152602090930192600101611041565b92949550505060ff1916825215156020020190565b906104fd91610ff3565b906104e761109b9261109260405190565b93848092611077565b03836109bb565b6104fd60606109e1565b906104e76110ea60026110bd6110a2565b946110ce6110ca82610f96565b8752565b6110e46110dd60018301610f96565b6020880152565b01610f96565b6040840152565b6110fc906040610633565b9061110682610f6f565b9161111081610f85565b9161111d60018301610f96565b9161112a60028201610fa9565b9161113760038301610f96565b9161114460048201610f96565b9161115160058301610f96565b9161115e60068201611081565b916104fd600861117060078501611081565b93016110ac565b60005b83811061118a5750506000910152565b818101518382015260200161117a565b6111bb6111c4602093610a11936111af815190565b80835293849260200190565b95869101611177565b601f01601f191690565b805182526104e7919060409081906111eb60208201516020860152565b0151910152565b9015158152901515602082015260408101919091526001600160a01b03909116606082015296959493926101808801929091608089015260a088015260c087015285810360e08701526112449161119a565b8481036101008601526112569161119a565b92610120016104e7916111ce565b346104d55761053161127f61127a3660046105fa565b6110f1565b966112959a989a96919695929594939460405190565b9a8b9a8b6111f2565b805115158252906104fd906101208061133961132561018085016020888101511515908701526112d360408901516040880152565b6060888101516001600160a01b0316908701526112f560808901516080880152565b61130460a089015160a0880152565b61131360c089015160c0880152565b60e088015186820360e088015261119a565b61010087015185820361010087015261119a565b9401519101906111ce565b60208082526104fd9291019061129e565b346104d55761053161137161136b36600461067b565b90613620565b60405191829182611344565b6104fd6000603861054b565b346104d557611399366004610535565b61053161057d61137d565b906113b1610a31836109f5565b918252565b6113c060056113a4565b640352e302e360dc1b602082015290565b6104fd6113b6565b6104fd6113d1565b6104fd6113d9565b60208082526104fd9291019061119a565b346104d55761140a366004610535565b6105316114156113e1565b604051918291826113e9565b6104fd600060036107c8565b6104fd9061058e906001600160a01b031682565b6104fd9061142d565b6104fd90611441565b6105009061144a565b6020810192916104e79190611453565b346104d55761147c366004610535565b610531611487611421565b6040519182918261145c565b6104fd6000603c61054b565b346104d5576114af366004610535565b61053161057d611493565b346104d5576105316113716114d0366004610848565b9061368b565b9061063d565b600061065b6104fd9260476114d6565b346104d55761053161057d6115023660046105fa565b6114dc565b6060818303126104d557610c1682826105a9565b6105e2611529366004611507565b93929092613803565b906020828203126104d55781356001600160401b0381116104d5576104fd9201610a50565b610a1161156f92602092611569815190565b94859290565b93849101611177565b6113b1610a119160209493611557565b61159d61159460405190565b92839283611578565b03902090565b6104fd91611588565b60006107616104fd9260026115a3565b346104d55761053161051f6115d2366004611532565b6115ac565b6104fd6103e8610626565b6104fd6115d7565b346104d5576115fa366004610535565b61053161057d6115e2565b346104d55761053161057d61161b3660046105fa565b613810565b346104d5576105e26116333660046105fa565b613840565b6104fd6000603b6107c8565b346104d557611654366004610535565b6105316107f9611638565b6106e7906043610633565b346104d55761053161057d61168036600461067b565b9061165f565b6104fd6000603e61054b565b346104d5576116a2366004610535565b61053161057d611686565b346104d5576105e26116c0366004610848565b90613864565b61065b6104fd926108276000936042610633565b346104d55761053161057d6116f036600461067b565b906116c6565b346104d5576105e26117093660046105fa565b613931565b346104d5576105e26117213660046105fa565b613994565b346104d557611736366004610535565b61053160008051602061581983398151915261057d565b9061063d9061144a565b600061065b6104fd92604861174d565b346104d55761053161057d61177d3660046105b6565b611757565b61065b6104fd926108276000936045610633565b346104d55761053161057d6117ac36600461067b565b90611782565b6104fd600060016107c8565b346104d5576117ce366004610535565b6105316107f96117b2565b635a05180f60e01b6001600160e01b03198216149081156117f8575090565b6104fd915061399d565b6104e7906118226000805160206158598339815191526139d7565b6139d7565b611857565b906001600160a01b03905b9181191691161790565b9061184c6104fd6118539261144a565b8254611827565b9055565b6118636104e79161144a565b600361183c565b6104e790611802565b6104e79061188e6000805160206158598339815191526139d7565b6104e79061189a6139e2565b6118c0565b9060001990611832565b906118b96104fd61185392610626565b825461189f565b6104e79060396118a9565b6104e790611873565b6104e7906118ef6000805160206158198339815191526139d7565b61190790600080516020615859833981519152613a02565b50565b6104e7906118d4565b60016110e46104fd92611924600090565b5060006000805160206158398339815191525b016114d6565b6104e7906119586000805160206158598339815191526139d7565b6104e790613a73565b6104e79061193d565b906104e79161197b61181d82611913565b9061190791613a7c565b906104e79161196a565b906119993361058e565b6001600160a01b038216036119b15761190791613a02565b63334bd91960e11b6000908152600490fd5b036000fd5b6119d06139e2565b6104e76119db613ad5565b6119e3611aa5565b6104e7613b15565b8015156104ce565b905051906104e7826119eb565b905051906104e7826105e7565b6080818303126104d557611a2182826119f3565b926104fd611a3284602085016119f3565b936060611a4282604087016119f3565b9401611a00565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b9190611a76565b9290565b8201809211611a8157565b611a55565b3d15611aa057611a953d6113a4565b903d6000602084013e565b606090565b611ab5611ab0613b5a565b61144a565b6080611ac060405190565b634a5b307d60e01b815233600482015291829060249082905afa8015611c6d576000918291829190611c34575b50155b908115611c2c575b50611c1657611b27611b13611b0e836046610633565b610f96565b611b21611b0e33604861174d565b90611a6b565b906000611b3381610626565b8314611c075780611b68611b49611b8693610626565b611b5d81611b58876046610633565b6118a9565b611b5833604861174d565b80611b7260405190565b60009086335af1611b81611a86565b501590565b611bc657611bc1611bb77f0fd71e1a24b0c2958f3dd4643783c66613d7548ee2689c4cc5a7651a971402a192610626565b9261058160405190565b0390a2565b60405163123cc24f60e31b815260206004820152601460248201527314995dd85c991cc818db185a5b4819985a5b195960621b6044820152606490fd5b0390fd5b635772cb5960e11b8152600490fd5b63529f6aeb60e11b600090815233600452602490fd5b905038611af8565b9050611af09250611c5d915060803d608011611c66575b611c5581836109bb565b810190611a0d565b93509190611aed565b503d611c4b565b611a49565b6104e76119c8565b6104fd9060401c610740565b6104fd9054611c7a565b6104fd905b6001600160401b031690565b6104fd9054611c90565b611c956104fd6104fd9290565b906001600160401b0390611832565b611c956104fd6104fd926001600160401b031690565b90611ced6104fd61185392611cc7565b8254611cb8565b9068ff00000000000000009060401b611832565b90611d186104fd61185392151590565b8254611cf4565b61050090611cab565b6020810192916104e79190611d1f565b9998949096929793959195611d6a7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b988997611d86611d80611d7c8b611c86565b1590565b99611ca1565b9960009a611d938c611cab565b6001600160401b038216149081611ea4575b611dbf611db26001611cab565b916001600160401b031690565b149081611e7b575b155b9081611e72575b50611e63578b9c9d8b8b9c9d611e019c611df5611ded6001611cab565b848401611cdd565b611e4f575b5050611ed1565b611e09575050565b80611e149201611d08565b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2611e3e60405190565b80611e4a600182611d28565b0390a1565b611e5c9160019101611d08565b8c8e611dfa565b63f92ee8a960e01b8b5260048bfd5b15905038611dd0565b9050611dc98c611e9b611e97611e903061144a565b3b92610626565b9190565b14919050611dc7565b8b9150611da5565b61058e6104fd6104fd9290565b6104fd90611eac565b6104fd655af3107a4000610626565b90611ede94939291613c82565b611ee6613c97565b6000611ef461058e82611eb9565b6001600160a01b03831614611f785750611f3492611f26611f3b969593611f1f611f2d94603b61183c565b603c6118a9565b603d6118a9565b603e6118a9565b603f6118a9565b611f4d611f46611ec2565b60376118a9565b611f62611f5b610100610626565b603a6118a9565b6104e7611f7162015180610626565b60396118a9565b6344a973b760e11b8152600490fd5b906104e7999897969594939291611d38565b611fa360196113a4565b7f4554484f535f494e544552414354494f4e5f434f4e54524f4c00000000000000602082015290565b6104fd611f99565b6104fd611fcc565b905051906104e78261059a565b906020828203126104d5576104fd91611fdc565b6001600160a01b0390911681526040810192916104e79160200152565b0152565b61205c6020612030611ab06003610fa9565b612038611fd4565b9061204260405190565b9384928391829163d57f7aa360e01b8352600483016113e9565b03915afa908115611c6d576000916120c8575b50612082335b916001600160a01b031690565b0361208f576104e76120f7565b63e2517d3f60e01b60009081526119c37f261fea28325784de45eba41a3fbb84c4196fbab02ee802566edfe26616ba5afb336004611ffd565b6120ea915060203d6020116120f0575b6120e281836109bb565b810190611fe9565b3861206f565b503d6120d8565b6104e7613d02565b6104e761201e565b906104e791612114613d0a565b906104e79161212281613db2565b613dbb565b906104e791612107565b6104e79061214c6000805160206158598339815191526139d7565b611e4a7f96184d3c69d6647eafda9cff46a6a303879e193fcf2a4ec6754aed974ca3db10916121848161217f603e610f96565b613e7a565b61057d81603e6118a9565b6104e790612131565b6104fd906121a4613edf565b6121d2565b6104fd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610626565b506104fd6121a9565b6104fd6000612198565b6104e7906122006000805160206158598339815191526139d7565b6104e790613f39565b6104e7906121e5565b6104e79061222d6000805160206158598339815191526139d7565b611e4a7f3c74ea171b2182d07fadf8e9e8a6ae80fb339ed21627f8f5a4639c6df337d3e2916122608161217f603f610f96565b61057d81603f6118a9565b6104e790612212565b6104fd613f42565b6104e7906122976000805160206158598339815191526139d7565b611e4a7fb61039210d9c96923ed2c530e79d7be7aa95ddc2e105804f2d793c7b66a3b5e1916122ca8161217f603c610f96565b61057d81603c6118a9565b6104e79061227c565b60208082526007908201526629a620a9a422a960c91b604082015260600190565b61230c611ab06003610fa9565b602061231760405190565b91829063d57f7aa360e01b82528180612332600482016122de565b03915afa8015611c6d5761235591600091612376575b506001600160a01b031690565b3303612364576104e790612395565b63dabc4ad960e01b6000908152600490fd5b61238f915060203d6020116120f0576120e281836109bb565b38612348565b6104e7906123a16139e2565b6119e3906123ad613ad5565b6123d2565b9060ff90611832565b906123cb6104fd61185392151590565b82546123b2565b6123f0906123eb60006123e6836049610633565b6123bb565b610626565b7f3b4a057673a85d40895926c65b5846f476a07932b34053341615fd43eeeb98d161241a60405190565b600081528060208101611bc1565b6104e7906122ff565b6124506104fd612449611b0e85610827866045610633565b6040610633565b90612463611e97611a7260018501610f96565b149182612493575b5081612475575090565b6124829150600901610f96565b61248f611e976000610626565b1490565b9091506124a8611e97611a7260048501610f96565b14903861246b565b906104e7949392916124c06139e2565b906119e3949392916124d0613ad5565b612519565b906020828203126104d5576104fd91611a00565b90916060828403126104d5576104fd61250284846119f3565b93604061251282602087016119f3565b94016119f3565b91929493909461252a611ab0613b5a565b93602061253660405190565b637dec74d760e01b81526004810186905295869060249082905afa948515611c6d5760009561263a575b5061256c611ab0613b5a565b606061257760405190565b633b79ed1960e11b81526004810188905291829060249082905afa8015611c6d576000808093909192612606575b506125ef576125df57156125c8576104e795966125c26000611eb9565b95614300565b636a34893960e01b60009081526004869052602490fd5b5091936104e79596919350613f6f565b636a34893960e01b60009081526004889052602490fd5b91505061262b915060603d606011612633575b61262381836109bb565b8101906124e9565b9190386125a5565b503d612619565b61265d91955060203d602011612664575b61265581836109bb565b8101906124d5565b9338612560565b503d61264b565b906104e7949392916124b0565b6104e7906126936000805160206158198339815191526139d7565b60006126a161058e82611eb9565b6001600160a01b03831614611f7857506126bc90603b61183c565b7f8d8b53938970adbc0746601e47c7fae038957c8cba773c77b7a4a36df468b67b611e4a6107f9603b610fa9565b6104e790612678565b6104e79061270e6000805160206158198339815191526139d7565b61190790600080516020615859833981519152613a7c565b6104e7906126f3565b6104e79061274a6000805160206158598339815191526139d7565b6104e7906127566139e2565b612761610100610626565b8111612772576104e790603a6118a9565b611c039061277f60405190565b637dfb145560e11b8152918291600483019081526040602082018190526021908201527f4d6178696d756d20766f75636865732063616e6e6f74206578636565642032356060820152601b60f91b608082015260a00190565b6104e79061272f565b906119e392916127ef613ad5565b61282c565b61201a6104e79461282560609498979561281e608086019a60008701906001600160a01b03169052565b6020850152565b6040830152565b9161283a6104fd6037610f96565b3410612b2b5761284b611ab0613b5a565b90602061285760405190565b63b8861c2360e01b815233600482015292839060249082905afa918215611c6d57600092612b0a575b5061288b82856146f6565b6128948461472a565b6128a460046110e4866040610633565b926128b0611ab0613b5a565b60606128bb60405190565b633b79ed1960e11b81526004810187905291829060249082905afa908115611c6d57600091612aea575b5080612ab6575b612a9f5760006128fe6104fd82610626565b8203612a32575b61291161058e82611eb9565b6001600160a01b038416036129a9575b5090816129a461298f61298961298961295e867fe911a35904153cf24c5bc75866c80f0c8c447e1ad5f4d83a62b28d00dd7929a5988a8c3461475c565b50996123eb6005612970836040610633565b016129838d61297e83610f96565b611a6b565b906118a9565b96610626565b9661299960405190565b9384933491856127f4565b0390a4565b6129b4611ab0613b5a565b60206129bf60405190565b6389a9132b60e01b81526001600160a01b038616600482015291829060249082905afa908115611c6d57600091612a13575b508581036129ff5750612921565b636a34893960e01b82526004820152602490fd5b612a2c915060203d6020116126645761265581836109bb565b386129f1565b612a3d611ab0613b5a565b6020612a4860405190565b637dec74d760e01b81526004810185905291829060249082905afa908115611c6d57600091612a80575b508581036129ff5750612905565b612a99915060203d6020116126645761265581836109bb565b38612a72565b636a34893960e01b60009081526004859052602490fd5b50612ac461058e6000611eb9565b6001600160a01b0383161480156128ec5750612ae36104fd6000610626565b81146128ec565b612b03915060603d6060116126335761262381836109bb565b91506128e5565b612b2491925060203d6020116126645761265581836109bb565b9038612880565b60006119c3612b3a6037610f96565b633a4425f960e21b835260048301526024820190565b906104e792916127e1565b612b6d6020612030611ab06003610fa9565b03915afa908115611c6d57600091612b97575b50612b8a33612075565b0361208f576104e7612bb6565b612bb0915060203d6020116120f0576120e281836109bb565b38612b80565b6104e76148db565b6104e7612b5b565b6104e790612be16000805160206158198339815191526139d7565b61190790600080516020615819833981519152612c10612c0a612c046000610626565b83612d6c565b82613a02565b50613a7c565b6104e790612bc6565b6104e790612c2b6139e2565b612c54565b9061ff009060081b611832565b90612c4d6104fd61185392151590565b8254612c30565b612c626104fd826040610633565b90612c6e611ab0613b5a565b906020612c7a60405190565b63b8861c2360e01b815233600482015292839060249082905afa908115611c6d57612cbf92600092612d42575b50612cb1816148e3565b612cba81614922565b6146f6565b612cca600182612c3d565b612cd742600a83016118a9565b612ce360038201610f96565b612d10612d0a612d04612d046004612cfd60018801610f96565b9601610f96565b93610626565b91610626565b917f1d43a4d386e31f83c3173b8bc4b3dc733d238461f3950205c74d34ea6db8161d612d3b60405190565b80806129a4565b612d5c91925060203d6020116126645761265581836109bb565b9038612ca7565b6104e790612c1f565b90612da86104fd6104fd93612d7f600090565b5060007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000611937565b6149b4565b6104fd916000612dd8612dde93612dc2600090565b5082600080516020615839833981519152611937565b0161174d565b610f6f565b6104e790612dfe6000805160206158598339815191526139d7565b611e4a7fa9dd0e7d47437ea99fedf4542c134ab9c1e8d6a3355f6b0fc81841c24ddfe07b91612e318161217f603d610f96565b61057d81603d6118a9565b6104e790612de3565b906104e794939291612e556139e2565b906119e394939291612e65613ad5565b906104e794939291613f6f565b906104e794939291612e45565b6104e790612e8b6139e2565b6119e390612e97613ad5565b612eaf565b9081526040810192916104e79160200152565b604090612ebf6104fd8284610633565b91612ec9826148e3565b612ed28261472a565b60018301612eec612dde612ee583610f96565b6049610633565b6130765750612f066002612f008484610633565b01610fa9565b612f0f33612075565b036130345750612f2290506001826123bb565b612f2f42600983016118a9565b612f38816149e8565b6005810190612f5d612f51612f4c84610f96565b614ae8565b50926129836000610626565b612f88600080612f75611ab0611ab060028701610fa9565b6040518681805b03925af1611b81611a86565b612fee57612f9860038201610f96565b907f8b28de604075dff119c6b0dfaacbdb9785e71214b6494176e4f821a265f2585d6129a4612fe4612fde612fde6129896004612fd760018901610f96565b9701610f96565b94610626565b9461058160405190565b60405163123cc24f60e31b815260206004820152601c60248201527f4661696c656420746f2073656e642045544820746f20617574686f72000000006044820152606490fd5b816130496002612f006000956119c395610633565b6308a5114760e41b845260048401919091523360248401526001600160a01b031660448301526064820190565b6119c383613085600093610f96565b633fe90f1b60e01b84529060048401612e9c565b6104e790612e7f565b600060086130c06104fd6130c7946130b8600090565b506040610633565b0101610f96565b6130d4611e976000610626565b11908190565b91906130e9611ab06003610fa9565b60206130f460405190565b91829063d57f7aa360e01b8252818061310f600482016122de565b03915afa8015611c6d576131319160009161237657506001600160a01b031690565b3303612364576104fd92906104fd92916131496139e2565b9061315c9291613157613ad5565b613172565b906104e7613b15565b91908203918211611a8157565b509061317f6104fd6115d7565b811161330f576000926131966104fd846041610633565b936000916131a383610626565b6131ae6104fd885490565b81101561324e576131d06104fd60406131ca6106fd858c6106b4565b90610633565b6131de611d7c868301610f6f565b6131f1575b506001016131a3565b6131a3565b6005016132108561320183610f96565b8861320a610b26565b91614b30565b9061321a86610626565b8211613227575b506131e3565b906131ec929461297e836129838461324161324697610f96565b613165565b929038613221565b50945080939161325d81610626565b82116132ab575b5061328f7f856bee22e79c8cadb8433b5c4953a46653e713608f53730229c38e534c8fb1cb92610626565b926132a561329c60405190565b92839283612e9c565b0390a290565b6132c69150806132bb603b610fa9565b604051878180612f7c565b6132d1578238613264565b60405163123cc24f60e31b815260206004820152601560248201527414db185cda081d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b62de051d60e61b6000908152600490fd5b6104fd919060006130da565b61333e6104fd6104fd92612d7f606090565b614b8d565b6104e79061334f6139e2565b6119e39061335b613ad5565b613366611ab0613b5a565b608061337160405190565b634a5b307d60e01b815233600482015291829060249082905afa8015611c6d576000918291829190613474575b50155b611c1657611c16576133b4611ab0613b5a565b60206133bf60405190565b637dec74d760e01b81526004810185905291829060249082905afa908115611c6d57600091613455575b5081900361343e576133ff611b0e8360476114d6565b9160009061340c82610626565b841461342e5790611b68611b8692611b5861342684610626565b9160476114d6565b50635772cb5960e11b8152600490fd5b63b3aa2bd160e01b60009081526004839052602490fd5b61346e915060203d6020116126645761265581836109bb565b386133e9565b90506133a19250613494915060803d608011611c6657611c5581836109bb565b9350919061339e565b6104e790613343565b6104fd6101406109e1565b6134b96110a2565b600080825260208201819052604082015290565b905250565b6104fd6134b1565b6134e26134a6565b906000825260208080808080808080808b01600081520160008152016000815201600081520160008152016000815201606081520160608152016134cd6134d2565b6104fd6134da565b906104e761360f600861353d6134a6565b9461355061354a82610f6f565b15158752565b61356561355c82610f85565b15156020880152565b61357b61357460018301610f96565b6040880152565b61359a61358a60028301610fa9565b6001600160a01b03166060880152565b6135b06135a960038301610f96565b6080880152565b6135c66135bf60048301610f96565b60a0880152565b6135dc6135d560058301610f96565b60c0880152565b6135f26135eb60068301611081565b60e0880152565b61360961360160078301611081565b610100880152565b016110ac565b610120840152565b6104fd9061352c565b90613629613524565b5061364661363f611b0e83610827866045610633565b92836146f6565b61365660046110e4846040610633565b819003613671575061366c6104fd916040610633565b613617565b634212788f60e01b6000908152916119c391906004612e9c565b60206136d092613699613524565b506136a5611ab0613b5a565b6040519485928391829163b8861c2360e01b8352600483016001600160a01b03909116815260200190565b03915afa908115611c6d576104fd926000926136ed575b50613620565b61370791925060203d6020116126645761265581836109bb565b90386136e7565b906104e79493929161371f81614b9e565b906104e79493929161372f6139e2565b906119e39493929161373f613ad5565b929493909461374f611ab0613b5a565b92608061375b60405190565b634a5b307d60e01b81526001600160a01b038716600482015294859060249082905afa8015611c6d5760008080809790936137db575b506137c4576137b45715612a9f576104e795966137ae6000610626565b94614300565b5091935091946104e79495613f6f565b636a34893960e01b60009081526004879052602490fd5b925050506137f991945060803d608011611c6657611c5581836109bb565b9592909138613791565b906104e79493929161370e565b6138226104fd6104fd92612d7f600090565b614bb8565b6104e7906138336139e2565b6104e790610d8781613099565b6104e790613827565b906104e79161385a61181d82611913565b9061190791613a02565b906104e791613849565b61387b611ab06003610fa9565b602061388660405190565b91829063d57f7aa360e01b825281806138a1600482016122de565b03915afa8015611c6d576138c39160009161237657506001600160a01b031690565b3303612364576104e7906104e7906138d96139e2565b6119e3906138e5613ad5565b6138f9906123eb60016123e6836049610633565b7f3b4a057673a85d40895926c65b5846f476a07932b34053341615fd43eeeb98d161392360405190565b600181528060208101611bc1565b6104e79061386e565b6104e7906139556000805160206158598339815191526139d7565b6104e7906139616139e2565b613969611ec2565b80821061397c57506104e79060376118a9565b633a4425f960e21b6000908152600491909152602490fd5b6104e79061393a565b637965db0b60e01b6001600160e01b03198216149081156139bc575090565b6104fd91506001600160e01b0319166301ffc9a760e01b1490565b6104e7903390614bce565b6139ea612274565b6139f057565b63d93c066560e01b6000908152600490fd5b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200090613a2f8184614bfd565b9283613a3c575b50505090565b613a5292613a4d916104fd916114d6565b614c99565b50388080613a36565b6104e790613a6881614b9e565b6104e790600061183c565b6104e790613a5b565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200090613aa98184614cc6565b9283613ab55750505090565b613a5292613ac6916104fd916114d6565b614d37565b6104fd6002610626565b613adf6036610f96565b613ae7613acb565b908114613af9576104e79060366118a9565b633ee5aeb560e01b6000908152600490fd5b6104fd6001610626565b6104e7613b20613b0b565b60366118a9565b613b31600d6113a4565b6c4554484f535f50524f46494c4560981b602082015290565b6104fd613b27565b6104fd613b4a565b613b746020613b6c611ab06003610fa9565b612038613b52565b03915afa8015611c6d576104fd91600091613b90575b5061144a565b613ba9915060203d6020116120f0576120e281836109bb565b38613b8a565b906104e794939291613bbf614d57565b929093916000613bce81611eb9565b6001600160a01b0381166001600160a01b03871614908115613c65575b8115613c49575b50613c3a5750611863613c2593611ab0611907979694613c1194614d99565b600080516020615819833981519152613a7c565b50600080516020615859833981519152613a7c565b63d92e233d60e01b8152600490fd5b6001600160a01b031690506001600160a01b0385161438613bf2565b90506001600160a01b0381166001600160a01b0388161490613beb565b906104e794939291613baf565b6104e7614d57565b6104e7613c8f565b613ca7614da3565b6104e7613cd86000807fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005b016123bb565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e4a336107f9565b6104e7613c9f565b613d133061144a565b7f000000000000000000000000000000000000000000000000000000000000000090613d476001600160a01b038316612075565b14908115613d69575b50613d5757565b63703e46dd60e11b6000908152600490fd5b9050613d86612075613d79614dc6565b926001600160a01b031690565b141538613d50565b6104e790613da96000805160206158198339815191526139d7565b6104e790614b9e565b6104e790613d8e565b90613dc8611ab08361144a565b906020613dd460405190565b6352d1902d60e01b815292839060049082905afa60009281613e59575b50613e235750506001613e015750565b634c9c8ce360e01b60009081526001600160a01b039091166004526024036000fd5b909291613e316104fd6121a9565b8403613e42576104e7929350614dd6565b632a87526960e21b60009081526004859052602490fd5b613e7391935060203d6020116126645761265581836109bb565b9138613df1565b613241613eb29261297e613ea8613e9e613e94603c610f96565b611b21603f610f96565b611b21603d610f96565b611b21603e610f96565b613eba6115d7565b90818111613ec6575050565b63bdd9af3960e01b6000908152916119c3916004612e9c565b613ee83061144a565b613f1a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612075565b03613d5757565b6104e790613f2e81614b9e565b6104e790600161183c565b6104e790613f21565b6104fd60007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005b01610f6f565b929493909194613f80611ab0613b5a565b6060613f8b60405190565b633b79ed1960e11b81526004810187905291829060249082905afa8015611c6d5760008080939092613fe1575b50155b6137c4576125c857612a9f576104e79495613fd66000610626565b936125c26000611eb9565b9050613fbb9250614001915060603d6060116126335761262381836109bb565b92919091613fb8565b9160001960089290920291821b911b611832565b919061402f6104fd61185393610626565b90835461400a565b90815491600160401b8310156109dc578261405a9160016104e7950181556106b4565b9061401e565b6104fd913691610a21565b6104e79160009161401e565b818110614082575050565b80614090600060019361406b565b01614077565b9190601f81116140a557505050565b6140b76104e793600052602060002090565b906020601f8401819004830193106140d9575b6020601f909101040190614077565b90915081906140ca565b906140ec815190565b906001600160401b0382116109dc5761410f826141098554610fc9565b85614096565b602090601f831160011461414a5761185392916000918361413f575b5050600019600883021c1916906002021790565b01519050388061412b565b601f1983169161415f85600052602060002090565b9260005b81811061419d57509160029391856001969410614184575b50505002019055565b01516000196008601f8516021c1916905538808061417b565b91936020600181928787015181550195019201614163565b906104e7916140e3565b60026141fa60406104e7946141de6141d8600083015190565b866118a9565b6141f56141ec602083015190565b600187016118a9565b015190565b91016118a9565b906104e7916141bf565b6104e7916008906142e0906101209061423e8561423161422b8451151590565b826123bb565b6020830151151590612c3d565b61424c6141ec604083015190565b61426c61426360608301516001600160a01b031690565b6002870161183c565b61428361427a608083015190565b600387016118a9565b61429a61429160a083015190565b600487016118a9565b6142b16142a860c083015190565b600587016118a9565b6142c86142bf60e083015190565b600687016141b5565b6141f56142d761010083015190565b600787016141b5565b9101614201565b906104e79161420b565b6000198114611a815760010190565b949193929092614311611ab0613b5a565b94602061431d60405190565b63b8861c2360e01b815233600482015296879060249082905afa958615611c6d576000966146d5575b508686146146bc5760419261436261435e8886610633565b5490565b614372611e976104fd603a610f96565b101561465a5760009261438484610626565b8914614644576143948989614e3f565b6043966143a461435e8b8a610633565b6143b4611e976104fd603a610f96565b10156145e2576143c76104fd6037610f96565b34106145d3576143da8b888b8d3461475c565b50976143e66038610f96565b968a886143f38284610633565b906143fd91614037565b61440691610633565b546144116001610626565b61441a91613165565b876144268c6042610633565b9061443091610633565b9061443a916118a9565b8a876144468284610633565b9061445091614037565b61445991610633565b546144646001610626565b61446d91613165565b866144798c6044610633565b9061448391610633565b9061448d916118a9565b858a61449a8b6045610633565b906144a491610633565b906144ae916118a9565b6144b66110a2565b936144c14287870152565b6144ca86610626565b6144d5816020880152565b60408601526144e26134a6565b8615158782015295151560208701526144fc8a6040880152565b33606087015261450d876080880152565b6145188b60a0880152565b6145238960c0880152565b61452c91614060565b60e085015261453a91614060565b610100830152610120820152614551826040610633565b9061455b916142e7565b61456490610626565b9261456e90610626565b9361457890610626565b9461458260405190565b928392349061459193856127f4565b037f162d509d6569eed753c8c9cb8680140420e39400c188d07487abfcea77a8246991a46145bf6038610f96565b6145c8906142f1565b6104e79060386118a9565b8480611c03612b3a6037610f96565b611c036145f261435e8c8b610633565b604051637dfb145560e11b815291829160048301908152604060208201819052601b908201527f45786365656473207375626a65637420766f756368206c696d69740000000000606082015260800190565b636a34893960e01b845260048401899052602484fd5b611c0361466a61435e8987610633565b604051637dfb145560e11b815291829160048301908152604060208201819052601a908201527f4578636565647320617574686f7220766f756368206c696d6974000000000000606082015260800190565b63625de82560e11b60009081526119c388886004612e9c565b6146ef91965060203d6020116126645761265581836109bb565b9438614346565b61470660016110e4836040610633565b829003614711575050565b632145a39360e21b6000908152916119c3916004612e9c565b61473d6000613f696104fd846040610633565b6147445750565b63e4ef536160e01b6000908152600491909152602490fd5b93909290614770613ea8613e9e603c610f96565b9160009361477d85610626565b841461486857928492839261483097956147e96147b36147ad6148299a8d6147a3610b26565b61320a8a82611a6b565b8c613165565b6132416147e16147ce89896147c8603c610f96565b86614b30565b9889986147db603d610f96565b85614b30565b978892613165565b9661481388976147f881610626565b871161485a575b61480881610626565b881161484e57610626565b8811614833575b5050505061297e929350611a6b565b8092613165565b91565b61297e96506148429497614f6e565b9150823880808061481a565b6123eb8686858b614ed9565b61486387614e6a565b6147ff565b5050505092916104fd915092610626565b6148816139e2565b6104e76148b1600160007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300613cd2565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e4a336107f9565b6104e7614879565b6148f5600060086130c0846040610633565b90600091614905611e9784610626565b1461490e575050565b6362d97be560e11b82526004820152602490fd5b6149306104fd826040610633565b600061494e6104fd61494460098501610f96565b611b216039610f96565b421115910190614960611d7c83610f6f565b918215614999575b508115614990575b506149785750565b63aa4b9a6560e01b6000908152600491909152602490fd5b15905038614970565b6149a4919250610f85565b9038614968565b6104fd90610626565b6149de6149d96104fd936149d460006149e3956149cf600090565b500190565b615166565b6149ab565b611eac565b611441565b6000614a7e6104e7926131ca614adb614ae16042611b0e87614a7e87614a8383614a7e614a756001850198614a6c8a614a3d611b0e6003614a31614a2b85610f96565b87610633565b9a01996131ca8b610f96565b614a6784614a60614a5a6104fd614a5387610f96565b6041610633565b94610f96565b848461517f565b61521c565b6131ca8a610f96565b6131ca85610f96565b61406b565b6131ca614adb600460449b019a614ad28c614ab5611b0e614aac614aa684610f96565b86610633565b6131ca89610f96565b614a6784614a60614a5a6104fd614acb87610f96565b6043610633565b6131ca8c610f96565b91610f96565b6045610633565b614830614afe614af8603f610f96565b83615267565b8092614b0a6000610626565b8211156131655761324182614e6a565b634e487b7160e01b600052601260045260246000fd5b9291614b46614b408284876152b0565b93615444565b9384614b5c575b505050611b216104fd92151590565b908092945015614b8857614b80611b21926104fd95614b7b6000610626565b930990565b119238614b4d565b614b1a565b606090614b99906154fb565b905090565b600090614bb061207561058e84611eb9565b14613c3a5750565b614bc960006104fd926149cf600090565b615510565b90614bdc611d7c8284612dad565b614be4575050565b63e2517d3f60e01b6000908152916119c3916004611ffd565b600080516020615839833981519152614c168383612dad565b15614c7f5760006123e68482612dd88682614c3197016114d6565b614c4b614c45614c3f339390565b9361144a565b9161144a565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b614c7660405190565b600090a4600190565b505050600090565b6104fd9081906001600160a01b031681565b90614cc1611e976123eb614cbc60006104fd96614cb4600090565b500194611441565b614c87565b61555f565b600080516020615839833981519152614ce2611d7c8484612dad565b15614c7f5760016123e6846000612dd88682614cfe97016114d6565b614d0c614c45614c3f339390565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d614c7660405190565b90614d52611e976123eb614cbc60006104fd96614cb4600090565b61562e565b614d62611d7c61566b565b614d6857565b631afcd79f60e31b6000908152600490fd5b906104e791614d87614d57565b90614d946104e792613a73565b613f39565b906104e791614d7a565b614dae611d7c612274565b614db457565b638dfc202b60e01b6000908152600490fd5b6104fd6000612f006104fd6121a9565b90614de082615694565b614de98261144a565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b614e1360405190565b600090a28051614e26611e976000610626565b1115614e355761190791615702565b50506104e76156df565b614e498282612431565b614e51575050565b633d6ef0d360e21b6000908152916119c3916004612e9c565b600080614e8d92614e7b603b610fa9565b90614e8560405190565b908180612f7c565b614e9357565b60405163123cc24f60e31b815260206004820152601b60248201527f50726f746f636f6c20666565206465706f736974206661696c656400000000006044820152606490fd5b92611bc1917f197d09c3f6a1c74d6407de0ac61eba84272dfc73f05b859ae362baddfdd7bbf293611bb792614f116104fd6000610626565b8214614f335750614f266123eb9160476114d6565b6129838761297e83610f96565b9050614f4261058e6000611eb9565b6001600160a01b03821614614f5f57614f266123eb91604861174d565b506123eb614f26826046610633565b90949293929190600090614f866104fd886043610633565b96614f8f885490565b9294600096614f9d88610626565b8581101561501257614fbb6104fd8c6131ca6106fd856040936106b4565b614fc9611d7c8b8301610f6f565b80614ffd575b614fe2575b50600101614f9d565b614f9d565b614fdd9198611b216005614ff69301610f96565b9790614fd4565b5061500a60018201610f96565b881415614fcf565b50909194929695939761502487610626565b851461515357879561503588610626565b8a5b811080615142575b1561510d5789898861505e8f6104fd906131ca6106fd886040936106b4565b61506c611d7c848301610f6f565b806150f8575b61508e575b50505050615087615037916142f1565b9050615035565b916150aa9160056150b99401946150a486610f96565b90614b30565b6150b383610f96565b90615729565b906150c38b610626565b82116150d4575b5089888c92615077565b81615037939a613241836129836150879661297e6150f197610f96565b98916150ca565b5061510560018201610f96565b8a1415615072565b50945094969750949097506151229150610626565b8411615130575b5050505090565b61513993614ed9565b38808080615129565b5061514c89610626565b881161503f565b5050965050505090506104fd9150610626565b6104fd9160006106fd92615178600090565b50016106b4565b9190926151a06104fd615190865490565b61519a6001610626565b90613165565b83106151ad575b50505050565b610827611b58926151cf6106fd876151c96151906151d59a5490565b906106b4565b92610633565b388080806151a7565b634e487b7160e01b600052603160045260246000fd5b8054801561521757600019019061521461520e83836106b4565b9061406b565b55565b6151de565b906104e79161522f6104fd615190845490565b811061523c575b506151f4565b6152619061405a61525a6106fd615254615190875490565b866106b4565b91846106b4565b38615236565b61519a60006104fd93615278600090565b5061528b615284610b26565b9182611a6b565b9084614b30565b8115614b88570490565b6104fd6012610626565b6104fd6011610626565b600091908181029160001981830983808210910303916000946152d286610626565b84146153d657838711156153aa578695936104fd97615320946153339794600194500990838211900392039561530f8161530b87610626565b0390565b811680808093049804950304010290565b1791615333615337826153336003610626565b0290565b61530b612d0a6153a461539561538661537761536860029761535889610626565b186153338b820261530b8b610626565b6153338a820261530b8a610626565b61533389820261530b89610626565b61533388820261530b88610626565b61533387820261530b87610626565b80950290565b6153d1876153ba611e9789610626565b146153c361529c565b6153cb6152a6565b91615732565b61574e565b505050506104fd929150615292565b634e487b7160e01b600052602160045260246000fd5b6004111561540557565b6153e5565b906104e7826153fb565b6104fd9061540a565b6107406104fd6104fd9290565b6154399060ff165b9160ff1690565b908115614b88570690565b61545961546991615453600090565b50615414565b615463600261541d565b9061542a565b61248f615432600161541d565b90615491615485610ec6845490565b92600052602060002090565b9060005b8181106154a25750505090565b9091926154c66154bf6001926154b787610f96565b815260200190565b9460010190565b929101615495565b906104fd91615476565b906104e761109b926154e960405190565b938480926154ce565b6104fd906154d8565b60006104fd91615509606090565b50016154f2565b60006104fd9161551e600090565b50015490565b919061402f6104fd6118539390565b6104e791600091615524565b8054801561521757600019019061521461555983836106b4565b90615533565b90615570611b0e82600185016114d6565b61557a6000610626565b8114614c7f57614a7e6104fd926000926155cd9561193760019788936155a86155a286610626565b82613165565b888501916155c06155b7845490565b61519a89610626565b8083036155d25750505090565b61553f565b6155f56155fb615603946155ec6106fd611b5895896106b4565b928391886106b4565b90615524565b8888016114d6565b388080613a36565b90815491600160401b8310156109dc57826155f59160016104e7950181556106b4565b61563b611d7c838361575f565b156156645761565f91611b589060016156588461435e848261560b565b93016114d6565b600190565b5050600090565b6104fd7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611c86565b6000813b6156a4611e9783610626565b146156bf57906104e7916156b96104fd6121a9565b0161183c565b634c9c8ce360e01b81526001600160a01b03919091166004820152602490fd5b60006156ea81610626565b34116156f35750565b63b398979f60e01b8152600490fd5b6000806104fd93615711606090565b50602081519101845af4615723611a86565b9161578a565b6104fd91908181105b6153338361574a93615742600090565b501891151590565b1890565b634e487b716000526020526024601cfd5b615778916001611b0e92615771600090565b50016114d6565b615785611e976000610626565b141590565b9061579557506157e9565b8151906000916157a7611e9784610626565b14806157d4575b6157b757505090565b639996b31560e01b82526001600160a01b03166004820152602490fd5b50803b6157e3611e9784610626565b146157ae565b80516000906157fa611e9783610626565b11156158095750805190602001fd5b63d6bda27560e01b8152600490fdfeb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212204f369803321aebdbbbb09e4d4023720061a778bdf1ac62b94c874e4f2402337f64736f6c634300081a0033