{
  "llm": {
    "conf": 0.015926281,
    "grade": "benign",
    "model": "qwen/qwen3.8-27b",
    "outcome": "benign",
    "interpretation": "legitimate caching library"
  },
  "ml": {
    "v": "7",
    "eng": "2.8.0",
    "lvl": -1,
    "conf": 0,
    "mods": [
      {
        "cls": 0,
        "raw": 0.02377057,
        "rte": "az",
        "prob": 0.02377057
      },
      {
        "cls": 0,
        "raw": 0.0013681948,
        "rte": "az/gem",
        "prob": 0.0013681948
      }
    ],
    "prob": 0.02377057,
    "files": [
      {
        "id": 0,
        "lvl": -1,
        "conf": 0,
        "prob": 0.023770570755004883,
        "type": "gem"
      },
      {
        "id": 1,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000051657360017998144,
        "type": "tar.gz"
      },
      {
        "id": 2,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00002621611020003911,
        "type": "ruby"
      },
      {
        "id": 3,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00003293156623840332,
        "type": "ruby"
      },
      {
        "id": 4,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00002816319465637207,
        "type": "ruby"
      },
      {
        "id": 5,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000030328830689541064,
        "type": "ruby"
      },
      {
        "id": 6,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00002428889274597168,
        "type": "ruby"
      },
      {
        "id": 7,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000030090412110439502,
        "type": "ruby"
      },
      {
        "id": 22,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00002872943878173828,
        "type": "registry"
      },
      {
        "id": 23,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00002872943878173828,
        "type": "registry"
      },
      {
        "id": 24,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00002872943878173828,
        "type": "registry"
      }
    ],
    "version": "v18.18",
    "analyzed_at": "2026-09-04T05:59:26Z"
  },
  "path": "padrino-cache-0.11.1.gem",
  "raw": {
    "files": [
      {
        "id": 0,
        "ctx": [
          {
            "b": "wmoN*e{7Jxe[YFg00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fFCgmhz^k\u003cfFCgmfFCfXfFCgm",
            "ln": 0
          }
        ],
        "mol": "H₄(Cm₂DbF₂Po₂)Md(Pa)",
        "sha": "2f3a2c15169d0a826930ac74b5e90f99f9f8d5cc85a6debcb594e5be1a6fbdad",
        "path": "padrino-cache-0.11.1.gem",
        "refs": [
          {
            "to": "pkg:gem/padrino-core",
            "off": 0,
            "kind": "dependency"
          },
          {
            "to": "pkg:gem/padrino-helpers",
            "off": 0,
            "kind": "dependency"
          }
        ],
        "risk": 6,
        "size": 15872,
        "type": "gem",
        "facts": {
          "metrics": {
            "gem": {
              "dependency_count": 2,
              "runtime_dependency_count": 2,
              "development_dependency_count": 0
            },
            "file": {
              "size": 15872,
              "entropy": 7.39
            },
            "binary": {
              "peak_region_bytes": 11264,
              "peak_region_entropy": 7.83
            },
            "archive": {
              "file_count": 2,
              "member_count": 2,
              "script_count": 0,
              "directory_count": 0,
              "executable_count": 0,
              "hidden_file_count": 0,
              "uncompressed_size": 13404,
              "max_filename_length": 11,
              "rtlo_filename_count": 0,
              "format.regular_count": 2,
              "nested_archive_count": 2,
              "path_traversal_count": 0,
              "symlink_escape_count": 0,
              "security.setgid_count": 0,
              "security.setuid_count": 0,
              "security.sticky_count": 0,
              "double_extension_count": 0,
              "security.symlink_count": 0,
              "unicode_filename_count": 0,
              "homoglyph_filename_count": 0,
              "timing.mtime_unique_count": 1,
              "misplaced_executable_count": 0,
              "timing.mtime_spread_seconds": 0,
              "security.world_writable_count": 0
            }
          }
        },
        "ident": {
          "name": {
            "value": "padrino-cache",
            "source": "gem.name",
            "verified": false
          },
          "urls": [
            {
              "url": "http://www.padrinorb.com",
              "kind": "homepage",
              "source": "gem.homepage"
            }
          ],
          "trust": "unsigned",
          "authors": [
            {
              "name": "Padrino Team",
              "role": "author",
              "source": "gem.authors"
            },
            {
              "name": "Nathan Esquenazi",
              "role": "author",
              "source": "gem.authors"
            },
            {
              "name": "Davide D'Agostino",
              "role": "author",
              "source": "gem.authors"
            },
            {
              "name": "Arthur Chiu",
              "role": "author",
              "source": "gem.authors"
            }
          ],
          "version": {
            "value": "0.11.1",
            "source": "gem.version",
            "verified": false
          }
        },
        "traits": [
          {
            "id": "micro-behaviors/fs/directory/delete::ruby-fileutils-rm-rf",
            "atk": "T1070.004",
            "mbc": "C0047",
            "conf": 0.95,
            "crit": 3,
            "desc": "Ruby recursively deletes a directory tree"
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory",
            "conf": 1.0,
            "crit": 2,
            "desc": "File identified as a test by path or name",
            "from": [
              {
                "file": 1
              },
              {
                "file": 6
              },
              {
                "file": 7
              },
              {
                "file": 20
              },
              {
                "file": 21
              }
            ]
          },
          {
            "id": "micro-behaviors/communications/http/url/forge::public-code-forge-url",
            "conf": 0.9,
            "crit": 3,
            "desc": "References a public code-forge URL"
          },
          {
            "id": "micro-behaviors/communications/http/message::http-prefix",
            "conf": 0.9,
            "crit": 2,
            "desc": "HTTP protocol prefix"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\""
          },
          {
            "id": "micro-behaviors/process/interpreter/eval::ruby-eval",
            "atk": "T1059",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamic code evaluation call"
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-subshell-command",
            "conf": 0.93,
            "crit": 3,
            "desc": "Ruby subshell command execution"
          },
          {
            "id": "metadata/package/config::gemspec-name-assignment",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby gemspec assigns package name"
          },
          {
            "id": "micro-behaviors/fs/directory/mkdir::ruby-fileutils-mkdir-p",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby creates a directory tree"
          },
          {
            "id": "micro-behaviors/communications/http/url/scheme::cleartext-http-url-code-literal",
            "atk": "T1071.001",
            "mbc": "C0002",
            "conf": 0.9,
            "crit": 3,
            "desc": "Code embeds cleartext HTTP URL literal"
          },
          {
            "id": "micro-behaviors/communications/http/message::http-url-literal",
            "conf": 0.75,
            "crit": 2,
            "desc": "HTTP URL string literal"
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-const-get",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically resolves a constant"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\""
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory-path",
            "conf": 1.0,
            "crit": 1,
            "desc": "File is in common test directory"
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-send-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically invokes a method with send"
          }
        ]
      },
      {
        "depth": 1,
        "facts": {
          "metrics": {
            "file": {
              "size": 12601,
              "entropy": 7.98
            },
            "parse": {
              "error_count": 1
            },
            "binary": {
              "peak_region_bytes": 12288,
              "peak_region_entropy": 7.81
            }
          }
        },
        "id": 1,
        "mol": "H₄(Cm₂DbF₂Po₂)Md(Pa)",
        "path": "padrino-cache-0.11.1.gem!!data.tar.gz",
        "pid": 0,
        "risk": 6,
        "sha": "41580d34e4e937e4e45a0fa52e99642603ab78e4c40bf1024803cf1450b95b3a",
        "size": 12601,
        "traits": [
          {
            "id": "micro-behaviors/communications/http/url/scheme::cleartext-http-url-code-literal",
            "atk": "T1071.001",
            "mbc": "C0002",
            "conf": 0.9,
            "crit": 3,
            "desc": "Code embeds cleartext HTTP URL literal"
          },
          {
            "id": "micro-behaviors/fs/directory/mkdir::ruby-fileutils-mkdir-p",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby creates a directory tree"
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-const-get",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically resolves a constant"
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-subshell-command",
            "conf": 0.93,
            "crit": 3,
            "desc": "Ruby subshell command execution"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\""
          },
          {
            "id": "micro-behaviors/communications/http/message::http-prefix",
            "conf": 0.9,
            "crit": 2,
            "desc": "HTTP protocol prefix"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\""
          },
          {
            "id": "micro-behaviors/fs/directory/delete::ruby-fileutils-rm-rf",
            "atk": "T1070.004",
            "mbc": "C0047",
            "conf": 0.95,
            "crit": 3,
            "desc": "Ruby recursively deletes a directory tree"
          },
          {
            "id": "micro-behaviors/communications/http/message::http-url-literal",
            "conf": 0.75,
            "crit": 2,
            "desc": "HTTP URL string literal"
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory-path",
            "conf": 1.0,
            "crit": 1,
            "desc": "File is in common test directory"
          },
          {
            "id": "metadata/package/config::gemspec-name-assignment",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby gemspec assigns package name"
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory",
            "conf": 1.0,
            "crit": 2,
            "desc": "File identified as a test by path or name",
            "from": [
              {
                "file": 6
              },
              {
                "file": 7
              },
              {
                "file": 20
              },
              {
                "file": 21
              }
            ]
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-send-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically invokes a method with send"
          },
          {
            "id": "micro-behaviors/process/interpreter/eval::ruby-eval",
            "atk": "T1059",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamic code evaluation call"
          },
          {
            "id": "micro-behaviors/communications/http/url/forge::public-code-forge-url",
            "conf": 0.9,
            "crit": 3,
            "desc": "References a public code-forge URL"
          }
        ],
        "type": "tar.gz"
      },
      {
        "ctx": [
          {
            "b": "zeS%cy?j.=vpTy)zF]\u003e8az(4cB.\u003eRilT:FrwEoL5arUJtwozZ1ax9x2A+bO2arR^Har@9rarR^HarR)Kl1j[SA:-E1avxNExK@q+Bz(hh3lQDlarR^K3lQDlarR!py*?yaavoHTwEn+!arR^HarR^KbmkLoarR^HarR)Km}D=+Bzbkdv{@\u003eXwGU@2A=U/jaAITBvru6[C)UVparR^HarR)oarR^HarR^HboPr#ay]4}vrDydazC)tAbn@%zy=]GBzblaCwhbfaBd)Fay!?$aAIaoasX\u003cnvrcB5vqEy",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "arR^HboO9Ko(BM+y?j-cw/%]Uwo8y4z-P{DvpJ$ZiYZ8CA=U/jaA8oyvqZukBzb98aAz4mAbPS8aARJAwO#0@wmWA8wN/T?wEoL5arR^HarR)oarR^HarR^HboPl.CWUDdy?i}@arR^HarR^KarR!6vpTy)zF}dqvpJ$Ze]UltB7GwmjS(!8y*?3}",
            "ln": 407,
            "col": 5,
            "line": 22
          },
          {
            "b": "v{@\u003eXwId}gA=U/jauZ\u0026dzddEaxKLY:arR^HarR^HboO9KboR5vz/P@fB-.WEw]zYJ3lQDlarR^Har@0Kaw=GSA+PAfe[ns1xK@/nvrcB2AV^H/p*))Px(m\u0026IiZWs=xK%j=p*[x=wPx*)p\u00266MOzvdHearR^HarR)KarTG?wo8y4z.tKdv}YBaAa9+",
            "ln": 576,
            "col": 21,
            "line": 26
          },
          {
            "b": "B972MpFK.{A=U/j3lQDlarR^Har}joarR^HarR!qwO967vrcB2AY\u003e*/z!7p7arR^HarR^HarUJtwfs2Tp*))Px(m\u0026IiZWs=xK%j=p*[x=wPxzkz/fSruUr}(c#A)ke{82sB1Q%hzdNJ$DsXJFB-82bB8@Evz!7FmB6\u0026uuc@1R\u003cB.\u003eRr3lQDlarR^HarR!Evqf^]ar\u00264SzeS%kaAIjmB.\u003eOhA+frhz/f8dBz\u0026pkzEWP}wG\u0026mtzFS)9B0bsrwb",
            "ln": 1145,
            "col": 38,
            "line": 45
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "const_get"
            ],
            [
              "",
              "camelize"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "is_a?"
            ],
            [
              "",
              "raise"
            ],
            [
              "",
              "respond_to?"
            ],
            [
              "",
              "raise"
            ],
            [
              "",
              "respond_to?"
            ],
            [
              "",
              "parser"
            ]
          ],
          "mbr": [
            "mod.is_a?",
            "mod.respond_to?",
            "mod.to_s",
            "mod.to_s.camelize"
          ],
          "tgt": [
            "camelize",
            "const_get",
            "is_a?",
            "parser",
            "raise",
            "respond_to?",
            "to_s"
          ],
          "funcs": [
            [
              "parser",
              274
            ],
            [
              "parser=",
              1176
            ],
            [
              "initialize",
              1513
            ]
          ],
          "metrics": {
            "ast": {
              "op.lor": 1,
              "max_depth": 17,
              "op.concat": 7,
              "call_count": 9,
              "node_count": 187,
              "member_count": 4,
              "op_density.lor": 0.01,
              "member_depth_max": 3,
              "op_density.concat": 0.04
            },
            "file": {
              "size": 1666,
              "entropy": 4.03
            },
            "text": {
              "lines": 63,
              "top_char": 101,
              "max_ws_run": 7,
              "space_count": 592,
              "char_entropy": 4.03,
              "unique_chars": 58,
              "top_char_null": 0,
              "string_density": 0.03,
              "top_char_ratio": 0.07,
              "avg_line_length": 25.44,
              "max_line_length": 92,
              "empty_line_ratio": 0.08,
              "last_line_length": 13,
              "whitespace_ratio": 0.39,
              "identifier_density": 0.52,
              "line_length_stddev": 22.47,
              "normalized_string_count": 0.25,
              "repeated_char_sequences": 6,
              "normalized_unique_identifiers": 2.84
            },
            "binds": {
              "count": 2
            },
            "binary": {
              "peak_region_bytes": 1666,
              "peak_region_entropy": 4.12
            },
            "source": {
              "class_count": 4,
              "function_count": 2
            },
            "strings": {
              "bytes": 62,
              "count": 2,
              "avg_length": 31,
              "max_length": 31,
              "avg_entropy": 3.76,
              "entropy_stddev": 0.03
            },
            "comments": {
              "chars": 722,
              "count": 42,
              "empty": 10,
              "lines": 32,
              "to_code_ratio": 1.03
            },
            "functions": {
              "count": 6
            },
            "identifiers": {
              "count": 33,
              "unique": 17,
              "avg_length": 6.41,
              "max_length": 11,
              "min_length": 3,
              "avg_entropy": 2.44,
              "reuse_ratio": 0.52,
              "length_stddev": 2.14,
              "all_lowercase_ratio": 0.47
            }
          }
        },
        "id": 2,
        "mol": "H(Db)",
        "path": "padrino-cache-0.11.1.gem!!data.tar.gz!!lib/padrino-cache/store/base.rb",
        "risk": 2,
        "sha": "40d010a5d1abff1ff73e1316ac5c689479aefdaa960c4b7e3a2dc0cf87fbfbea",
        "size": 1666,
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\"",
            "spans": [
              [
                136,
                0
              ]
            ]
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\"",
            "spans": [
              [
                624,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-const-get",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically resolves a constant",
            "spans": [
              [
                1209,
                9
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "ctx": [
          {
            "b": "zeS%cy?j.=vpTy)zF]\u003e8az(4cB.\u003eRilT:FrwEoL5arUJtwozZ1ax9x2A+bO2arR^Har@9rarR^HarR)KmRMWIayX=2wN(]JvpJ$Zax9x2A+bO2arR^Har}joarQ",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "lsB}D3lQDlarR^Har@9rarR^HarR^HboPM}x([5$y?XibavZ6YwGV5oz/PziCwhejavZ6YwGV2iz/=searR^HarR^K3lQDlarR^Har@0]Aa9=}z6i4YBAh8kxi=T2z/o.8arR^HarR^HboO9KAa9\u003c4aARJAv{@\u003eXwGUP0y?i}@arR^HarR^K3lQDl",
            "ln": 114,
            "col": 20,
            "line": 7
          },
          {
            "b": "BzkVhB14CsarR^HarR!rzE:7YarR^HarR^Hbo)KrarR^HarR^Kaw#=)B-IvxBzbkdvix-4y\u0026%qiw]zYjBzbkdxk8K2zxJ.aC)UVparR^HarR)oarR^HarR^HboPl\u003cvrb^[ax}=^A+PA7t{9]]C)UVparR^HarR)KarUf5v}YA@yH}+#arR^HarR^HbmkLoarR^HarR)",
            "ln": 720,
            "col": 19,
            "line": 24
          },
          {
            "b": "bmkLoarR^HarR)KkW!RCaAhEjy?Ww^arR^HarR^HwmYu}xjVfkyH}=u3lQDlarR^HarR!vzFsh1arR^HarR^HarUxgauzLMx(4ukwQ4{gBu.f)vruf\u0026w]zY%yH}+",
            "ln": 991,
            "col": 9,
            "line": 36
          },
          {
            "b": "AbPS8uVZiJc]$*KzGoq%wgnS=auA$CzGoq%wfr]Qi=X!uwc%C4arR^HarR^HarUfjzGGDcBAnMEarS/\u0026iYY-Ay?kkuwO#3bA+eV\u0026uU%v@xM4AjaAg+hxKtv\u0026A:JP[C{)DtC{$fHarR^HarR^HarR^HwQ5fdA+fr0x(kEAvSb!5auZ\u0026Sz/fVdzGG}LB8U@fBsntrzxZROgarLMarR^HarR^HarR!rCYmwqwPIi)zxI7+wQ5fdA+fr0",
            "ln": 1133,
            "col": 37,
            "line": 41
          },
          {
            "b": "arR^Har@9rarR^HarR^HboP]@BrCWswGVe8y\u0026%qiw]zYjvixh%C4CLlyH}=lvqYP#z/x/jz/f01y\u003cvdEx([2hvqWi0CYmwqwGV8ezdK4%arR^HarR^KavG^MvrDydaz2!px(XFwBzkP6azC)ti5SPEfFiXParR^HarR^K3lQDlarR^Har@0]Aa9+",
            "ln": 1617,
            "col": 4,
            "line": 56
          },
          {
            "b": "zEWP}wHI.gy\u0026%qrazCBgC42ifwEoL5arR^HarR^HiYY-Ay?kkqAaJ]nAa9\u003c4uUjj%uU:j#c#iytdj=O?Cvz{GaBtkUw{+.kauR+ewQ5fdA+fr0x(kLBz^NMdjuK-gtY7-djuK:fvqH6$aBLwDw/#n9y\u0026%p@arR^HarR^HwO#2=3lQDlarR^Har@9rarR^HarR^HboPx=y?mZ1aARpdaA?gfB.8Xcz/M$eazkziwO@SawQaR9arQ",
            "ln": 2354,
            "col": 27,
            "line": 78
          },
          {
            "b": "ay]4}ay]51wPRGiyH}=u3lQDlarR^HarR!vzFsh1arR^HarR^HarS%\u003cA::kwyH}=ue[FE3xDRTAD#19LmRMWIrDI}\u003eB1RGIuVG:bAa9\u003c4uUjj%uU:j#c#gmXaBKOtarR^HarR!rzE:7YarR^HarR^Hbo)KrarR^HarR^Kaw#=+zFsibvqGU7wGVnpB-FQmvpJ$Z3lQDlarR^Har}joarR^HarR^Kav6H.vqP$1wEoL5arR^HarR)Kao",
            "ln": 2827,
            "col": 8,
            "line": 95
          },
          {
            "b": "3lQDlarR^Haz2C33jm)#arR^HarR)KkW!RCaAhvnC42G73lQDlarR^Hay]4}azC.cBp6ckarR^HarR^HmRMWIrDI}\u003eB1RrBwnc6\u003eA40$(z/o.DaA.NrwPI]niYY-Ay?kkgCXIkvkpw^qz/o.D3lQDlarR^Haz2C33lQDlarR!rzE:\u003emavZ6YwEoL5arUlkwfr9tq/(}#wEoL5wO#33boPuZv}YAXwO#33boP/\u003ewo8y4zWD",
            "ln": 3371,
            "col": 59,
            "line": 117
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "exist?"
            ],
            [
              "",
              "path_for_key"
            ],
            [
              "",
              "respond_to?"
            ],
            [
              "",
              "send"
            ],
            [
              "",
              "path_for_key"
            ],
            [
              "",
              "split"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "decode"
            ],
            [
              "",
              "delete"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "encode"
            ],
            [
              "",
              "open"
            ],
            [
              "",
              "path_for_key"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "rm_rf"
            ],
            [
              "",
              "path_for_key"
            ],
            [
              "",
              "rm_rf"
            ],
            [
              "",
              "join"
            ],
            [
              "",
              "escape"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "mkdir_p"
            ],
            [
              "",
              "exist?"
            ]
          ],
          "mbr": [
            "FileUtils.mkdir_p",
            "FileUtils.rm_rf",
            "Time.new",
            "Time.new.to_i",
            "contents.split",
            "expires_in.to_i",
            "expires_in.to_s",
            "key.to_s",
            "parser.decode",
            "parser.encode"
          ],
          "tgt": [
            "Array",
            "decode",
            "delete",
            "each",
            "encode",
            "escape",
            "exist?",
            "join",
            "mkdir_p",
            "new",
            "open",
            "path_for_key",
            "respond_to?",
            "rm_rf",
            "send",
            "split",
            "to_i",
            "to_s"
          ],
          "funcs": [
            [
              "initialize",
              646
            ],
            [
              "get",
              1023
            ],
            [
              "set",
              2056
            ],
            [
              "delete",
              2828
            ],
            [
              "flush",
              3187
            ],
            [
              "path_for_key",
              3291
            ],
            [
              "init",
              3416
            ]
          ],
          "metrics": {
            "ast": {
              "op.eq": 1,
              "op.lt": 2,
              "op.add": 1,
              "op.lor": 1,
              "op.shl": 3,
              "op.sub": 2,
              "op.land": 1,
              "max_depth": 19,
              "op.concat": 22,
              "call_count": 29,
              "node_count": 504,
              "member_count": 10,
              "op_density.eq": 0,
              "op_density.lt": 0,
              "op_density.add": 0,
              "op_density.lor": 0,
              "op_density.shl": 0.01,
              "op_density.sub": 0,
              "op_density.land": 0,
              "max_concat_chain": 2,
              "member_depth_max": 3,
              "op_density.concat": 0.04
            },
            "file": {
              "size": 3561,
              "entropy": 4.15
            },
            "text": {
              "lines": 127,
              "top_char": 101,
              "max_ws_run": 4,
              "digit_ratio": 0.01,
              "space_count": 1311,
              "char_entropy": 4.15,
              "unique_chars": 73,
              "top_char_null": 0,
              "string_density": 0.02,
              "top_char_ratio": 0.07,
              "avg_line_length": 27.04,
              "max_line_length": 101,
              "empty_line_ratio": 0.06,
              "last_line_length": 13,
              "whitespace_ratio": 0.4,
              "identifier_density": 0.87,
              "line_length_stddev": 20.99,
              "normalized_string_count": 0.27,
              "repeated_char_sequences": 31,
              "suspicious_identifier_ratio": 0.04,
              "normalized_unique_identifiers": 6.73
            },
            "binds": {
              "count": 8
            },
            "binary": {
              "peak_region_bytes": 3561,
              "peak_region_entropy": 4.14
            },
            "source": {
              "class_count": 4,
              "function_count": 7
            },
            "strings": {
              "bytes": 4,
              "count": 3,
              "avg_length": 1.33,
              "max_length": 2,
              "avg_entropy": 0.33,
              "entropy_stddev": 0.47
            },
            "comments": {
              "chars": 1296,
              "count": 72,
              "empty": 15,
              "lines": 57,
              "to_code_ratio": 0.81
            },
            "functions": {
              "count": 11
            },
            "identifiers": {
              "count": 111,
              "unique": 47,
              "avg_length": 5.57,
              "max_length": 12,
              "min_length": 1,
              "avg_entropy": 2.14,
              "reuse_ratio": 0.42,
              "length_stddev": 2.58,
              "sequential_names": 2,
              "single_char_count": 2,
              "single_char_ratio": 0.04,
              "all_lowercase_ratio": 0.7,
              "all_uppercase_ratio": 0.02
            }
          }
        },
        "id": 3,
        "mol": "H₂(DbF₂)",
        "path": "padrino-cache-0.11.1.gem!!data.tar.gz!!lib/padrino-cache/store/file.rb",
        "risk": 3,
        "sha": "7023c07cd431ecb844f4f0c1541aa6f6f606701ebea5ed181916d8a4007cd4a2",
        "size": 3561,
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\"",
            "spans": [
              [
                768,
                0
              ]
            ]
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\"",
            "spans": [
              [
                780,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-send-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically invokes a method with send",
            "spans": [
              [
                1197,
                4
              ]
            ]
          },
          {
            "id": "micro-behaviors/fs/directory/delete::ruby-fileutils-rm-rf",
            "atk": "T1070.004",
            "mbc": "C0047",
            "conf": 0.95,
            "crit": 3,
            "desc": "Ruby recursively deletes a directory tree",
            "spans": [
              [
                2891,
                5
              ]
            ]
          },
          {
            "id": "micro-behaviors/fs/directory/mkdir::ruby-fileutils-mkdir-p",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby creates a directory tree",
            "spans": [
              [
                3435,
                18
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "id": 4,
        "mol": "H₂(CmDb)",
        "sha": "874a51d3b50e2cca4134cdad81296b4d350c4d6b14bc85574094c763c622dd89",
        "path": "padrino-cache-0.11.1.gem!!data.tar.gz!!lib/padrino-cache/store/redis.rb",
        "risk": 2,
        "size": 3287,
        "type": "ruby",
        "depth": 2
      },
      {
        "ctx": [
          {
            "b": "boXZ.B8\u0026{yx(kOnzGWdnwO\u0026M0B.LV53l{W8zEWP}x(mMAaA.^reJs7AA+flkx(W=cmRMWIe[GoDvqYQ.Aa9\u003c4c)yn@fd[\u003egAa9o$x(m\u0026vv@Dy0fkLuifk$ugA+PAfeN@ZtwInjrA=U@kzz2%sa$K\u003czuQ^QXmpfyJ3jopmz8%ZRAaJJ[w[+:-BzkVhe]ClAay]ykD#\u003cVxarU.TzEEx[auZ?\u003eAa9o$x(m\u0026vv{@\u003eXwG?E7aAGeQBZ/Sdz/PG4uVp47ygQ)%auZ?\u003eAa9o$x(m\u0026vv{@\u003eXwG?E7aAGezB-.qnA=Su^ax{3^vpTy)zF{T%wNPB1efDcivruf\u003ezxIw?ADL\u0026gvr#SiefDc8vrMu}wGTw*l1+aSBzkSha$J",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "vqfK2jS\u003e}/vpTy)zF%M8kXB}xx(2ziz/3W9arU.TB9htpvrcSojS\u003e}Bvp%c]vqYP#w].r)zdNQbay!?\u0026xLzu%azbLjaw=GSA+PAfa{]CnB1RcAzdNV{xjShGar\u003eGvBz%n]fl.R:e]UlfA+PAfA:*Uhz/3W9arU.TwmY*(A+PGmx(v(ijS\u003e}ovpJ$+zF78kB-qqrA=-Boz/M$qwO\u003e{=v}YB:efF[uxjSh]zE:(4A:-P$wO#Pl3lQEje]\u003eJyB.L(cwm6w1vThP$zf66cwPz\u003caz/cWXar\u003c0jatCG8e\u0026B)XarU.TC4CYnx(v(ijS\u003c",
            "ln": 320,
            "col": 7,
            "line": 10
          },
          {
            "b": "z7N5Aa$i\u003caarU.TwQ5rqvpa4=z!0c^x(4v4auZ\u0026nx(WA4dLt:Lz^%$%3lQEje[O*lwPF$parR^HarR^\u0026ayF?@BrCyveOnZkwPIliB8U@fBsntrzxZIparU.TBy/JnuUj1*wPF$parS/\u0026u$Tg}az=9Jw[=6)B094^aBwiwB95%OAaJJgw[ty)B-I5mEj)6Te]$#Fx(\u003e:EtY7-m3lQEje[Gosv%8)4vR/Q%arR^\u0026ayF?@BrCyveOnZkwPF$CeG!Ipzz9FEe]$#Fx(\u003e:EtY7-me]t3oDMWYFD($))y?kkdvrl0$vqPN7w*[\u003cJ3lQEje]\u003eJyB.L(cuVoB}xMCpVax{4ax\u003c@n(3lQEje]\u003eGvv{:d[BzkVhB08O*ax{3weN@E5A=U/ljYLDJeJs}W3jm)#B1Q)iwm6w1zGGPfwNw$V",
            "ln": 620,
            "col": 35,
            "line": 16
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "require"
            ],
            [
              "",
              "expand_path"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "rubyforge_project"
            ],
            [
              "",
              "authors"
            ],
            [
              "",
              "email"
            ],
            [
              "",
              "summary"
            ],
            [
              "",
              "homepage"
            ],
            [
              "",
              "description"
            ],
            [
              "",
              "required_rubygems_version"
            ],
            [
              "",
              "version"
            ],
            [
              "",
              "version"
            ],
            [
              "",
              "date"
            ],
            [
              "",
              "strftime"
            ],
            [
              "",
              "now"
            ],
            [
              "",
              "extra_rdoc_files"
            ],
            [
              "",
              "files"
            ],
            [
              "",
              "split"
            ],
            [
              "",
              "test_files"
            ],
            [
              "",
              "split"
            ],
            [
              "",
              "executables"
            ],
            [
              "",
              "map"
            ],
            [
              "",
              "split"
            ],
            [
              "",
              "basename"
            ],
            [
              "",
              "require_paths"
            ],
            [
              "",
              "rdoc_options"
            ],
            [
              "",
              "add_runtime_dependency"
            ],
            [
              "",
              "version"
            ],
            [
              "",
              "add_runtime_dependency"
            ],
            [
              "",
              "version"
            ]
          ],
          "mbr": [
            "File.basename",
            "File.expand_path",
            "Padrino.version",
            "Time.now",
            "Time.now.strftime",
            "s.add_runtime_dependency",
            "s.authors",
            "s.date",
            "s.description",
            "s.email",
            "s.executables",
            "s.extra_rdoc_files",
            "s.files",
            "s.homepage",
            "s.name",
            "s.rdoc_options",
            "s.require_paths",
            "s.required_rubygems_version",
            "s.rubyforge_project",
            "s.summary",
            "s.test_files",
            "s.version"
          ],
          "tgt": [
            "add_runtime_dependency",
            "authors",
            "basename",
            "date",
            "description",
            "email",
            "executables",
            "expand_path",
            "extra_rdoc_files",
            "files",
            "homepage",
            "map",
            "name",
            "new",
            "now",
            "rdoc_options",
            "require",
            "require_paths",
            "required_rubygems_version",
            "rubyforge_project",
            "split",
            "strftime",
            "summary",
            "test_files",
            "version"
          ],
          "metrics": {
            "ast": {
              "max_depth": 10,
              "op.concat": 30,
              "call_count": 31,
              "node_count": 313,
              "member_count": 22,
              "max_array_len": 4,
              "member_depth_max": 3,
              "op_density.concat": 0.1
            },
            "file": {
              "size": 1065,
              "entropy": 5.03
            },
            "text": {
              "lines": 27,
              "top_char": 101,
              "max_ws_run": 9,
              "digit_ratio": 0.01,
              "space_count": 121,
              "char_entropy": 5.03,
              "unique_chars": 69,
              "top_char_null": 0,
              "string_density": 0.78,
              "top_char_ratio": 0.07,
              "avg_line_length": 38.44,
              "max_line_length": 86,
              "empty_line_ratio": 0.15,
              "last_line_length": 3,
              "whitespace_ratio": 0.14,
              "identifier_density": 2.3,
              "line_length_stddev": 25.77,
              "normalized_string_count": 4.04,
              "suspicious_identifier_ratio": 0.06,
              "normalized_unique_identifiers": 7.15
            },
            "binds": {
              "count": 16
            },
            "binary": {
              "peak_region_bytes": 1024,
              "peak_region_entropy": 5.04
            },
            "strings": {
              "bytes": 326,
              "count": 21,
              "url_count": 1,
              "avg_length": 15.52,
              "max_length": 48,
              "path_count": 1,
              "avg_entropy": 2.81,
              "email_count": 1,
              "entropy_stddev": 1.29
            },
            "comments": {
              "chars": 39,
              "count": 2,
              "lines": 2,
              "to_code_ratio": 0.08
            },
            "identifiers": {
              "count": 62,
              "unique": 34,
              "avg_length": 8.12,
              "max_length": 25,
              "min_length": 1,
              "avg_entropy": 2.42,
              "reuse_ratio": 0.55,
              "length_stddev": 5.55,
              "sequential_names": 2,
              "single_char_count": 2,
              "single_char_ratio": 0.06,
              "high_entropy_count": 3,
              "high_entropy_ratio": 0.09,
              "all_lowercase_ratio": 0.79,
              "all_uppercase_ratio": 0.03,
              "double_underscore_count": 1,
              "underscore_prefix_count": 1
            }
          }
        },
        "id": 5,
        "mol": "H₂(CmPo)Md(Pa)",
        "path": "padrino-cache-0.11.1.gem!!data.tar.gz!!padrino-cache.gemspec",
        "risk": 3,
        "sha": "97e30095d835a2e5e5d692b6ba3480f88e93ba7bf42b513d4e8e03c4d266640e",
        "size": 1065,
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\"",
            "spans": [
              [
                389,
                0
              ]
            ]
          },
          {
            "id": "metadata/package/config::gemspec-name-assignment",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby gemspec assigns package name",
            "spans": [
              [
                130,
                40
              ]
            ]
          },
          {
            "id": "micro-behaviors/communications/http/message::http-prefix",
            "conf": 0.9,
            "crit": 2,
            "desc": "HTTP protocol prefix",
            "spans": [
              [
                418,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-subshell-command",
            "conf": 0.93,
            "crit": 3,
            "desc": "Ruby subshell command execution",
            "spans": [
              [
                685,
                14
              ],
              [
                732,
                40
              ],
              [
                805,
                23
              ]
            ]
          },
          {
            "id": "micro-behaviors/communications/http/message::http-url-literal",
            "conf": 0.75,
            "crit": 2,
            "desc": "HTTP URL string literal",
            "spans": [
              [
                418,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/communications/http/url/scheme::cleartext-http-url-code-literal",
            "atk": "T1071.001",
            "mbc": "C0002",
            "conf": 0.9,
            "crit": 3,
            "desc": "Code embeds cleartext HTTP URL literal",
            "spans": [
              [
                418,
                24
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "id": 6,
        "mol": "H(Po)",
        "sha": "67eca956057ca60836cbbb922c6c05e318f990e84104d4f93f40f26275b27d7a",
        "path": "padrino-cache-0.11.1.gem!!data.tar.gz!!test/test_padrino_cache.rb",
        "risk": 2,
        "size": 6496,
        "type": "ruby",
        "depth": 2
      },
      {
        "ctx": [
          {
            "b": "A+flkx(W=cmRMWIe[GoDvqYQ.Aa9\u003c4c){S1fka{kAaK5qefFqbmOcoxuTCk?3r7RDA+e=7jS)jdy?kktwNP9(mRMWIe[GoDvqYQ.Aa9\u003c4c){S1flp/nA+e=lA:*yEaywFBnLzMWuNVr?vR6g^zvdHeA+flkx(W=ccV9Biv{@\u003eXwN)d}arR)KCv-dxwGU-gB95Kqz!T94aARJAvrlHjzdK\u0026bwO\u003e{=v}YB:azC)tA=(nqx(mMaz/cXtxK@q%wObv[y\u0026*!sz/P}barTG?wo8y4z-P{DvpJ$ZiYZhYz/PzIi.:g5v{@\u003eXwId\u003eiCpkHko\u003ewfKvpJ$Zwg?+hCpj*[gb**te?![jiX-uAf!\u003e4bauB7Uv}xR3x(r",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "C4A3I3uxZ0v%8u9oMauImriA!ATA{iCvtJfar\u003c:1x(F39zF78ewO\u003e{=v}YA@Cwhejaz\u003eXbv{@\u003eXwN({1x\u003c#9\u003eA^n^HwPI%ma{@v4B7ou7awDA:v{@\u003eXwN)?.q*ACawO\u003c\u003eRA=k$9arU(pA=90zq!{8^Aa%i5az\u003eXbv{@\u003eXwGVhhBz8!lwO\u003e{=v}YB:",
            "ln": 330,
            "col": 119,
            "line": 8
          },
          {
            "b": "e[O{xB7+[6arR^Hav73WB97=8wQbyYar\u003e#qy*OAlrb3hXe]CPKe{82sx)?fjarR^HwO#2=3lQDlay]4}aARg6A+69jzvdHearR^Hp*))Px(m\u0026wv{@\u003eXwIdOhB-Rj6arR^HwO#2=3lQDlaz2.8y-(U\u0026vrb{\u00263lQE5zE:8=zE:7YvR6g^zvdHeA+flkx(W=ccUcU4y?Um7arR)KCv-dxwGU-gB95Kqz!T94aARJAvrlHjzdK\u0026bwO\u003e{=v}YB:azC)tA=(nqx(mMaz/cXtxK@q%wObv[y\u0026*!sz/P}barTG?wo8y4z-P{Dve",
            "ln": 684,
            "col": 20,
            "line": 17
          },
          {
            "b": "A^n^HwPI%ma{}[0wc@VMwOkZ{3lQEiwPq\u003cbA+cvvA+e=}B0?qqaw=GSA+PAfiYYSpv}YBmi-ycsA+do)qE%xMB1RuwCpkHkqE%xMB1RuwCpkH=z/Z1yjW6#of!$WufA",
            "ln": 1433,
            "col": 43,
            "line": 48
          },
          {
            "b": "xkY*(lVl\u003cWwN/*@z/dgBwP]KIf!$WufFk4if^!H{gb*)whZ{v\u0026vKJQyvpTy)zF}apvpJ$ZuVY\u003e2BseH^3uxZ0v%8u9oMauImriA!ATA{iCvtJfar\u003c:1x(F39zF77^zV",
            "ln": 2286,
            "col": 41,
            "line": 83
          },
          {
            "b": "vq{gczeZQXar\u00264Sl${V]BzU#cx(XRPAa9o$x(m\u0026vBy/JnB1X++rAhQUe]ClAe[X:kwPzj3wQL:farR^HmRMWIrDI}\u003eB1RrBwnc6\u003eA40$WAbY]oA48bparR!6vpTy)zF}dqvpJ$ZauZ\u0026zvpTy)zF}M%lT:FrwJz\u003eJBz(hhiYY-Ay?kkpwP]K/vq{gczeZ{harR^HkY*NUBye/{C{2l)b6EyhuN6[%x(dAlzF%.KBz\u003eJ2EiG1vaz2C33jm)#wmYu}By!)3wn.",
            "ln": 2903,
            "col": 6,
            "line": 106
          },
          {
            "b": "x!BHCuVNUsEf}8tarU9lB7GxluUak1vqE67x(2syp*))Px(m\u0026wv{@\u003eXwIdRbBsnH\u003ccN/xBarR!nB8$]kByeQ0BZY8ecOV#1aw=GSA+PAfe[ns1xK@/ewPPsFf^!y",
            "ln": 3452,
            "col": 46,
            "line": 132
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "require"
            ],
            [
              "",
              "expand_path"
            ],
            [
              "",
              "read"
            ],
            [
              "",
              "expand_path"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "set"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "warn"
            ],
            [
              "",
              "warn"
            ],
            [
              "",
              "describe"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "now"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "eval"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "set"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "describe"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "now"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "eval"
            ],
            [
              "",
              "warn"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "set"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "warn"
            ],
            [
              "",
              "warn"
            ],
            [
              "",
              "describe"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "now"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "eval"
            ],
            [
              "",
              "eval"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "db"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "warn"
            ],
            [
              "",
              "warn"
            ],
            [
              "",
              "describe"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "db"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "now"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "eval"
            ],
            [
              "",
              "describe"
            ],
            [
              "",
              "tmpdir"
            ],
            [
              "",
              "generate"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "mkdir_p"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "now"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "eval"
            ],
            [
              "",
              "describe"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "to_i"
            ],
            [
              "",
              "now"
            ],
            [
              "",
              "flush"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "eval"
            ],
            [
              "",
              "should"
            ],
            [
              "",
              "times"
            ],
            [
              "",
              "set"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "assert_equal"
            ],
            [
              "",
              "get"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "assert_equal"
            ],
            [
              "",
              "get"
            ],
            [
              "",
              "cache"
            ],
            [
              "",
              "dalli"
            ],
            [
              "",
              "memcached"
            ],
            [
              "",
              "mongo"
            ],
            [
              "",
              "redis"
            ]
          ],
          "mbr": [
            "Dir.tmpdir",
            "File.expand_path",
            "File.read",
            "FileUtils.mkdir_p",
            "Padrino.cache",
            "Padrino.cache.flush",
            "Padrino.cache.get",
            "Padrino.cache.set",
            "Time.now",
            "Time.now.to_i",
            "UUID.new",
            "UUID.new.generate",
            "i.to_s"
          ],
          "tgt": [
            "assert_equal",
            "cache",
            "db",
            "describe",
            "eval",
            "expand_path",
            "flush",
            "generate",
            "get",
            "mkdir_p",
            "new",
            "now",
            "read",
            "require",
            "set",
            "should",
            "times",
            "tmpdir",
            "to_i",
            "to_s",
            "warn"
          ],
          "funcs": [
            [
              "setup",
              532
            ],
            [
              "teardown",
              745
            ],
            [
              "setup",
              1087
            ],
            [
              "teardown",
              1304
            ],
            [
              "setup",
              1771
            ],
            [
              "teardown",
              1976
            ],
            [
              "setup",
              2533
            ],
            [
              "teardown",
              2787
            ],
            [
              "setup",
              2888
            ],
            [
              "teardown",
              3103
            ],
            [
              "setup",
              3196
            ],
            [
              "teardown",
              3312
            ]
          ],
          "metrics": {
            "ast": {
              "max_depth": 15,
              "op.concat": 77,
              "call_count": 105,
              "node_count": 1069,
              "member_count": 13,
              "member_depth_max": 3,
              "op_density.concat": 0.07
            },
            "file": {
              "size": 3562,
              "entropy": 4.97
            },
            "text": {
              "lines": 136,
              "top_char": 101,
              "max_ws_run": 2,
              "digit_ratio": 0.04,
              "space_count": 507,
              "char_entropy": 4.97,
              "unique_chars": 67,
              "top_char_null": 0,
              "string_density": 0.35,
              "top_char_ratio": 0.09,
              "avg_line_length": 25.19,
              "max_line_length": 163,
              "empty_line_ratio": 0.16,
              "last_line_length": 3,
              "whitespace_ratio": 0.18,
              "identifier_density": 1.7,
              "line_length_stddev": 30.69,
              "normalized_string_count": 4.12,
              "suspicious_identifier_ratio": 0.02,
              "normalized_unique_identifiers": 6.77
            },
            "binds": {
              "count": 14
            },
            "binary": {
              "peak_region_bytes": 3562,
              "peak_region_entropy": 4.98
            },
            "source": {
              "function_count": 2
            },
            "imports": {
              "count": 4,
              "third_party_count": 4,
              "third_party_ratio": 1
            },
            "strings": {
              "bytes": 913,
              "count": 48,
              "ip_count": 4,
              "avg_length": 19.02,
              "max_length": 147,
              "path_count": 2,
              "avg_entropy": 2.85,
              "entropy_stddev": 1.08
            },
            "comments": {
              "chars": 136,
              "count": 2,
              "lines": 2,
              "to_code_ratio": 0.01
            },
            "functions": {
              "count": 2
            },
            "identifiers": {
              "count": 231,
              "unique": 48,
              "avg_length": 6.42,
              "max_length": 18,
              "min_length": 1,
              "avg_entropy": 2.26,
              "reuse_ratio": 0.21,
              "length_stddev": 3.37,
              "sequential_names": 1,
              "single_char_count": 1,
              "single_char_ratio": 0.02,
              "all_lowercase_ratio": 0.5,
              "all_uppercase_ratio": 0.04,
              "double_underscore_count": 1,
              "underscore_prefix_count": 1
            }
          }
        },
        "id": 7,
        "mol": "H₂(FPo)",
        "path": "padrino-cache-0.11.1.gem!!data.tar.gz!!test/test_stores.rb",
        "risk": 3,
        "sha": "c59508020528e08695d04659359f79b2e2900f7f840e28b7b7ffd95d59cd75a7",
        "size": 3562,
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\"",
            "spans": [
              [
                195,
                0
              ]
            ]
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory-path",
            "conf": 1.0,
            "crit": 1,
            "desc": "File is in common test directory",
            "spans": [
              [
                0,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/fs/directory/mkdir::ruby-fileutils-mkdir-p",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby creates a directory tree",
            "spans": [
              [
                2967,
                18
              ]
            ]
          },
          {
            "id": "micro-behaviors/process/interpreter/eval::ruby-eval",
            "atk": "T1059",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamic code evaluation call",
            "spans": [
              [
                797,
                4
              ]
            ]
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory",
            "conf": 1.0,
            "crit": 2,
            "desc": "File identified as a test by path or name",
            "spans": [
              [
                0,
                0
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "id": 22,
        "sha": "8451cf4d6081c8dc00d31e0f3b6d1ffc81836275e5dd5adc1a41121d13c3bb18",
        "path": "padrino-core@0.16.1.registry.json",
        "size": 923,
        "type": "registry",
        "depth": 1
      },
      {
        "id": 23,
        "sha": "e802ce380f3134327eed23a83587886238466c7ff1ef8119f3d002e3f0939379",
        "path": "padrino-helpers@0.16.1.registry.json",
        "size": 960,
        "type": "registry",
        "depth": 1
      },
      {
        "id": 24,
        "sha": "426c7d72e638fb1aacb4a2cfa05f9728a0091fd5e5bf762d763511faa413380d",
        "path": "padrino-cache@0.11.1.registry.json",
        "size": 918,
        "type": "registry",
        "depth": 1
      }
    ],
    "omitted_files": 5,
    "rev": "479f3",
    "v": "8"
  }
}