(
defn
->regions
[
offset->ref
^
long
start
^
long
end
]
(
let
[
wg-len
(
let
[
[
o
r
]
(
first
(
rsubseq
offset->ref
>=
0
)
)
]
(
+
(
long
o
)
(
long
(
:len
r
)
)
)
)
]
(
when
(
and
(
<=
start
end
)
(
or
(
pos?
start
)
(
pos?
end
)
)
(
or
(
<=
start
wg-len
)
(
<=
end
wg-len
)
)
)
(
let
[
start'
(
min
(
max
1
start
)
wg-len
)
end'
(
min
(
max
1
end
)
wg-len
)
[
s-offset
]
(
first
(
rsubseq
offset->ref
<=
(
dec
start'
)
)
)
[
e-offset
]
(
first
(
rsubseq
offset->ref
<=
(
dec
end'
)
)
)
regs
(
mapv
(
fn
[
[
_
r
]
]
{
:chr
(
:name
r
)
,
:start
1
,
:end
(
:len
r
)
}
)
(
subseq
offset->ref
>=
s-offset
<=
e-offset
)
)
]
(
->
regs
(
assoc-in
[
0
:start
]
(
-
start'
(
long
s-offset
)
)
)
(
update-in
[
(
dec
(
count
regs
)
)
:end
]
min
(
-
end'
(
long
e-offset
)
)
)
)
)
)
)
)