Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backports for Julia 1.4 RC2 #34517

Merged
merged 35 commits into from
Feb 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
9196ba1
Update Documenter version to 0.24.4. (#34487)
KristofferC Jan 23, 2020
5eaa8d6
fix bug in printing of block expressions in ref (#34503)
simeonschaub Jan 24, 2020
b963fac
fix printing of LineNumberNode in block within ref (#34504)
simeonschaub Jan 25, 2020
0d3f01c
tests: Use `realpath()` before `==` path comparisons (#34506) (#34581)
staticfloat Jan 30, 2020
7151b45
Bump OpenBLAS BB tarball version and update checksums
staticfloat Jan 28, 2020
449d69d
Merge pull request #34561 from JuliaLang/sf/bump_openblas_version
staticfloat Jan 30, 2020
0adcee9
Remove URLs with /latest and use correct, relative, (#34491)
fredrikekre Jan 24, 2020
c9b2c33
Always use Symbol as _group value of log records (#34509)
tkf Jan 27, 2020
46c4328
Make testall target work with JULIA_BUILD_MODE=debug again. (#34402)
maleadt Jan 28, 2020
7ba75c4
Make SuiteSparse wrapper thread safe. (#34546)
andreasnoack Jan 31, 2020
42a7d5d
Upgrade buildsystem to look for `python`, `python3` or `python2`
staticfloat Jan 23, 2020
ca11925
bump Pkg to newest on release-1.4
KristofferC Jan 31, 2020
2a64ee2
jl_special_vector_alignment: Remove work-around for old LLVM version …
eschnett Jan 24, 2020
5b4c5c2
alignment: subtly change meaning of datatype_align (#34473)
vtjnash Jan 30, 2020
9850ec4
Construct MulAddMul at gemm_wrapper! call sites (#34601)
tkf Feb 1, 2020
880b9b1
make package cache interit permission from source (#34573)
bicycle1885 Feb 3, 2020
eb75505
src/codegen.cpp: fix segfault on `@code_native` with eltype (#34434) …
anaveragehuman Feb 3, 2020
3a22e2f
add some helpful type information to Base and REPLCompletions (#34596)
JeffBezanson Feb 3, 2020
533bbad
[GCLowering] handle vectorized loads
vchuravy Jan 29, 2020
4f81f94
[GCLowering] strip all alias information
vtjnash Feb 4, 2020
df2da49
fix #34752, inference bug in varargs with constant prop (#34755)
JeffBezanson Feb 14, 2020
317b4ef
Remove Iterators.reverse(::Tuple) specialization (#34732)
tkf Feb 14, 2020
6b89ea6
build: fix missing function prototype on older gcc
vtjnash Feb 13, 2020
27d2693
ccall: avoid some bad symbol mangling
vtjnash Feb 13, 2020
81e14fb
Add LLVM asserts checksums
staticfloat Feb 18, 2020
2592da4
Merge pull request #34801 from JuliaLang/sf/LLVM_asserts_jll_1.4
staticfloat Feb 19, 2020
f4b4629
make alignment deal with float32 like float64 (#34763)
birm Feb 18, 2020
a90cfd2
partr: Fix deadlock (#34807)
Keno Feb 19, 2020
d9d6364
codegen: fix bad declaration of memcmp stdlib function signature (#34…
vtjnash Feb 19, 2020
967bc47
codegen: fix segfaults with VecElement with union element (#34805)
vtjnash Feb 19, 2020
9fe1a5e
Profile: fix indent computation BoundsError (#34806)
vtjnash Feb 19, 2020
6ab792f
use Pkg release 1.4
KristofferC Feb 20, 2020
e161506
Fix #34316 (#34817)
SebastianM-C Feb 21, 2020
e0d0bb1
fix #34826, unwrap VecElement when needed in `julia_const_to_llvm` (#…
JeffBezanson Feb 21, 2020
b4edc25
Convert range type in `reduced_index`
timholy Feb 15, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ If you are already familiar with Julia itself, this blog post by Katharine Hyatt

## Learning Julia

[The learning page](https://julialang.org/learning) has a great list of resources for new and experienced users alike. [This tutorial video](https://www.youtube.com/watch?v=vWkgEddb4-A) is one recommended starting point, as is the "[Invitation to Julia](https://www.youtube.com/watch?v=gQ1y5NUD_RI)" workshop video from JuliaCon 2015 ([slide materials here](https://github.com/dpsanders/invitation_to_julia)). The [Julia documentation](https://docs.julialang.org/en/latest) covers the language and core library features, and is searchable.
[The learning page](https://julialang.org/learning) has a great list of resources for new and experienced users alike. [This tutorial video](https://www.youtube.com/watch?v=vWkgEddb4-A) is one recommended starting point, as is the "[Invitation to Julia](https://www.youtube.com/watch?v=gQ1y5NUD_RI)" workshop video from JuliaCon 2015 ([slide materials here](https://github.com/dpsanders/invitation_to_julia)). The [Julia documentation](https://docs.julialang.org) covers the language and core library features, and is searchable.

## Before filing an issue

Expand Down Expand Up @@ -43,7 +43,7 @@ A useful bug report filed as a GitHub issue provides information about how to re
- Try some simple debugging techniques to help isolate the problem.
- Try running the code with the debug build of Julia with `make debug`, which produces the `usr/bin/julia-debug`.
- Consider running `julia-debug` with a debugger such as `gdb` or `lldb`. Obtaining even a simple [backtrace](http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html) is very useful.
- If Julia segfaults, try following [these debugging tips](https://docs.julialang.org/en/latest/devdocs/backtraces#Reporting-and-analyzing-crashes-(segfaults)-1) to help track down the specific origin of the bug.
- If Julia segfaults, try following [these debugging tips](https://docs.julialang.org/en/v1/devdocs/backtraces/) to help track down the specific origin of the bug.

2. If the problem is caused by a Julia package rather than core Julia, file a bug report with the relevant package author rather than here.

Expand Down Expand Up @@ -86,7 +86,7 @@ There are never enough tests. Track [code coverage at Coveralls](https://coveral

2. Browse through the source files and find some untested functionality (highlighted in red) that you think you might be able to write a test for.

3. Write a test that exercises this functionality---you can add your test to one of the existing files, or start a new one, whichever seems most appropriate to you. If you're adding a new test file, make sure you include it in the list of tests in `test/choosetests.jl`. https://docs.julialang.org/en/latest/stdlib/Test/ may be helpful in explaining how the testing infrastructure works.
3. Write a test that exercises this functionality---you can add your test to one of the existing files, or start a new one, whichever seems most appropriate to you. If you're adding a new test file, make sure you include it in the list of tests in `test/choosetests.jl`. https://docs.julialang.org/en/v1/stdlib/Test/ may be helpful in explaining how the testing infrastructure works.

4. Run `make test-all` to rebuild Julia and run your new test(s). If you had to fix a bug or add functionality in `base`, this will ensure that your test passes and that you have not introduced extraneous whitespace.

Expand Down
16 changes: 11 additions & 5 deletions Make.inc
Original file line number Diff line number Diff line change
Expand Up @@ -1010,13 +1010,17 @@ else
UTF8PROC_INC := $(build_includedir)
endif

# We need python for things like BB triplet recognition. We don't really care
# about version, generally, so just find something that works:
PYTHON := $(shell which python 2>/dev/null || which python3 2>/dev/null || which python2 2>/dev/null || echo not found)

# BinaryBuilder options. We default to "on" for all the projects listed in BB_PROJECTS,
# but only if contrib/normalize_triplet.py works for our requested triplet.
ifeq ($(shell python $(JULIAHOME)/contrib/normalize_triplet.py $(or $(XC_HOST),$(XC_HOST),$(BUILD_MACHINE)) >/dev/null 2>/dev/null; echo $$?),0)
ifeq ($(shell $(PYTHON) $(JULIAHOME)/contrib/normalize_triplet.py $(or $(XC_HOST),$(XC_HOST),$(BUILD_MACHINE)) >/dev/null 2>/dev/null; echo $$?),0)
USE_BINARYBUILDER ?= 1
else
ifneq ($(shell python $(JULIAHOME)/contrib/normalize_triplet.py x86_64-linux-gnu),x86_64-linux-gnu)
$(warning python normalize_triplet.py appears to be non-functional, so BinaryBuilder disabled)
ifneq ($(shell $(PYTHON) $(JULIAHOME)/contrib/normalize_triplet.py x86_64-linux-gnu),x86_64-linux-gnu)
$(warning normalize_triplet.py appears to be non-functional (used python interpreter "$(PYTHON)"), so BinaryBuilder disabled)
endif
USE_BINARYBUILDER ?= 0
endif
Expand Down Expand Up @@ -1340,18 +1344,20 @@ endif
exec = $(shell $(call spawn,$(1)))

JULIA_BUILD_MODE := release
JULIA_LIBSUFFIX:=
ifeq (,$(findstring release,$(MAKECMDGOALS)))
ifneq (,$(findstring debug,$(MAKECMDGOALS)))
JULIA_BUILD_MODE := debug
JULIA_LIBSUFFIX:=-debug
endif
endif

JULIA_EXECUTABLE_debug := $(build_bindir)/julia-debug$(EXE)
JULIA_EXECUTABLE_release := $(build_bindir)/julia$(EXE)
JULIA_EXECUTABLE := $(JULIA_EXECUTABLE_$(JULIA_BUILD_MODE))

JULIA_SYSIMG_debug := $(build_private_libdir)/sys-debug.$(SHLIB_EXT)
JULIA_SYSIMG_release := $(build_private_libdir)/sys.$(SHLIB_EXT)
JULIA_SYSIMG := $(JULIA_SYSIMG_$(JULIA_BUILD_MODE))

# Colors for make
ifndef VERBOSE
VERBOSE := 0
Expand Down
2 changes: 0 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -571,8 +571,6 @@ distcleanall: cleanall
test: check-whitespace $(JULIA_BUILD_MODE)
@$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/test default JULIA_BUILD_MODE=$(JULIA_BUILD_MODE)

JULIA_SYSIMG=$(build_private_libdir)/sys$(JULIA_LIBSUFFIX).$(SHLIB_EXT)

testall: check-whitespace $(JULIA_BUILD_MODE)
cp $(JULIA_SYSIMG) $(BUILDROOT)/local.$(SHLIB_EXT)
$(call spawn,$(JULIA_EXECUTABLE) -J $(call cygpath_w,$(BUILDROOT)/local.$(SHLIB_EXT)) -e 'true')
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ The Julia source code is organized as follows:
## Terminal, Editors and IDEs

The Julia REPL is quite powerful. See the section in the manual on
[the Julia REPL](https://docs.julialang.org/en/latest/stdlib/REPL/)
[the Julia REPL](https://docs.julialang.org/en/v1/stdlib/REPL/)
for more details.

Support for editing Julia is available for many
Expand Down
2 changes: 1 addition & 1 deletion base/client.jl
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ using ..Base
# include(fname::AbstractString) = Main.Base.include(Main, fname)
function include(fname::AbstractString)
mod = Main
isa(fname, String) || (fname = Base.convert(String, fname))
isa(fname, String) || (fname = Base.convert(String, fname)::String)
path, prev = Base._include_dependency(mod, fname)
for callback in Base.include_callbacks # to preserve order, must come before Core.include
Base.invokelatest(callback, mod, path)
Expand Down
8 changes: 6 additions & 2 deletions base/compiler/inferenceresult.jl
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,13 @@ function matching_cache_argtypes(linfo::MethodInstance, given_argtypes::Vector)
if linfo.def.isva
isva_given_argtypes = Vector{Any}(undef, nargs)
for i = 1:(nargs - 1)
isva_given_argtypes[i] = given_argtypes[i]
isva_given_argtypes[i] = argtype_by_index(given_argtypes, i)
end
if length(given_argtypes) >= nargs || !isvarargtype(given_argtypes[end])
isva_given_argtypes[nargs] = tuple_tfunc(given_argtypes[nargs:end])
else
isva_given_argtypes[nargs] = tuple_tfunc(given_argtypes[end:end])
end
isva_given_argtypes[nargs] = tuple_tfunc(given_argtypes[nargs:end])
given_argtypes = isva_given_argtypes
end
cache_argtypes, overridden_by_const = matching_cache_argtypes(linfo, nothing)
Expand Down
1 change: 0 additions & 1 deletion base/iterators.jl
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ reverse(G::Generator) = Generator(G.f, reverse(G.iter))
reverse(r::Reverse) = r.itr
reverse(x::Union{Number,AbstractChar}) = x
reverse(p::Pair) = Base.reverse(p) # copying pairs is cheap
reverse(xs::Tuple) = Base.reverse(xs) # allows inference in mapfoldr and similar

iterate(r::Reverse{<:Tuple}, i::Int = length(r.itr)) = i < 1 ? nothing : (r.itr[i], i-1)

Expand Down
10 changes: 6 additions & 4 deletions base/loading.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1086,8 +1086,8 @@ include_string(m::Module, txt::AbstractString, fname::AbstractString="string") =

function source_path(default::Union{AbstractString,Nothing}="")
s = current_task().storage
if s !== nothing && haskey(s, :SOURCE_PATH)
return s[:SOURCE_PATH]
if s !== nothing && haskey(s::IdDict{Any,Any}, :SOURCE_PATH)
return s[:SOURCE_PATH]::Union{Nothing,String}
end
return default
end
Expand Down Expand Up @@ -1264,6 +1264,8 @@ function compilecache(pkg::PkgId, path::String)
open(cachefile, "a+") do f
write(f, _crc32c(seekstart(f)))
end
# inherit permission from the source file
chmod(cachefile, filemode(path) & 0o777)
elseif p.exitcode == 125
return PrecompilableError()
else
Expand Down Expand Up @@ -1485,7 +1487,7 @@ Alternatively see [`PROGRAM_FILE`](@ref).
"""
macro __FILE__()
__source__.file === nothing && return nothing
return String(__source__.file)
return String(__source__.file::Symbol)
end

"""
Expand All @@ -1497,6 +1499,6 @@ Return the current working directory if run from a REPL or if evaluated by `juli
"""
macro __DIR__()
__source__.file === nothing && return nothing
_dirname = dirname(String(__source__.file))
_dirname = dirname(String(__source__.file::Symbol))
return isempty(_dirname) ? pwd() : abspath(_dirname)
end
8 changes: 5 additions & 3 deletions base/logging.jl
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ end
macro _sourceinfo()
esc(quote
(__module__,
__source__.file === nothing ? "?" : String(__source__.file),
__source__.file === nothing ? "?" : String(__source__.file::Symbol),
__source__.line)
end)
end
Expand Down Expand Up @@ -248,6 +248,8 @@ function log_record_id(_module, level, message, log_kws)
end
end

default_group(file) = Symbol(splitext(basename(file))[1])

# Generate code for logging macros
function logmsg_code(_module, file, line, level, message, exs...)
id = Expr(:quote, log_record_id(_module, level, message, exs))
Expand Down Expand Up @@ -293,12 +295,12 @@ function logmsg_code(_module, file, line, level, message, exs...)
if group === nothing
group = if isdefined(Base, :basename) && isa(file, String)
# precompute if we can
QuoteNode(splitext(basename(file))[1])
QuoteNode(default_group(file))
else
# memoized run-time execution
ref = Ref{Symbol}()
:(isassigned($ref) ? $ref[]
: $ref[] = Symbol(splitext(basename(something($file, "")))[1]))
: $ref[] = default_group(something($file, "")))
end
end

Expand Down
14 changes: 12 additions & 2 deletions base/math.jl
Original file line number Diff line number Diff line change
Expand Up @@ -613,9 +613,19 @@ julia> hypot(3, 4im)
hypot(x::Number, y::Number) = hypot(promote(x, y)...)
hypot(x::Complex, y::Complex) = hypot(abs(x), abs(y))
hypot(x::T, y::T) where {T<:Real} = hypot(float(x), float(y))
hypot(x::T, y::T) where {T<:Number} = (z = y/x; abs(x) * sqrt(one(z) + z*z))
function hypot(x::T, y::T) where {T<:Number}
if !iszero(x)
z = y/x
z2 = z*z

abs(x) * sqrt(oneunit(z2) + z2)
else
abs(y)
end
end

function hypot(x::T, y::T) where T<:AbstractFloat
#Return Inf if either or both imputs is Inf (Compliance with IEEE754)
# Return Inf if either or both inputs is Inf (Compliance with IEEE754)
if isinf(x) || isinf(y)
return T(Inf)
end
Expand Down
5 changes: 4 additions & 1 deletion base/reduce.jl
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,12 @@ foldl(op, itr; kw...) = mapfoldl(identity, op, itr; kw...)

function mapfoldr_impl(f, op, nt, itr)
op′, itr′ = _xfadjoint(BottomRF(FlipArgs(op)), Generator(f, itr))
return foldl_impl(op′, nt, Iterators.reverse(itr′))
return foldl_impl(op′, nt, _reverse(itr′))
end

_reverse(itr) = Iterators.reverse(itr)
_reverse(itr::Tuple) = reverse(itr) #33235

struct FlipArgs{F}
f::F
end
Expand Down
2 changes: 1 addition & 1 deletion base/reducedim.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

# for reductions that expand 0 dims to 1
reduced_index(i::OneTo) = OneTo(1)
reduced_index(i::Union{Slice, IdentityUnitRange}) = first(i):first(i)
reduced_index(i::Union{Slice, IdentityUnitRange}) = oftype(i, first(i):first(i))
reduced_index(i::AbstractUnitRange) =
throw(ArgumentError(
"""
Expand Down
14 changes: 7 additions & 7 deletions base/reflection.jl
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,8 @@ struct DataTypeLayout
nfields::UInt32
npointers::UInt32
firstptr::Int32
alignment::UInt32
# alignment : 9;
alignment::UInt16
flags::UInt16
# haspadding : 1;
# fielddesc_type : 2;
end
Expand All @@ -335,7 +335,7 @@ function datatype_alignment(dt::DataType)
@_pure_meta
dt.layout == C_NULL && throw(UndefRefError())
alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment
return Int(alignment & 0x1FF)
return Int(alignment)
end

# amount of total space taken by T when stored in a container
Expand Down Expand Up @@ -368,8 +368,8 @@ Can be called on any `isconcretetype`.
function datatype_haspadding(dt::DataType)
@_pure_meta
dt.layout == C_NULL && throw(UndefRefError())
alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment
return (alignment >> 9) & 1 == 1
flags = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).flags
return flags & 1 == 1
end

"""
Expand Down Expand Up @@ -397,8 +397,8 @@ See also [`fieldoffset`](@ref).
function datatype_fielddesc_type(dt::DataType)
@_pure_meta
dt.layout == C_NULL && throw(UndefRefError())
alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment
return (alignment >> 10) & 3
flags = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).flags
return (flags >> 1) & 3
end

"""
Expand Down
14 changes: 10 additions & 4 deletions base/show.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1580,11 +1580,17 @@ function show_unquoted(io::IO, ex::Expr, indent::Int, prec::Int, quote_level::In
print(io, '(')
ind = indent + indent_width
for i = 1:length(ex.args)
i > 1 && print(io, ";\n", ' '^ind)
if i > 1
# if there was only a comment before the first semicolon, the expression would get parsed as a NamedTuple
if !(i == 2 && ex.args[1] isa LineNumberNode)
print(io, ';')
end
print(io, "\n", ' '^ind)
end
show_unquoted(io, ex.args[i], ind, -1, quote_level)
end
if length(ex.args) < 2
print(isempty(ex.args) ? "nothing;)" : ";)")
print(io, isempty(ex.args) ? "nothing;)" : ";)")
else
print(io, ')')
end
Expand Down Expand Up @@ -2055,13 +2061,13 @@ alignment(io::IO, x::Number) = (length(sprint(show, x, context=io, sizehint=0)),
alignment(io::IO, x::Integer) = (length(sprint(show, x, context=io, sizehint=0)), 0)
"`alignment(4.23)` yields (1,3) for `4` and `.23`"
function alignment(io::IO, x::Real)
m = match(r"^(.*?)((?:[\.eE].*)?)$", sprint(show, x, context=io, sizehint=0))
m = match(r"^(.*?)((?:[\.eEfF].*)?)$", sprint(show, x, context=io, sizehint=0))
m === nothing ? (length(sprint(show, x, context=io, sizehint=0)), 0) :
(length(m.captures[1]), length(m.captures[2]))
end
"`alignment(1 + 10im)` yields (3,5) for `1 +` and `_10im` (plus sign on left, space on right)"
function alignment(io::IO, x::Complex)
m = match(r"^(.*[^e][\+\-])(.*)$", sprint(show, x, context=io, sizehint=0))
m = match(r"^(.*[^ef][\+\-])(.*)$", sprint(show, x, context=io, sizehint=0))
m === nothing ? (length(sprint(show, x, context=io, sizehint=0)), 0) :
(length(m.captures[1]), length(m.captures[2]))
end
Expand Down
2 changes: 1 addition & 1 deletion deps/Versions.make
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ PCRE_BB_REL = 0
DSFMT_VER = 2.2.3
DSFMT_BB_REL = 0
OPENBLAS_VER = 0.3.5
OPENBLAS_BB_REL = 0
OPENBLAS_BB_REL = 1
LAPACK_VER = 3.5.0
SUITESPARSE_VER = 5.4.0
SUITESPARSE_BB_REL = 2
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0740cc29f22c662e265737045e637112
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2aafd248b82de55dccdec65fea088c1726967fbdae01afd251645349fcbc0da01893dce714a93a644d6f0e051aba05d43cec84c49dfb73b41a9532754886a518
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
89ce36300ffd0f2bc1aeddcf019a3aa4
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3d24df343627777c8adb7ffd90379cdbfc48fdbdf7fe2aae8b8a4ad83c534cce6958a23eaeba9d703f4f00f293d36c8d618c930d66e3fc04dd9b745ad8aa447f
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0bb8ede857f498c5c4b2b7c1cdfab22f
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
01923975b5121e9ec144d6110a4072d51a764eae8cb4de3dd4af6698759832342fbf56c7b2102097e4fd1e79df0bf05935b58af6fd8ca6ee81637876fddf8bb8
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0c9eb5839c0e41fef06c390cba6bc032
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
8722dbf467c8729d1d2eb64b86d3457daff0906e4a839990ca7eac3ca094e6542da957f0e9c2050e7b6526462dde3383cec94fea8c56c19a289a4a113055af03
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
49bc35e66e801f4d999c7fc43c0edc23
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bd76fdba0242051a3b64dc962e6c03ddde69ca213dca5935348ee9d8a65be88f2cdb50882e85a238e738d441472c97020ce96f50d4fd7a901293cb9424b23d75
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f70ea31676f544cf8eb8d4ea981c096e
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
925906ffaa2854aaf645c8187fec41182dce06efe3cd47af1849ae06c92ca1bd44de8783c455112092d7830fcd06466f2ba7e8e0a5ab2567f0370d7cfa725bf1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c6ec99ca9a26a119a8a8b3e14869f0dc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1eff4695a923f11ae0465d4a3f3f8fd8404689637c46a3766305bae019562986212b63865c4c678d35e639ce5184597de04b821b633a3bea9832838a547892ca
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9a14bed041690c24c171c2cd03e9218e
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
8ce3526e4214f51c87d7373c26a7bf6c8c363ca67cbb1b3920bc6cae5f1ec27ec3b50f3c153f0c14d314e68bc4d932145cb6b010f7800b671913b645f1d707f4
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
72eac17e11be9a2252236f218d205834
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4e6db589316c2282e0dcd30c02202ca5fbda5ccf59d5ea08060419bdf579d5695bfbf7ad2163032233753283e430f07998b808bb620fb090a2d79e9d03c7b231
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
eb4e92189affd15c3cf1d047990b8d14
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
b92403df2e4e0f174d544d6cde53f1ef94dd03ef34866a0a782f5853de9d2b9165a0466195fba79a2da8e582fcff0b745d6b23f395f7b11f13aa480c4aa166f5
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bb9a3e9aa5b301f9c80bd019cfa7d805
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
5c72d5f72a3923b68eeedaa7f6ca49d99558ae6ba647f171e0f8f2f147a8266541177432c7f260f09fddd6096046ab9830aeb24be312ab54678c53113d2c14a3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c3881b19da149713bd7b3e205ae55c1d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
03b21f17a720e41642794a603b76ff627f19802ae7f0563590d8a5d3db9ce4415dd65231c86b7989743aaf9b587b8ab3b141bafe049f6957aa9ecbf7ae740d8f
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f2b1cf1684dd90cd34b866b67c51a8f8
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6ad5a99c0237e905bbc194f0a41529504f32e2b4ab8a08b292de80e527957ea2cdfbebd609e804c7072216749aa7dbf0539c41f5f68217bc65af623acbfd1d59
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
41f88ee5ff86f56cb2233729adabddf4
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
722374a4bf2700267b6138f3c524653dd2f4272c0ceca5431ef2c60298dc1e7908e733e1a6cfd5ec975cead68e09fe755be29b56cf7d3d0a18a09f95d142a776
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dc28cdcfa74e06e5385d02016cc84cbd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
561b6773169fdd8ba0966a79448281c163984f67eee7c9d89f826733232776008011083a2ce6375413de06eae80e20a28bd9c46c4bef51078c729b9ca785921b
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
28cf728c02deb8506d72e1dd9814c308
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
12f15a6a102f14b6b87e2ffce1fb09523eb9977ae66240481fc1aa450a45517d81a29116964af673dd28aba9903d4146aa562112a4a74323c55355f793c1ba2e
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
02eb0c570837afe5ee9a76571af2fbfb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
288246efb49795234fb555ed19d08f33f1af20b221a160b0885ad6a18036b8bac299fea8333a977750e40adf68c45899d3a5916f885556f607126f682729b481
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
d79b813303ad7d5758ab86a2ec16602b
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
036b698e77442d1fc6cc623b97da3fd53c487959866faf6c4624b0566472955d14bd2062cc25e6f4199afc3f63e78d75b4e920a44d9e270ac3cbd0563aefe25d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
878c64ad9e182be661f8c5402fc38c67
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0737c4358f968d3d1695156df5adcfb3ec0ed71e4f7293cf7e022b514709d5139007f7ffa130007e4e73f5bda89e8354d72a4109d224fa9ee0aaf66517c1fd13
Loading