beneficiaryTapTimeHelpersEtherTokenConstantIsContractAragonApp📚SafeERC20 forERC20📚SafeMath foruint256bytes32UPDATE_CONTROLLER_ROLEbytes32UPDATE_RESERVE_ROLEbytes32UPDATE_BENEFICIARY_ROLEbytes32UPDATE_MAXIMUM_TAP_RATE_INCREASE_PCT_ROLEbytes32UPDATE_MAXIMUM_TAP_FLOOR_DECREASE_PCT_ROLEbytes32ADD_TAPPED_TOKEN_ROLEbytes32REMOVE_TAPPED_TOKEN_ROLEbytes32UPDATE_TAPPED_TOKEN_ROLEbytes32RESET_TAPPED_TOKEN_ROLEbytes32WITHDRAW_ROLEuint256PCT_BASEstringERROR_CONTRACT_IS_EOAstringERROR_INVALID_BENEFICIARYstringERROR_INVALID_BATCH_BLOCKSstringERROR_INVALID_FLOOR_DECREASE_PCTstringERROR_INVALID_TOKENstringERROR_INVALID_TAP_RATEstringERROR_INVALID_TAP_UPDATEstringERROR_TOKEN_ALREADY_TAPPEDstringERROR_TOKEN_NOT_TAPPEDstringERROR_WITHDRAWAL_AMOUNT_ZEROIAragonFundraisingControllercontrollerVaultreserveaddressbeneficiaryuint256batchBlocksuint256maximumTapRateIncreasePctuint256maximumTapFloorDecreasePctaddress=>uint256ratesaddress=>uint256floorsaddress=>uint256lastWithdrawalsaddress=>uint256lastTapUpdatesinitialize()updateController()updateReserve()updateBeneficiary()updateMaximumTapRateIncreasePct()updateMaximumTapFloorDecreasePct()addTappedToken()removeTappedToken()updateTappedToken()resetTappedToken()withdraw()🔍getMaximumWithdrawal()🔍_currentBatchId()🔍_maximumWithdrawal()🔍_beneficiaryIsValid()🔍_maximumTapFloorDecreasePctIsValid()🔍_tokenIsContractOrETH()🔍_tokenIsTapped()🔍_tapRateIsValid()🔍_tapUpdateIsValid()🔍_tapRateUpdateIsValid()🔍_tapFloorUpdateIsValid()_updateController()_updateReserve()_updateBeneficiary()_updateMaximumTapRateIncreasePct()_updateMaximumTapFloorDecreasePct()_addTappedToken()_removeTappedToken()_updateTappedToken()_resetTappedToken()_withdraw()TimeHelpersEtherTokenConstantIsContractAragonAppSafeERC20SafeMathfor ERC20for uint256