/** Returns true if m1 and m2 are structurally equal. */
    public static boolean isEqual(FetchedProfile m1, FetchedProfile m2) {

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      if (!m1.getAddress().equals(m2.getAddress())) return false;

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      if (!m1.getName().equals(m2.getName())) return false;

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      if (!m1.getImageUrl().equals(m2.getImageUrl())) return false;

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      if (m1.hasProfileUrl() != m2.hasProfileUrl()) return false;
      if (m1.hasProfileUrl() && !m1.getProfileUrl().equals(m2.getProfileUrl())) return false;
      return true;
    }
    /** Returns a structural hash code of message. */
    public static int getHashCode(FetchedProfile message) {
      int result = 1;

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      result = (31 * result) + message.getAddress().hashCode();

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      result = (31 * result) + message.getName().hashCode();

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      result = (31 * result) + message.getImageUrl().hashCode();

      /**
       * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
       * agreements. See the NOTICE file distributed with this work for additional information
       * regarding copyright ownership. The ASF licenses this file to you under the Apache License,
       * Version 2.0 (the "License"); you may not use this file except in compliance with the
       * License. You may obtain a copy of the License at
       *
       * <p>http://www.apache.org/licenses/LICENSE-2.0
       *
       * <p>Unless required by applicable law or agreed to in writing, software distributed under
       * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       * KIND, either express or implied. See the License for the specific language governing
       * permissions and limitations under the License.
       */
      result = (31 * result) + (message.hasProfileUrl() ? message.getProfileUrl().hashCode() : 0);
      return result;
    }