The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
CHANGELOG 073
CHANGES 610
MANIFEST 24
META.json 050
META.yml 2024
Makefile.PL 1116
lib/Data/Compare.pm 159
t/FIXME-large-structures.t 0421
t/saritha-nalagandla-bug.t 11
9 files changed (This is a version diff) 110598
@@ -0,0 +1,73 @@
+1.24    2014-04-05  DCANTRELL  Bump the required JSON.pm version for
+                                 tests - something's a bit broken around
+                                 about v 2.53
+
+1.23    2013-09-26  DCANTRELL  Add David Muir Sharnoff's tests for
+                                 really big data structures (but not yet
+                                 working);
+                               Check for taint-mode less insanely, thanks
+                                 to Ilmari;
+                               Don't delay loading File::Find::Rule (see
+                                 RT 87554)
+
+1.22    2010-02-12  DCANTRELL  Previous release was in error.  Instead, fix
+                                 the problem, circular structures now
+                                 compare equal, no matter what the starting
+                                 point (see RT 52836)
+
+1.2102  2010-02-01  DCANTRELL  Add doco about structural vs data equivalence
+                                 (see RT 52836)
+
+1.2101  2009-05-05  DCANTRELL  Add full licence text; -I fix in taint tests
+                                 to cope with paths with a space in 'em
+                                 (thanks to MATISSE, see RT 45676)
+
+1.21    2008-08-21  DCANTRELL  Extra tests added in 1.20 now skip with
+                                 really old JSON
+
+1.20    2008-08-21  DCANTRELL  Added test for bug reported by Saritha
+                                 Nalagandla (no bug found, but you can never
+                                 have too many tests!)
+                               Fixed bug in PERL5LIB splitting in taint test
+                                 (thanks to ADAMK, see RT 38319)
+
+1.19    2008-05-12  DCANTRELL  Can now compare structures with repeats in 'em
+                                 like [\$z, \$z] (bug reported by Todd Hepler)
+                               Minor code tidying
+
+1.18    2008-01-15  DCANTRELL  Got rid of prototypes;
+                               File::Find::Rule now only loads when needed;
+                               Plugins can be ignored with a null import() list;
+                               Explicitly documented the auto-export;
+                               Got rid of diagnostics pragma
+
+0.17    2007-08-07  DCANTRELL  Added POD test
+                               Fixed buggy POD :-)
+                               Fixed problem with taint testing when PERL5LIB
+                                 is set (thanks to Andreas Koenig for finding
+                                 the bug)
+                               Minor doco fiddling
+0.16    2007-02-27  DCANTRELL  Taint test and detection made less stupid
+0.15    2007-02-25  DCANTRELL  Skip taint tests on perl 5.6 and earlier
+0.14    2006-11-01  DCANTRELL  Fixed deeply nested objects (see rt.cpan #6966)
+0.13    2004-11-09  DCANTRELL  Oops, left in some debugging output
+0.12    2004-11-09  DCANTRELL  Fixed recursion detection bug - wasn't decrementing
+                               counter properly!  (thanks to Jenda for the bug
+                               report)
+0.11    2004-06-02  DCANTRELL  Now taint-safe - in taint mode there's no plugins
+                               (thanks Gabor Szabo for reporting the bug)
+0.10    2004-03-13  DCANTRELL  Replaced recursion detection with Rusty Conover's
+                               much better implementation.
+0.09    2004-02-23  DCANTRELL  Added deep recursion detection.
+0.08    2004-01-20  DCANTRELL  Added options, and ignore_hash_keys
+0.07    2004-01-07  DCANTRELL  Bugfix to avoid loading same plugin more than
+                               once.  S::P plugin renamed so it would work with
+                               this bugfix.  Clean-up of code.  Fix minor doc-bug
+                               in lib/Data/Compare/Plugins.pod.
+0.06    2004-01-06  DCANTRELL  Added plugins, moved Scalar::Properties support
+                               into a plugin (plugins were Jim Cromie's idea)
+0.05    2003-12-30  DCANTRELL  Applied mike@very.puzzling.org's patch for
+                               comparing compiled regexps
+0.04    2003-12-24  DCANTRELL  Applied aef's patch to correctly compare refs to
+                               refs to stuff
+0.03    2003-12-23  DCANTRELL  Added special-case handling for Scalar::Properties
@@ -1,61 +0,0 @@
-1.22    2010-02-12  DCANTRELL  Previous release was in error.  Instead, fix
-                                 the problem, circular structures now
-                                 compare equal, no matter what the starting
-                                 point (see RT 52836)
-
-1.2102  2010-02-01  DCANTRELL  Add doco about structural vs data equivalence
-                                 (see RT 52836)
-
-1.2101  2009-05-05  DCANTRELL  Add full licence text; -I fix in taint tests
-                                 to cope with paths with a space in 'em
-                                 (thanks to MATISSE, see RT 45676)
-
-1.21    2008-08-21  DCANTRELL  Extra tests added in 1.20 now skip with
-                                 really old JSON
-
-1.20    2008-08-21  DCANTRELL  Added test for bug reported by Saritha
-                                 Nalagandla (no bug found, but you can never
-                                 have too many tests!)
-                               Fixed bug in PERL5LIB splitting in taint test
-                                 (thanks to ADAMK, see RT 38319)
-
-1.19    2008-05-12  DCANTRELL  Can now compare structures with repeats in 'em
-                                 like [\$z, \$z] (bug reported by Todd Hepler)
-                               Minor code tidying
-
-1.18    2008-01-15  DCANTRELL  Got rid of prototypes;
-                               File::Find::Rule now only loads when needed;
-                               Plugins can be ignored with a null import() list;
-                               Explicitly documented the auto-export;
-                               Got rid of diagnostics pragma
-
-0.17    2007-08-07  DCANTRELL  Added POD test
-                               Fixed buggy POD :-)
-                               Fixed problem with taint testing when PERL5LIB
-                                 is set (thanks to Andreas Koenig for finding
-                                 the bug)
-                               Minor doco fiddling
-0.16    2007-02-27  DCANTRELL  Taint test and detection made less stupid
-0.15    2007-02-25  DCANTRELL  Skip taint tests on perl 5.6 and earlier
-0.14    2006-11-01  DCANTRELL  Fixed deeply nested objects (see rt.cpan #6966)
-0.13    2004-11-09  DCANTRELL  Oops, left in some debugging output
-0.12    2004-11-09  DCANTRELL  Fixed recursion detection bug - wasn't decrementing
-                               counter properly!  (thanks to Jenda for the bug
-                               report)
-0.11    2004-06-02  DCANTRELL  Now taint-safe - in taint mode there's no plugins
-                               (thanks Gabor Szabo for reporting the bug)
-0.10    2004-03-13  DCANTRELL  Replaced recursion detection with Rusty Conover's
-                               much better implementation.
-0.09    2004-02-23  DCANTRELL  Added deep recursion detection.
-0.08    2004-01-20  DCANTRELL  Added options, and ignore_hash_keys
-0.07    2004-01-07  DCANTRELL  Bugfix to avoid loading same plugin more than
-                               once.  S::P plugin renamed so it would work with
-                               this bugfix.  Clean-up of code.  Fix minor doc-bug
-                               in lib/Data/Compare/Plugins.pod.
-0.06    2004-01-06  DCANTRELL  Added plugins, moved Scalar::Properties support
-                               into a plugin (plugins were Jim Cromie's idea)
-0.05    2003-12-30  DCANTRELL  Applied mike@very.puzzling.org's patch for
-                               comparing compiled regexps
-0.04    2003-12-24  DCANTRELL  Applied aef's patch to correctly compare refs to
-                               refs to stuff
-0.03    2003-12-23  DCANTRELL  Added special-case handling for Scalar::Properties
@@ -1,6 +1,6 @@
 MANIFEST
 README
-CHANGES
+CHANGELOG
 MAINTAINERS-NOTE
 Makefile.PL
 TODO
@@ -27,4 +27,6 @@ t/saritha-nalagandla-bug/test082_updateevent_multipleinvitees.out
 ARTISTIC.txt
 GPL2.txt
 t/coverage.sh
-META.yml                                 Module meta-data (added by MakeMaker)
+t/FIXME-large-structures.t
+META.yml                                 Module YAML meta-data (added by MakeMaker)
+META.json                                Module JSON meta-data (added by MakeMaker)
@@ -0,0 +1,50 @@
+{
+   "abstract" : "unknown",
+   "author" : [
+      "unknown"
+   ],
+   "dynamic_config" : 1,
+   "generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.120921",
+   "license" : [
+      "unknown"
+   ],
+   "meta-spec" : {
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+      "version" : "2"
+   },
+   "name" : "Data-Compare",
+   "no_index" : {
+      "directory" : [
+         "t",
+         "inc"
+      ]
+   },
+   "prereqs" : {
+      "build" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "configure" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "runtime" : {
+         "requires" : {
+            "File::Find::Rule" : "0.1",
+            "Scalar::Util" : "0"
+         }
+      }
+   },
+   "release_status" : "stable",
+   "resources" : {
+      "bugtracker" : {
+         "web" : "https://github.com/DrHyde/perl-modules-Data-Compare/issues/new"
+      },
+      "repository" : {
+         "url" : "https://github.com/DrHyde/perl-modules-Data-Compare"
+      }
+   },
+   "version" : "1.24"
+}
@@ -1,22 +1,26 @@
---- #YAML:1.0
-name:               Data-Compare
-version:            1.22
-abstract:           ~
-author:  []
-license:            unknown
-distribution_type:  module
-configure_requires:
-    ExtUtils::MakeMaker:  0
+---
+abstract: unknown
+author:
+  - unknown
 build_requires:
-    ExtUtils::MakeMaker:  0
-requires:
-    File::Find::Rule:  0.1
-    Scalar::Util:      0
-no_index:
-    directory:
-        - t
-        - inc
-generated_by:       ExtUtils::MakeMaker version 6.50
+  ExtUtils::MakeMaker: 0
+configure_requires:
+  ExtUtils::MakeMaker: 0
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.120921'
+license: unknown
 meta-spec:
-    url:      http://module-build.sourceforge.net/META-spec-v1.4.html
-    version:  1.4
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: 1.4
+name: Data-Compare
+no_index:
+  directory:
+    - t
+    - inc
+requires:
+  File::Find::Rule: 0.1
+  Scalar::Util: 0
+resources:
+  bugtracker: https://github.com/DrHyde/perl-modules-Data-Compare/issues/new
+  repository: https://github.com/DrHyde/perl-modules-Data-Compare
+version: 1.24
@@ -1,13 +1,18 @@
-# -*- mode: Perl -*-
-
 use ExtUtils::MakeMaker qw(WriteMakefile);
 
-WriteMakefile(NAME         => "Data::Compare",
-              VERSION_FROM => "lib/Data/Compare.pm",
-	      PREREQ_PM    => {
-	          File::Find::Rule => 0.10,
-		  Scalar::Util     => 0
-              },
-              dist         => { COMPRESS => "gzip", SUFFIX => "gz" },
-	      clean        => { FILES => '*.bak *.old mibs/*.dump lib/*/*~' },
-              );
+WriteMakefile(
+  NAME         => 'Data::Compare',
+  META_MERGE => {
+    license => 'other',
+    resources => {
+      repository => 'https://github.com/DrHyde/perl-modules-Data-Compare',
+      bugtracker => 'https://github.com/DrHyde/perl-modules-Data-Compare/issues/new'
+    },
+  },
+  VERSION_FROM => "lib/Data/Compare.pm",
+  PREREQ_PM    => {
+    File::Find::Rule => 0.10,
+    Scalar::Util     => 0
+  },
+  clean        => { FILES => '*.bak *.old mibs/*.dump lib/*/*~' },
+);
@@ -2,7 +2,7 @@
 # Author: Fabien Tassin <fta@sofaraway.org>
 # updated by David Cantrell <david@cantrell.org.uk>
 # Copyright 1999-2001 Fabien Tassin <fta@sofaraway.org>
-# portions Copyright 2003 - 2010 David Cantrell
+# portions Copyright 2003 - 2013 David Cantrell
 
 package Data::Compare;
 
@@ -12,11 +12,12 @@ use warnings;
 use vars qw(@ISA @EXPORT $VERSION $DEBUG %been_there);
 use Exporter;
 use Carp;
-use Scalar::Util;
+use Scalar::Util qw(tainted);
+use File::Find::Rule;
 
 @ISA     = qw(Exporter);
 @EXPORT  = qw(Compare);
-$VERSION = 1.22;
+$VERSION = 1.24;
 $DEBUG   = $ENV{PERL_DATA_COMPARE_DEBUG} || 0;
 
 my %handler;
@@ -24,15 +25,12 @@ my %handler;
 use Cwd;
 
 sub import {
-  if(eval { chdir(getcwd()) }) { # chdir(getcwd()) isn't taint-safe
-    register_plugins();
-  }
+  register_plugins() unless tainted getcwd();
   __PACKAGE__->export_to_level(1, @EXPORT);
 }
 
 # finds and registers plugins
 sub register_plugins {
-  eval 'use File::Find::Rule';
   foreach my $file (
     File::Find::Rule->file()->name('*.pm')->in(
       map { "$_/Data/Compare/Plugins" }
@@ -119,6 +117,7 @@ sub Compare {
     (ref($x) && exists($been_there{"$x-$xpos-$xparent"}) && $been_there{"$x-$xpos-$xparent"} > 1) ||
     (ref($y) && exists($been_there{"$y-$ypos-$yparent"}) && $been_there{"$y-$ypos-$yparent"} > 1)
   ) {
+    $opts->{recursion_detector}--;
     return 1; # we bail as soon as possible, so if we've *not* bailed and have got here, say we're OK and go to the next sub-structure
   } else {
     $been_there{"$x-$xpos-$xparent"}++ if(ref($x));
@@ -379,9 +378,9 @@ the empty list, and then call the register_plugins class method:
 
 or you could call it as a function if that floats your boat.
 
-=head1 CODE REPOSITORY
+=head1 SOURCE CODE REPOSITORY
 
-L<http://www.cantrell.org.uk/cgit/cgit.cgi/perlmodules/>
+L<git://github.com/DrHyde/perl-modules-Data-Compare.git>
 
 =head1 BUGS
 
@@ -389,11 +388,6 @@ Plugin support is not quite finished (see the TODO file for details) but
 is usable.  The missing bits are bells and whistles rather than core
 functionality.
 
-Plugins are unavailable if you can't change to the current directory.  This
-might happen if you started your process as a priveleged user and then
-dropped priveleges.  This is due to how we check for Taintedness.  If this
-affects you, please supply a portable patch.
-
 Please report any other bugs either by email to David Cantrell (see below
 for address) or using rt.cpan.org:
 
@@ -411,7 +405,7 @@ Copyright (c) 1999-2001 Fabien Tassin. All rights reserved.
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-Some parts copyright 2003 - 2010 David Cantrell.
+Some parts copyright 2003 - 2013 David Cantrell.
 
 Seeing that Fabien seems to have disappeared, David Cantrell has become
 a co-maintainer so he can apply needed patches.  The licence, of course,
@@ -0,0 +1,421 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+use Data::Compare;
+$SIG{ALRM} = sub { fail("timeout"); exit };
+alarm(5);
+
+TODO: {
+    local $TODO = "broken";
+    ok(0);
+    # ok(Data::Compare::Compare(_get_data()), "yay, didn't timeout");
+}
+
+sub _get_data {
+my $VAR1 = {
+'bodies' => bless( {
+'774e1dee53a6c80d99cca81f188abf91' => bless( {
+'body' => 'Get Lost!
+For the 2th time',
+'headers' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 2',
+'messages' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => bless( {
+'From' => 'Jonny 1',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 3',
+'headers' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 3',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '0a763e41c9c22e1a97fcef68e37d2564'
+}, 'Quarantine::Header' ),
+'340954c191bbbadfbd7ab37e62ac91c0' => {},
+'655c7a5d8f36c58632a92e9c318fa9b4' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 2',
+'messages' => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '655c7a5d8f36c58632a92e9c318fa9b4'
+}, 'Quarantine::Header' ),
+'7020baa09e5801d94724257ee8fba3bc' => bless( {
+'body' => bless( {
+'body' => 'Get Lost!
+For the 3th time',
+'headers' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {},
+'ddd55caf8ac04ed3e75224cd12847bac' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 3',
+'messages' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'ddd55caf8ac04ed3e75224cd12847bac'
+}, 'Quarantine::Header' )
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 3',
+'messages' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '7020baa09e5801d94724257ee8fba3bc'
+}, 'Quarantine::Header' ),
+'bbed5198630e5d982f474ddb946b5cb6' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 2',
+'headers' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 2',
+'messages' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'bbed5198630e5d982f474ddb946b5cb6'
+}, 'Quarantine::Header' ),
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::SMessages' )
+}, 'Quarantine::Sender' ),
+'uniq' => '340954c191bbbadfbd7ab37e62ac91c0'
+}, 'Quarantine::Header' ),
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'81a987f71ec224975ad33bcd09e9ebe4' => {},
+'e3973a2585798a8e85f3a9a6a6ece156' => {},
+'f5794e56fc5ecd3a92a3586da3b6392a' => {}
+}, 'Quarantine::Bodies' ),
+'buckets' => bless( {
+0 => bless( {
+'a' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+3 => bless( {
+4 => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+6 => bless( {
+5 => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+7 => bless( {
+0 => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'b' => bless( {
+'b' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'d' => bless( {
+'d' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' )
+}, 'Quarantine::Buckets' ),
+'headers' => bless( {}, 'Quarantine::Headers' ),
+'recipients' => bless( {
+'Billy 2' => {},
+'Billy 3' => {},
+'Fred 2' => {},
+'Fred 3' => {},
+'Sally 2' => {},
+'Sally 3' => {}
+}, 'Quarantine::Recipients' ),
+'senders' => bless( {
+'Jonny 1' => {}
+}, 'Quarantine::Senders' )
+};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'body'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0]{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'}{'headers'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0]{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'body'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0]{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'body'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0]{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0]{'messages'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'}{'headers'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0]{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR1->{'bodies'}{'81a987f71ec224975ad33bcd09e9ebe4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR1->{'bodies'}{'e3973a2585798a8e85f3a9a6a6ece156'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'};
+$VAR1->{'bodies'}{'f5794e56fc5ecd3a92a3586da3b6392a'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'};
+$VAR1->{'buckets'}{0}{'a'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR1->{'buckets'}{3}{4}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR1->{'buckets'}{6}{5}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR1->{'buckets'}{7}{0}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR1->{'buckets'}{'b'}{'b'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR1->{'buckets'}{'d'}{'d'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR1->{'recipients'}{'Billy 2'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Billy 3'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Fred 2'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Fred 3'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Sally 2'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Sally 3'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0];
+$VAR1->{'senders'}{'Jonny 1'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+
+
+my $VAR2 = {
+'bodies' => bless( {
+'774e1dee53a6c80d99cca81f188abf91' => bless( {
+'body' => 'Get Lost!
+For the 2th time',
+'headers' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 2',
+'messages' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => bless( {
+'From' => 'Jonny 1',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 3',
+'headers' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 3',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '0a763e41c9c22e1a97fcef68e37d2564'
+}, 'Quarantine::Header' ),
+'340954c191bbbadfbd7ab37e62ac91c0' => {},
+'655c7a5d8f36c58632a92e9c318fa9b4' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 2',
+'messages' => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '655c7a5d8f36c58632a92e9c318fa9b4'
+}, 'Quarantine::Header' ),
+'7020baa09e5801d94724257ee8fba3bc' => bless( {
+'body' => bless( {
+'body' => 'Get Lost!
+For the 3th time',
+'headers' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {},
+'ddd55caf8ac04ed3e75224cd12847bac' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 3',
+'messages' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'ddd55caf8ac04ed3e75224cd12847bac'
+}, 'Quarantine::Header' )
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 3',
+'messages' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '7020baa09e5801d94724257ee8fba3bc'
+}, 'Quarantine::Header' ),
+'bbed5198630e5d982f474ddb946b5cb6' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 2',
+'headers' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 2',
+'messages' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'bbed5198630e5d982f474ddb946b5cb6'
+}, 'Quarantine::Header' ),
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::SMessages' )
+}, 'Quarantine::Sender' ),
+'uniq' => '340954c191bbbadfbd7ab37e62ac91c0'
+}, 'Quarantine::Header' ),
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'81a987f71ec224975ad33bcd09e9ebe4' => {},
+'e3973a2585798a8e85f3a9a6a6ece156' => {},
+'f5794e56fc5ecd3a92a3586da3b6392a' => {}
+}, 'Quarantine::Bodies' ),
+'buckets' => bless( {
+0 => bless( {
+'a' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+3 => bless( {
+4 => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+6 => bless( {
+5 => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+7 => bless( {
+0 => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'b' => bless( {
+'b' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'d' => bless( {
+'d' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' )
+}, 'Quarantine::Buckets' ),
+'headers' => bless( {}, 'Quarantine::Headers' ),
+'recipients' => bless( {
+'Billy 2' => {},
+'Billy 3' => {},
+'Fred 2' => {},
+'Fred 3' => {},
+'Sally 2' => {},
+'Sally 3' => {}
+}, 'Quarantine::Recipients' ),
+'senders' => bless( {
+'Jonny 1' => {}
+}, 'Quarantine::Senders' )
+};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'body'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0]{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'}{'headers'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0]{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'body'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0]{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'body'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0]{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0]{'messages'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'}{'headers'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0]{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR2->{'bodies'}{'81a987f71ec224975ad33bcd09e9ebe4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR2->{'bodies'}{'e3973a2585798a8e85f3a9a6a6ece156'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'};
+$VAR2->{'bodies'}{'f5794e56fc5ecd3a92a3586da3b6392a'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'};
+$VAR2->{'buckets'}{0}{'a'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR2->{'buckets'}{3}{4}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR2->{'buckets'}{6}{5}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR2->{'buckets'}{7}{0}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR2->{'buckets'}{'b'}{'b'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR2->{'buckets'}{'d'}{'d'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR2->{'recipients'}{'Billy 2'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Billy 3'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Fred 2'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Fred 3'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Sally 2'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Sally 3'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0];
+$VAR2->{'senders'}{'Jonny 1'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+
+return ($VAR1, $VAR2);
+}
+
@@ -6,7 +6,7 @@ use Data::Compare;
 eval "use JSON";
 if($@) {
     eval 'use Test::More skip_all => "no JSON support";exit 0';
-} elsif($JSON::VERSION < 2) {
+} elsif($JSON::VERSION < 2.9) {
     eval 'use Test::More skip_all => "JSON module too old";exit 0';
 } else {
     eval 'use Test::More tests => 2';