diff --git a/README.md b/README.md
index 39503b4..46d60f1 100644
--- a/README.md
+++ b/README.md
@@ -77,6 +77,15 @@ CLA = `A0` (GSM 11.11 / ISO 7816-4).
| By DF name / AID | 04 | 00 | AID (application ID) |
| ADF RFM chain | 00 | 00 | Comma-separated FIDs, each selected in turn |
+#### SELECT file picker
+
+Every SELECT row offers a file picker: a filter box, an **all files** toggle, the session start root with the current DF, and the file list grouped by root (`MF`, `ADF.USIM`, ...). Picking a file fills the fields for the current method; when the method cannot express the selection the picker switches to one that can - preferring **path** (one SELECT), then **chain** - and says so, e.g. `7F106F40` (path from MF) or `7F20,6F46` (relative FID chain).
+
+- **List source**: with a card equipped the loaded file-manager tree wins (card names, probed presence; probed-absent files are hidden). Without a card, or for branches the tree has not loaded, the shipped standard list is used: `uicc_files.json`, generated from pySim's profiles/application classes by `pysim_simple_server/uicc_files.py` and drift-guarded by `tests/test_uicc_files.py`. It is specs-default until **Probe all files** runs in the file manager. Custom files are always merged.
+- **Session start**: the implicit current DF follows the TAR the secured packet is sent to (UICC Shared File System RFM -> MF, TS 102 226 §7.2; ADF RFM -> its ADF, §7.3). Defaults: MF here, ADF.USIM for USIM RFM; changeable per row.
+- **Path** is the FID sequence from MF without the MF identifier (ISO 7816-4); the USIM "from current DF" variant uses the relative tail. **Chain** stays relative to the current DF and follows the TS 102 221 §11.1.1.2 FID search order (children, parent, siblings).
+- ADF roots are not pickable - an application is selected by AID, which the **By AID** method keeps manual (TS 102 226 §7.1 forbids P1=`04` for RFM).
+
#### Options
- **Start with SELECT** — checkbox to prepend a SELECT command before the operation. When unchecked, the operation is sent standalone with CLA.
diff --git a/README_RUS.md b/README_RUS.md
index 3ab77d3..63aed67 100644
--- a/README_RUS.md
+++ b/README_RUS.md
@@ -77,6 +77,15 @@ CLA = `A0` (GSM 11.11 / ISO 7816-4).
| By DF name / AID | 04 | 00 | AID |
| ADF RFM chain | 00 | 00 | FID через запятую |
+#### Выбор файла для SELECT
+
+У каждой строки SELECT есть выбор файла: поле фильтра, переключатель **all files**, корень начала сессии с текущим DF и список файлов по корням (`MF`, `ADF.USIM`, ...). Выбор файла заполняет поля текущего метода; если метод не может выразить выбор, помощник переключается на подходящий - предпочитая **path** (один SELECT), затем **chain** - и сообщает об этом, например `7F106F40` (путь от MF) или `7F20,6F46` (относительная цепочка FID).
+
+- **Источник списка**: при подключённой карте приоритет у загруженного дерева файлового менеджера (имена карты, проверенное наличие; отсутствующие скрываются). Без карты и для незагруженных ветвей используется поставляемый стандартный список: `uicc_files.json`, собранный из профилей/классов приложений pySim скриптом `pysim_simple_server/uicc_files.py` и проверяемый `tests/test_uicc_files.py`. До запуска **«Проверить все файлы»** список соответствует спецификациям. Пользовательские файлы добавляются всегда.
+- **Начало сессии**: неявный текущий DF зависит от TAR, на который отправляется защищённый пакет (UICC Shared File System RFM -> MF, TS 102 226 §7.2; ADF RFM -> свой ADF, §7.3). По умолчанию: MF здесь и ADF.USIM для USIM RFM; меняется для каждой строки.
+- **Path** - последовательность FID от MF без идентификатора MF (ISO 7816-4); вариант USIM «from current DF» использует относительный хвост. **Chain** остаётся относительным к текущему DF и следует порядку поиска FID из TS 102 221 §11.1.1.2 (дети, родитель, соседи).
+- Корни ADF не выбираются - приложение выбирается по AID, и метод **By AID** остаётся ручным (TS 102 226 §7.1 запрещает P1=`04` для RFM).
+
#### Опции
- **Start with SELECT** — добавить SELECT перед командой.
diff --git a/frontend/help-ru.html b/frontend/help-ru.html
index fb3215f..5dbe109 100644
--- a/frontend/help-ru.html
+++ b/frontend/help-ru.html
@@ -94,6 +94,15 @@
Для record-команд режим P2: Absolute (04) , Next (02) или Previous (03) . Если за Case 4 командой сразу следует строка GET RESPONSE, сборщик цепочки автоматически убирает её байт Le (ETSI TS 102 226 §5.1.1). В правой колонке — панель конвертации (IMSI, MSISDN, ICCID, SPN, PLMN, nibble swap). См. §2.5 .
→ Расширенный скрипт отправляет собранную цепочку в конструктор Expanded Script строками C-APDU (строки GET RESPONSE отбрасываются — расширенный формат их не использует, TS 102 226 §5.2.1.1). Приложение UICC Shared File System RFM (TAR B00000) доступно и в компактном, и в расширенном формате — если TAR не настроен на автоопределение формата, используются разные значения TAR (TS 102 226 §7.0/§5.3).
+ Выбор файла для SELECT
+ У каждой строки SELECT под полями метода есть выбор файла: поле фильтра, переключатель all files , корень начала сессии с текущим DF и список файлов, сгруппированный по корню (MF, ADF.USIM, …). Выбор файла заполняет поля текущего метода; если метод не может выразить выбор, помощник переключается на подходящий — предпочитая path (один SELECT), затем chain — и пишет об этом в строке примечания, например файл из другого DF становится 7F106F40 (путь от MF) или 7F20,6F46 (относительная цепочка FID).
+
+ Источник списка : при подключённой карте приоритет у загруженного дерева файлового менеджера (имена карты и проверенное наличие; отсутствующие файлы скрываются). Без карты и для незагруженных ветвей используется поставляемый стандартный список — uicc_files.json, собранный из профилей/классов приложений pySim скриптом pysim_simple_server/uicc_files.py и проверяемый тестом. До запуска «Проверить все файлы» в файловом менеджере список соответствует спецификациям. Пользовательские файлы добавляются всегда.
+ Начало сессии : неявный текущий DF зависит от TAR , на который отправляется защищённый пакет — приложение UICC Shared File System RFM начинает с MF (TS 102 226 §7.2), приложение ADF RFM — со своего ADF (§7.3). По умолчанию помощник берёт MF для этого конструктора и ADF.USIM для USIM RFM (в соответствии с TAR пресетов); можно изменить для каждой строки.
+ Path — последовательность FID от MF без идентификатора MF (ISO 7816-4: «select from the MF — path without the MF identifier»); вариант USIM from current DF использует относительный хвост. Chain остаётся относительным к текущему DF и следует порядку поиска FID из TS 102 221 §11.1.1.2 (дети → родитель → соседи), поэтому переход к общему предку не нужен.
+ Корни ADF не выбираются: приложение выбирается по AID, и метод By AID остаётся ручным (TS 102 226 §7.1 запрещает P1=04 для RFM).
+
+
2.2 USIM RFM
CLA = 00 (ETSI TS 102 221). Тот же сборщик цепочки и набор команд, что и SIM, плюс административные команды UICC и формы SEARCH RECORD / INCREASE из TS 102 221:
diff --git a/frontend/help.html b/frontend/help.html
index 655fff1..138f045 100644
--- a/frontend/help.html
+++ b/frontend/help.html
@@ -94,6 +94,15 @@
For record commands, the P2 mode is Absolute (04) , Next (02) , or Previous (03) . When a Case 4 command is immediately followed by a GET RESPONSE row, the chain builder strips its trailing Le byte automatically (ETSI TS 102 226 §5.1.1). A conversion panel is embedded in the right column (IMSI, MSISDN, ICCID, SPN, PLMN, nibble swap). See §2.5 .
→ Expanded Script sends the built chain to the Expanded Script builder as C-APDU rows (GET RESPONSE hops are dropped — the expanded format does not use them, TS 102 226 §5.2.1.1). The UICC Shared File System RFM application (TAR B00000) is reachable with either the compact or the expanded format — unless the TAR is configured for automatic format detection, the two use different TAR values (TS 102 226 §7.0/§5.3).
+ SELECT file picker
+ Every SELECT row has a file picker below the method fields: a filter box, an all files toggle, the session start root with the current DF, and the file list grouped by root (MF, ADF.USIM, …). Picking a file fills the fields for the current method; when the method cannot express the selection the picker switches to one that can — preferring path (one SELECT), else chain — and says so in the note line, e.g. a file under another DF becomes 7F106F40 (path from MF) or 7F20,6F46 (relative FID chain).
+
+ List source : with a card equipped the loaded file-manager tree wins (card names and probed presence; probed-absent files are hidden). Without a card, or for branches the tree has not loaded, the shipped standard list is used — uicc_files.json, generated from pySim's profiles/application classes by pysim_simple_server/uicc_files.py and kept in sync by a test. The list is specs-default until you run Probe all files in the file manager. Custom files are always merged.
+ Session start : the implicit current DF depends on the TAR the secured packet is sent to — the UICC Shared File System RFM application starts in MF (TS 102 226 §7.2), an ADF RFM application in its ADF (§7.3). The picker defaults to MF for this builder and ADF.USIM for USIM RFM (matching the preset TARs) and can be changed per row.
+ Path is the FID sequence from MF without the MF identifier (ISO 7816-4: “select from the MF — path without the MF identifier”); the USIM from current DF variant uses the relative tail. Chain stays relative to the current DF and follows the FID search order of TS 102 221 §11.1.1.2 (children → parent → siblings), so it never needs a hop to the common ancestor itself.
+ ADF roots are not pickable: an application is selected by AID, which the By AID method keeps manual (TS 102 226 §7.1 forbids P1=04 for RFM).
+
+
2.2 USIM RFM
CLA = 00 (ETSI TS 102 221). Same chain builder and command set as SIM, plus the UICC administrative commands, and the TS 102 221 forms of SEARCH RECORD / INCREASE:
diff --git a/frontend/index.html b/frontend/index.html
index 3fb5f15..b900204 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -1451,7 +1451,7 @@
// ===== Version =====
// Single source of truth for the PWA version: shown in the header and used
// by the server version check in pysimConnect().
-const SIMPLE_VERSION = '3.3.0';
+const SIMPLE_VERSION = '3.4.0';
document.getElementById('app-version').textContent = 'v' + SIMPLE_VERSION;
// ===== Tab switching =====
@@ -2449,7 +2449,7 @@ function chainSimFieldsHtml(chainId, idx, f, uf) {
var silent = usim && f.silent;
var html = '' +
'
Method ' +
- '
' +
+ '' +
'By FID ' +
'By path ' +
'By AID ' +
@@ -2482,6 +2482,7 @@ function chainSimFieldsHtml(chainId, idx, f, uf) {
html += 'FID chain (comma-separated) ' +
'
';
}
+ if (method !== 'dfname') html += rfmPickerHtml(chainId, idx, method);
return html;
}
if (cmd === 'read-record') {
@@ -3213,6 +3214,332 @@ function chainBuildFcp(chainId, idx, kind) {
chainRender(chainId);
}
+// ===== RFM SELECT file picker =====
+// The picker merges three file sources, deduped by the canonical FID path:
+// the loaded file-manager tree (authoritative names and probed presence), the
+// custom-file list, and the standard list shipped as frontend/uicc_files.json
+// (built from pySim by pysim_simple_server/uicc_files.py and precached by the
+// service worker, so the builders work offline). Probed-absent files
+// (exists === false) are dropped; without a card the list is the specs default
+// until "Probe all files" has run in the file manager.
+let _uiccStdFiles = null;
+let _uiccStdLoad = null;
+let _rfmShowAll = false;
+const _rfmFilter = {};
+const _rfmNotice = {};
+const _rfmStartDf = {};
+
+function rfmRowKey(chainId, idx) { return chainId + '#' + idx; }
+
+function uiccStdFilesLoad() {
+ if (_uiccStdFiles) return Promise.resolve(_uiccStdFiles);
+ if (!_uiccStdLoad) {
+ _uiccStdLoad = fetch('uicc_files.json')
+ .then(r => r.ok ? r.json() : Promise.reject(new Error('HTTP ' + r.status)))
+ .then(doc => { _uiccStdFiles = (doc && Array.isArray(doc.files)) ? doc.files : []; })
+ .catch(() => { _uiccStdFiles = []; })
+ .then(() => {
+ // Redraw pickers that were drawn before the list arrived.
+ Object.keys(_chains).forEach(id => {
+ if (document.getElementById(id + '-rows')) chainRender(id);
+ });
+ return _uiccStdFiles;
+ });
+ }
+ return _uiccStdLoad;
+}
+
+function rfmParentPath(path) { return (path || '').split('/').slice(0, -1).join('/'); }
+function rfmEntryByPath(list, path) {
+ const k = (path || '').toUpperCase();
+ for (const e of list) if (e.path === k) return e;
+ return null;
+}
+function rfmRoots(list) {
+ const set = new Set();
+ for (const e of list) set.add(e.root);
+ const roots = Array.from(set);
+ roots.sort((a, b) => (a === 'MF' ? -1 : b === 'MF' ? 1 : a.localeCompare(b)));
+ return roots;
+}
+
+// Merge the file sources; the first source wins per canonical path.
+function rfmFileEntries() {
+ const out = [];
+ const seen = new Set();
+ const nodes = {};
+ const add = (path, name, fid, kind, source, exists, aid) => {
+ const key = (path || '').toUpperCase();
+ if (!key || key.split('/').length < 2) return; // roots are group headers
+ if (exists === false) return; // probed absent
+ if (seen.has(key)) return;
+ seen.add(key);
+ out.push({
+ path: key, name: name, fid: (fid || '').toUpperCase(), kind: kind,
+ source: source, exists: exists, aid: (aid || '').toUpperCase(),
+ root: key.split('/')[0],
+ });
+ };
+ if (pysimFsTreeRoot) {
+ const walk = node => {
+ for (const ch of (node.children || [])) {
+ const p = pysimFsNodePath(ch);
+ if (p) nodes[p.toUpperCase()] = ch;
+ add(p, ch.name, ch.fid,
+ ch.isDir ? ((ch.name || '').startsWith('ADF.') ? 'adf' : 'df') : 'ef',
+ ch.custom ? 'custom' : 'card', ch.exists);
+ if (ch.isDir) walk(ch);
+ }
+ };
+ walk(pysimFsTreeRoot);
+ }
+ for (const c of pysimCustomFiles) {
+ const node = nodes[(c.path || '').toUpperCase()];
+ add(c.path, c.name, pysimCustomFid(c), c.kind === 'df' ? 'df' : 'ef',
+ 'custom', node ? node.exists : null);
+ }
+ for (const e of (_uiccStdFiles || [])) {
+ const node = nodes[(e.path || '').toUpperCase()];
+ add(e.path, e.name, e.fid, e.kind, 'standard', node ? node.exists : null, e.aid);
+ }
+ return out;
+}
+
+// --- session context (the implicit "current DF") ---
+// TS 102 226 7.2/7.3: the UICC Shared File System RFM application starts in
+// MF, an ADF RFM application in its ADF - it depends on the TAR the secured
+// packet is sent to, not on the builder, so the picker lets it be changed.
+function rfmStartDf(chainId) {
+ if (!_rfmStartDf[chainId]) {
+ _rfmStartDf[chainId] = chainKind(chainId) === 'usim' ? 'ADF.USIM' : 'MF';
+ }
+ return _rfmStartDf[chainId];
+}
+function rfmSetStartDf(chainId, value) {
+ _rfmStartDf[chainId] = (value || 'MF').toUpperCase();
+ chainRender(chainId);
+}
+function rfmNoticeClear(chainId, idx) { delete _rfmNotice[rfmRowKey(chainId, idx)]; }
+
+function rfmApplySelect(chainId, cur, f, list) {
+ const method = f.method || 'fid';
+ if (method === 'fid') {
+ const fid = (f.fid || '').toUpperCase();
+ const hit = list.find(e => rfmParentPath(e.path) === cur && e.fid === fid);
+ return hit ? (hit.kind === 'ef' ? cur : hit.path) : cur;
+ }
+ if (method === 'path') {
+ const hex = (f.path || '').replace(/[^0-9a-fA-F]/g, '').toUpperCase();
+ if (hex.length < 4 || hex.length % 4 !== 0) return cur;
+ let p = (chainKind(chainId) === 'usim' && f.base === 'df') ? cur : 'MF';
+ for (const fid of (hex.match(/.{4}/g) || [])) {
+ const hit = list.find(e => rfmParentPath(e.path) === p && e.fid === fid);
+ if (!hit) return cur;
+ p = hit.path;
+ }
+ const hit = rfmEntryByPath(list, p);
+ return hit ? (hit.kind === 'ef' ? rfmParentPath(hit.path) : hit.path) : cur;
+ }
+ if (method === 'chain') {
+ let c = cur;
+ for (const tok of (f.chain || '').split(',')) {
+ const t = tok.trim().toUpperCase();
+ if (!t || /^C0/.test(t)) continue;
+ c = rfmApplySelect(chainId, c, { method: 'fid', fid: t }, list);
+ }
+ return c;
+ }
+ if (method === 'dfname') {
+ const aid = (f.dfname || '').toUpperCase();
+ const hit = list.find(e => e.kind === 'adf' && e.aid === aid);
+ return hit ? hit.path : cur;
+ }
+ return cur;
+}
+
+function rfmCurrentDf(chainId, idx, list) {
+ let cur = rfmStartDf(chainId).toUpperCase();
+ const rows = (_chains[chainId] || { rows: [] }).rows || [];
+ for (let i = 0; i < idx; i++) {
+ const r = rows[i];
+ if (r.cmd !== 'select') continue;
+ cur = rfmApplySelect(chainId, cur, r.fields, list) || cur;
+ }
+ return cur;
+}
+
+// FID sequence from `base` down to `target` (same root), e.g. '7F106F3A'.
+function rfmFidsFrom(list, base, target) {
+ let p = (base || '').toUpperCase();
+ const t = (target || '').toUpperCase();
+ if (!t.startsWith(p + '/')) return '';
+ const fids = [];
+ for (const seg of t.slice(p.length + 1).split('/')) {
+ p = p + '/' + seg;
+ const e = rfmEntryByPath(list, p);
+ if (!e || !e.fid) return '';
+ fids.push(e.fid);
+ }
+ return fids.join('');
+}
+
+// Relative FID chain from cur to target, using the FID search order of
+// TS 102 221 11.1.1.2 (children -> parent -> children of the parent): the
+// sequence never needs a hop to the common ancestor itself.
+function rfmRelativeChain(list, cur, target) {
+ const c = (cur || '').toUpperCase().split('/');
+ const t = (target || '').toUpperCase().split('/');
+ if (c[0] !== t[0]) return ''; // different roots: FID cannot cross
+ let i = 0;
+ while (i < c.length && i < t.length && c[i] === t[i]) i++;
+ const fids = [];
+ for (let n = c.length - 1; n >= i + 1; n--) {
+ const e = rfmEntryByPath(list, c.slice(0, n).join('/'));
+ if (!e || !e.fid) return '';
+ fids.push(e.fid);
+ }
+ for (let n = i + 1; n <= t.length; n++) {
+ const e = rfmEntryByPath(list, t.slice(0, n).join('/'));
+ if (!e || !e.fid) return '';
+ fids.push(e.fid);
+ }
+ return fids.join(',');
+}
+
+// Which method can express a picked file at this row, and with what values.
+// When the row's method cannot express it the fill switches - preferring path
+// (one SELECT) over chain, per the agreed behaviour - and the picker says so.
+function rfmSelectFill(chainId, idx, entry, list) {
+ if (entry.kind === 'adf') return null; // ADF roots are selected by AID (manual)
+ const kind = chainKind(chainId);
+ const cur = rfmCurrentDf(chainId, idx, list);
+ const row = (_chains[chainId] || { rows: [] }).rows[idx] || { fields: {} };
+ const method = row.fields.method || 'fid';
+ const rowBase = row.fields.base || 'mf';
+ const cands = [];
+ if (rfmParentPath(entry.path) === cur) {
+ cands.push({ method: 'fid', fields: { fid: entry.fid } });
+ }
+ const pathDf = rfmFidsFrom(list, cur, entry.path);
+ if (kind === 'usim' && pathDf) cands.push({ method: 'path', fields: { path: pathDf, base: 'df' } });
+ const pathMf = rfmFidsFrom(list, 'MF', entry.path);
+ if (pathMf) cands.push({ method: 'path', fields: { path: pathMf, base: 'mf' } });
+ const chain = rfmRelativeChain(list, cur, entry.path);
+ if (chain) cands.push({ method: 'chain', fields: { chain: chain } });
+ if (!cands.length) return null;
+ const same = cands.find(c => c.method === method &&
+ (c.fields.base === undefined || c.fields.base === rowBase));
+ if (same) return { method: method, fields: same.fields, switched: false };
+ for (const m of ['path', 'chain', 'fid']) {
+ const matches = cands.filter(x => x.method === m);
+ if (!matches.length) continue;
+ const sameBase = matches.find(x => x.fields.base === undefined || x.fields.base === rowBase);
+ return { method: m, fields: (sameBase || matches[0]).fields, switched: true };
+ }
+ return null;
+}
+
+function rfmFileOptionsHtml(chainId, idx, list) {
+ const key = rfmRowKey(chainId, idx);
+ const filter = (_rfmFilter[key] || '').toUpperCase();
+ const groups = new Map();
+ let hidden = 0;
+ for (const e of list) {
+ if (e.kind === 'adf') continue;
+ if (filter) {
+ const hay = (e.name + ' ' + e.path + ' ' + (e.sym || '')).toUpperCase();
+ if (hay.indexOf(filter) < 0) continue;
+ }
+ const fill = rfmSelectFill(chainId, idx, e, list);
+ // Default: only what the current method can express. "all files"
+ // reveals the rest; picking one of those switches the method (the
+ // option is marked with the method it would switch to).
+ if (!fill || (!_rfmShowAll && fill.switched)) { hidden++; continue; }
+ if (!groups.has(e.root)) groups.set(e.root, []);
+ groups.get(e.root).push({ e: e, fill: fill });
+ }
+ let html = '— pick a file — ';
+ for (const [root, items] of groups) {
+ html += '';
+ for (const it of items) {
+ const parent = rfmParentPath(it.e.sym || it.e.path).replace(/^[^/]+\//, '');
+ html += '' +
+ escHtml(it.e.name + ' — ' + (it.e.fid || it.e.aid || '') + (parent ? ' — ' + parent : '') +
+ (it.fill && it.fill.switched ? ' → ' + it.fill.method : '')) +
+ ' ';
+ }
+ html += ' ';
+ }
+ if (!groups.size) {
+ html += '' +
+ (hidden ? 'no file matches the current method — check "all files"' : 'no matching files') +
+ ' ';
+ }
+ return html;
+}
+
+function rfmPickerHtml(chainId, idx, method) {
+ const list = rfmFileEntries();
+ const key = rfmRowKey(chainId, idx);
+ const cur = rfmCurrentDf(chainId, idx, list);
+ const filter = _rfmFilter[key] || '';
+ const notice = _rfmNotice[key];
+ const rootOpts = rfmRoots(list).map(r =>
+ '' + escHtml(r) + ' '
+ ).join('');
+ return '' +
+ '
' +
+ ' ' +
+ ' all files ' +
+ 'starts in ' +
+ '' + rootOpts + ' ' +
+ 'DF: ' + escHtml(cur) + ' ' +
+ '
' +
+ '
' + rfmFileOptionsHtml(chainId, idx, list) + ' ' +
+ '
' + escHtml(notice ? notice.text : '') + '
' +
+ '
';
+}
+
+function rfmFileFilterInput(input, chainId, idx) {
+ _rfmFilter[rfmRowKey(chainId, idx)] = input.value;
+ const sel = input.closest('.rfm-file-picker').querySelector('.rfm-file-select');
+ if (sel) sel.innerHTML = rfmFileOptionsHtml(chainId, idx, rfmFileEntries());
+}
+
+function rfmFileShowAll(cb) {
+ _rfmShowAll = cb.checked;
+ Object.keys(_chains).forEach(id => {
+ if (document.getElementById(id + '-rows')) chainRender(id);
+ });
+}
+
+function rfmFilePick(sel, chainId, idx) {
+ const key = rfmRowKey(chainId, idx);
+ const path = sel.value;
+ if (!path) return;
+ const list = rfmFileEntries();
+ const entry = list.find(e => e.path === path);
+ if (!entry) return;
+ const fill = rfmSelectFill(chainId, idx, entry, list);
+ if (!fill) {
+ _rfmNotice[key] = {
+ text: entry.name + ': not reachable from ' + rfmCurrentDf(chainId, idx, list) +
+ ' with FID/path/chain — an ADF is selected by AID (kept manual).',
+ cls: 'text-amber-600 dark:text-amber-400',
+ };
+ chainRender(chainId);
+ return;
+ }
+ const row = _chains[chainId].rows[idx];
+ row.fields = Object.assign({}, row.fields, fill.fields, { method: fill.method });
+ _rfmNotice[key] = fill.switched
+ ? { text: 'switched to ' + fill.method + ' for ' + entry.name +
+ ' (' + (fill.fields.path || fill.fields.chain || fill.fields.fid) + ')',
+ cls: 'text-gray-500 dark:text-slate-400' }
+ : { text: '', cls: 'text-gray-400 dark:text-slate-500' };
+ chainRender(chainId);
+}
+
// ===== RAM/GP hex builder =====
// PUSH command data field (TS 102 226 9.2.1-9.2.4):
// 01 BIP channel opening - OPEN CHANNEL COMPREHENSION-TLVs (optional)
@@ -14680,6 +15007,7 @@ function toggleTheme() {
document.getElementById('theme-btn').textContent = document.documentElement.classList.contains('dark') ? '☀️' : '🌙';
updateConvFields();
updateSp();
+uiccStdFilesLoad();
updateSpKic();
updateSpKid();
chainInit('chain-sim');
diff --git a/frontend/sw.js b/frontend/sw.js
index 01da706..18fba7a 100644
--- a/frontend/sw.js
+++ b/frontend/sw.js
@@ -1,4 +1,4 @@
-const CACHE = 'simple-v241';
+const CACHE = 'simple-v242';
const URLS = [
'index.html',
'help.html',
@@ -14,6 +14,7 @@ const URLS = [
'sim.svg',
'sim_anim.svg',
'nosim.svg',
+ 'uicc_files.json',
];
self.addEventListener('install', e => {
diff --git a/frontend/tests/uicc_files.test.js b/frontend/tests/uicc_files.test.js
new file mode 100644
index 0000000..233ddaa
--- /dev/null
+++ b/frontend/tests/uicc_files.test.js
@@ -0,0 +1,225 @@
+const { test } = require('node:test');
+const assert = require('node:assert');
+const fs = require('node:fs');
+const path = require('node:path');
+
+const html = fs.readFileSync(path.join(__dirname, '..', 'index.html'), 'utf8');
+const asset = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'uicc_files.json'), 'utf8'));
+
+function extractFunc(src, name) {
+ const re = new RegExp('function\\s+' + name + '\\s*\\([^)]*\\)\\s*\\{');
+ const m = re.exec(src);
+ if (!m) throw new Error('function ' + name + ' not found');
+ let i = m.index + m[0].length - 1;
+ let depth = 0;
+ for (; i < src.length; i++) {
+ if (src[i] === '{') depth++;
+ else if (src[i] === '}') {
+ depth--;
+ if (depth === 0) break;
+ }
+ }
+ return src.slice(m.index, i + 1);
+}
+
+// The RFM SELECT file picker: merge of the card tree / custom files / the
+// shipped standard list, and the per-method fill logic (relative FID chains
+// per TS 102 221 11.1.1.2, path from MF without the MF identifier per
+// ISO 7816-4, path from the current DF per TS 102 221 11.1.1.2 P1=09).
+const FNS = ['chainKind', 'rfmRowKey', 'rfmParentPath', 'rfmEntryByPath', 'rfmRoots',
+ 'rfmFileEntries', 'rfmStartDf', 'rfmSetStartDf', 'rfmNoticeClear', 'rfmApplySelect',
+ 'rfmCurrentDf', 'rfmFidsFrom', 'rfmRelativeChain', 'rfmSelectFill', 'rfmFileOptionsHtml',
+ 'escHtml', 'esc', 'pysimFsNodePath', 'pysimCustomFid'];
+let code = '';
+for (const f of FNS) code += extractFunc(html, f) + '\n';
+for (const c of ['const _chains = \\{\\};', 'let _uiccStdFiles = null;', 'let _uiccStdLoad = null;',
+ 'let _rfmShowAll = false;', 'const _rfmFilter = \\{\\};', 'const _rfmNotice = \\{\\};',
+ 'const _rfmStartDf = \\{\\};']) {
+ const m = html.match(new RegExp(c));
+ if (!m) throw new Error('declaration not found: ' + c);
+ code += m[0].replace(/^(const|let) /, 'var ') + '\n';
+}
+code += 'var pysimCustomFiles = [];\n';
+code += 'var pysimFsTreeRoot = null;\n';
+code += 'function chainRender() {}\n';
+eval(code);
+
+// The shipped asset stands in for the fetched standard list.
+_uiccStdFiles = asset.files;
+
+function entry(p) {
+ const e = _uiccStdFiles.find(f => f.path === p);
+ assert.ok(e, 'asset entry missing: ' + p);
+ return e;
+}
+
+function row(cmd, fields) { return { cmd: cmd, fields: fields || {} }; }
+
+function setChain(chainId, rows) {
+ _chains[chainId] = { rows: rows || [] };
+ return chainId;
+}
+
+test('the shipped asset is well formed and covers the standard trees', () => {
+ assert.ok(asset.files.length > 300, 'entries: ' + asset.files.length);
+ const paths = asset.files.map(f => f.path);
+ assert.strictEqual(paths.length, new Set(paths).size, 'duplicate paths');
+ assert.strictEqual(entry('MF/2FE2').name, 'EF.ICCID');
+ assert.strictEqual(entry('MF/7F10').name, 'DF.TELECOM');
+ assert.strictEqual(entry('MF/7F10/6F40').name, 'EF.MSISDN');
+ assert.strictEqual(entry('MF/7F20/6F46').name, 'EF.SPN');
+ assert.strictEqual(entry('ADF.USIM/6F07').name, 'EF.IMSI');
+ assert.strictEqual(entry('ADF.USIM').kind, 'adf');
+ assert.strictEqual(entry('ADF.USIM').aid, 'A0000000871002');
+ assert.strictEqual(entry('ADF.ISIM').aid, 'A0000000871004');
+});
+
+test('rfmFidsFrom walks a path down to the FIDs', () => {
+ const list = rfmFileEntries();
+ assert.strictEqual(rfmFidsFrom(list, 'MF', 'MF/7F10/6F40'), '7F106F40');
+ assert.strictEqual(rfmFidsFrom(list, 'MF/7F10', 'MF/7F10/6F40'), '6F40');
+ assert.strictEqual(rfmFidsFrom(list, 'MF/7F10', 'MF/7F20'), '');
+ assert.strictEqual(rfmFidsFrom(list, 'MF', 'ADF.USIM/6F07'), '');
+});
+
+test('rfmRelativeChain uses the FID search order (children/parent/siblings)', () => {
+ const list = rfmFileEntries();
+ assert.strictEqual(rfmRelativeChain(list, 'MF', 'MF/7F10/6F40'), '7F10,6F40');
+ // Sibling branch: from DF.TELECOM to EF.SPN under DF.GSM.
+ assert.strictEqual(rfmRelativeChain(list, 'MF/7F10', 'MF/7F20/6F46'), '7F20,6F46');
+ // One level up then sideways.
+ assert.strictEqual(rfmRelativeChain(list, 'MF/7F10/5F3A', 'MF/7F20'), '7F10,7F20');
+ assert.strictEqual(rfmRelativeChain(list, 'ADF.USIM', 'ADF.USIM/6F07'), '6F07');
+ assert.strictEqual(rfmRelativeChain(list, 'ADF.USIM/5F3A', 'ADF.USIM/6F07'), '6F07');
+ // Different roots: a FID select cannot cross into another tree.
+ assert.strictEqual(rfmRelativeChain(list, 'MF', 'ADF.USIM/6F07'), '');
+ assert.strictEqual(rfmRelativeChain(list, 'ADF.USIM', 'MF/2FE2'), '');
+});
+
+test('rfmSelectFill keeps a method that can express the pick', () => {
+ setChain('chain-sim', [row('select', { method: 'fid' })]);
+ let fill = rfmSelectFill('chain-sim', 0, entry('MF/7F10'), rfmFileEntries());
+ assert.deepStrictEqual(fill, { method: 'fid', fields: { fid: '7F10' }, switched: false });
+ setChain('chain-sim', [row('select', { method: 'chain' })]);
+ fill = rfmSelectFill('chain-sim', 0, entry('MF/7F10/6F40'), rfmFileEntries());
+ assert.deepStrictEqual(fill, { method: 'chain', fields: { chain: '7F10,6F40' }, switched: false });
+});
+
+test('rfmSelectFill prefers path when the method has to switch', () => {
+ // SIM RFM: path is P1=08 (from MF) only.
+ setChain('chain-sim', [row('select', { method: 'fid' })]);
+ let fill = rfmSelectFill('chain-sim', 0, entry('MF/7F10/6F40'), rfmFileEntries());
+ assert.deepStrictEqual(fill, { method: 'path', fields: { path: '7F106F40', base: 'mf' }, switched: true });
+ // ADF entry cannot be reached from MF by FID/path/chain.
+ assert.strictEqual(rfmSelectFill('chain-sim', 0, entry('ADF.USIM/6F07'), rfmFileEntries()), null);
+ // USIM RFM starts in ADF.USIM: its files are direct children, deep ones use
+ // the relative path from the current DF.
+ setChain('chain-usim', [row('select', { method: 'fid' })]);
+ fill = rfmSelectFill('chain-usim', 0, entry('ADF.USIM/6F07'), rfmFileEntries());
+ assert.deepStrictEqual(fill, { method: 'fid', fields: { fid: '6F07' }, switched: false });
+ setChain('chain-usim', [row('select', { method: 'fid' })]);
+ fill = rfmSelectFill('chain-usim', 0, entry('ADF.USIM/5F3A/4F22'), rfmFileEntries());
+ assert.deepStrictEqual(fill, { method: 'path', fields: { path: '5F3A4F22', base: 'df' }, switched: true });
+ // Cross-root: an MF file is reachable from the ADF session by path from MF.
+ setChain('chain-usim', [row('select', { method: 'fid' })]);
+ fill = rfmSelectFill('chain-usim', 0, entry('MF/2FE2'), rfmFileEntries());
+ assert.deepStrictEqual(fill, { method: 'path', fields: { path: '2FE2', base: 'mf' }, switched: true });
+});
+
+test('rfmSelectFill falls back to chain when path cannot express it', () => {
+ // Session in ADF.USIM, currently inside DF.PHONEBOOK: a target in the
+ // DF.GSM-ACCESS branch is not under the current DF and not in the MF tree,
+ // so only the relative chain works.
+ const list = rfmFileEntries();
+ setChain('chain-usim', [row('select', { method: 'path', path: '5F3A', base: 'df' })]);
+ const fill = rfmSelectFill('chain-usim', 1, entry('ADF.USIM/5F3B/4F20'), list);
+ assert.strictEqual(fill.method, 'chain');
+ assert.strictEqual(fill.fields.chain, '5F3B,4F20');
+ assert.strictEqual(fill.switched, true);
+ // ADF roots are selected by AID, not by the picker.
+ assert.strictEqual(rfmSelectFill('chain-usim', 1, entry('ADF.USIM'), list), null);
+});
+
+test('rfmCurrentDf tracks the session context across rows', () => {
+ const list = rfmFileEntries();
+ setChain('chain-sim', [
+ row('select', { method: 'fid', fid: '7F10' }),
+ row('select', { method: 'fid', fid: '6F40' }),
+ row('select', { method: 'path', path: '7F106F40' }),
+ ]);
+ assert.strictEqual(rfmCurrentDf('chain-sim', 0, list), 'MF');
+ assert.strictEqual(rfmCurrentDf('chain-sim', 1, list), 'MF/7F10');
+ // Selecting an EF keeps the current DF.
+ assert.strictEqual(rfmCurrentDf('chain-sim', 2, list), 'MF/7F10');
+ // A path select sets the DF to the file's parent.
+ assert.strictEqual(rfmCurrentDf('chain-sim', 3, list), 'MF/7F10');
+ setChain('chain-usim', [
+ row('select', { method: 'path', path: '5F3A', base: 'df' }),
+ row('select', { method: 'chain', chain: '4F22' }),
+ ]);
+ assert.strictEqual(rfmCurrentDf('chain-usim', 0, list), 'ADF.USIM');
+ assert.strictEqual(rfmCurrentDf('chain-usim', 1, list), 'ADF.USIM/5F3A');
+ assert.strictEqual(rfmCurrentDf('chain-usim', 2, list), 'ADF.USIM/5F3A');
+ // The picker can start the session elsewhere (TAR decides the implicit DF).
+ rfmSetStartDf('chain-sim', 'ADF.USIM');
+ assert.strictEqual(rfmCurrentDf('chain-sim', 0, list), 'ADF.USIM');
+ rfmSetStartDf('chain-sim', 'MF');
+});
+
+test('rfmFileEntries merges card tree, custom files and the standard list', () => {
+ const mf = { name: 'MF', fid: '3F00', isDir: true, parent: null, children: [] };
+ const gsm = { name: 'DF.GSM', fid: '7F20', isDir: true, parent: mf, exists: true, children: [] };
+ const adn = { name: 'EF.ADN', fid: '6F3A', isDir: false, parent: gsm, exists: false, children: null };
+ const iccid = { name: 'EF.ICCID', fid: '2FE2', isDir: false, parent: mf, exists: true, children: null };
+ const customNode = { name: 'EF.MYFILE', fid: '6F99', isDir: false, parent: mf, custom: true, customPath: 'MF/6F99', exists: null, children: null };
+ gsm.children.push(adn);
+ mf.children.push(gsm, iccid, customNode);
+ pysimFsTreeRoot = mf;
+ pysimCustomFiles = [{ path: 'MF/6F99', name: 'EF.MYFILE', kind: 'ef' }];
+ const list = rfmFileEntries();
+ const byPath = {};
+ list.forEach(e => { byPath[e.path] = e; });
+ // The card tree wins over the standard entry with the same path and hides
+ // probed-absent files.
+ assert.strictEqual(byPath['MF/7F20'].source, 'card');
+ assert.strictEqual(byPath['MF/2FE2'].exists, true);
+ assert.ok(!byPath['MF/7F20/6F3A'], 'probed-absent file must be dropped');
+ assert.strictEqual(byPath['MF/6F99'].source, 'custom');
+ // The standard list still covers branches the card tree has not loaded.
+ assert.ok(byPath['MF/7F10/6F40'], 'standard entry missing');
+ assert.strictEqual(byPath['MF/7F10/6F40'].source, 'standard');
+ // ADF roots are group headers, not entries.
+ assert.ok(!list.some(e => e.kind === 'adf'));
+ pysimFsTreeRoot = null;
+ pysimCustomFiles = [];
+});
+
+test('rfmFileOptionsHtml groups by root and marks method switches', () => {
+ const list = rfmFileEntries();
+ setChain('chain-sim', [row('select', { method: 'fid' })]);
+ // Default: only what by-FID from MF can express (its direct children).
+ const opts = rfmFileOptionsHtml('chain-sim', 0, list);
+ assert.ok(opts.includes(''));
+ assert.ok(opts.includes('MF/7F10'), 'DF.TELECOM is a direct child');
+ assert.ok(!opts.includes('MF/7F10/6F40'), 'deep files need a switch');
+ assert.ok(!opts.includes(''), 'ADF files are not reachable from MF');
+ // "all files" reveals the switchable entries, marked with the method they
+ // would switch to; files in another root stay hidden (the session start
+ // selector covers those).
+ _rfmShowAll = true;
+ const all = rfmFileOptionsHtml('chain-sim', 0, list);
+ assert.ok(all.includes('MF/7F10/6F40'));
+ assert.ok(all.includes('→ path'), 'switching entries are marked');
+ assert.ok(!all.includes(''));
+ // Starting the session in the ADF makes its files pickable instead.
+ _rfmShowAll = false;
+ rfmSetStartDf('chain-sim', 'ADF.USIM');
+ const adf = rfmFileOptionsHtml('chain-sim', 0, list);
+ assert.ok(adf.includes(''));
+ assert.ok(adf.includes('ADF.USIM/6F07'), 'EF.IMSI is a direct child of ADF.USIM');
+ rfmSetStartDf('chain-sim', 'MF');
+ _rfmFilter['chain-sim#0'] = 'imsi';
+ const filtered = rfmFileOptionsHtml('chain-sim', 0, list);
+ assert.ok(!filtered.includes('EF.ADN'));
+ delete _rfmFilter['chain-sim#0'];
+});
diff --git a/frontend/uicc_files.json b/frontend/uicc_files.json
new file mode 100644
index 0000000..1862567
--- /dev/null
+++ b/frontend/uicc_files.json
@@ -0,0 +1,3931 @@
+{
+ "generated": "2026-09-23",
+ "files": [
+ {
+ "path": "MF/2F00",
+ "name": "EF.DIR",
+ "sym": "MF/EF.DIR",
+ "fid": "2F00",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/2F05",
+ "name": "EF.PL",
+ "sym": "MF/EF.PL",
+ "fid": "2F05",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/2F06",
+ "name": "EF.ARR",
+ "sym": "MF/EF.ARR",
+ "fid": "2F06",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/2F08",
+ "name": "EF.UMPC",
+ "sym": "MF/EF.UMPC",
+ "fid": "2F08",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/2FE2",
+ "name": "EF.ICCID",
+ "sym": "MF/EF.ICCID",
+ "fid": "2FE2",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10",
+ "name": "DF.TELECOM",
+ "sym": "MF/DF.TELECOM",
+ "fid": "7F10",
+ "kind": "df",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3A",
+ "name": "DF.PHONEBOOK",
+ "sym": "MF/DF.TELECOM/DF.PHONEBOOK",
+ "fid": "5F3A",
+ "kind": "df",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3A/4F22",
+ "name": "EF.PSC",
+ "sym": "MF/DF.TELECOM/DF.PHONEBOOK/EF.PSC",
+ "fid": "4F22",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3A/4F23",
+ "name": "EF.CC",
+ "sym": "MF/DF.TELECOM/DF.PHONEBOOK/EF.CC",
+ "fid": "4F23",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3A/4F24",
+ "name": "EF.PUID",
+ "sym": "MF/DF.TELECOM/DF.PHONEBOOK/EF.PUID",
+ "fid": "4F24",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3A/4F30",
+ "name": "EF.PBR",
+ "sym": "MF/DF.TELECOM/DF.PHONEBOOK/EF.PBR",
+ "fid": "4F30",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3B",
+ "name": "DF.MULTIMEDIA",
+ "sym": "MF/DF.TELECOM/DF.MULTIMEDIA",
+ "fid": "5F3B",
+ "kind": "df",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3B/4F47",
+ "name": "EF.MML",
+ "sym": "MF/DF.TELECOM/DF.MULTIMEDIA/EF.MML",
+ "fid": "4F47",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3B/4F48",
+ "name": "EF.MMDF",
+ "sym": "MF/DF.TELECOM/DF.MULTIMEDIA/EF.MMDF",
+ "fid": "4F48",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3D",
+ "name": "DF.MCS",
+ "sym": "MF/DF.TELECOM/DF.MCS",
+ "fid": "5F3D",
+ "kind": "df",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3D/4F01",
+ "name": "EF.MST",
+ "sym": "MF/DF.TELECOM/DF.MCS/EF.MST",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3D/4F02",
+ "name": "EF.MCS_CONFIG",
+ "sym": "MF/DF.TELECOM/DF.MCS/EF.MCS_CONFIG",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3E",
+ "name": "DF.V2X",
+ "sym": "MF/DF.TELECOM/DF.V2X",
+ "fid": "5F3E",
+ "kind": "df",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3E/4F01",
+ "name": "EF.VST",
+ "sym": "MF/DF.TELECOM/DF.V2X/EF.VST",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/5F3E/4F02",
+ "name": "EF.V2X_CONFIG",
+ "sym": "MF/DF.TELECOM/DF.V2X/EF.V2X_CONFIG",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F3A",
+ "name": "EF.ADN",
+ "sym": "MF/DF.TELECOM/EF.ADN",
+ "fid": "6F3A",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F3B",
+ "name": "EF.FDN",
+ "sym": "MF/DF.TELECOM/EF.FDN",
+ "fid": "6F3B",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F3C",
+ "name": "EF.SMS",
+ "sym": "MF/DF.TELECOM/EF.SMS",
+ "fid": "6F3C",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F3D",
+ "name": "EF.CCP",
+ "sym": "MF/DF.TELECOM/EF.CCP",
+ "fid": "6F3D",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F40",
+ "name": "EF.MSISDN",
+ "sym": "MF/DF.TELECOM/EF.MSISDN",
+ "fid": "6F40",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F42",
+ "name": "EF.SMSP",
+ "sym": "MF/DF.TELECOM/EF.SMSP",
+ "fid": "6F42",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F43",
+ "name": "EF.SMSS",
+ "sym": "MF/DF.TELECOM/EF.SMSS",
+ "fid": "6F43",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F44",
+ "name": "EF.LND",
+ "sym": "MF/DF.TELECOM/EF.LND",
+ "fid": "6F44",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F47",
+ "name": "EF.SMSR",
+ "sym": "MF/DF.TELECOM/EF.SMSR",
+ "fid": "6F47",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F49",
+ "name": "EF.SDN",
+ "sym": "MF/DF.TELECOM/EF.SDN",
+ "fid": "6F49",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F4A",
+ "name": "EF.EXT1",
+ "sym": "MF/DF.TELECOM/EF.EXT1",
+ "fid": "6F4A",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F4B",
+ "name": "EF.EXT2",
+ "sym": "MF/DF.TELECOM/EF.EXT2",
+ "fid": "6F4B",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F4C",
+ "name": "EF.EXT3",
+ "sym": "MF/DF.TELECOM/EF.EXT3",
+ "fid": "6F4C",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F4D",
+ "name": "EF.BDN",
+ "sym": "MF/DF.TELECOM/EF.BDN",
+ "fid": "6F4D",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F4E",
+ "name": "EF.EXT4",
+ "sym": "MF/DF.TELECOM/EF.EXT4",
+ "fid": "6F4E",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F4F",
+ "name": "EF.ECCP",
+ "sym": "MF/DF.TELECOM/EF.ECCP",
+ "fid": "6F4F",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F10/6F58",
+ "name": "EF.CMI",
+ "sym": "MF/DF.TELECOM/EF.CMI",
+ "fid": "6F58",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20",
+ "name": "DF.GSM",
+ "sym": "MF/DF.GSM",
+ "fid": "7F20",
+ "kind": "df",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F05",
+ "name": "EF.LP",
+ "sym": "MF/DF.GSM/EF.LP",
+ "fid": "6F05",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F07",
+ "name": "EF.IMSI",
+ "sym": "MF/DF.GSM/EF.IMSI",
+ "fid": "6F07",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F20",
+ "name": "EF.Kc",
+ "sym": "MF/DF.GSM/EF.Kc",
+ "fid": "6F20",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F2C",
+ "name": "EF.DCK",
+ "sym": "MF/DF.GSM/EF.DCK",
+ "fid": "6F2C",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F30",
+ "name": "EF.PLMNsel",
+ "sym": "MF/DF.GSM/EF.PLMNsel",
+ "fid": "6F30",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F31",
+ "name": "EF.HPPLMN",
+ "sym": "MF/DF.GSM/EF.HPPLMN",
+ "fid": "6F31",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F32",
+ "name": "EF.CNL",
+ "sym": "MF/DF.GSM/EF.CNL",
+ "fid": "6F32",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F37",
+ "name": "EF.ACMmax",
+ "sym": "MF/DF.GSM/EF.ACMmax",
+ "fid": "6F37",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F38",
+ "name": "EF.SST",
+ "sym": "MF/DF.GSM/EF.SST",
+ "fid": "6F38",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F39",
+ "name": "EF.ACM",
+ "sym": "MF/DF.GSM/EF.ACM",
+ "fid": "6F39",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F3E",
+ "name": "EF.GID1",
+ "sym": "MF/DF.GSM/EF.GID1",
+ "fid": "6F3E",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F3F",
+ "name": "EF.GID2",
+ "sym": "MF/DF.GSM/EF.GID2",
+ "fid": "6F3F",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F41",
+ "name": "EF.PUCT",
+ "sym": "MF/DF.GSM/EF.PUCT",
+ "fid": "6F41",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F45",
+ "name": "EF.CBMI",
+ "sym": "MF/DF.GSM/EF.CBMI",
+ "fid": "6F45",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F46",
+ "name": "EF.SPN",
+ "sym": "MF/DF.GSM/EF.SPN",
+ "fid": "6F46",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F48",
+ "name": "EF.CBMID",
+ "sym": "MF/DF.GSM/EF.CBMID",
+ "fid": "6F48",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F50",
+ "name": "EF.CBMIR",
+ "sym": "MF/DF.GSM/EF.CBMIR",
+ "fid": "6F50",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F51",
+ "name": "EF.NIA",
+ "sym": "MF/DF.GSM/EF.NIA",
+ "fid": "6F51",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F52",
+ "name": "EF.KcGPRS",
+ "sym": "MF/DF.GSM/EF.KcGPRS",
+ "fid": "6F52",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F53",
+ "name": "EF.LOCIGPRS",
+ "sym": "MF/DF.GSM/EF.LOCIGPRS",
+ "fid": "6F53",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F54",
+ "name": "EF.SUME",
+ "sym": "MF/DF.GSM/EF.SUME",
+ "fid": "6F54",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F60",
+ "name": "EF.PLMNwAcT",
+ "sym": "MF/DF.GSM/EF.PLMNwAcT",
+ "fid": "6F60",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F61",
+ "name": "EF.OPLMNwAcT",
+ "sym": "MF/DF.GSM/EF.OPLMNwAcT",
+ "fid": "6F61",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F62",
+ "name": "EF.HPLMNwAcT",
+ "sym": "MF/DF.GSM/EF.HPLMNwAcT",
+ "fid": "6F62",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F63",
+ "name": "EF.CPBCCH",
+ "sym": "MF/DF.GSM/EF.CPBCCH",
+ "fid": "6F63",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F64",
+ "name": "EF.InvScan",
+ "sym": "MF/DF.GSM/EF.InvScan",
+ "fid": "6F64",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F74",
+ "name": "EF.BCCH",
+ "sym": "MF/DF.GSM/EF.BCCH",
+ "fid": "6F74",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F78",
+ "name": "EF.ACC",
+ "sym": "MF/DF.GSM/EF.ACC",
+ "fid": "6F78",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F7B",
+ "name": "EF.FPLMN",
+ "sym": "MF/DF.GSM/EF.FPLMN",
+ "fid": "6F7B",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6F7E",
+ "name": "EF.LOCI",
+ "sym": "MF/DF.GSM/EF.LOCI",
+ "fid": "6F7E",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FAD",
+ "name": "EF.AD",
+ "sym": "MF/DF.GSM/EF.AD",
+ "fid": "6FAD",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FAE",
+ "name": "EF.Phase",
+ "sym": "MF/DF.GSM/EF.Phase",
+ "fid": "6FAE",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FB1",
+ "name": "EF.VGCS",
+ "sym": "MF/DF.GSM/EF.VGCS",
+ "fid": "6FB1",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FB2",
+ "name": "EF.VGCSS",
+ "sym": "MF/DF.GSM/EF.VGCSS",
+ "fid": "6FB2",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FB3",
+ "name": "EF.VBS",
+ "sym": "MF/DF.GSM/EF.VBS",
+ "fid": "6FB3",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FB4",
+ "name": "EF.VBSS",
+ "sym": "MF/DF.GSM/EF.VBSS",
+ "fid": "6FB4",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FB5",
+ "name": "EF.eMLPP",
+ "sym": "MF/DF.GSM/EF.eMLPP",
+ "fid": "6FB5",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FB6",
+ "name": "EF.AAeM",
+ "sym": "MF/DF.GSM/EF.AAeM",
+ "fid": "6FB6",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FB7",
+ "name": "EF.ECC",
+ "sym": "MF/DF.GSM/EF.ECC",
+ "fid": "6FB7",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FC5",
+ "name": "EF.PNN",
+ "sym": "MF/DF.GSM/EF.PNN",
+ "fid": "6FC5",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FC6",
+ "name": "EF.OPL",
+ "sym": "MF/DF.GSM/EF.OPL",
+ "fid": "6FC6",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FC7",
+ "name": "EF.MBDN",
+ "sym": "MF/DF.GSM/EF.MBDN",
+ "fid": "6FC7",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FC8",
+ "name": "EF.EXT6",
+ "sym": "MF/DF.GSM/EF.EXT6",
+ "fid": "6FC8",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FC9",
+ "name": "EF.MBI",
+ "sym": "MF/DF.GSM/EF.MBI",
+ "fid": "6FC9",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FCA",
+ "name": "EF.MWIS",
+ "sym": "MF/DF.GSM/EF.MWIS",
+ "fid": "6FCA",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FCB",
+ "name": "EF.CFIS",
+ "sym": "MF/DF.GSM/EF.CFIS",
+ "fid": "6FCB",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FCC",
+ "name": "EF.EXT7",
+ "sym": "MF/DF.GSM/EF.EXT7",
+ "fid": "6FCC",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FCD",
+ "name": "EF.SPDI",
+ "sym": "MF/DF.GSM/EF.SPDI",
+ "fid": "6FCD",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FCE",
+ "name": "EF.MMSN",
+ "sym": "MF/DF.GSM/EF.MMSN",
+ "fid": "6FCE",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FCF",
+ "name": "EF.EXT8",
+ "sym": "MF/DF.GSM/EF.EXT8",
+ "fid": "6FCF",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FD0",
+ "name": "EF.MMSICP",
+ "sym": "MF/DF.GSM/EF.MMSICP",
+ "fid": "6FD0",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FD1",
+ "name": "EF.MMSUP",
+ "sym": "MF/DF.GSM/EF.MMSUP",
+ "fid": "6FD1",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "MF/7F20/6FD2",
+ "name": "EF.MMSUCP",
+ "sym": "MF/DF.GSM/EF.MMSUCP",
+ "fid": "6FD2",
+ "kind": "ef",
+ "root": "MF"
+ },
+ {
+ "path": "ADF.ECASD",
+ "name": "ADF.ECASD",
+ "sym": "ADF.ECASD",
+ "fid": "",
+ "kind": "adf",
+ "root": "ADF.ECASD",
+ "aid": "A0000005591010FFFFFFFF8900000200"
+ },
+ {
+ "path": "ADF.ISD",
+ "name": "ADF.ISD",
+ "sym": "ADF.ISD",
+ "fid": "",
+ "kind": "adf",
+ "root": "ADF.ISD",
+ "aid": "A000000003000000"
+ },
+ {
+ "path": "ADF.ISD-R",
+ "name": "ADF.ISD-R",
+ "sym": "ADF.ISD-R",
+ "fid": "",
+ "kind": "adf",
+ "root": "ADF.ISD-R",
+ "aid": "A0000005591010FFFFFFFF8900000100"
+ },
+ {
+ "path": "ADF.ISIM",
+ "name": "ADF.ISIM",
+ "sym": "ADF.ISIM",
+ "fid": "",
+ "kind": "adf",
+ "root": "ADF.ISIM",
+ "aid": "A0000000871004"
+ },
+ {
+ "path": "ADF.ISIM/6F02",
+ "name": "EF.IMPI",
+ "sym": "ADF.ISIM/EF.IMPI",
+ "fid": "6F02",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F03",
+ "name": "EF.DOMAIN",
+ "sym": "ADF.ISIM/EF.DOMAIN",
+ "fid": "6F03",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F04",
+ "name": "EF.IMPU",
+ "sym": "ADF.ISIM/EF.IMPU",
+ "fid": "6F04",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F06",
+ "name": "EF.ARR",
+ "sym": "ADF.ISIM/EF.ARR",
+ "fid": "6F06",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F07",
+ "name": "EF.IST",
+ "sym": "ADF.ISIM/EF.IST",
+ "fid": "6F07",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F09",
+ "name": "EF.P-CSCF",
+ "sym": "ADF.ISIM/EF.P-CSCF",
+ "fid": "6F09",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F0A",
+ "name": "EF.GBAUAPI",
+ "sym": "ADF.ISIM/EF.GBAUAPI",
+ "fid": "6F0A",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F0B",
+ "name": "EF.IMSDCI",
+ "sym": "ADF.ISIM/EF.IMSDCI",
+ "fid": "6F0B",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F3C",
+ "name": "EF.SMS",
+ "sym": "ADF.ISIM/EF.SMS",
+ "fid": "6F3C",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F42",
+ "name": "EF.SMSP",
+ "sym": "ADF.ISIM/EF.SMSP",
+ "fid": "6F42",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F43",
+ "name": "EF.SMSS",
+ "sym": "ADF.ISIM/EF.SMSS",
+ "fid": "6F43",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6F47",
+ "name": "EF.SMSR",
+ "sym": "ADF.ISIM/EF.SMSR",
+ "fid": "6F47",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FAD",
+ "name": "EF.AD",
+ "sym": "ADF.ISIM/EF.AD",
+ "fid": "6FAD",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FD5",
+ "name": "EF.GBABP",
+ "sym": "ADF.ISIM/EF.GBABP",
+ "fid": "6FD5",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FD7",
+ "name": "EF.GBANL",
+ "sym": "ADF.ISIM/EF.GBANL",
+ "fid": "6FD7",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FDD",
+ "name": "EF.NAFKCA",
+ "sym": "ADF.ISIM/EF.NAFKCA",
+ "fid": "6FDD",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FE7",
+ "name": "EF.UICCIARI",
+ "sym": "ADF.ISIM/EF.UICCIARI",
+ "fid": "6FE7",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FF7",
+ "name": "EF.FromPreferred",
+ "sym": "ADF.ISIM/EF.FromPreferred",
+ "fid": "6FF7",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FF8",
+ "name": "EF.IMSConfigData",
+ "sym": "ADF.ISIM/EF.IMSConfigData",
+ "fid": "6FF8",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FFA",
+ "name": "EF.WebRTCURI",
+ "sym": "ADF.ISIM/EF.WebRTCURI",
+ "fid": "6FFA",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FFC",
+ "name": "EF.XCAPConfigData",
+ "sym": "ADF.ISIM/EF.XCAPConfigData",
+ "fid": "6FFC",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.ISIM/6FFE",
+ "name": "EF.MuDMiDConfigData",
+ "sym": "ADF.ISIM/EF.MuDMiDConfigData",
+ "fid": "6FFE",
+ "kind": "ef",
+ "root": "ADF.ISIM"
+ },
+ {
+ "path": "ADF.USIM",
+ "name": "ADF.USIM",
+ "sym": "ADF.USIM",
+ "fid": "",
+ "kind": "adf",
+ "root": "ADF.USIM",
+ "aid": "A0000000871002"
+ },
+ {
+ "path": "ADF.USIM/5F3A",
+ "name": "DF.PHONEBOOK",
+ "sym": "ADF.USIM/DF.PHONEBOOK",
+ "fid": "5F3A",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3A/4F22",
+ "name": "EF.PSC",
+ "sym": "ADF.USIM/DF.PHONEBOOK/EF.PSC",
+ "fid": "4F22",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3A/4F23",
+ "name": "EF.CC",
+ "sym": "ADF.USIM/DF.PHONEBOOK/EF.CC",
+ "fid": "4F23",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3A/4F24",
+ "name": "EF.PUID",
+ "sym": "ADF.USIM/DF.PHONEBOOK/EF.PUID",
+ "fid": "4F24",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3A/4F30",
+ "name": "EF.PBR",
+ "sym": "ADF.USIM/DF.PHONEBOOK/EF.PBR",
+ "fid": "4F30",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3B",
+ "name": "DF.GSM-ACCESS",
+ "sym": "ADF.USIM/DF.GSM-ACCESS",
+ "fid": "5F3B",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3B/4F20",
+ "name": "EF.Kc",
+ "sym": "ADF.USIM/DF.GSM-ACCESS/EF.Kc",
+ "fid": "4F20",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3B/4F52",
+ "name": "EF.KcGPRS",
+ "sym": "ADF.USIM/DF.GSM-ACCESS/EF.KcGPRS",
+ "fid": "4F52",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3B/4F63",
+ "name": "EF.CPBCCH",
+ "sym": "ADF.USIM/DF.GSM-ACCESS/EF.CPBCCH",
+ "fid": "4F63",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F3B/4F64",
+ "name": "EF.InvScan",
+ "sym": "ADF.USIM/DF.GSM-ACCESS/EF.InvScan",
+ "fid": "4F64",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40",
+ "name": "DF.WLAN",
+ "sym": "ADF.USIM/DF.WLAN",
+ "fid": "5F40",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F41",
+ "name": "EF.Pseudo",
+ "sym": "ADF.USIM/DF.WLAN/EF.Pseudo",
+ "fid": "4F41",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F42",
+ "name": "EF.UPLMNWLAN",
+ "sym": "ADF.USIM/DF.WLAN/EF.UPLMNWLAN",
+ "fid": "4F42",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F43",
+ "name": "EF.OPLMNWLAN",
+ "sym": "ADF.USIM/DF.WLAN/EF.OPLMNWLAN",
+ "fid": "4F43",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F44",
+ "name": "EF.UWSIDL",
+ "sym": "ADF.USIM/DF.WLAN/EF.UWSIDL",
+ "fid": "4F44",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F45",
+ "name": "EF.OWSIDL",
+ "sym": "ADF.USIM/DF.WLAN/EF.OWSIDL",
+ "fid": "4F45",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F46",
+ "name": "EF.WRI",
+ "sym": "ADF.USIM/DF.WLAN/EF.WRI",
+ "fid": "4F46",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F47",
+ "name": "EF.HWSIDL",
+ "sym": "ADF.USIM/DF.WLAN/EF.HWSIDL",
+ "fid": "4F47",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F48",
+ "name": "EF.WEHPLMNPI",
+ "sym": "ADF.USIM/DF.WLAN/EF.WEHPLMNPI",
+ "fid": "4F48",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F49",
+ "name": "EF.WHPI",
+ "sym": "ADF.USIM/DF.WLAN/EF.WHPI",
+ "fid": "4F49",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F4A",
+ "name": "EF.WLRPLMN",
+ "sym": "ADF.USIM/DF.WLAN/EF.WLRPLMN",
+ "fid": "4F4A",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F40/4F4B",
+ "name": "EF.HPLMNDAI",
+ "sym": "ADF.USIM/DF.WLAN/EF.HPLMNDAI",
+ "fid": "4F4B",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F50",
+ "name": "DF.HNB",
+ "sym": "ADF.USIM/DF.HNB",
+ "fid": "5F50",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F50/4F81",
+ "name": "EF.ACSGL",
+ "sym": "ADF.USIM/DF.HNB/EF.ACSGL",
+ "fid": "4F81",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F50/4F82",
+ "name": "EF.CSGT",
+ "sym": "ADF.USIM/DF.HNB/EF.CSGT",
+ "fid": "4F82",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F50/4F83",
+ "name": "EF.HNBN",
+ "sym": "ADF.USIM/DF.HNB/EF.HNBN",
+ "fid": "4F83",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F50/4F84",
+ "name": "EF.OCSGL",
+ "sym": "ADF.USIM/DF.HNB/EF.OCSGL",
+ "fid": "4F84",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F50/4F85",
+ "name": "EF.OCSGT",
+ "sym": "ADF.USIM/DF.HNB/EF.OCSGT",
+ "fid": "4F85",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F50/4F86",
+ "name": "EF.OHNBN",
+ "sym": "ADF.USIM/DF.HNB/EF.OHNBN",
+ "fid": "4F86",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90",
+ "name": "DF.ProSe",
+ "sym": "ADF.USIM/DF.ProSe",
+ "fid": "5F90",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F01",
+ "name": "EF.PROSE_MON",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_MON",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F02",
+ "name": "EF.PROSE_ANN",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_ANN",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F03",
+ "name": "EF.PROSEFUNC",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSEFUNC",
+ "fid": "4F03",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F04",
+ "name": "EF.PROSE_RADIO_COM",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_RADIO_COM",
+ "fid": "4F04",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F05",
+ "name": "EF.PROSE_RADIO_MON",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_RADIO_MON",
+ "fid": "4F05",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F06",
+ "name": "EF.PROSE_RADIO_ANN",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_RADIO_ANN",
+ "fid": "4F06",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F07",
+ "name": "EF.PROSE_POLICY",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_POLICY",
+ "fid": "4F07",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F08",
+ "name": "EF.PROSE_PLMN",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_PLMN",
+ "fid": "4F08",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F09",
+ "name": "EF.PROSE_GC",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_GC",
+ "fid": "4F09",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F10",
+ "name": "EF.PST",
+ "sym": "ADF.USIM/DF.ProSe/EF.PST",
+ "fid": "4F10",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F11",
+ "name": "EF.UIRC",
+ "sym": "ADF.USIM/DF.ProSe/EF.UIRC",
+ "fid": "4F11",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F12",
+ "name": "EF.PROSE_GM_DISCOVERY",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_GM_DISCOVERY",
+ "fid": "4F12",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F13",
+ "name": "EF.PROSE_RELAY",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_RELAY",
+ "fid": "4F13",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5F90/4F14",
+ "name": "EF.PROSE_RELAY_DISCOVERY",
+ "sym": "ADF.USIM/DF.ProSe/EF.PROSE_RELAY_DISCOVERY",
+ "fid": "4F14",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0",
+ "name": "DF.5GS",
+ "sym": "ADF.USIM/DF.5GS",
+ "fid": "5FC0",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F01",
+ "name": "EF.5GS3GPPLOCI",
+ "sym": "ADF.USIM/DF.5GS/EF.5GS3GPPLOCI",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F02",
+ "name": "EF.5GSN3GPPLOCI",
+ "sym": "ADF.USIM/DF.5GS/EF.5GSN3GPPLOCI",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F03",
+ "name": "EF.5GS3GPPNSC",
+ "sym": "ADF.USIM/DF.5GS/EF.5GS3GPPNSC",
+ "fid": "4F03",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F04",
+ "name": "EF.5GSN3GPPNSC",
+ "sym": "ADF.USIM/DF.5GS/EF.5GSN3GPPNSC",
+ "fid": "4F04",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F05",
+ "name": "EF.5GAUTHKEYS",
+ "sym": "ADF.USIM/DF.5GS/EF.5GAUTHKEYS",
+ "fid": "4F05",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F06",
+ "name": "EF.UAC_AIC",
+ "sym": "ADF.USIM/DF.5GS/EF.UAC_AIC",
+ "fid": "4F06",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F07",
+ "name": "EF.SUCI_Calc_Info",
+ "sym": "ADF.USIM/DF.5GS/EF.SUCI_Calc_Info",
+ "fid": "4F07",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F08",
+ "name": "EF.OPL5G",
+ "sym": "ADF.USIM/DF.5GS/EF.OPL5G",
+ "fid": "4F08",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F09",
+ "name": "EF.SUPI_NAI",
+ "sym": "ADF.USIM/DF.5GS/EF.SUPI_NAI",
+ "fid": "4F09",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F0A",
+ "name": "EF.Routing_Indicator",
+ "sym": "ADF.USIM/DF.5GS/EF.Routing_Indicator",
+ "fid": "4F0A",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F0B",
+ "name": "EF.URSP",
+ "sym": "ADF.USIM/DF.5GS/EF.URSP",
+ "fid": "4F0B",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F0C",
+ "name": "EF.TN3GPPSNN",
+ "sym": "ADF.USIM/DF.5GS/EF.TN3GPPSNN",
+ "fid": "4F0C",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F0D",
+ "name": "EF.CAG",
+ "sym": "ADF.USIM/DF.5GS/EF.CAG",
+ "fid": "4F0D",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F0E",
+ "name": "EF.SOR-CMCI",
+ "sym": "ADF.USIM/DF.5GS/EF.SOR-CMCI",
+ "fid": "4F0E",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F0F",
+ "name": "EF.DRI",
+ "sym": "ADF.USIM/DF.5GS/EF.DRI",
+ "fid": "4F0F",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F10",
+ "name": "EF.5GSEDRX",
+ "sym": "ADF.USIM/DF.5GS/EF.5GSEDRX",
+ "fid": "4F10",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F11",
+ "name": "EF.5GNSWO_CONF",
+ "sym": "ADF.USIM/DF.5GS/EF.5GNSWO_CONF",
+ "fid": "4F11",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F15",
+ "name": "EF.MCHPPLMN",
+ "sym": "ADF.USIM/DF.5GS/EF.MCHPPLMN",
+ "fid": "4F15",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FC0/4F16",
+ "name": "EF.KAUSF_DERIVATION",
+ "sym": "ADF.USIM/DF.5GS/EF.KAUSF_DERIVATION",
+ "fid": "4F16",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FD0",
+ "name": "DF.SAIP",
+ "sym": "ADF.USIM/DF.SAIP",
+ "fid": "5FD0",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FD0/4F01",
+ "name": "EF.SUCI_Calc_Info",
+ "sym": "ADF.USIM/DF.SAIP/EF.SUCI_Calc_Info",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FE0",
+ "name": "DF.SNPN",
+ "sym": "ADF.USIM/DF.SNPN",
+ "fid": "5FE0",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FE0/4F01",
+ "name": "EF.PWS_SNPN",
+ "sym": "ADF.USIM/DF.SNPN/EF.PWS_SNPN",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FE0/4F02",
+ "name": "EF.NID",
+ "sym": "ADF.USIM/DF.SNPN/EF.NID",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0",
+ "name": "DF.5G_ProSe",
+ "sym": "ADF.USIM/DF.5G_ProSe",
+ "fid": "5FF0",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F01",
+ "name": "EF.5G_PROSE_ST",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_ST",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F02",
+ "name": "EF.5G_PROSE_DD",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_DD",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F03",
+ "name": "EF.5G_PROSE_DC",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_DC",
+ "fid": "4F03",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F04",
+ "name": "EF.5G_PROSE_U2NRU",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_U2NRU",
+ "fid": "4F04",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F05",
+ "name": "EF.5G_PROSE_RU",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_RU",
+ "fid": "4F05",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F06",
+ "name": "EF.5G_PROSE_UIR",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_UIR",
+ "fid": "4F06",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F07",
+ "name": "EF.5G_PROSE_U2URU",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_U2URU",
+ "fid": "4F07",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF0/4F08",
+ "name": "EF.5G_PROSE_EU",
+ "sym": "ADF.USIM/DF.5G_ProSe/EF.5G_PROSE_EU",
+ "fid": "4F08",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF1",
+ "name": "DF.5MBSUECONFIG",
+ "sym": "ADF.USIM/DF.5MBSUECONFIG",
+ "fid": "5FF1",
+ "kind": "df",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/5FF1/4F01",
+ "name": "EF.5MBSUECONFIG",
+ "sym": "ADF.USIM/DF.5MBSUECONFIG/EF.5MBSUECONFIG",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F01",
+ "name": "EF.eAKA",
+ "sym": "ADF.USIM/EF.eAKA",
+ "fid": "6F01",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F02",
+ "name": "EF.OCST",
+ "sym": "ADF.USIM/EF.OCST",
+ "fid": "6F02",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F05",
+ "name": "EF.LI",
+ "sym": "ADF.USIM/EF.LI",
+ "fid": "6F05",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F06",
+ "name": "EF.ARR",
+ "sym": "ADF.USIM/EF.ARR",
+ "fid": "6F06",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F07",
+ "name": "EF.IMSI",
+ "sym": "ADF.USIM/EF.IMSI",
+ "fid": "6F07",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F08",
+ "name": "EF.Keys",
+ "sym": "ADF.USIM/EF.Keys",
+ "fid": "6F08",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F09",
+ "name": "EF.KeysPS",
+ "sym": "ADF.USIM/EF.KeysPS",
+ "fid": "6F09",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F0A",
+ "name": "EF.GBAUAPI",
+ "sym": "ADF.USIM/EF.GBAUAPI",
+ "fid": "6F0A",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F0B",
+ "name": "EF.IMSDCI",
+ "sym": "ADF.USIM/EF.IMSDCI",
+ "fid": "6F0B",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F2C",
+ "name": "EF.DCK",
+ "sym": "ADF.USIM/EF.DCK",
+ "fid": "6F2C",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F31",
+ "name": "EF.HPPLMN",
+ "sym": "ADF.USIM/EF.HPPLMN",
+ "fid": "6F31",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F32",
+ "name": "EF.CNL",
+ "sym": "ADF.USIM/EF.CNL",
+ "fid": "6F32",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F37",
+ "name": "EF.ACMmax",
+ "sym": "ADF.USIM/EF.ACMmax",
+ "fid": "6F37",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F38",
+ "name": "EF.UST",
+ "sym": "ADF.USIM/EF.UST",
+ "fid": "6F38",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F39",
+ "name": "EF.ACM",
+ "sym": "ADF.USIM/EF.ACM",
+ "fid": "6F39",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F3B",
+ "name": "EF.FDN",
+ "sym": "ADF.USIM/EF.FDN",
+ "fid": "6F3B",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F3C",
+ "name": "EF.SMS",
+ "sym": "ADF.USIM/EF.SMS",
+ "fid": "6F3C",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F3E",
+ "name": "EF.GID1",
+ "sym": "ADF.USIM/EF.GID1",
+ "fid": "6F3E",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F3F",
+ "name": "EF.GID2",
+ "sym": "ADF.USIM/EF.GID2",
+ "fid": "6F3F",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F40",
+ "name": "EF.MSISDN",
+ "sym": "ADF.USIM/EF.MSISDN",
+ "fid": "6F40",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F41",
+ "name": "EF.PUCT",
+ "sym": "ADF.USIM/EF.PUCT",
+ "fid": "6F41",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F42",
+ "name": "EF.SMSP",
+ "sym": "ADF.USIM/EF.SMSP",
+ "fid": "6F42",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F43",
+ "name": "EF.SMSS",
+ "sym": "ADF.USIM/EF.SMSS",
+ "fid": "6F43",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F45",
+ "name": "EF.CBMI",
+ "sym": "ADF.USIM/EF.CBMI",
+ "fid": "6F45",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F46",
+ "name": "EF.SPN",
+ "sym": "ADF.USIM/EF.SPN",
+ "fid": "6F46",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F47",
+ "name": "EF.SMSR",
+ "sym": "ADF.USIM/EF.SMSR",
+ "fid": "6F47",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F48",
+ "name": "EF.CBMID",
+ "sym": "ADF.USIM/EF.CBMID",
+ "fid": "6F48",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F49",
+ "name": "EF.SDN",
+ "sym": "ADF.USIM/EF.SDN",
+ "fid": "6F49",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F4B",
+ "name": "EF.EXT2",
+ "sym": "ADF.USIM/EF.EXT2",
+ "fid": "6F4B",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F4C",
+ "name": "EF.EXT3",
+ "sym": "ADF.USIM/EF.EXT3",
+ "fid": "6F4C",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F4D",
+ "name": "EF.BDN",
+ "sym": "ADF.USIM/EF.BDN",
+ "fid": "6F4D",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F4E",
+ "name": "EF.EXT5",
+ "sym": "ADF.USIM/EF.EXT5",
+ "fid": "6F4E",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F4F",
+ "name": "EF.CCP2",
+ "sym": "ADF.USIM/EF.CCP2",
+ "fid": "6F4F",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F50",
+ "name": "EF.CBMIR",
+ "sym": "ADF.USIM/EF.CBMIR",
+ "fid": "6F50",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F55",
+ "name": "EF.EXT4",
+ "sym": "ADF.USIM/EF.EXT4",
+ "fid": "6F55",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F56",
+ "name": "EF.EST",
+ "sym": "ADF.USIM/EF.EST",
+ "fid": "6F56",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F57",
+ "name": "EF.ACL",
+ "sym": "ADF.USIM/EF.ACL",
+ "fid": "6F57",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F58",
+ "name": "EF.CMI",
+ "sym": "ADF.USIM/EF.CMI",
+ "fid": "6F58",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F5B",
+ "name": "EF.START-HFN",
+ "sym": "ADF.USIM/EF.START-HFN",
+ "fid": "6F5B",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F5C",
+ "name": "EF.THRESHOLD",
+ "sym": "ADF.USIM/EF.THRESHOLD",
+ "fid": "6F5C",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F60",
+ "name": "EF.PLMNwAcT",
+ "sym": "ADF.USIM/EF.PLMNwAcT",
+ "fid": "6F60",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F61",
+ "name": "EF.OPLMNwAcT",
+ "sym": "ADF.USIM/EF.OPLMNwAcT",
+ "fid": "6F61",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F62",
+ "name": "EF.HPLMNwAcT",
+ "sym": "ADF.USIM/EF.HPLMNwAcT",
+ "fid": "6F62",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F65",
+ "name": "EF.RPLMNAcTD",
+ "sym": "ADF.USIM/EF.RPLMNAcTD",
+ "fid": "6F65",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F73",
+ "name": "EF.PSLOCI",
+ "sym": "ADF.USIM/EF.PSLOCI",
+ "fid": "6F73",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F78",
+ "name": "EF.ACC",
+ "sym": "ADF.USIM/EF.ACC",
+ "fid": "6F78",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F7B",
+ "name": "EF.FPLMN",
+ "sym": "ADF.USIM/EF.FPLMN",
+ "fid": "6F7B",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F7E",
+ "name": "EF.LOCI",
+ "sym": "ADF.USIM/EF.LOCI",
+ "fid": "6F7E",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F80",
+ "name": "EF.ICI",
+ "sym": "ADF.USIM/EF.ICI",
+ "fid": "6F80",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F81",
+ "name": "EF.OCI",
+ "sym": "ADF.USIM/EF.OCI",
+ "fid": "6F81",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F82",
+ "name": "EF.ICT",
+ "sym": "ADF.USIM/EF.ICT",
+ "fid": "6F82",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6F83",
+ "name": "EF.OCT",
+ "sym": "ADF.USIM/EF.OCT",
+ "fid": "6F83",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FAD",
+ "name": "EF.AD",
+ "sym": "ADF.USIM/EF.AD",
+ "fid": "6FAD",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FB1",
+ "name": "EF.VGCS",
+ "sym": "ADF.USIM/EF.VGCS",
+ "fid": "6FB1",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FB2",
+ "name": "EF.VGCSS",
+ "sym": "ADF.USIM/EF.VGCSS",
+ "fid": "6FB2",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FB3",
+ "name": "EF.VBS",
+ "sym": "ADF.USIM/EF.VBS",
+ "fid": "6FB3",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FB4",
+ "name": "EF.VBSS",
+ "sym": "ADF.USIM/EF.VBSS",
+ "fid": "6FB4",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FB5",
+ "name": "EF.eMLPP",
+ "sym": "ADF.USIM/EF.eMLPP",
+ "fid": "6FB5",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FB6",
+ "name": "EF.AAeM",
+ "sym": "ADF.USIM/EF.AAeM",
+ "fid": "6FB6",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FB7",
+ "name": "EF.ECC",
+ "sym": "ADF.USIM/EF.ECC",
+ "fid": "6FB7",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FC4",
+ "name": "EF.NETPAR",
+ "sym": "ADF.USIM/EF.NETPAR",
+ "fid": "6FC4",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FC5",
+ "name": "EF.PNN",
+ "sym": "ADF.USIM/EF.PNN",
+ "fid": "6FC5",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FC6",
+ "name": "EF.OPL",
+ "sym": "ADF.USIM/EF.OPL",
+ "fid": "6FC6",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FC7",
+ "name": "EF.MBDN",
+ "sym": "ADF.USIM/EF.MBDN",
+ "fid": "6FC7",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FC8",
+ "name": "EF.EXT6",
+ "sym": "ADF.USIM/EF.EXT6",
+ "fid": "6FC8",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FC9",
+ "name": "EF.MBI",
+ "sym": "ADF.USIM/EF.MBI",
+ "fid": "6FC9",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FCA",
+ "name": "EF.MWIS",
+ "sym": "ADF.USIM/EF.MWIS",
+ "fid": "6FCA",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FCB",
+ "name": "EF.CFIS",
+ "sym": "ADF.USIM/EF.CFIS",
+ "fid": "6FCB",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FCC",
+ "name": "EF.EXT7",
+ "sym": "ADF.USIM/EF.EXT7",
+ "fid": "6FCC",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FCD",
+ "name": "EF.SPDI",
+ "sym": "ADF.USIM/EF.SPDI",
+ "fid": "6FCD",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FCE",
+ "name": "EF.MMSN",
+ "sym": "ADF.USIM/EF.MMSN",
+ "fid": "6FCE",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FCF",
+ "name": "EF.EXT8",
+ "sym": "ADF.USIM/EF.EXT8",
+ "fid": "6FCF",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD0",
+ "name": "EF.MMSICP",
+ "sym": "ADF.USIM/EF.MMSICP",
+ "fid": "6FD0",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD1",
+ "name": "EF.MMSUP",
+ "sym": "ADF.USIM/EF.MMSUP",
+ "fid": "6FD1",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD2",
+ "name": "EF.MMSUCP",
+ "sym": "ADF.USIM/EF.MMSUCP",
+ "fid": "6FD2",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD3",
+ "name": "EF.NIA",
+ "sym": "ADF.USIM/EF.NIA",
+ "fid": "6FD3",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD4",
+ "name": "EF.VGCSCA",
+ "sym": "ADF.USIM/EF.VGCSCA",
+ "fid": "6FD4",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD5",
+ "name": "EF.VBSCA",
+ "sym": "ADF.USIM/EF.VBSCA",
+ "fid": "6FD5",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD6",
+ "name": "EF.GBABP",
+ "sym": "ADF.USIM/EF.GBABP",
+ "fid": "6FD6",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD7",
+ "name": "EF.MSK",
+ "sym": "ADF.USIM/EF.MSK",
+ "fid": "6FD7",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD8",
+ "name": "EF.MUK",
+ "sym": "ADF.USIM/EF.MUK",
+ "fid": "6FD8",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FD9",
+ "name": "EF.EHPLMN",
+ "sym": "ADF.USIM/EF.EHPLMN",
+ "fid": "6FD9",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FDA",
+ "name": "EF.GBANL",
+ "sym": "ADF.USIM/EF.GBANL",
+ "fid": "6FDA",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FDB",
+ "name": "EF.EHPLMNPI",
+ "sym": "ADF.USIM/EF.EHPLMNPI",
+ "fid": "6FDB",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FDD",
+ "name": "EF.NAFKCA",
+ "sym": "ADF.USIM/EF.NAFKCA",
+ "fid": "6FDD",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FDE",
+ "name": "EF.SPNI",
+ "sym": "ADF.USIM/EF.SPNI",
+ "fid": "6FDE",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FDF",
+ "name": "EF.PNNI",
+ "sym": "ADF.USIM/EF.PNNI",
+ "fid": "6FDF",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FE2",
+ "name": "EF.NCP-IP",
+ "sym": "ADF.USIM/EF.NCP-IP",
+ "fid": "6FE2",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FE3",
+ "name": "EF.EPSLOCI",
+ "sym": "ADF.USIM/EF.EPSLOCI",
+ "fid": "6FE3",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FE4",
+ "name": "EF.EPSNSC",
+ "sym": "ADF.USIM/EF.EPSNSC",
+ "fid": "6FE4",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FE6",
+ "name": "EF.UFC",
+ "sym": "ADF.USIM/EF.UFC",
+ "fid": "6FE6",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FE8",
+ "name": "EF.NASCONFIG",
+ "sym": "ADF.USIM/EF.NASCONFIG",
+ "fid": "6FE8",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FEC",
+ "name": "EF.PWS",
+ "sym": "ADF.USIM/EF.PWS",
+ "fid": "6FEC",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FED",
+ "name": "EF.FDNURI",
+ "sym": "ADF.USIM/EF.FDNURI",
+ "fid": "6FED",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FEE",
+ "name": "EF.BDNURI",
+ "sym": "ADF.USIM/EF.BDNURI",
+ "fid": "6FEE",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FEF",
+ "name": "EF.SDNURI",
+ "sym": "ADF.USIM/EF.SDNURI",
+ "fid": "6FEF",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FF1",
+ "name": "EF.IPS",
+ "sym": "ADF.USIM/EF.IPS",
+ "fid": "6FF1",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FF3",
+ "name": "EF.ePDGId",
+ "sym": "ADF.USIM/EF.ePDGId",
+ "fid": "6FF3",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FF4",
+ "name": "EF.ePDGSelection",
+ "sym": "ADF.USIM/EF.ePDGSelection",
+ "fid": "6FF4",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FF5",
+ "name": "EF.ePDGIdEm",
+ "sym": "ADF.USIM/EF.ePDGIdEm",
+ "fid": "6FF5",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FF6",
+ "name": "EF.ePDGSelectionEm",
+ "sym": "ADF.USIM/EF.ePDGSelectionEm",
+ "fid": "6FF6",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FF7",
+ "name": "EF.FromPreferred",
+ "sym": "ADF.USIM/EF.FromPreferred",
+ "fid": "6FF7",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FF8",
+ "name": "EF.IMSConfigData",
+ "sym": "ADF.USIM/EF.IMSConfigData",
+ "fid": "6FF8",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FFC",
+ "name": "EF.XCAPConfigData",
+ "sym": "ADF.USIM/EF.XCAPConfigData",
+ "fid": "6FFC",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FFD",
+ "name": "EF.EARFCNList",
+ "sym": "ADF.USIM/EF.EARFCNList",
+ "fid": "6FFD",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM/6FFE",
+ "name": "EF.MuDMiDConfigData",
+ "sym": "ADF.USIM/EF.MuDMiDConfigData",
+ "fid": "6FFE",
+ "kind": "ef",
+ "root": "ADF.USIM"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI",
+ "name": "ADF.USIM-non-IMSI",
+ "sym": "ADF.USIM-non-IMSI",
+ "fid": "",
+ "kind": "adf",
+ "root": "ADF.USIM-NON-IMSI",
+ "aid": "A000000087100B"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3A",
+ "name": "DF.PHONEBOOK",
+ "sym": "ADF.USIM-non-IMSI/DF.PHONEBOOK",
+ "fid": "5F3A",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3A/4F22",
+ "name": "EF.PSC",
+ "sym": "ADF.USIM-non-IMSI/DF.PHONEBOOK/EF.PSC",
+ "fid": "4F22",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3A/4F23",
+ "name": "EF.CC",
+ "sym": "ADF.USIM-non-IMSI/DF.PHONEBOOK/EF.CC",
+ "fid": "4F23",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3A/4F24",
+ "name": "EF.PUID",
+ "sym": "ADF.USIM-non-IMSI/DF.PHONEBOOK/EF.PUID",
+ "fid": "4F24",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3A/4F30",
+ "name": "EF.PBR",
+ "sym": "ADF.USIM-non-IMSI/DF.PHONEBOOK/EF.PBR",
+ "fid": "4F30",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3B",
+ "name": "DF.GSM-ACCESS",
+ "sym": "ADF.USIM-non-IMSI/DF.GSM-ACCESS",
+ "fid": "5F3B",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3B/4F20",
+ "name": "EF.Kc",
+ "sym": "ADF.USIM-non-IMSI/DF.GSM-ACCESS/EF.Kc",
+ "fid": "4F20",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3B/4F52",
+ "name": "EF.KcGPRS",
+ "sym": "ADF.USIM-non-IMSI/DF.GSM-ACCESS/EF.KcGPRS",
+ "fid": "4F52",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3B/4F63",
+ "name": "EF.CPBCCH",
+ "sym": "ADF.USIM-non-IMSI/DF.GSM-ACCESS/EF.CPBCCH",
+ "fid": "4F63",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F3B/4F64",
+ "name": "EF.InvScan",
+ "sym": "ADF.USIM-non-IMSI/DF.GSM-ACCESS/EF.InvScan",
+ "fid": "4F64",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40",
+ "name": "DF.WLAN",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN",
+ "fid": "5F40",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F41",
+ "name": "EF.Pseudo",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.Pseudo",
+ "fid": "4F41",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F42",
+ "name": "EF.UPLMNWLAN",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.UPLMNWLAN",
+ "fid": "4F42",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F43",
+ "name": "EF.OPLMNWLAN",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.OPLMNWLAN",
+ "fid": "4F43",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F44",
+ "name": "EF.UWSIDL",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.UWSIDL",
+ "fid": "4F44",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F45",
+ "name": "EF.OWSIDL",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.OWSIDL",
+ "fid": "4F45",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F46",
+ "name": "EF.WRI",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.WRI",
+ "fid": "4F46",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F47",
+ "name": "EF.HWSIDL",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.HWSIDL",
+ "fid": "4F47",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F48",
+ "name": "EF.WEHPLMNPI",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.WEHPLMNPI",
+ "fid": "4F48",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F49",
+ "name": "EF.WHPI",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.WHPI",
+ "fid": "4F49",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F4A",
+ "name": "EF.WLRPLMN",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.WLRPLMN",
+ "fid": "4F4A",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F40/4F4B",
+ "name": "EF.HPLMNDAI",
+ "sym": "ADF.USIM-non-IMSI/DF.WLAN/EF.HPLMNDAI",
+ "fid": "4F4B",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F50",
+ "name": "DF.HNB",
+ "sym": "ADF.USIM-non-IMSI/DF.HNB",
+ "fid": "5F50",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F50/4F81",
+ "name": "EF.ACSGL",
+ "sym": "ADF.USIM-non-IMSI/DF.HNB/EF.ACSGL",
+ "fid": "4F81",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F50/4F82",
+ "name": "EF.CSGT",
+ "sym": "ADF.USIM-non-IMSI/DF.HNB/EF.CSGT",
+ "fid": "4F82",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F50/4F83",
+ "name": "EF.HNBN",
+ "sym": "ADF.USIM-non-IMSI/DF.HNB/EF.HNBN",
+ "fid": "4F83",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F50/4F84",
+ "name": "EF.OCSGL",
+ "sym": "ADF.USIM-non-IMSI/DF.HNB/EF.OCSGL",
+ "fid": "4F84",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F50/4F85",
+ "name": "EF.OCSGT",
+ "sym": "ADF.USIM-non-IMSI/DF.HNB/EF.OCSGT",
+ "fid": "4F85",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F50/4F86",
+ "name": "EF.OHNBN",
+ "sym": "ADF.USIM-non-IMSI/DF.HNB/EF.OHNBN",
+ "fid": "4F86",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90",
+ "name": "DF.ProSe",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe",
+ "fid": "5F90",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F01",
+ "name": "EF.PROSE_MON",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_MON",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F02",
+ "name": "EF.PROSE_ANN",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_ANN",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F03",
+ "name": "EF.PROSEFUNC",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSEFUNC",
+ "fid": "4F03",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F04",
+ "name": "EF.PROSE_RADIO_COM",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_RADIO_COM",
+ "fid": "4F04",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F05",
+ "name": "EF.PROSE_RADIO_MON",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_RADIO_MON",
+ "fid": "4F05",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F06",
+ "name": "EF.PROSE_RADIO_ANN",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_RADIO_ANN",
+ "fid": "4F06",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F07",
+ "name": "EF.PROSE_POLICY",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_POLICY",
+ "fid": "4F07",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F08",
+ "name": "EF.PROSE_PLMN",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_PLMN",
+ "fid": "4F08",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F09",
+ "name": "EF.PROSE_GC",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_GC",
+ "fid": "4F09",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F10",
+ "name": "EF.PST",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PST",
+ "fid": "4F10",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F11",
+ "name": "EF.UIRC",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.UIRC",
+ "fid": "4F11",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F12",
+ "name": "EF.PROSE_GM_DISCOVERY",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_GM_DISCOVERY",
+ "fid": "4F12",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F13",
+ "name": "EF.PROSE_RELAY",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_RELAY",
+ "fid": "4F13",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5F90/4F14",
+ "name": "EF.PROSE_RELAY_DISCOVERY",
+ "sym": "ADF.USIM-non-IMSI/DF.ProSe/EF.PROSE_RELAY_DISCOVERY",
+ "fid": "4F14",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0",
+ "name": "DF.5GS",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS",
+ "fid": "5FC0",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F01",
+ "name": "EF.5GS3GPPLOCI",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.5GS3GPPLOCI",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F02",
+ "name": "EF.5GSN3GPPLOCI",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.5GSN3GPPLOCI",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F03",
+ "name": "EF.5GS3GPPNSC",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.5GS3GPPNSC",
+ "fid": "4F03",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F04",
+ "name": "EF.5GSN3GPPNSC",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.5GSN3GPPNSC",
+ "fid": "4F04",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F05",
+ "name": "EF.5GAUTHKEYS",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.5GAUTHKEYS",
+ "fid": "4F05",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F06",
+ "name": "EF.UAC_AIC",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.UAC_AIC",
+ "fid": "4F06",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F07",
+ "name": "EF.SUCI_Calc_Info",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.SUCI_Calc_Info",
+ "fid": "4F07",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F08",
+ "name": "EF.OPL5G",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.OPL5G",
+ "fid": "4F08",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F09",
+ "name": "EF.SUPI_NAI",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.SUPI_NAI",
+ "fid": "4F09",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F0A",
+ "name": "EF.Routing_Indicator",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.Routing_Indicator",
+ "fid": "4F0A",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F0B",
+ "name": "EF.URSP",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.URSP",
+ "fid": "4F0B",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F0C",
+ "name": "EF.TN3GPPSNN",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.TN3GPPSNN",
+ "fid": "4F0C",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F0D",
+ "name": "EF.CAG",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.CAG",
+ "fid": "4F0D",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F0E",
+ "name": "EF.SOR-CMCI",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.SOR-CMCI",
+ "fid": "4F0E",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F0F",
+ "name": "EF.DRI",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.DRI",
+ "fid": "4F0F",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F10",
+ "name": "EF.5GSEDRX",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.5GSEDRX",
+ "fid": "4F10",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F11",
+ "name": "EF.5GNSWO_CONF",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.5GNSWO_CONF",
+ "fid": "4F11",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F15",
+ "name": "EF.MCHPPLMN",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.MCHPPLMN",
+ "fid": "4F15",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FC0/4F16",
+ "name": "EF.KAUSF_DERIVATION",
+ "sym": "ADF.USIM-non-IMSI/DF.5GS/EF.KAUSF_DERIVATION",
+ "fid": "4F16",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FD0",
+ "name": "DF.SAIP",
+ "sym": "ADF.USIM-non-IMSI/DF.SAIP",
+ "fid": "5FD0",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FD0/4F01",
+ "name": "EF.SUCI_Calc_Info",
+ "sym": "ADF.USIM-non-IMSI/DF.SAIP/EF.SUCI_Calc_Info",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FE0",
+ "name": "DF.SNPN",
+ "sym": "ADF.USIM-non-IMSI/DF.SNPN",
+ "fid": "5FE0",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FE0/4F01",
+ "name": "EF.PWS_SNPN",
+ "sym": "ADF.USIM-non-IMSI/DF.SNPN/EF.PWS_SNPN",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FE0/4F02",
+ "name": "EF.NID",
+ "sym": "ADF.USIM-non-IMSI/DF.SNPN/EF.NID",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0",
+ "name": "DF.5G_ProSe",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe",
+ "fid": "5FF0",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F01",
+ "name": "EF.5G_PROSE_ST",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_ST",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F02",
+ "name": "EF.5G_PROSE_DD",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_DD",
+ "fid": "4F02",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F03",
+ "name": "EF.5G_PROSE_DC",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_DC",
+ "fid": "4F03",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F04",
+ "name": "EF.5G_PROSE_U2NRU",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_U2NRU",
+ "fid": "4F04",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F05",
+ "name": "EF.5G_PROSE_RU",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_RU",
+ "fid": "4F05",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F06",
+ "name": "EF.5G_PROSE_UIR",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_UIR",
+ "fid": "4F06",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F07",
+ "name": "EF.5G_PROSE_U2URU",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_U2URU",
+ "fid": "4F07",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF0/4F08",
+ "name": "EF.5G_PROSE_EU",
+ "sym": "ADF.USIM-non-IMSI/DF.5G_ProSe/EF.5G_PROSE_EU",
+ "fid": "4F08",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF1",
+ "name": "DF.5MBSUECONFIG",
+ "sym": "ADF.USIM-non-IMSI/DF.5MBSUECONFIG",
+ "fid": "5FF1",
+ "kind": "df",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/5FF1/4F01",
+ "name": "EF.5MBSUECONFIG",
+ "sym": "ADF.USIM-non-IMSI/DF.5MBSUECONFIG/EF.5MBSUECONFIG",
+ "fid": "4F01",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F01",
+ "name": "EF.eAKA",
+ "sym": "ADF.USIM-non-IMSI/EF.eAKA",
+ "fid": "6F01",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F02",
+ "name": "EF.OCST",
+ "sym": "ADF.USIM-non-IMSI/EF.OCST",
+ "fid": "6F02",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F05",
+ "name": "EF.LI",
+ "sym": "ADF.USIM-non-IMSI/EF.LI",
+ "fid": "6F05",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F06",
+ "name": "EF.ARR",
+ "sym": "ADF.USIM-non-IMSI/EF.ARR",
+ "fid": "6F06",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F08",
+ "name": "EF.Keys",
+ "sym": "ADF.USIM-non-IMSI/EF.Keys",
+ "fid": "6F08",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F09",
+ "name": "EF.KeysPS",
+ "sym": "ADF.USIM-non-IMSI/EF.KeysPS",
+ "fid": "6F09",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F0A",
+ "name": "EF.GBAUAPI",
+ "sym": "ADF.USIM-non-IMSI/EF.GBAUAPI",
+ "fid": "6F0A",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F0B",
+ "name": "EF.IMSDCI",
+ "sym": "ADF.USIM-non-IMSI/EF.IMSDCI",
+ "fid": "6F0B",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F2C",
+ "name": "EF.DCK",
+ "sym": "ADF.USIM-non-IMSI/EF.DCK",
+ "fid": "6F2C",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F31",
+ "name": "EF.HPPLMN",
+ "sym": "ADF.USIM-non-IMSI/EF.HPPLMN",
+ "fid": "6F31",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F32",
+ "name": "EF.CNL",
+ "sym": "ADF.USIM-non-IMSI/EF.CNL",
+ "fid": "6F32",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F37",
+ "name": "EF.ACMmax",
+ "sym": "ADF.USIM-non-IMSI/EF.ACMmax",
+ "fid": "6F37",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F38",
+ "name": "EF.UST",
+ "sym": "ADF.USIM-non-IMSI/EF.UST",
+ "fid": "6F38",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F39",
+ "name": "EF.ACM",
+ "sym": "ADF.USIM-non-IMSI/EF.ACM",
+ "fid": "6F39",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F3B",
+ "name": "EF.FDN",
+ "sym": "ADF.USIM-non-IMSI/EF.FDN",
+ "fid": "6F3B",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F3C",
+ "name": "EF.SMS",
+ "sym": "ADF.USIM-non-IMSI/EF.SMS",
+ "fid": "6F3C",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F3E",
+ "name": "EF.GID1",
+ "sym": "ADF.USIM-non-IMSI/EF.GID1",
+ "fid": "6F3E",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F3F",
+ "name": "EF.GID2",
+ "sym": "ADF.USIM-non-IMSI/EF.GID2",
+ "fid": "6F3F",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F40",
+ "name": "EF.MSISDN",
+ "sym": "ADF.USIM-non-IMSI/EF.MSISDN",
+ "fid": "6F40",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F41",
+ "name": "EF.PUCT",
+ "sym": "ADF.USIM-non-IMSI/EF.PUCT",
+ "fid": "6F41",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F42",
+ "name": "EF.SMSP",
+ "sym": "ADF.USIM-non-IMSI/EF.SMSP",
+ "fid": "6F42",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F43",
+ "name": "EF.SMSS",
+ "sym": "ADF.USIM-non-IMSI/EF.SMSS",
+ "fid": "6F43",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F45",
+ "name": "EF.CBMI",
+ "sym": "ADF.USIM-non-IMSI/EF.CBMI",
+ "fid": "6F45",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F46",
+ "name": "EF.SPN",
+ "sym": "ADF.USIM-non-IMSI/EF.SPN",
+ "fid": "6F46",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F47",
+ "name": "EF.SMSR",
+ "sym": "ADF.USIM-non-IMSI/EF.SMSR",
+ "fid": "6F47",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F48",
+ "name": "EF.CBMID",
+ "sym": "ADF.USIM-non-IMSI/EF.CBMID",
+ "fid": "6F48",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F49",
+ "name": "EF.SDN",
+ "sym": "ADF.USIM-non-IMSI/EF.SDN",
+ "fid": "6F49",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F4B",
+ "name": "EF.EXT2",
+ "sym": "ADF.USIM-non-IMSI/EF.EXT2",
+ "fid": "6F4B",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F4C",
+ "name": "EF.EXT3",
+ "sym": "ADF.USIM-non-IMSI/EF.EXT3",
+ "fid": "6F4C",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F4D",
+ "name": "EF.BDN",
+ "sym": "ADF.USIM-non-IMSI/EF.BDN",
+ "fid": "6F4D",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F4E",
+ "name": "EF.EXT5",
+ "sym": "ADF.USIM-non-IMSI/EF.EXT5",
+ "fid": "6F4E",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F4F",
+ "name": "EF.CCP2",
+ "sym": "ADF.USIM-non-IMSI/EF.CCP2",
+ "fid": "6F4F",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F50",
+ "name": "EF.CBMIR",
+ "sym": "ADF.USIM-non-IMSI/EF.CBMIR",
+ "fid": "6F50",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F55",
+ "name": "EF.EXT4",
+ "sym": "ADF.USIM-non-IMSI/EF.EXT4",
+ "fid": "6F55",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F56",
+ "name": "EF.EST",
+ "sym": "ADF.USIM-non-IMSI/EF.EST",
+ "fid": "6F56",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F57",
+ "name": "EF.ACL",
+ "sym": "ADF.USIM-non-IMSI/EF.ACL",
+ "fid": "6F57",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F58",
+ "name": "EF.CMI",
+ "sym": "ADF.USIM-non-IMSI/EF.CMI",
+ "fid": "6F58",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F5B",
+ "name": "EF.START-HFN",
+ "sym": "ADF.USIM-non-IMSI/EF.START-HFN",
+ "fid": "6F5B",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F5C",
+ "name": "EF.THRESHOLD",
+ "sym": "ADF.USIM-non-IMSI/EF.THRESHOLD",
+ "fid": "6F5C",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F60",
+ "name": "EF.PLMNwAcT",
+ "sym": "ADF.USIM-non-IMSI/EF.PLMNwAcT",
+ "fid": "6F60",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F61",
+ "name": "EF.OPLMNwAcT",
+ "sym": "ADF.USIM-non-IMSI/EF.OPLMNwAcT",
+ "fid": "6F61",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F62",
+ "name": "EF.HPLMNwAcT",
+ "sym": "ADF.USIM-non-IMSI/EF.HPLMNwAcT",
+ "fid": "6F62",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F65",
+ "name": "EF.RPLMNAcTD",
+ "sym": "ADF.USIM-non-IMSI/EF.RPLMNAcTD",
+ "fid": "6F65",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F73",
+ "name": "EF.PSLOCI",
+ "sym": "ADF.USIM-non-IMSI/EF.PSLOCI",
+ "fid": "6F73",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F78",
+ "name": "EF.ACC",
+ "sym": "ADF.USIM-non-IMSI/EF.ACC",
+ "fid": "6F78",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F7B",
+ "name": "EF.FPLMN",
+ "sym": "ADF.USIM-non-IMSI/EF.FPLMN",
+ "fid": "6F7B",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F7E",
+ "name": "EF.LOCI",
+ "sym": "ADF.USIM-non-IMSI/EF.LOCI",
+ "fid": "6F7E",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F80",
+ "name": "EF.ICI",
+ "sym": "ADF.USIM-non-IMSI/EF.ICI",
+ "fid": "6F80",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F81",
+ "name": "EF.OCI",
+ "sym": "ADF.USIM-non-IMSI/EF.OCI",
+ "fid": "6F81",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F82",
+ "name": "EF.ICT",
+ "sym": "ADF.USIM-non-IMSI/EF.ICT",
+ "fid": "6F82",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6F83",
+ "name": "EF.OCT",
+ "sym": "ADF.USIM-non-IMSI/EF.OCT",
+ "fid": "6F83",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FAD",
+ "name": "EF.AD",
+ "sym": "ADF.USIM-non-IMSI/EF.AD",
+ "fid": "6FAD",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FB1",
+ "name": "EF.VGCS",
+ "sym": "ADF.USIM-non-IMSI/EF.VGCS",
+ "fid": "6FB1",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FB2",
+ "name": "EF.VGCSS",
+ "sym": "ADF.USIM-non-IMSI/EF.VGCSS",
+ "fid": "6FB2",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FB3",
+ "name": "EF.VBS",
+ "sym": "ADF.USIM-non-IMSI/EF.VBS",
+ "fid": "6FB3",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FB4",
+ "name": "EF.VBSS",
+ "sym": "ADF.USIM-non-IMSI/EF.VBSS",
+ "fid": "6FB4",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FB5",
+ "name": "EF.eMLPP",
+ "sym": "ADF.USIM-non-IMSI/EF.eMLPP",
+ "fid": "6FB5",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FB6",
+ "name": "EF.AAeM",
+ "sym": "ADF.USIM-non-IMSI/EF.AAeM",
+ "fid": "6FB6",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FB7",
+ "name": "EF.ECC",
+ "sym": "ADF.USIM-non-IMSI/EF.ECC",
+ "fid": "6FB7",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FC4",
+ "name": "EF.NETPAR",
+ "sym": "ADF.USIM-non-IMSI/EF.NETPAR",
+ "fid": "6FC4",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FC5",
+ "name": "EF.PNN",
+ "sym": "ADF.USIM-non-IMSI/EF.PNN",
+ "fid": "6FC5",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FC6",
+ "name": "EF.OPL",
+ "sym": "ADF.USIM-non-IMSI/EF.OPL",
+ "fid": "6FC6",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FC7",
+ "name": "EF.MBDN",
+ "sym": "ADF.USIM-non-IMSI/EF.MBDN",
+ "fid": "6FC7",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FC8",
+ "name": "EF.EXT6",
+ "sym": "ADF.USIM-non-IMSI/EF.EXT6",
+ "fid": "6FC8",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FC9",
+ "name": "EF.MBI",
+ "sym": "ADF.USIM-non-IMSI/EF.MBI",
+ "fid": "6FC9",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FCA",
+ "name": "EF.MWIS",
+ "sym": "ADF.USIM-non-IMSI/EF.MWIS",
+ "fid": "6FCA",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FCB",
+ "name": "EF.CFIS",
+ "sym": "ADF.USIM-non-IMSI/EF.CFIS",
+ "fid": "6FCB",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FCC",
+ "name": "EF.EXT7",
+ "sym": "ADF.USIM-non-IMSI/EF.EXT7",
+ "fid": "6FCC",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FCD",
+ "name": "EF.SPDI",
+ "sym": "ADF.USIM-non-IMSI/EF.SPDI",
+ "fid": "6FCD",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FCE",
+ "name": "EF.MMSN",
+ "sym": "ADF.USIM-non-IMSI/EF.MMSN",
+ "fid": "6FCE",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FCF",
+ "name": "EF.EXT8",
+ "sym": "ADF.USIM-non-IMSI/EF.EXT8",
+ "fid": "6FCF",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD0",
+ "name": "EF.MMSICP",
+ "sym": "ADF.USIM-non-IMSI/EF.MMSICP",
+ "fid": "6FD0",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD1",
+ "name": "EF.MMSUP",
+ "sym": "ADF.USIM-non-IMSI/EF.MMSUP",
+ "fid": "6FD1",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD2",
+ "name": "EF.MMSUCP",
+ "sym": "ADF.USIM-non-IMSI/EF.MMSUCP",
+ "fid": "6FD2",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD3",
+ "name": "EF.NIA",
+ "sym": "ADF.USIM-non-IMSI/EF.NIA",
+ "fid": "6FD3",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD4",
+ "name": "EF.VGCSCA",
+ "sym": "ADF.USIM-non-IMSI/EF.VGCSCA",
+ "fid": "6FD4",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD5",
+ "name": "EF.VBSCA",
+ "sym": "ADF.USIM-non-IMSI/EF.VBSCA",
+ "fid": "6FD5",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD6",
+ "name": "EF.GBABP",
+ "sym": "ADF.USIM-non-IMSI/EF.GBABP",
+ "fid": "6FD6",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD7",
+ "name": "EF.MSK",
+ "sym": "ADF.USIM-non-IMSI/EF.MSK",
+ "fid": "6FD7",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD8",
+ "name": "EF.MUK",
+ "sym": "ADF.USIM-non-IMSI/EF.MUK",
+ "fid": "6FD8",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FD9",
+ "name": "EF.EHPLMN",
+ "sym": "ADF.USIM-non-IMSI/EF.EHPLMN",
+ "fid": "6FD9",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FDA",
+ "name": "EF.GBANL",
+ "sym": "ADF.USIM-non-IMSI/EF.GBANL",
+ "fid": "6FDA",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FDB",
+ "name": "EF.EHPLMNPI",
+ "sym": "ADF.USIM-non-IMSI/EF.EHPLMNPI",
+ "fid": "6FDB",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FDD",
+ "name": "EF.NAFKCA",
+ "sym": "ADF.USIM-non-IMSI/EF.NAFKCA",
+ "fid": "6FDD",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FDE",
+ "name": "EF.SPNI",
+ "sym": "ADF.USIM-non-IMSI/EF.SPNI",
+ "fid": "6FDE",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FDF",
+ "name": "EF.PNNI",
+ "sym": "ADF.USIM-non-IMSI/EF.PNNI",
+ "fid": "6FDF",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FE2",
+ "name": "EF.NCP-IP",
+ "sym": "ADF.USIM-non-IMSI/EF.NCP-IP",
+ "fid": "6FE2",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FE3",
+ "name": "EF.EPSLOCI",
+ "sym": "ADF.USIM-non-IMSI/EF.EPSLOCI",
+ "fid": "6FE3",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FE4",
+ "name": "EF.EPSNSC",
+ "sym": "ADF.USIM-non-IMSI/EF.EPSNSC",
+ "fid": "6FE4",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FE6",
+ "name": "EF.UFC",
+ "sym": "ADF.USIM-non-IMSI/EF.UFC",
+ "fid": "6FE6",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FE8",
+ "name": "EF.NASCONFIG",
+ "sym": "ADF.USIM-non-IMSI/EF.NASCONFIG",
+ "fid": "6FE8",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FEC",
+ "name": "EF.PWS",
+ "sym": "ADF.USIM-non-IMSI/EF.PWS",
+ "fid": "6FEC",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FED",
+ "name": "EF.FDNURI",
+ "sym": "ADF.USIM-non-IMSI/EF.FDNURI",
+ "fid": "6FED",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FEE",
+ "name": "EF.BDNURI",
+ "sym": "ADF.USIM-non-IMSI/EF.BDNURI",
+ "fid": "6FEE",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FEF",
+ "name": "EF.SDNURI",
+ "sym": "ADF.USIM-non-IMSI/EF.SDNURI",
+ "fid": "6FEF",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FF1",
+ "name": "EF.IPS",
+ "sym": "ADF.USIM-non-IMSI/EF.IPS",
+ "fid": "6FF1",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FF3",
+ "name": "EF.ePDGId",
+ "sym": "ADF.USIM-non-IMSI/EF.ePDGId",
+ "fid": "6FF3",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FF4",
+ "name": "EF.ePDGSelection",
+ "sym": "ADF.USIM-non-IMSI/EF.ePDGSelection",
+ "fid": "6FF4",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FF5",
+ "name": "EF.ePDGIdEm",
+ "sym": "ADF.USIM-non-IMSI/EF.ePDGIdEm",
+ "fid": "6FF5",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FF6",
+ "name": "EF.ePDGSelectionEm",
+ "sym": "ADF.USIM-non-IMSI/EF.ePDGSelectionEm",
+ "fid": "6FF6",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FF7",
+ "name": "EF.FromPreferred",
+ "sym": "ADF.USIM-non-IMSI/EF.FromPreferred",
+ "fid": "6FF7",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FF8",
+ "name": "EF.IMSConfigData",
+ "sym": "ADF.USIM-non-IMSI/EF.IMSConfigData",
+ "fid": "6FF8",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FFC",
+ "name": "EF.XCAPConfigData",
+ "sym": "ADF.USIM-non-IMSI/EF.XCAPConfigData",
+ "fid": "6FFC",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FFD",
+ "name": "EF.EARFCNList",
+ "sym": "ADF.USIM-non-IMSI/EF.EARFCNList",
+ "fid": "6FFD",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ },
+ {
+ "path": "ADF.USIM-NON-IMSI/6FFE",
+ "name": "EF.MuDMiDConfigData",
+ "sym": "ADF.USIM-non-IMSI/EF.MuDMiDConfigData",
+ "fid": "6FFE",
+ "kind": "ef",
+ "root": "ADF.USIM-NON-IMSI"
+ }
+ ]
+}
diff --git a/pyproject.toml b/pyproject.toml
index c4543d1..f17f7b3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "pysim-simple-server"
-version = "3.3.0"
+version = "3.4.0"
description = "HTTP REST server wrapping pysim for the SIMple PWA"
requires-python = ">=3.8"
# pysim is a git-only dependency installed explicitly by setup.bat/setup.sh.
diff --git a/pysim_simple_server/server.py b/pysim_simple_server/server.py
index af01a10..d850cb4 100644
--- a/pysim_simple_server/server.py
+++ b/pysim_simple_server/server.py
@@ -29,7 +29,7 @@ from osmocom.tlv import BER_TLV_IE
from osmocom.utils import rpad
-VERSION = '3.3.0'
+VERSION = '3.4.0'
MAX_ENVELOPE_SEGMENTS = 5 # max SMS segments for outgoing C-APDU in ENVELOPE
diff --git a/pysim_simple_server/uicc_files.py b/pysim_simple_server/uicc_files.py
new file mode 100644
index 0000000..1534e77
--- /dev/null
+++ b/pysim_simple_server/uicc_files.py
@@ -0,0 +1,159 @@
+"""Standard UICC/SIM file list for the Remote APDU SELECT helper.
+
+The list is built **without a card** from pySim's card profiles and application
+classes - the same model pySim assembles at equip time:
+
+* ``CardProfileUICC`` (TS 102 221) and ``CardProfileSIM`` (TS 51 011) give the
+ MF tree (EF.DIR/ICCID/PL/ARR/UMPC, DF.TELECOM, DF.GSM, ...),
+* every concrete ``CardApplication`` subclass contributes its ADF subtree
+ (ADF.USIM, ADF.ISIM, ADF.ISD-R, ADF.ISD, ADF.ECASD, ...) with the AID.
+
+It ships as ``frontend/uicc_files.json`` so the SIM/USIM RFM SELECT picker has
+a file list offline (no card, no server); when a card is equipped the picker
+merges the live tree over it and hides probed-absent files.
+``tests/test_uicc_files.py`` regenerates the list and fails when pySim adds or
+renames files, so the asset cannot silently drift.
+
+Usage (from the repo root)::
+
+ python -m pysim_simple_server.uicc_files --write frontend/uicc_files.json
+"""
+
+from __future__ import annotations
+
+import argparse
+import datetime
+import json
+import os
+
+# Importing these modules registers their CardApplication subclasses, which are
+# discovered through osmocom's all_subclasses() - the same trick fastinit uses.
+import pySim.euicc
+import pySim.ts_31_102
+import pySim.ts_31_103
+
+from osmocom.utils import all_subclasses
+from pySim.filesystem import CardApplication, CardDF
+from pySim.ts_102_221 import CardProfileUICC
+from pySim.ts_51_011 import CardProfileSIM
+
+# Where the frontend asset lives, relative to the repository root.
+DEFAULT_ASSET = os.path.join('frontend', 'uicc_files.json')
+
+
+def _entry(fid_path, sym_path, name, fid, kind, root, aid=None):
+ out = {
+ 'path': fid_path.upper(),
+ 'name': name,
+ 'sym': sym_path,
+ 'fid': (fid or '').upper(),
+ 'kind': kind,
+ 'root': root.upper(),
+ }
+ if aid:
+ out['aid'] = aid.upper()
+ return out
+
+
+def _walk(node, fid_path, sym_path, root, out, seen):
+ """Depth-first walk of a DF/ADF subtree (children is a fid -> CardFile dict)."""
+ for fid, child in sorted(node.children.items()):
+ key = ('%s/%s' % (fid_path, fid)).upper()
+ if key in seen:
+ continue
+ seen.add(key)
+ is_df = isinstance(child, CardDF)
+ out.append(_entry(key, '%s/%s' % (sym_path, child.name), child.name, fid,
+ 'df' if is_df else 'ef', root))
+ if is_df:
+ _walk(child, key, '%s/%s' % (sym_path, child.name), root, out, seen)
+
+
+def _add_mf_files(files, out, seen):
+ for f in files:
+ key = ('MF/%s' % f.fid).upper()
+ if key in seen:
+ continue
+ seen.add(key)
+ is_df = isinstance(f, CardDF)
+ out.append(_entry(key, 'MF/%s' % f.name, f.name, f.fid,
+ 'df' if is_df else 'ef', 'MF'))
+ if is_df:
+ _walk(f, key, 'MF/%s' % f.name, 'MF', out, seen)
+
+
+def _applications():
+ """One instance per concrete CardApplication subclass (as fastinit does)."""
+ apps = []
+ for app_cls in all_subclasses(CardApplication):
+ if hasattr(app_cls, '_' + app_cls.__name__ + '__intermediate'):
+ continue
+ try:
+ apps.append(app_cls())
+ except Exception:
+ continue
+ return apps
+
+
+def build():
+ """Return the standard file list (canonical path, symbolic name, fid, kind)."""
+ out = []
+ seen = set()
+ uicc = CardProfileUICC()
+ # CardProfileUICC itself carries no applications - like fastinit does at
+ # equip time, attach every concrete CardApplication subclass.
+ for app in _applications():
+ uicc.add_application(app)
+ _add_mf_files(uicc.files_in_mf, out, seen)
+ _add_mf_files(CardProfileSIM().files_in_mf, out, seen)
+ for app in uicc.applications:
+ adf = app.adf
+ if adf is None:
+ continue
+ key = adf.name.upper()
+ if key in seen:
+ continue
+ seen.add(key)
+ out.append(_entry(key, adf.name, adf.name, '', 'adf', adf.name, app.aid))
+ _walk(adf, key, adf.name, adf.name, out, seen)
+ # Stable order: MF first, then the ADFs alphabetically; DFs before their EFs
+ # is implicit in the walk, paths sort consistently inside a root.
+ out.sort(key=lambda e: (0 if e['root'] == 'MF' else 1, e['root'], e['path']))
+ return out
+
+
+def build_document():
+ return {
+ 'generated': datetime.date.today().isoformat(),
+ 'files': build(),
+ }
+
+
+def main(argv=None):
+ parser = argparse.ArgumentParser(description=__doc__.splitlines()[0])
+ parser.add_argument('--write', metavar='PATH', default=None,
+ help='write the JSON asset (default: %s)' % DEFAULT_ASSET)
+ parser.add_argument('--check', action='store_true',
+ help='compare the asset with the freshly built list')
+ args = parser.parse_args(argv)
+ doc = build_document()
+ if args.check:
+ with open(args.write or DEFAULT_ASSET, 'r', encoding='utf-8') as fh:
+ cur = json.load(fh)
+ if cur.get('files') != doc['files']:
+ print('uicc_files.json is out of date - regenerate it')
+ return 1
+ print('uicc_files.json is up to date (%d entries)' % len(doc['files']))
+ return 0
+ if args.write:
+ with open(args.write, 'w', encoding='utf-8') as fh:
+ json.dump(doc, fh, indent=1)
+ fh.write('\n')
+ print('wrote %s (%d entries)' % (args.write, len(doc['files'])))
+ return 0
+ print(json.dumps(doc, indent=1))
+ return 0
+
+
+if __name__ == '__main__':
+ raise SystemExit(main())
diff --git a/tests/test_uicc_files.py b/tests/test_uicc_files.py
new file mode 100644
index 0000000..ef66ed8
--- /dev/null
+++ b/tests/test_uicc_files.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python3
+"""Drift guard for the shipped standard file list (frontend/uicc_files.json).
+
+The asset is generated from pySim's card profiles/application classes by
+``pysim_simple_server.uicc_files``. When pySim adds, renames or moves files,
+this test fails and the asset has to be regenerated with::
+
+ python -m pysim_simple_server.uicc_files --write frontend/uicc_files.json
+"""
+
+import json
+import sys
+import unittest
+from pathlib import Path
+
+# pySim checkout is a sibling of this repo; put it on sys.path so the builder
+# (which imports pySim at module level) can be exercised against it.
+PROJECTS = Path(__file__).resolve().parents[2]
+PY_SIM = PROJECTS / 'pysim'
+if str(PY_SIM) not in sys.path:
+ sys.path.insert(0, str(PY_SIM))
+
+REPO = Path(__file__).resolve().parents[1]
+ASSET = REPO / 'frontend' / 'uicc_files.json'
+
+from pysim_simple_server import uicc_files
+
+
+def _load():
+ with open(ASSET, 'r', encoding='utf-8') as fh:
+ return json.load(fh)
+
+
+class TestUiccFilesAsset(unittest.TestCase):
+ def test_asset_matches_the_pysim_build(self):
+ doc = _load()
+ self.assertEqual(doc['files'], uicc_files.build(),
+ 'frontend/uicc_files.json is out of date - regenerate it '
+ 'with: python -m pysim_simple_server.uicc_files --write '
+ 'frontend/uicc_files.json')
+
+ def test_document_has_a_date_and_a_non_empty_list(self):
+ doc = _load()
+ self.assertRegex(doc['generated'], r'^\d{4}-\d{2}-\d{2}$')
+ self.assertGreater(len(doc['files']), 300)
+
+ def test_known_standard_files_and_paths(self):
+ by_path = {f['path']: f for f in _load()['files']}
+ self.assertEqual(by_path['MF/2FE2']['name'], 'EF.ICCID')
+ self.assertEqual(by_path['MF/2FE2']['kind'], 'ef')
+ self.assertEqual(by_path['MF/7F10/6F3A']['name'], 'EF.ADN')
+ self.assertEqual(by_path['MF/7F10/6F3A']['sym'], 'MF/DF.TELECOM/EF.ADN')
+ self.assertEqual(by_path['MF/7F20']['name'], 'DF.GSM')
+ self.assertEqual(by_path['MF/7F20']['kind'], 'df')
+ self.assertEqual(by_path['ADF.USIM/6F07']['name'], 'EF.IMSI')
+ self.assertEqual(by_path['ADF.USIM']['kind'], 'adf')
+ self.assertEqual(by_path['ADF.USIM']['aid'], 'A0000000871002')
+ self.assertEqual(by_path['ADF.ISIM/6F02']['name'], 'EF.IMPI')
+
+ def test_paths_are_unique_and_well_formed(self):
+ files = _load()['files']
+ paths = [f['path'] for f in files]
+ self.assertEqual(len(paths), len(set(paths)))
+ for f in files:
+ root = f['root']
+ self.assertTrue(f['path'].startswith(root), f['path'])
+ self.assertIn(f['kind'], ('ef', 'df', 'adf'))
+ if f['kind'] == 'adf':
+ self.assertEqual(f['path'].upper(), f['name'].upper())
+ self.assertTrue(f['aid'])
+ else:
+ self.assertRegex(f['fid'], r'^[0-9A-F]{4}$')
+ self.assertTrue(f['name'].startswith(('EF.', 'DF.')))
+
+
+if __name__ == '__main__':
+ unittest.main()