docs: public boolean addAll(Collection<? extends E> c) {
          if (c == this)
              // As historically specified in AbstractQueue#addAll
              throw new IllegalArgumentException();
  
          // Copy c into a private chain of Nodes
          Node<E> beginningOfTheEnd = null, last = null;
          for (E e : c) {
              Node<E> newNode = newNode(Objects.requireNonNull(e));
              if (beginningOfTheEnd == null)
                  beginningOfTheEnd = last = newNode;
              else {
                  NEXT.set(last, newNode);
                  PREV.set(newNode, last);
                  last = newNode;
              }
          }
          if (beginningOfTheEnd == null)
              return false;
  
          // Atomically append the chain at the tail of this collection
          restartFromTail:
          for (;;)
              for (Node<E> t = tail, p = t, q;;) {
                  if ((q = p.next) != null &&
                      (q = (p = q).next) != null)
                      // Check for tail updates every other hop.
                      // If p == q, we are sure to follow tail instead.
                      p = (t != (t = tail)) ? t : q;
                  else if (p.prev == p) // NEXT_TERMINATOR
                      continue restartFromTail;
                  else {
                      // p is last node
                      PREV.set(beginningOfTheEnd, p); // CAS piggyback
                      if (NEXT.compareAndSet(p, null, beginningOfTheEnd)) {
                          // Successful CAS is the linearization point
                          // for all elements to be added to this deque.
                          if (!TAIL.weakCompareAndSet(this, t, last)) {
                              // Try a little harder to update tail,
                              // since we may be adding many elements.
                              t = tail;
                              if (last.next == null)
                                  TAIL.weakCompareAndSet(this, t, last);
                          }
                          return true;
                      }
                      // Lost CAS race to another thread; re-read next
                  }
              }
      }