This is a typical callstack from blocking process\executionStack nodes of blocked_process_reportblocked-process-report\blocking-process\process\executionStack in my case:
<executionStack>
<frame line="30" stmtstart="1570" stmtend="1796" sqlhandle="0x0300ff7f66f82acdcaae2d0054a9000001000000000000000000000000000000000000000000000000000000" />
<frame line="917" stmtstart="67266" stmtend="67522" sqlhandle="0x0300ff7f48dddfc2a8b02d0054a9000001000000000000000000000000000000000000000000000000000000" />
<frame line="52" stmtstart="3496" stmtend="5162" sqlhandle="0x0300ff7f5eea5ef7d25b2d0054a9000001000000000000000000000000000000000000000000000000000000" />
<frame line="92" stmtstart="4236" stmtend="4768" sqlhandle="0x0300ff7f6366c5c416b12d0054a9000001000000000000000000000000000000000000000000000000000000" />
</executionStack>
If I decode it with this query:
select
cast(
(select SUBSTRING(txt.text,(ISNULL(T.x.value('./@stmtstart', 'int'), 0) / 2) + 1,
((CASE ISNULL(T.x.value('./@stmtend', 'int'), -1)
WHEN -1 THEN DATALENGTH(txt.text)
ELSE T.x.value('./@stmtend', 'int')
END - ISNULL(T.x.value('./@stmtstart', 'int'), 0)) / 2) + 1) + CHAR(13) AS statement_txt
,T.x.value('./@line', 'int') as line
from @bpReportXml.nodes('//blocking-process/process/executionStack/frame') AS T(x)
cross apply sys.dm_exec_sql_text(T.x.value('xs:hexBinary(substring((./@sqlhandle), 3))', 'varbinary(max)')) AS txt
for XML path('')) as xml) AS frame_blocking_process_xml
Then I get this result: