```
SELECT 
    fromUnixTimestamp64Nano(fromUnixTimestamp64Milli(fromUnixTimestamp64Milli(fromUnixTimestamp64Milli(fromUnixTimestamp64Milli(fromUnixTimestamp64Milli(fromUnixTimestamp64Nano(fromUnixTimestamp64Milli(fromUnixTimestamp64Milli('ab\0ab\0ab\0ab\0', NULL)))))), NULL)), 123),
    uniqUpTo(100)(fromUnixTimestamp64Nano(-9223372036854775808), x)
FROM 
(
    SELECT arrayJoin([[], [], ['a', 'b'], []]) AS x
)
```

https://clickhouse-test-reports.s3.yandex.net/13169/45894fcf99446d449286e10d109c345b72406a75/fuzzer/fuzzer.log#fail1
#pragma once
#include <Functions/extractTimeZoneFromFunctionArguments.h>
#include <Functions/IFunctionImpl.h>
#include <Functions/FunctionHelpers.h>
#include <DataTypes/DataTypeDateTime64.h>
#include <DataTypes/DataTypesNumber.h>
#include <common/arithmeticOverflow.h>
namespace DB
{
namespace ErrorCodes
{
    extern const int ILLEGAL_TYPE_OF_ARGUMENT;
    extern const int DECIMAL_OVERFLOW;
}
/** Casts DateTim64 to or from Int64 representation narrowed down (or scaled up) to any scale value defined in Impl.
 */
template <typename Impl>
class FunctionUnixTimestamp64 : public IFunction
{
public:
    static constexpr auto name = Impl::name;
    static constexpr auto target_scale = Impl::target_scale;
    using SourceDataType = typename Impl::SourceDataType;
    using ResultDataType = typename Impl::ResultDataType;
    static constexpr bool is_result_datetime64 = std::is_same_v<ResultDataType, DataTypeDateTime64>;
    static_assert(std::is_same_v<SourceDataType, DataTypeDateTime64> || std::is_same_v<ResultDataType, DataTypeDateTime64>);
    static auto create(const Context &)