docs: def find_card_bundles(provider: Provider, deck: Deck) -> Optional[Iterator]:
      '''each blockchain transaction can contain multiple cards,
         wrapped in bundles. This method finds and returns those bundles.'''
  
      if isinstance(provider, RpcNode):
          if deck.id is None:
              raise Exception("deck.id required to listtransactions")
  
          p2th_account = provider.getaccount(deck.p2th_address)
          batch_data = [('getrawtransaction', [i["txid"], 1]) for
                        i in provider.listtransactions(p2th_account)]
          result = provider.batch(batch_data)
  
          if result is not None:
              raw_txns = [i['result'] for i in result if result]
  
          else:
              raise EmptyP2THDirectory({'error': 'No cards found on this deck.'})
  
      else:
          if deck.p2th_address is None:
              raise Exception("deck.p2th_address required to listtransactions")
  
          try:
              raw_txns = (provider.getrawtransaction(i, 1) for i in
                          provider.listtransactions(deck.p2th_address))
          except TypeError:
              raise EmptyP2THDirectory({'error': 'No cards found on this deck.'})
  
      return (card_bundler(provider, deck, i) for i in raw_txns)