<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def withdraw_custom_token(self, *args, **kwargs):
 """ Withdraw custom token to user wallet Accepts: - address [hex string] (withdrawal address in hex form) - amount [int] withdrawal amount multiplied by decimals_k (10**8) - blockchain [string] token's blockchain (QTUMTEST, ETH) - contract_address [hex string] token contract address Returns dictionary with following fields: - txid [string] """

        try:
            super().reload_connections()
        except Exception as e:
            return WithdrawValidator.error_500(str(e))

        address = kwargs.get("address")
        amount = kwargs.get("amount")
        blockchain = kwargs.get("blockchain")
        contract_address = kwargs.get("contract_address")

        await self.db.withdraw_custom_token_requests.insert_one({
            'address': address,
            'amount': amount,
            'blockchain': blockchain,
            'contract_address': contract_address,
            'timestamp': datetime.datetime.utcnow()
        })

        connection = self.connections[blockchain]

        if blockchain in ['QTUMTEST', 'QTUM']:
            address = Bip32Addresses.address_to_hex(address)
            handler = Qrc20.from_connection(connection, contract_address, erc20_abi)
            handler.set_send_params({
                'gasLimit': transfer_settings[blockchain]['gasLimit'],
                'gasPrice': transfer_settings[blockchain]['gasPrice'],
                'sender': hot_wallets[blockchain]
            })
            try:
                txid = handler.transfer(address, amount)['txid']
            except Exception as e:
                return WithdrawValidator.error_500(str(e))

        elif blockchain in ['ETH', 'ETHRINKEBY', 'ETHROPSTEN']:
            address = Web3.toChecksumAddress(address)
            contract_address = Web3.toChecksumAddress(contract_address)
            handler = Erc20.from_connection(connection, contract_address, erc20_abi)
            handler.set_send_params({
                'gasLimit': transfer_settings[blockchain]['gasLimit'],
                'gasPrice': transfer_settings[blockchain]['gasPrice'],
                'sender': hot_wallets[blockchain]
            })
            try:
                txid = handler.transfer(address, amount)['txid']
            except Exception as e:
                return WithdrawValidator.error_500(str(e))
        else:
            return WithdrawValidator.error_403('Unsupported blockchain')

        return {'txid': txid}