+ my $vivify_xvmd = delete($smsg->{-vivify_xvmd}) // []; # exact matches
+ if ($xoids) { # fuzzy matches from externals in ale->xoids_for
+ delete $xoids->{$smsg->{blob}}; # added later
+ if (scalar keys %$xoids) {
+ my %docids = map { $_ => 1 } @$vivify_xvmd;
+ for my $oid (keys %$xoids) {
+ my @id = $oidx->blob_exists($oid);
+ @docids{@id} = @id;
+ }
+ @$vivify_xvmd = sort { $a <=> $b } keys(%docids);
+ }
+ }
+ if (@$vivify_xvmd) {
+ $xoids //= {};
+ $xoids->{$smsg->{blob}} = 1;
+ for my $docid (@$vivify_xvmd) {
+ my $cur = $oidx->get_art($docid);
+ my $idx = $eidx->idx_shard($docid);
+ if (!$cur || $cur->{bytes} == 0) { # really vivifying
+ $smsg->{num} = $docid;
+ $oidx->add_overview($eml, $smsg);
+ $smsg->{-merge_vmd} = 1;
+ $idx->index_eml($eml, $smsg);
+ } else { # lse fuzzy hit off ale
+ $idx->ipc_do('add_eidx_info', $docid, '.', $eml);
+ }
+ for my $oid (keys %$xoids) {
+ $oidx->add_xref3($docid, -1, $oid, '.');
+ }
+ $idx->ipc_do('add_vmd', $docid, $vmd) if $vmd;
+ }
+ $vivify_xvmd;
+ } elsif (my @docids = _docids_for($self, $eml)) {
+ # fuzzy match from within lei/store