5 txs
48 calls
constructor
constructor()
functions
allTransactions
viewfunction allTransactions(uint256) view returns (address user, address token, uint256 amount, bool isDeposit, bool isPersonal, uint256 vaultId, uint256 timestamp)
authorizedTradingContracts
viewfunction authorizedTradingContracts(address) view returns (bool)
checkPersonalVaultExists
viewfunction checkPersonalVaultExists(address user) view returns (bool)
checkPersonalVaultExistsById
viewfunction checkPersonalVaultExistsById(uint256 vaultId) view returns (bool)
communityTransactionHistory
viewfunction communityTransactionHistory(uint256, address) view returns (uint256 totalDeposited, uint256 totalWithdrawn, uint256 transactionCount, uint256 lastTransactionAt, uint256 firstDepositAmount, uint256 firstDepositTimestamp)
communityVaults
viewfunction communityVaults(uint256) view returns (address leader, string name, uint256 totalMembers, uint256 totalBalance, bool exists, uint256 createdAt)
getCommunityMemberFirstDeposit
viewfunction getCommunityMemberFirstDeposit(uint256 vaultId, address member) view returns (uint256 amount, uint256 timestamp)
getCommunityMemberTransactionHistory
viewfunction getCommunityMemberTransactionHistory(uint256 vaultId, address member) view returns (uint256 totalDeposited, uint256 totalWithdrawn, uint256 transactionCount, uint256 lastTransactionAt, uint256 firstDepositAmount, uint256 firstDepositTimestamp)
getCommunityVaultBalance
viewfunction getCommunityVaultBalance(uint256 vaultId, address token) view returns (uint256)
getCommunityVaultCreatedAt
viewfunction getCommunityVaultCreatedAt(uint256 vaultId) view returns (uint256)
getCommunityVaultDetails
viewfunction getCommunityVaultDetails(uint256 vaultId) view returns (address leader, string name, bool exists, uint256 totalMembers, uint256 totalBalance, uint256 createdAt, uint256 ethBalance, uint256 memberCount)
getCommunityVaultMemberBasicDetails
viewfunction getCommunityVaultMemberBasicDetails(uint256 vaultId, address memberAddress) view returns (bool exists, bool isAdmin, uint256 initialDeposit, uint256 sharePercentage, uint256 joinedAt, uint256 lastDepositAt)
getCommunityVaultMemberDepositDetails
viewfunction getCommunityVaultMemberDepositDetails(uint256 vaultId, address memberAddress) view returns (uint256 withdrawableEthAmount, uint256 firstDepositAmount, uint256 firstDepositTimestamp)
getCommunityVaultMembers
viewfunction getCommunityVaultMembers(uint256 vaultId) view returns (address[])
getCommunityVaultMemberTransactionDetails
viewfunction getCommunityVaultMemberTransactionDetails(uint256 vaultId, address memberAddress) view returns (uint256 totalDeposited, uint256 totalWithdrawn, uint256 transactionCount, uint256 lastTransactionAt)
getCommunityVaultTokenBalance
viewfunction getCommunityVaultTokenBalance(uint256 vaultId, address token) view returns (uint256)
getCommunityVaultTotalBalance
viewfunction getCommunityVaultTotalBalance(uint256 vaultId) view returns (uint256)
getDaysSinceCommunityFirstDeposit
viewfunction getDaysSinceCommunityFirstDeposit(uint256 vaultId, address member) view returns (uint256)
getDaysSincePersonalFirstDeposit
viewfunction getDaysSincePersonalFirstDeposit(address user) view returns (uint256)
getJoinRequestDetails
viewfunction getJoinRequestDetails(uint256 vaultId, address applicant) view returns (bool exists, bool processed, bool accepted, uint256 requestedAt, uint256 processedAt)
getJoinRequestList
viewfunction getJoinRequestList(uint256 vaultId) view returns (address[])
getMemberInitialDeposit
viewfunction getMemberInitialDeposit(uint256 vaultId, address member) view returns (uint256)
getMemberSharePercentage
viewfunction getMemberSharePercentage(uint256 vaultId, address member) view returns (uint256)
getMemberTimestamps
viewfunction getMemberTimestamps(uint256 vaultId, address member) view returns (uint256 joinedAt, uint256 lastDepositAt)
getMemberWithdrawableTokenAmount
viewfunction getMemberWithdrawableTokenAmount(uint256 vaultId, address memberAddress, address token) view returns (uint256)
getPersonalTransactionHistory
viewfunction getPersonalTransactionHistory(address user) view returns (uint256 totalDeposited, uint256 totalWithdrawn, uint256 transactionCount, uint256 lastTransactionAt, uint256 firstDepositAmount, uint256 firstDepositTimestamp)
getPersonalVaultBalance
viewfunction getPersonalVaultBalance(uint256 vaultId, address token) view returns (uint256)
getPersonalVaultCreatedAt
viewfunction getPersonalVaultCreatedAt(uint256 vaultId) view returns (uint256)
getPersonalVaultDetails
viewfunction getPersonalVaultDetails(uint256 vaultId) view returns (address owner, bool exists, uint256 createdAt, uint256 totalDeposited, uint256 totalWithdrawn, uint256 transactionCount, uint256 lastTransactionAt, uint256 ethBalance, uint256 firstDepositAmount, uint256 firstDepositTimestamp)
getPersonalVaultFirstDeposit
viewfunction getPersonalVaultFirstDeposit(address user) view returns (uint256 amount, uint256 timestamp)
getPersonalVaultId
viewfunction getPersonalVaultId(address user) view returns (uint256)
getPersonalVaultOwner
viewfunction getPersonalVaultOwner(uint256 vaultId) view returns (address)
getPersonalVaultTokenBalance
viewfunction getPersonalVaultTokenBalance(uint256 vaultId, address token) view returns (uint256)
getTotalMembers
viewfunction getTotalMembers(uint256 vaultId) view returns (uint256)
getTotalTransactions
viewfunction getTotalTransactions() view returns (uint256)
getTransactionDetails
viewfunction getTransactionDetails(uint256 transactionId) view returns (address user, address token, uint256 amount, bool isDeposit, bool isPersonal, uint256 vaultId, uint256 timestamp)
getUserCommunityVaults
viewfunction getUserCommunityVaults(address user) view returns (uint256[])
getUserTransactionIds
viewfunction getUserTransactionIds(address user) view returns (uint256[])
getVaultLeader
viewfunction getVaultLeader(uint256 vaultId) view returns (address)
getVaultName
viewfunction getVaultName(uint256 vaultId) view returns (string)
getVaultTransactionIds
viewfunction getVaultTransactionIds(uint256 vaultId) view returns (uint256[])
getWithdrawableAmount
viewfunction getWithdrawableAmount(uint256 vaultId, address member, address token) view returns (uint256)
hasCommunityMemberFirstDeposit
viewfunction hasCommunityMemberFirstDeposit(uint256 vaultId, address member) view returns (bool)
hasPersonalVaultFirstDeposit
viewfunction hasPersonalVaultFirstDeposit(address user) view returns (bool)
isAdmin
viewfunction isAdmin(uint256 vaultId, address user) view returns (bool)
isTradingContract
viewfunction isTradingContract(address _address) view returns (bool)
owner
viewfunction owner() view returns (address)
personalTransactionHistory
viewfunction personalTransactionHistory(address) view returns (uint256 totalDeposited, uint256 totalWithdrawn, uint256 transactionCount, uint256 lastTransactionAt, uint256 firstDepositAmount, uint256 firstDepositTimestamp)
personalVaultOwners
viewfunction personalVaultOwners(uint256) view returns (address)
personalVaults
viewfunction personalVaults(address) view returns (uint256 vaultId, address owner, bool exists, uint256 createdAt)
totalCommunityVaults
viewfunction totalCommunityVaults() view returns (uint256)
totalPersonalVaults
viewfunction totalPersonalVaults() view returns (uint256)
totalTradingContracts
viewfunction totalTradingContracts() view returns (uint256)
totalVaultBalance
viewfunction totalVaultBalance() view returns (uint256)
userCommunityVaults
viewfunction userCommunityVaults(address, uint256) view returns (uint256)
userTransactionIds
viewfunction userTransactionIds(address, uint256) view returns (uint256)
vaultTransactionIds
viewfunction vaultTransactionIds(uint256, uint256) view returns (uint256)
addAdmin
nonpayablefunction addAdmin(uint256 vaultId, address admin)
addTradingContract
nonpayablefunction addTradingContract(address _tradingContract)
applyToJoinCommunityVault
nonpayablefunction applyToJoinCommunityVault(uint256 vaultId)
createCommunityVault
nonpayablefunction createCommunityVault(string name) returns (uint256 vaultId)
createPersonalVault
nonpayablefunction createPersonalVault() returns (uint256 vaultId)
depositERC20ToCommunityVault
nonpayablefunction depositERC20ToCommunityVault(uint256 vaultId, address token, uint256 amount)
depositERC20ToPersonalVault
nonpayablefunction depositERC20ToPersonalVault(uint256 vaultId, address token, uint256 amount)
depositETHToCommunityVault
payablefunction depositETHToCommunityVault(uint256 vaultId) payable
depositETHToPersonalVault
payablefunction depositETHToPersonalVault(uint256 vaultId) payable
processJoinRequest
nonpayablefunction processJoinRequest(uint256 vaultId, address applicant, bool accept)
receiveFromTrading
payablefunction receiveFromTrading(uint256 vaultId, address token, uint256 amount) payable
receivePersonalFromTrading
payablefunction receivePersonalFromTrading(uint256 vaultId, address token, uint256 amount) payable
removeAdmin
nonpayablefunction removeAdmin(uint256 vaultId, address admin)
removeTradingContract
nonpayablefunction removeTradingContract(address _tradingContract)
transferPersonalToTrading
nonpayablefunction transferPersonalToTrading(uint256 vaultId, address token, uint256 amount) returns (bool)
transferToTrading
nonpayablefunction transferToTrading(uint256 vaultId, address token, uint256 amount) returns (bool)
withdrawERC20FromCommunityVault
nonpayablefunction withdrawERC20FromCommunityVault(uint256 vaultId, address token, uint256 amount)
withdrawERC20FromPersonalVault
nonpayablefunction withdrawERC20FromPersonalVault(uint256 vaultId, address token, uint256 amount)
withdrawETHFromCommunityVault
nonpayablefunction withdrawETHFromCommunityVault(uint256 vaultId, uint256 amount)
withdrawETHFromPersonalVault
nonpayablefunction withdrawETHFromPersonalVault(uint256 vaultId, uint256 amount)
events
AdminAdded
event AdminAdded(uint256 indexed vaultId, address indexed admin, uint256 timestamp)
AdminRemoved
event AdminRemoved(uint256 indexed vaultId, address indexed admin, uint256 timestamp)
CommunityVaultCreated
event CommunityVaultCreated(uint256 indexed vaultId, address indexed leader, string name, uint256 timestamp)
DebugLog
event DebugLog(string message, uint256 value)
Deposit
event Deposit(address indexed user, address indexed token, uint256 amount, bool isPersonal, uint256 vaultId, uint256 timestamp)
JoinRequestProcessed
event JoinRequestProcessed(uint256 indexed vaultId, address indexed applicant, bool accepted, uint256 timestamp)
JoinRequestSubmitted
event JoinRequestSubmitted(uint256 indexed vaultId, address indexed applicant, uint256 timestamp)
PersonalVaultCreated
event PersonalVaultCreated(address indexed owner, uint256 indexed vaultId, uint256 timestamp)
TokensReceived
event TokensReceived(uint256 indexed vaultId, address indexed token, uint256 amount, bool isPersonal, uint256 timestamp)
TradingContractAdded
event TradingContractAdded(address indexed tradingContract, uint256 timestamp)
TradingContractRemoved
event TradingContractRemoved(address indexed tradingContract, uint256 timestamp)
TransactionRecorded
event TransactionRecorded(uint256 indexed transactionId, address indexed user, address indexed token, uint256 amount, bool isDeposit, bool isPersonal, uint256 vaultId, uint256 timestamp)
Withdrawal
event Withdrawal(address indexed user, address indexed token, uint256 amount, bool isPersonal, uint256 vaultId, uint256 timestamp)
errors
No errors.
creation bytecode
0x6080604052348015600e575f5ffd5b505f80546001600160a01b03191633179055615aa48061002d5f395ff3fe608060405260043610610424575f3560e01c80639076306111610226578063e0dd10d11161012c578063f1bc8ab9116100af578063f6d6c05c11610076578063f6d6c05c14611129578063f823e2ae14611148578063fb9e9d9a14611167578063fdd3992014611186578063ff8e6693146111ce57005b8063f1bc8ab91461104d578063f1ccf3671461106c578063f2ca86ab146110b1578063f4acf5d1146110eb578063f4cab6271461110a57005b8063ec406e34116100f3578063ec406e3414610fbe578063ed1eeb6a14610fd1578063ee12488214610ff0578063f06f8e771461100f578063f0f110ef1461102e57005b8063e0dd10d114610f33578063e63b8a531461051f578063e67758d314610f6d578063e947d57914610f80578063e9a716be14610f9f57005b8063cc5d195e116101b4578063d752cdc91161017b578063d752cdc914610e89578063d757715e14610ea8578063d7ff071414610ec7578063dbdc814b14610ee6578063dc172c6214610f0557005b8063cc5d195e14610db8578063ccf98cb914610dcd578063ce55c0ab14610dec578063d471442e14610e42578063d48535f914610e7657005b8063a9a61e25116101f8578063a9a61e2514610ca4578063b3c36a1614610cec578063b5c604ff14610d45578063bd880c9c14610d59578063ca158c3214610d8557005b80639076306114610bf457806392c0489e14610c42578063a01913e714610c61578063a5b7eb4814610c8f57005b80634e162fef1161032b5780636d81d981116102b9578063804e887211610280578063804e887214610ae657806381d3aa6714610b05578063824feb2a14610b445780638da5cb5b14610b635780638ed9bc6f14610b8157005b80636d81d98114610a0657806376c72d6b14610a3d57806379dd2b4e14610a895780637a8808bf14610aa85780637eb0bdc914610ac757005b806354727f83116102fd57806354727f83146108fa57806359ba9ca7146109195780635b621e32146109a9578063600eedaa146109c85780636c4c3d45146109e757005b80634e162fef1461087a5780634e53c1011461089957806350efae63146108ad57806351f2bb1c146108cc57005b806326bb000b116103b3578063462270371161037a578063462270371461079357806346486933146107b257806347a0c1131461081857806347eb36b8146108465780634b45eb261461085b57005b806326bb000b146106e557806333a6ea1d146107165780633816e7b41461074257806344efb4ba1461076157806345e747f51461078057005b80630ed339e3116103f75780630ed339e31461053e5780630fa683d31461058c578063146a2911146105ed578063165a2c83146106485780631fc39b6e146106c657005b80630792f9a01461042657806308a142981461044e5780630ac8a1e7146104f35780630df87a3d1461051f575b005b348015610431575f5ffd5b5061043b60045481565b6040519081526020015b60405180910390f35b348015610459575f5ffd5b506104c26104683660046150db565b5f9182526009602090815260408084206001600160a01b039390931684526005909201905290208054600182015460029092015460ff600160a01b8304811694600160a81b8404821694600160b01b909404909116929190565b6040516104459594939291909415158552921515602085015290151560408401526060830152608082015260a00190565b3480156104fe575f5ffd5b5061051261050d366004615105565b6111ed565b604051610445919061511c565b34801561052a575f5ffd5b5061043b6105393660046150db565b611259565b348015610549575f5ffd5b5061055d6105583660046150db565b6112c8565b6040805196151587529415156020870152938501929092526060840152608083015260a082015260c001610445565b348015610597575f5ffd5b506105ab6105a6366004615105565b61135d565b604080516001600160a01b0398891681529790961660208801529486019390935290151560608501521515608084015260a083015260c082015260e001610445565b3480156105f8575f5ffd5b506106386106073660046150db565b5f8281526009602090815260408083206001600160a01b038516845260040190915290206003015460ff1692915050565b6040519015158152602001610445565b348015610653575f5ffd5b50610698610662366004615167565b60066020525f9081526040902080546001820154600383015460049093015491926001600160a01b039091169160ff9091169084565b604080519485526001600160a01b039093166020850152901515918301919091526060820152608001610445565b3480156106d1575f5ffd5b506105126106e0366004615105565b611428565b3480156106f0575f5ffd5b506107046106ff366004615105565b611492565b604051610445969594939291906151ae565b348015610721575f5ffd5b50610735610730366004615105565b61155d565b60405161044591906151f6565b34801561074d575f5ffd5b5061063861075c36600461522d565b6115bb565b34801561076c575f5ffd5b5061063861077b366004615167565b6117ca565b61042461078e36600461522d565b611813565b34801561079e575f5ffd5b5061043b6107ad366004615260565b611aae565b3480156107bd575f5ffd5b506108036107cc3660046150db565b5f9182526009602090815260408084206001600160a01b039390931684526004928301909152909120908101546005909101549091565b60408051928352602083019190915201610445565b348015610823575f5ffd5b5061043b610832366004615105565b5f9081526009602052604090206002015490565b348015610851575f5ffd5b5061043b60035481565b348015610866575f5ffd5b5061043b610875366004615288565b611ad9565b348015610885575f5ffd5b506104246108943660046152d1565b611b55565b3480156108a4575f5ffd5b5061043b611efd565b3480156108b8575f5ffd5b5061043b6108c7366004615260565b61203d565b3480156108d7575f5ffd5b5061043b6108e6366004615105565b5f908152600960205260409020600a015490565b348015610905575f5ffd5b5061042461091436600461522d565b612056565b348015610924575f5ffd5b5061097c6109333660046150db565b5f918252600a602090815260408084206001600160a01b039390931684529190529020805460018201546002830154600384015460048501546005909501549395929491939092565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610445565b3480156109b4575f5ffd5b506104246109c3366004615167565b61230b565b3480156109d3575f5ffd5b5061043b6109e23660046150db565b612404565b3480156109f2575f5ffd5b50610803610a013660046150db565b6124b4565b348015610a11575f5ffd5b50610638610a20366004615167565b6001600160a01b03165f9081526001602052604090205460ff1690565b348015610a48575f5ffd5b50610a71610a57366004615105565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610445565b348015610a94575f5ffd5b5061043b610aa3366004615322565b612566565b348015610ab3575f5ffd5b50610638610ac2366004615105565b6126d8565b348015610ad2575f5ffd5b50610424610ae13660046150db565b61271f565b348015610af1575f5ffd5b5061043b610b003660046153d5565b612916565b348015610b10575f5ffd5b50610b24610b1f3660046150db565b61292f565b604080519485526020850193909352918301526060820152608001610445565b348015610b4f575f5ffd5b50610424610b5e36600461522d565b6129f2565b348015610b6e575f5ffd5b505f54610a71906001600160a01b031681565b348015610b8c575f5ffd5b50610ba0610b9b366004615105565b612d19565b604080516001600160a01b03909b168b5298151560208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015261010083015261012082015261014001610445565b348015610bff575f5ffd5b5061097c610c0e366004615167565b60086020525f9081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b348015610c4d575f5ffd5b5061043b610c5c366004615167565b612e29565b348015610c6c575f5ffd5b5061043b610c7b366004615105565b5f9081526009602052604090206003015490565b348015610c9a575f5ffd5b5061043b60025481565b348015610caf575f5ffd5b5061043b610cbe3660046150db565b5f8281526009602090815260408083206001600160a01b038516845260040190915290206002015492915050565b348015610cf7575f5ffd5b5061097c610d063660046150db565b600a60209081525f9283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b348015610d50575f5ffd5b50600c5461043b565b348015610d64575f5ffd5b50610d78610d73366004615105565b612e7e565b60405161044591906153f5565b348015610d90575f5ffd5b50610da4610d9f366004615105565b612f16565b604051610445989796959493929190615407565b348015610dc3575f5ffd5b5061043b60055481565b348015610dd8575f5ffd5b50610a71610de7366004615105565b613056565b348015610df7575f5ffd5b5061097c610e06366004615167565b6001600160a01b03165f908152600860205260409020805460018201546002830154600384015460048501546005909501549395929491939092565b348015610e4d575f5ffd5b50610a71610e5c366004615105565b5f908152600960205260409020546001600160a01b031690565b610424610e8436600461522d565b61308a565b348015610e94575f5ffd5b5061043b610ea33660046150db565b613369565b348015610eb3575f5ffd5b5061043b610ec2366004615167565b6133c5565b348015610ed2575f5ffd5b506105ab610ee1366004615105565b613431565b348015610ef1575f5ffd5b50610424610f003660046150db565b613490565b348015610f10575f5ffd5b50610638610f1f366004615167565b60016020525f908152604090205460ff1681565b348015610f3e575f5ffd5b50610638610f4d366004615167565b6001600160a01b03165f9081526006602052604090206003015460ff1690565b610424610f7b366004615105565b613622565b348015610f8b575f5ffd5b50610424610f9a36600461522d565b6137e2565b348015610faa575f5ffd5b50610424610fb93660046153d5565b613ab1565b610424610fcc366004615105565b613cfd565b348015610fdc575f5ffd5b50610424610feb366004615105565b613f3f565b348015610ffb575f5ffd5b5061042461100a3660046153d5565b614154565b34801561101a575f5ffd5b50610735611029366004615167565b61442f565b348015611039575f5ffd5b5061043b611048366004615288565b614496565b348015611058575f5ffd5b5061042461106736600461522d565b614516565b348015611077575f5ffd5b5061043b6110863660046150db565b5f8281526009602090815260408083206001600160a01b038516845260080190915290205492915050565b3480156110bc575f5ffd5b506110d06110cb3660046150db565b614794565b60408051938452602084019290925290820152606001610445565b3480156110f6575f5ffd5b5061063861110536600461522d565b6148a3565b348015611115575f5ffd5b50610803611124366004615167565b614b09565b348015611134575f5ffd5b5061043b611143366004615105565b614b6c565b348015611153575f5ffd5b50610424611162366004615167565b614bc0565b348015611172575f5ffd5b50610735611181366004615167565b614d00565b348015611191575f5ffd5b5061043b6111a03660046150db565b5f8281526009602090815260408083206001600160a01b038516845260040190915290206001015492915050565b3480156111d9575f5ffd5b506106386111e83660046150db565b614d67565b5f8181526009602090815260409182902060060180548351818402810184019094528084526060939283018282801561124d57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161122f575b50505050509050919050565b5f828152600760205260408120546001600160a01b0316806112965760405162461bcd60e51b815260040161128d9061545d565b60405180910390fd5b6001600160a01b039081165f908152600660209081526040808320938616835260029093019052205490505b92915050565b5f828152600960208190526040822001548190819081908190819060ff166113025760405162461bcd60e51b815260040161128d906154a7565b5050505f94855250506009602090815260408085206001600160a01b0394909416855260049384019091529092206003810154600182015460028301549383015460059093015460ff61010084048116979316955090939291565b5f5f5f5f5f5f5f600c8054905088106113b85760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e20646f6573206e6f74206578697374000000000000604482015260640161128d565b5f600c89815481106113cc576113cc6154de565b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b039485169f949093169d50909b5060ff8082169b5061010090910416985091965090945092505050565b5f8181526009602090815260409182902060070180548351818402810184019094528084526060939283018282801561124d57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831161122f5750505050509050919050565b60096020525f9081526040902080546001820180546001600160a01b0390921692916114bd906154f2565b80601f01602080910402602001604051908101604052809291908181526020018280546114e9906154f2565b80156115345780601f1061150b57610100808354040283529160200191611534565b820191905f5260205f20905b81548152906001019060200180831161151757829003601f168201915b505050600284015460038501546009860154600a909601549495919490935060ff909116915086565b5f818152600e602090815260409182902080548351818402810184019094528084526060939283018282801561124d57602002820191905f5260205f20905b81548152602001906001019080831161159c5750505050509050919050565b335f9081526001602052604081205460ff166115e95760405162461bcd60e51b815260040161128d9061552a565b5f8481526009602081905260409091200154849060ff1661161c5760405162461bcd60e51b815260040161128d906154a7565b5f831161163b5760405162461bcd60e51b815260040161128d90615587565b5f8581526009602090815260408083206001600160a01b038816845260080190915290205483111561167f5760405162461bcd60e51b815260040161128d906155be565b5f8581526009602090815260408083206001600160a01b0388168452600801909152812080548592906116b3908490615600565b90915550506001600160a01b038416611731576040515f90339085908381818185875af1925050503d805f8114611705576040519150601f19603f3d011682016040523d82523d5f602084013e61170a565b606091505b505090508061172b5760405162461bcd60e51b815260040161128d90615613565b506117bf565b60405163a9059cbb60e01b81523360048201526024810184905284906001600160a01b0382169063a9059cbb906044016020604051808303815f875af115801561177d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a1919061563c565b6117bd5760405162461bcd60e51b815260040161128d90615613565b505b506001949350505050565b6001600160a01b0381165f9081526006602052604081206003015460ff166117f357505f919050565b506001600160a01b03165f90815260086020526040902060050154151590565b335f9081526001602052604090205460ff166118415760405162461bcd60e51b815260040161128d9061552a565b5f8381526009602081905260409091200154839060ff166118745760405162461bcd60e51b815260040161128d906154a7565b6001600160a01b038316611936578134146118c35760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b604482015260640161128d565b5f848152600960209081526040808320838052600801909152812080548492906118ee908490615657565b90915550505f8481526009602052604081206003018054849290611913908490615657565b925050819055508160055f82825461192b9190615657565b90915550611a589050565b604080518181526023818301527f526563656976696e6720455243323020746f6b656e732066726f6d2074726164606082015262696e6760e81b60808201526020810184905290515f516020615a0f5f395f51905f529181900360a00190a160408051818152600d818301526c546f6b656e206164647265737360981b60608201526001600160a01b038516602082015290515f516020615a0f5f395f51905f529181900360800190a1604080518181526008818301526715985d5b1d08125160c21b60608201526020810186905290515f516020615a0f5f395f51905f529181900360800190a15f8481526009602090815260408083206001600160a01b038716845260080190915281208054849290611a52908490615657565b90915550505b604080518381525f602082015242918101919091526001600160a01b0384169085907f88a2a5263dbb2304fdd1fc2a258e98a366b16600508611d640035d40e318d861906060015b60405180910390a350505050565b600d602052815f5260405f208181548110611ac7575f80fd5b905f5260205f20015f91509150505481565b5f8381526009602090815260408083206001600160a01b038616845260048101909252822060028101548303611b13575f92505050611b4e565b60028101546001600160a01b0385165f90815260088401602052604090205461271091611b3f9161566a565b611b499190615681565b925050505b9392505050565b5f8381526009602081905260409091200154839060ff16611b885760405162461bcd60e51b815260040161128d906154a7565b5f8481526009602052604090205484906001600160a01b0316331480611bfa57505f818152600960209081526040808320338452600401909152902060030154610100900460ff168015611bfa57505f81815260096020908152604080832033845260040190915290206003015460ff165b611c605760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207661756c74206c6561646572206f722061646d696e2063616e206360448201527030b636103a3434b990333ab731ba34b7b760791b606482015260840161128d565b5f8581526009602090815260408083206001600160a01b0388168452600501909152902054600160a01b900460ff16611cdb5760405162461bcd60e51b815260206004820152601b60248201527f4a6f696e207265717565737420646f6573206e6f742065786973740000000000604482015260640161128d565b5f8581526009602090815260408083206001600160a01b0388168452600501909152902054600160a81b900460ff1615611d575760405162461bcd60e51b815260206004820152601e60248201527f4a6f696e207265717565737420616c72656164792070726f6365737365640000604482015260640161128d565b5f8581526009602090815260408083206001600160a01b03881684526005019091529020805484158015600160b01b0261ffff60a81b1990921691909117600160a81b178255426002909201829055611eac575f8681526009602081815260408084206001600160a01b038a168086526004808301855292862080546001600160a01b031990811683178255600180830189905560028084018a905560038401805461ffff19166101001790559583018a905560058301899055968652600684018054978801815588529487209095018054909416179092558984520180549192611e41836156a0565b9091555050506001600160a01b0385165f818152600b60209081526040808320805460018181018355918552838520018b90558a8452600a83528184209484529390915281208181559182018190556002820181905560038201839055600482018190556005909101555b604080518515158152602081018390526001600160a01b0387169188917f9a5dec7104f72ee053265bc6110d7b46eaddf13404b649500d1fa60bb2e6fe7191015b60405180910390a3505050505050565b335f9081526006602052604081206003015460ff1615611f5f5760405162461bcd60e51b815260206004820152601d60248201527f506572736f6e616c207661756c7420616c726561647920657869737473000000604482015260640161128d565b5060038054335f818152600660209081526040808320858155600180820180546001600160a01b03199081168817909155828901805460ff19168317905542600480850182905589885260078752858820805490931689179092559686526008909452918420848155918201849055600282018490558187018590559181018390556005810183905585549495939491939092611ffb836156a0565b9091555050604051838152849033907f2e57160fa374dad6ac83496285ce53279496150b23938412e7612e02b8dd31889060200160405180910390a350505090565b600b602052815f5260405f208181548110611ac7575f80fd5b5f8381526007602052604090205483906001600160a01b03168061208c5760405162461bcd60e51b815260040161128d9061545d565b6001600160a01b0381165f9081526006602052604090206003015460ff166120c65760405162461bcd60e51b815260040161128d906156b8565b5f8581526007602052604090205485906001600160a01b03163381146120fe5760405162461bcd60e51b815260040161128d906156ef565b6001600160a01b0386166121625760405162461bcd60e51b815260206004820152602560248201527f557365206465706f736974455448546f506572736f6e616c5661756c7420666f6044820152640e4408aa8960db1b606482015260840161128d565b5f85116121815760405162461bcd60e51b815260040161128d90615587565b6040516323b872dd60e01b815233600482015230602482015260448101869052429087906001600160a01b038216906323b872dd906064016020604051808303815f875af11580156121d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121f9919061563c565b6122155760405162461bcd60e51b815260040161128d90615613565b335f9081526006602090815260408083206001600160a01b038c1684526002019091528120805489929061224a908490615657565b9091555050335f90815260086020526040812060058101549091036122785760048101889055600581018390555b87815f015f82825461228a9190615657565b9091555050600281018054905f6122a0836156a0565b9091555050600381018390556122bc338a8a6001808f89614dee565b60408051898152600160208201529081018b9052606081018490526001600160a01b038a169033905f516020615a4f5f395f51905f52906080015b60405180910390a350505050505050505050565b5f546001600160a01b031633146123345760405162461bcd60e51b815260040161128d90615736565b6001600160a01b0381165f9081526001602052604090205460ff1661238c5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b604482015260640161128d565b6001600160a01b0381165f908152600160205260408120805460ff1916905560028054916123b983615777565b9190505550806001600160a01b03167fffbbffadf3c35c1b1afa02d370f2b7237321f3bace7429d0a510a2003c52fc55426040516123f991815260200190565b60405180910390a250565b5f8281526009602081905260408220015460ff1661242357505f6112c2565b5f8381526009602090815260408083206001600160a01b0386168452600401909152902060030154610100900460ff1661245e57505f6112c2565b5f838152600a602090815260408083206001600160a01b038616845290915281206005015490819003612494575f9150506112c2565b620151806124a28242615600565b6124ac9190615681565b949350505050565b5f82815260096020819052604082200154819060ff166124e65760405162461bcd60e51b815260040161128d906154a7565b5f8481526009602090815260408083206001600160a01b0387168452600401909152902060030154610100900460ff166125325760405162461bcd60e51b815260040161128d9061578c565b50505f918252600a602090815260408084206001600160a01b03939093168452919052902060048101546005909101549091565b6004545f81815260096020526040902080546001600160a01b03191633178155429060018101612596858261581a565b50600981018054600160ff199091168117909155600a808301849055335f81815260048086016020908152604080842080546001600160a01b03199081168717825581890186905560028083018790556003808401805461ffff19166101011790558387018d9055600580850189905560068d018054808e018255908a52878a200180549094168a17909355818c018b9055888852600b86528488208054808d018255908952868920018e90558d885298855283872097875296909352908420848155968701849055938601839055938501879055848101829055928401819055825491939290612686836156a0565b9190505550336001600160a01b0316857f6ccfae5a55e95aeeee3031bf3ed084e8786c35f4789a7ca1d3c60cd1716bab7388876040516126c79291906158d5565b60405180910390a350505050919050565b5f818152600760205260408120546001600160a01b0316806126fc57505f92915050565b6001600160a01b03165f9081526006602052604090206003015460ff1692915050565b5f8281526009602081905260409091200154829060ff166127525760405162461bcd60e51b815260040161128d906154a7565b5f8381526009602052604090205483906001600160a01b031633146127895760405162461bcd60e51b815260040161128d906158f6565b5f8481526009602090815260408083206001600160a01b0387168452600401909152902060030154610100900460ff166127d55760405162461bcd60e51b815260040161128d9061593e565b5f8481526009602090815260408083206001600160a01b038716845260040190915290206003015460ff1661284c5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420616e2061646d696e000000000000000000604482015260640161128d565b5f848152600960205260409020546001600160a01b03908116908416036128b55760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742072656d6f7665206c65616465722061732061646d696e000000604482015260640161128d565b5f8481526009602090815260408083206001600160a01b0387168085526004909101835292819020600301805460ff191690555142815286917f9f431ea52189e29c50dd5dea65e6bc2dbb9210c289bddf43e1c6662f841954949101611aa0565b600e602052815f5260405f208181548110611ac7575f80fd5b5f8281526009602081905260408220015481908190819060ff166129655760405162461bcd60e51b815260040161128d906154a7565b5f8681526009602090815260408083206001600160a01b0389168452600401909152902060030154610100900460ff166129b15760405162461bcd60e51b815260040161128d9061578c565b5050505f92835250600a602090815260408084206001600160a01b039390931684529190529020805460018201546002830154600390930154919390929190565b5f8381526009602081905260409091200154839060ff16612a255760405162461bcd60e51b815260040161128d906154a7565b5f8481526009602090815260408083203384526004019091529020600301548490610100900460ff16612a6a5760405162461bcd60e51b815260040161128d90615983565b6001600160a01b038416612ad25760405162461bcd60e51b815260206004820152602960248201527f55736520776974686472617745544846726f6d436f6d6d756e6974795661756c6044820152680e840ccdee4408aa8960bb1b606482015260840161128d565b5f8311612af15760405162461bcd60e51b815260040161128d90615587565b5f858152600960209081526040808320338452600481019092529091206002810154612b555760405162461bcd60e51b81526020600482015260136024820152724e6f2073686172652070657263656e7461676560681b604482015260640161128d565b60028101546001600160a01b0387165f908152600884016020526040812054909161271091612b84919061566a565b612b8e9190615681565b905080861115612bb05760405162461bcd60e51b815260040161128d906159cb565b6001600160a01b0387165f908152600884016020526040812080544292899291612bdb908490615600565b90915550505f898152600a60209081526040808320338452909152812060018101805491928a92612c0d908490615657565b9091555050600281018054905f612c23836156a0565b909155505060038101829055612c3e338a8a5f808f88614dee565b60405163a9059cbb60e01b81523360048201526024810189905289906001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015612c8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cae919061563c565b612cca5760405162461bcd60e51b815260040161128d90615613565b604080518a81525f60208201529081018c9052606081018490526001600160a01b038b169033905f516020615a2f5f395f51905f52906080015b60405180910390a35050505050505050505050565b5f818152600760205260408120548190819081908190819081908190819081906001600160a01b031680612d5f5760405162461bcd60e51b815260040161128d9061545d565b5f60065f836001600160a01b03166001600160a01b031681526020019081526020015f2090505f60085f846001600160a01b03166001600160a01b031681526020019081526020015f20905082826003015f9054906101000a900460ff168360040154835f0154846001015485600201548660030154886002015f5f6001600160a01b03166001600160a01b031681526020019081526020015f2054886004015489600501549c509c509c509c509c509c509c509c509c509c505050509193959799509193959799565b6001600160a01b0381165f9081526006602052604081206003015460ff16612e635760405162461bcd60e51b815260040161128d906156b8565b506001600160a01b03165f9081526006602052604090205490565b5f818152600960205260409020600101805460609190612e9d906154f2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec9906154f2565b801561124d5780601f10612eeb5761010080835404028352916020019161124d565b820191905f5260205f20905b815481529060010190602001808311612ef75750939695505050505050565b5f8181526009602081905260408220015460609082908190819081908190819060ff16612f555760405162461bcd60e51b815260040161128d906154a7565b5f89815260096020818152604080842080549381015460028201546003830154600a840154888052600885019096529390962054600683015460018401805494986001600160a01b0390981697909660ff90941695909490939291908790612fbc906154f2565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe8906154f2565b80156130335780601f1061300a57610100808354040283529160200191613033565b820191905f5260205f20905b81548152906001019060200180831161301657829003601f168201915b505050505096509850985098509850985098509850985050919395975091939597565b5f818152600760205260408120546001600160a01b0316806112c25760405162461bcd60e51b815260040161128d9061545d565b335f9081526001602052604090205460ff166130b85760405162461bcd60e51b815260040161128d9061552a565b5f8381526007602052604090205483906001600160a01b0316806130ee5760405162461bcd60e51b815260040161128d9061545d565b6001600160a01b0381165f9081526006602052604090206003015460ff166131285760405162461bcd60e51b815260040161128d906156b8565b5f858152600760205260409020546001600160a01b039081169085166131e1578334146131895760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840dad2e6dac2e8c6d608b1b604482015260640161128d565b6001600160a01b0381165f908152600660209081526040808320838052600201909152812080548692906131be908490615657565b925050819055508360055f8282546131d69190615657565b9091555061331c9050565b604080518181526036818301527f526563656976696e6720455243323020746f6b656e732066726f6d20747261646060820152751a5b99c8199bdc881c195c9cdbdb985b081d985d5b1d60521b60808201526020810186905290515f516020615a0f5f395f51905f529181900360a00190a160408051818152600d818301526c546f6b656e206164647265737360981b60608201526001600160a01b038716602082015290515f516020615a0f5f395f51905f529181900360800190a1604080518181526008818301526715985d5b1d08125160c21b60608201526020810188905290515f516020615a0f5f395f51905f529181900360800190a16001600160a01b038082165f9081526006602090815260408083209389168352600290930190529081208054869290613316908490615657565b90915550505b604080518581526001602082015242918101919091526001600160a01b0386169087907f88a2a5263dbb2304fdd1fc2a258e98a366b16600508611d640035d40e318d86190606001611eed565b5f8281526009602081905260408220015460ff166133995760405162461bcd60e51b815260040161128d906154a7565b505f8281526009602090815260408083206001600160a01b038516845260080190915290205492915050565b6001600160a01b0381165f9081526006602052604081206003015460ff166133ee57505f919050565b6001600160a01b0382165f908152600860205260408120600501549081900361341957505f92915050565b620151806134278242615600565b611b4e9190615681565b600c8181548110613440575f80fd5b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0394851696509390921693909260ff80841693610100900416919087565b5f8281526009602081905260409091200154829060ff166134c35760405162461bcd60e51b815260040161128d906154a7565b5f8381526009602052604090205483906001600160a01b031633146134fa5760405162461bcd60e51b815260040161128d906158f6565b5f8481526009602090815260408083206001600160a01b0387168452600401909152902060030154610100900460ff166135465760405162461bcd60e51b815260040161128d9061593e565b5f8481526009602090815260408083206001600160a01b038716845260040190915290206003015460ff16156135be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e2061646d696e0000000000604482015260640161128d565b5f8481526009602090815260408083206001600160a01b0387168085526004909101835292819020600301805460ff191660011790555142815286917f88356b104f5ba3e9281d371b21296e4e0390dda6f4bcc4bfc219f6d67cc8ae509101611aa0565b5f8181526007602052604090205481906001600160a01b0316806136585760405162461bcd60e51b815260040161128d9061545d565b6001600160a01b0381165f9081526006602052604090206003015460ff166136925760405162461bcd60e51b815260040161128d906156b8565b5f8381526007602052604090205483906001600160a01b03163381146136ca5760405162461bcd60e51b815260040161128d906156ef565b5f34116136e95760405162461bcd60e51b815260040161128d90615587565b335f908152600660209081526040808320838052600201909152812080544292349291613717908490615657565b925050819055503460055f82825461372f9190615657565b9091555050335f908152600860205260408120600581015490910361375c57346004820155600581018290555b34815f015f82825461376e9190615657565b9091555050600281018054905f613784836156a0565b9091555050600381018290556137a0335f346001808c88614dee565b6040805134815260016020820152908101889052606081018390525f9033905f516020615a4f5f395f51905f529060800160405180910390a350505050505050565b5f8381526007602052604090205483906001600160a01b0316806138185760405162461bcd60e51b815260040161128d9061545d565b6001600160a01b0381165f9081526006602052604090206003015460ff166138525760405162461bcd60e51b815260040161128d906156b8565b5f8581526007602052604090205485906001600160a01b031633811461388a5760405162461bcd60e51b815260040161128d906156ef565b6001600160a01b0386166138f15760405162461bcd60e51b815260206004820152602860248201527f55736520776974686472617745544846726f6d506572736f6e616c5661756c74604482015267040ccdee4408aa8960c31b606482015260840161128d565b5f85116139105760405162461bcd60e51b815260040161128d90615587565b335f9081526006602090815260408083206001600160a01b038a1684526002019091529020548511156139555760405162461bcd60e51b815260040161128d906155be565b335f9081526006602090815260408083206001600160a01b038a16845260020190915281208054429288929161398c908490615600565b9091555050335f908152600860205260408120600181018054919289926139b4908490615657565b9091555050600281018054905f6139ca836156a0565b9091555050600381018290556139e63389895f60018e88614dee565b60405163a9059cbb60e01b81523360048201526024810188905288906001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015613a32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a56919061563c565b613a725760405162461bcd60e51b815260040161128d90615613565b60408051898152600160208201529081018b9052606081018490526001600160a01b038a169033905f516020615a2f5f395f51905f52906080016122f7565b5f8281526007602052604090205482906001600160a01b031680613ae75760405162461bcd60e51b815260040161128d9061545d565b6001600160a01b0381165f9081526006602052604090206003015460ff16613b215760405162461bcd60e51b815260040161128d906156b8565b5f8481526007602052604090205484906001600160a01b0316338114613b595760405162461bcd60e51b815260040161128d906156ef565b5f8511613b785760405162461bcd60e51b815260040161128d90615587565b335f908152600660209081526040808320838052600201909152902054851115613bb45760405162461bcd60e51b815260040161128d906155be565b335f908152600660209081526040808320838052600201909152812080544292889291613be2908490615600565b925050819055508560055f828254613bfa9190615600565b9091555050335f90815260086020526040812060018101805491928992613c22908490615657565b9091555050600281018054905f613c38836156a0565b909155505060038101829055613c54335f898160018d88614dee565b6040515f90339089908381818185875af1925050503d805f8114613c93576040519150601f19603f3d011682016040523d82523d5f602084013e613c98565b606091505b5050905080613cb95760405162461bcd60e51b815260040161128d90615613565b60408051898152600160208201529081018a9052606081018490525f9033905f516020615a2f5f395f51905f529060800160405180910390a3505050505050505050565b5f8181526009602081905260409091200154819060ff16613d305760405162461bcd60e51b815260040161128d906154a7565b5f8281526009602090815260408083203384526004019091529020600301548290610100900460ff16613d755760405162461bcd60e51b815260040161128d90615983565b5f3411613d945760405162461bcd60e51b815260040161128d90615587565b5f8381526009602090815260408083203384526004810190925282206003820154429390613dc3903490615657565b905081600101545f03613dfa5734600183018190558190613de69061271061566a565b613df09190615681565b6002830155613e32565b5f348360010154613e0b9190615657565b60018401819055905081613e218261271061566a565b613e2b9190615681565b6002840155505b600582018490555f80805260088401602052604081208054349290613e58908490615657565b909155505060038301819055600580543491905f90613e78908490615657565b90915550505f878152600a6020908152604080832033845290915281206005810154909103613eaf57346004820155600581018590555b34815f015f828254613ec19190615657565b9091555050600281018054905f613ed7836156a0565b909155505060038101859055613ef3335f346001828d8b614dee565b613efc88615017565b604080513481525f602082018190529181018a90526060810187905233905f516020615a4f5f395f51905f52906080015b60405180910390a35050505050505050565b5f8181526009602081905260409091200154819060ff16613f725760405162461bcd60e51b815260040161128d906154a7565b5f828152600960209081526040808320338452600501909152902054600160a01b900460ff161580613ff457505f828152600960209081526040808320338452600501909152902054600160a81b900460ff168015613ff457505f828152600960209081526040808320338452600501909152902054600160b01b900460ff16155b6140525760405162461bcd60e51b815260206004820152602960248201527f4a6f696e207265717565737420616c7265616479207375626d6974746564206f604482015268722070656e64696e6760b81b606482015260840161128d565b5f8281526009602090815260408083203380855260059091019092528220805460ff60a81b1960ff60a01b199093166001600160a81b031990911617600160a01b179190911680825542600183018190556002830193909355600160a81b900460ff16156140eb575f8481526009602090815260408220600701805460018101825590835291200180546001600160a01b031916331790555b5f8481526009602090815260408083206007018054600181018255908452919092200180546001600160a01b03191633908117909155905185907f7ba9f474c19d79b133d0006aa8a9041f1e2865b3c8604964f3787663de19590d90611aa09086815260200190565b5f8281526009602081905260409091200154829060ff166141875760405162461bcd60e51b815260040161128d906154a7565b5f8381526009602090815260408083203384526004019091529020600301548390610100900460ff166141cc5760405162461bcd60e51b815260040161128d90615983565b5f83116141eb5760405162461bcd60e51b815260040161128d90615587565b5f84815260096020908152604080832033845260048101909252909120600181015461424e5760405162461bcd60e51b8152602060048201526012602482015271139bc81a5b9a5d1a585b0819195c1bdcda5d60721b604482015260640161128d565b60028101545f808052600884016020526040812054909161271091614273919061566a565b61427d9190615681565b90508086111561429f5760405162461bcd60e51b815260040161128d906159cb565b600182015442905f9083906142b4908a61566a565b6142be9190615681565b905080846001015f8282546142d39190615600565b90915550505f808052600886016020526040812080548a92906142f7908490615600565b9250508190555087856003015f8282546143119190615600565b925050819055508760055f8282546143299190615600565b90915550505f898152600a60209081526040808320338452909152812060018101805491928b9261435b908490615657565b9091555050600281018054905f614371836156a0565b90915550506003810183905561438c335f8b81808f89614dee565b6143958a615017565b6040515f9033908b908381818185875af1925050503d805f81146143d4576040519150601f19603f3d011682016040523d82523d5f602084013e6143d9565b606091505b50509050806143fa5760405162461bcd60e51b815260040161128d90615613565b604080518b81525f602082018190529181018d90526060810186905233905f516020615a2f5f395f51905f5290608001612d04565b6001600160a01b0381165f908152600b602090815260409182902080548351818402810184019094528084526060939283018282801561124d57602002820191905f5260205f209081548152602001906001019080831161159c5750505050509050919050565b5f8381526009602081905260408220015460ff166144c65760405162461bcd60e51b815260040161128d906154a7565b5f8481526009602090815260408083206001600160a01b0387168452600481019092529091206003810154610100900460ff16158061450757506002810154155b15611b13575f92505050611b4e565b5f8381526009602081905260409091200154839060ff166145495760405162461bcd60e51b815260040161128d906154a7565b5f8481526009602090815260408083203384526004019091529020600301548490610100900460ff1661458e5760405162461bcd60e51b815260040161128d90615983565b6001600160a01b0384166145f35760405162461bcd60e51b815260206004820152602660248201527f557365206465706f736974455448546f436f6d6d756e6974795661756c7420666044820152650dee4408aa8960d31b606482015260840161128d565b5f83116146125760405162461bcd60e51b815260040161128d90615587565b6040516323b872dd60e01b815233600482015230602482015260448101849052429085906001600160a01b038216906323b872dd906064016020604051808303815f875af1158015614666573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061468a919061563c565b6146a65760405162461bcd60e51b815260040161128d90615613565b5f8781526009602090815260408083206001600160a01b038a168452600801909152812080548792906146da908490615657565b90915550505f878152600a60209081526040808320338452909152812060058101549091036147125760048101869055600581018390555b85815f015f8282546147249190615657565b9091555050600281018054905f61473a836156a0565b90915550506003810183905561475633888860015f8d89614dee565b604080518781525f6020820152908101899052606081018490526001600160a01b0388169033905f516020615a4f5f395f51905f5290608001613f2d565b5f828152600960208190526040822001548190819060ff166147c85760405162461bcd60e51b815260040161128d906154a7565b5f8581526009602090815260408083206001600160a01b0388168452600401909152902060030154610100900460ff166148145760405162461bcd60e51b815260040161128d9061578c565b5f8581526009602090815260408083206001600160a01b0388168085526004820184528285208a8652600a85528386209186529352908320600283015491939091156148895760028301545f8080526008860160205260409020546127109161487c9161566a565b6148869190615681565b90505b600482015460059092015490999198509650945050505050565b335f9081526001602052604081205460ff166148d15760405162461bcd60e51b815260040161128d9061552a565b5f8481526007602052604090205484906001600160a01b0316806149075760405162461bcd60e51b815260040161128d9061545d565b6001600160a01b0381165f9081526006602052604090206003015460ff166149415760405162461bcd60e51b815260040161128d906156b8565b5f84116149605760405162461bcd60e51b815260040161128d90615587565b5f868152600760209081526040808320546001600160a01b0390811680855260068452828520918a1685526002909101909252909120548511156149b65760405162461bcd60e51b815260040161128d906155be565b6001600160a01b038082165f908152600660209081526040808320938a1683526002909301905290812080548792906149f0908490615600565b90915550506001600160a01b038616614a6e576040515f90339087908381818185875af1925050503d805f8114614a42576040519150601f19603f3d011682016040523d82523d5f602084013e614a47565b606091505b5050905080614a685760405162461bcd60e51b815260040161128d90615613565b50614afc565b60405163a9059cbb60e01b81523360048201526024810186905286906001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015614aba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ade919061563c565b614afa5760405162461bcd60e51b815260040161128d90615613565b505b5060019695505050505050565b6001600160a01b0381165f90815260066020526040812060030154819060ff16614b455760405162461bcd60e51b815260040161128d906156b8565b50506001600160a01b03165f90815260086020526040902060048101546005909101549091565b5f818152600760205260408120546001600160a01b031680614ba05760405162461bcd60e51b815260040161128d9061545d565b6001600160a01b03165f9081526006602052604090206004015492915050565b5f546001600160a01b03163314614be95760405162461bcd60e51b815260040161128d90615736565b6001600160a01b038116614c315760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161128d565b6001600160a01b0381165f9081526001602052604090205460ff1615614c8e5760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e48185d5d1a1bdc9a5e995960721b604482015260640161128d565b6001600160a01b0381165f9081526001602081905260408220805460ff191690911790556002805491614cc0836156a0565b9190505550806001600160a01b03167fffddff3654ace1d729edd5a2b93aed4a8447b312fabc7bfa6893e814b15893f4426040516123f991815260200190565b6001600160a01b0381165f908152600d602090815260409182902080548351818402810184019094528084526060939283018282801561124d57602002820191905f5260205f209081548152602001906001019080831161159c5750505050509050919050565b5f8281526009602081905260408220015460ff16614d8657505f6112c2565b5f8381526009602090815260408083206001600160a01b0386168452600401909152902060030154610100900460ff16614dc157505f6112c2565b505f918252600a602090815260408084206001600160a01b03939093168452919052902060050154151590565b600c80546040805160e0810182526001600160a01b03808c168083528b821660208085018281528587018e81528d1515606088019081528d15156080890190815260a089018e815260c08a018e81526001808e018f555f9e8f528b5160068f027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c781018054928e166001600160a01b031993841617905597517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c88901805491909d16911617909a5593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c986015591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca85018054925115156101000261ff00199215159290921661ffff1990931692909217179055517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8cb830155517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8cc90910155828852600d81528588208054808601825590895281892001879055898852600e815285882080549485018155885290962090910184905591519293909290919084907fea3aba4a1f3aaf8a9fa9b08b35e9dd747412d187052d839c9050eb47b413c54990615004908c908c908c908c908c90948552921515602085015290151560408401526060830152608082015260a00190565b60405180910390a4505050505050505050565b5f8181526009602052604081206003810154909103615034575050565b5f5b60068201548110156150bb575f826006018281548110615058576150586154de565b5f9182526020808320909101546001600160a01b0316808352600486019091526040909120600181015491925090156150b157600384015460018201546150a19061271061566a565b6150ab9190615681565b60028201555b5050600101615036565b505050565b80356001600160a01b03811681146150d6575f5ffd5b919050565b5f5f604083850312156150ec575f5ffd5b823591506150fc602084016150c0565b90509250929050565b5f60208284031215615115575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561515c5783516001600160a01b0316835260209384019390920191600101615135565b509095945050505050565b5f60208284031215615177575f5ffd5b611b4e826150c0565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c0602082018190525f906151d190830188615180565b6040830196909652506060810193909352901515608083015260a09091015292915050565b602080825282518282018190525f918401906040840190835b8181101561515c57835183526020938401939092019160010161520f565b5f5f5f6060848603121561523f575f5ffd5b8335925061524f602085016150c0565b929592945050506040919091013590565b5f5f60408385031215615271575f5ffd5b61527a836150c0565b946020939093013593505050565b5f5f5f6060848603121561529a575f5ffd5b833592506152aa602085016150c0565b91506152b8604085016150c0565b90509250925092565b80151581146152ce575f5ffd5b50565b5f5f5f606084860312156152e3575f5ffd5b833592506152f3602085016150c0565b91506040840135615303816152c1565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215615332575f5ffd5b813567ffffffffffffffff811115615348575f5ffd5b8201601f81018413615358575f5ffd5b803567ffffffffffffffff8111156153725761537261530e565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156153a1576153a161530e565b6040528181528282016020018610156153b8575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f604083850312156153e6575f5ffd5b50508035926020909101359150565b602081525f611b4e6020830184615180565b6001600160a01b0389168152610100602082018190525f9061542b9083018a615180565b9715156040830152506060810195909552608085019390935260a084019190915260c083015260e09091015292915050565b6020808252602a908201527f506572736f6e616c207661756c742077697468207468697320494420646f6573604082015269081b9bdd08195e1a5cdd60b21b606082015260800190565b6020808252601e908201527f436f6d6d756e697479207661756c7420646f6573206e6f742065786973740000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061550657607f821691505b60208210810361552457634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526037908201527f4f6e6c7920617574686f72697a65642074726164696e6720636f6e747261637460408201527f2063616e2063616c6c20746869732066756e6374696f6e000000000000000000606082015260800190565b6020808252601d908201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604082015260600190565b602080825260149082015273496e73756666696369656e742062616c616e636560601b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156112c2576112c26155ec565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b5f6020828403121561564c575f5ffd5b8151611b4e816152c1565b808201808211156112c2576112c26155ec565b80820281158282048414176112c2576112c26155ec565b5f8261569b57634e487b7160e01b5f52601260045260245ffd5b500490565b5f600182016156b1576156b16155ec565b5060010190565b6020808252601d908201527f506572736f6e616c207661756c7420646f6573206e6f74206578697374000000604082015260600190565b60208082526027908201527f4f6e6c79207661756c74206f776e65722063616e2063616c6c207468697320666040820152663ab731ba34b7b760c91b606082015260800190565b60208082526021908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b5f81615785576157856155ec565b505f190190565b60208082526023908201527f4d656d62657220646f6573206e6f7420657869737420696e20746869732076616040820152621d5b1d60ea1b606082015260800190565b601f8211156150bb57805f5260205f20601f840160051c810160208510156157f45750805b601f840160051c820191505b81811015615813575f8155600101615800565b5050505050565b815167ffffffffffffffff8111156158345761583461530e565b6158488161584284546154f2565b846157cf565b6020601f82116001811461587a575f83156158635750848201515b5f19600385901b1c1916600184901b178455615813565b5f84815260208120601f198516915b828110156158a95787850151825560209485019460019092019101615889565b50848210156158c657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f6158e76040830185615180565b90508260208301529392505050565b60208082526028908201527f4f6e6c79207661756c74206c65616465722063616e2063616c6c207468697320604082015267333ab731ba34b7b760c11b606082015260800190565b60208082526025908201527f41646472657373206973206e6f742061206d656d626572206f662074686973206040820152641d985d5b1d60da1b606082015260800190565b60208082526028908201527f4f6e6c79207661756c74206d656d6265722063616e2063616c6c207468697320604082015267333ab731ba34b7b760c11b606082015260800190565b60208082526023908201527f416d6f756e74206578636565647320776974686472617761626c652062616c616040820152626e636560e81b60608201526080019056fef6ff2ad7fc16bda2a7d32462729431bce3ebe9b75cc7c9b35a0adfbf7e7bb9e6350c76532a463f66828093cf609383fdedccc1157b2ea039280cd6dfaa15e084b607080a4b7f621a0602e610d8ce0a4f846aa75d12ec641e1f25a3b181ab7967a2646970667358221220c95e5e13bab605b03a6fd0b1aa8da69973299624a2f948b622c3b0920ac361ac64736f6c634300081e0033