function reduct(obj, prev = null, dict = new Map) {
let skip = []
if (!obj.tree && !prev) {
obj = Object.assign({},{ tree:obj },{ dict })
skip = Object.keys(obj) }
return Object.entries(obj).reduce
(( pool, [key, val], i, arr ) => {
let path = [prev !== 'TREE' ? prev : '$' ,key.toUpperCase()].join(prev && prev !== 'TREE' ? ':' : '')
if (skip.filter(d=>d==key).length<1)
dict.set(path,`${key} (${has(val, {},[]) ? 'stem' : 'leaf'})`)
if (has(val, {},[])) {
pool[path] = reduct(obj[key], path ,dict)
} else { pool[path] = val }
return pool }, {});
}