anchor.diff:    TKMDeliveryBidKey = record
       FromP: TKMPoint; //House or Unit UID From where delivery path goes
       ToP: TKMPoint;   //same for To where delivery path goes
  -  end;
  -
  -type
  +    function GetHashCode: Integer;
  +  end;
  +
     //Custom key comparator. Probably TDictionary can handle it himself, but lets try our custom comparator
     TKMDeliveryBidKeyEqualityComparer = class(TEqualityComparer<TKMDeliveryBidKey>)
       function Equals(const Left, Right: TKMDeliveryBidKey): Boolean; override;
  
positive.code:   //Comparison function could be executed more rare or frequent depending on signals from houses/serfs
    //e.g. with no houses signals it can sleep till first on. At any case - not more frequent than 1/tick
    //TKMDeliveryList = class; //Serfs, Houses/Warriors/Workers
  
    {$IFDEF USE_HASH}
    TKMDeliveryCache = class(TDictionary<TKMDeliveryBidKey, TKMDeliveryBid>)
    public
      function TryGetValue(const aKey: TKMDeliveryBidKey; var aValue: TKMDeliveryBid): Boolean; reintroduce;
      procedure Add(const FromP: TKMPoint; ToP: TKMPoint; const aValue: Single; const aTimeToLive: Word); reintroduce; overload;
      procedure Add(const aKey: TKMDeliveryBidKey; const aValue: Single; const aTimeToLive: Word); reintroduce; overload;
      procedure Add(const aKey: TKMDeliveryBidKey; const aBid: TKMDeliveryBid); reintroduce; overload;
    end;
    {$ENDIF}
  
  
    TKMDeliveries = class
    private
  
negative.code: // if A equals B, then Hash(A) = Hash(B)
  // For our task we need that From / To end could be swapped, since we don't care where is the starting point of the path
  function TKMDeliveryBidKeyEqualityComparer.GetHashCode(const Value: TKMDeliveryBidKey): Integer;
  begin
    Result := Value.GetHashCode;
  end;
  
  
  