<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start_rekey(self, secret_shares=5, secret_threshold=3, pgp_keys=None, backup=False, require_verification=False, recovery_key=False):
 """Initializes a new rekey attempt. Only a single recovery key rekeyattempt can take place at a time, and changing the parameters of a rekey requires canceling and starting a new rekey, which will also provide a new nonce. Supported methods: PUT: /sys/rekey/init. Produces: 204 (empty body) PUT: /sys/rekey-recovery-key/init. Produces: 204 (empty body) :param secret_shares: Specifies the number of shares to split the master key into. :type secret_shares: int :param secret_threshold: Specifies the number of shares required to reconstruct the master key. This must be less than or equal to secret_shares. :type secret_threshold: int :param pgp_keys: Specifies an array of PGP public keys used to encrypt the output unseal keys. Ordering is preserved. The keys must be base64-encoded from their original binary representation. The size of this array must be the same as secret_shares. :type pgp_keys: list :param backup: Specifies if using PGP-encrypted keys, whether Vault should also store a plaintext backup of the PGP-encrypted keys at core/unseal-keys-backup in the physical storage backend. These can then be retrieved and removed via the sys/rekey/backup endpoint. :type backup: bool :param require_verification: This turns on verification functionality. When verification is turned on, after successful authorization with the current unseal keys, the new unseal keys are returned but the master key is not actually rotated. The new keys must be provided to authorize the actual rotation of the master key. This ensures that the new keys have been successfully saved and protects against a risk of the keys being lost after rotation but before they can be persisted. This can be used with without pgp_keys, and when used with it, it allows ensuring that the returned keys can be successfully decrypted before committing to the new shares, which the backup functionality does not provide. :param recovery_key: If true, send requests to "rekey-recovery-key" instead of "rekey" api path. :type recovery_key: bool :type require_verification: bool :return: The JSON dict of the response. :rtype: dict | request.Response """

        params = {
            'secret_shares': secret_shares,
            'secret_threshold': secret_threshold,
            'require_verification': require_verification,
        }

        if pgp_keys:
            if len(pgp_keys) != secret_shares:
                raise ParamValidationError('length of pgp_keys argument must equal secret shares value')

            params['pgp_keys'] = pgp_keys
            params['backup'] = backup

        api_path = '/v1/sys/rekey/init'
        if recovery_key:
            api_path = '/v1/sys/rekey-recovery-key/init'
        response = self._adapter.put(
            url=api_path,
            json=params,
        )

        return response.json()