@Override
 public int hashCode() {
   final int prime = 31;
   int result = 1;
   result = prime * result + ((deployingFaction == null) ? 0 : deployingFaction.hashCode());
   result = prime * result + ((faction == null) ? 0 : faction.hashCode());
   result = prime * result + ((movementModes == null) ? 0 : movementModes.hashCode());
   result = prime * result + networkMask;
   result = prime * result + ((rating == null) ? 0 : rating.hashCode());
   result = prime * result + roleStrictness;
   result = prime * result + ((roles == null) ? 0 : roles.hashCode());
   result = prime * result + unitType;
   result = prime * result + ((weightClasses == null) ? 0 : weightClasses.hashCode());
   result = prime * result + year;
   return result;
 }
 @Override
 public boolean equals(Object obj) {
   if (this == obj) {
     return true;
   }
   if (obj == null) {
     return false;
   }
   if (!(obj instanceof CacheKey)) {
     return false;
   }
   CacheKey other = (CacheKey) obj;
   if (deployingFaction == null) {
     if (other.deployingFaction != null) {
       return false;
     }
   } else if (!deployingFaction.equals(other.deployingFaction)) {
     return false;
   }
   if (faction == null) {
     if (other.faction != null) {
       return false;
     }
   } else if (!faction.equals(other.faction)) {
     return false;
   }
   if (movementModes == null) {
     if (other.movementModes != null) {
       return false;
     }
   } else if (!movementModes.equals(other.movementModes)) {
     return false;
   }
   if (networkMask != other.networkMask) {
     return false;
   }
   if (rating == null) {
     if (other.rating != null) {
       return false;
     }
   } else if (!rating.equals(other.rating)) {
     return false;
   }
   if (roleStrictness != other.roleStrictness) {
     return false;
   }
   if (roles == null) {
     if (other.roles != null) {
       return false;
     }
   } else if (!roles.equals(other.roles)) {
     return false;
   }
   if (unitType != other.unitType) {
     return false;
   }
   if (weightClasses == null) {
     if (other.weightClasses != null) {
       return false;
     }
   } else if (!weightClasses.equals(other.weightClasses)) {
     return false;
   }
   if (year != other.year) {
     return false;
   }
   return true;
 }