€•mrŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ./translations/zh_CN/security/IMA-export-delete”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/zh_TW/security/IMA-export-delete”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/it_IT/security/IMA-export-delete”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/ja_JP/security/IMA-export-delete”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/ko_KR/security/IMA-export-delete”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/pt_BR/security/IMA-export-delete”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/sp_SP/security/IMA-export-delete”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒH/var/lib/git/docbuild/linux/Documentation/security/IMA-export-delete.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ"IMA Measurements Export and Delete”h]”hŒ"IMA Measurements Export and Delete”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´K ubhŒ paragraph”“”)”}”(hŒÌThe IMA measurements list is currently stored in the kernel memory. Memory occupation grows linearly with the number of records, and can become a problem especially in environments with reduced resources.”h]”hŒÌThe IMA measurements list is currently stored in the kernel memory. Memory occupation grows linearly with the number of records, and can become a problem especially in environments with reduced resources.”…””}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhï)”}”(hŒùWhile there is an advantage in keeping the IMA measurements list in kernel memory, so that it is always available for reading from the securityfs interfaces, storing it elsewhere would make it possible to free precious memory for other kernel usage.”h]”hŒùWhile there is an advantage in keeping the IMA measurements list in kernel memory, so that it is always available for reading from the securityfs interfaces, storing it elsewhere would make it possible to free precious memory for other kernel usage.”…””}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)”}”(hXThe IMA measurements list needs to be retained and safely stored for new attestation servers to validate it. Assuming the IMA measurements list is properly saved, storing it outside the kernel does not introduce security issues, since its integrity is anyway protected by the TPM.”h]”hXThe IMA measurements list needs to be retained and safely stored for new attestation servers to validate it. Assuming the IMA measurements list is properly saved, storing it outside the kernel does not introduce security issues, since its integrity is anyway protected by the TPM.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)”}”(hŒ~Hence, the new IMA staging mechanism is introduced to export IMA measurements to user space and delete them from kernel space.”h]”hŒ~Hence, the new IMA staging mechanism is introduced to export IMA measurements to user space and delete them from kernel space.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)”}”(hXiStaging consists in atomically moving the current measurements list to a temporary list, so that measurements can be deleted afterwards. The staging operation locks the hot path (racing with addition of new measurements) for a very short time, only for swapping the list pointers. Deletion of the measurements instead is done locklessly, away from the hot path.”h]”hXiStaging consists in atomically moving the current measurements list to a temporary list, so that measurements can be deleted afterwards. The staging operation locks the hot path (racing with addition of new measurements) for a very short time, only for swapping the list pointers. Deletion of the measurements instead is done locklessly, away from the hot path.”…””}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)”}”(hX4There are two flavors of the staging mechanism. In the staging with prompt, all current measurements are staged, read and deleted upon confirmation. In the staging and deleting flavor, N measurements are staged from the beginning of the current measurements list and immediately deleted without confirmation.”h]”hX4There are two flavors of the staging mechanism. In the staging with prompt, all current measurements are staged, read and deleted upon confirmation. In the staging and deleting flavor, N measurements are staged from the beginning of the current measurements list and immediately deleted without confirmation.”…””}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K"hhÝh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ!Management of Staged Measurements”h]”hŒ!Management of Staged Measurements”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjLh²hh³hÇh´K*ubhï)”}”(hXfSince with the staging mechanism measurement records are removed from the kernel, the staged measurements need to be saved in a storage and concatenated together, so that they can be presented during remote attestation as if staging was never done. This task can be accomplished by a remote attestation agent modified to support staging, or a system service.”h]”hXfSince with the staging mechanism measurement records are removed from the kernel, the staged measurements need to be saved in a storage and concatenated together, so that they can be presented during remote attestation as if staging was never done. This task can be accomplished by a remote attestation agent modified to support staging, or a system service.”…””}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K,hjLh²hubhï)”}”(hŒkCoordination is necessary in the case where there are multiple actors requesting measurements to be staged.”h]”hŒkCoordination is necessary in the case where there are multiple actors requesting measurements to be staged.”…””}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K3hjLh²hubhï)”}”(hXBIn the staging with prompt case, the measurement interfaces can be accessed only by one actor (writer) at a time, so the others will get an error until the former closes it. Since the actors don't care about N, when they gain access to the interface, they will get all the staged measurements at the time of their request.”h]”hXDIn the staging with prompt case, the measurement interfaces can be accessed only by one actor (writer) at a time, so the others will get an error until the former closes it. Since the actors don’t care about N, when they gain access to the interface, they will get all the staged measurements at the time of their request.”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K6hjLh²hubhï)”}”(hŒÙIn the case of staging and deleting, coordination is more important, since there is the risk that two actors unaware of each other compute the value N on the current measurements list and request IMA to stage N twice.”h]”hŒÙIn the case of staging and deleting, coordination is more important, since there is the risk that two actors unaware of each other compute the value N on the current measurements list and request IMA to stage N twice.”…””}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K <_staged interface>``: the user requests IMA to stage the entire measurements list; 2. ``cat <_staged interface>``: the user reads the staged measurements; 3. ``echo D > <_staged interface>``: the user requests IMA to delete staged measurements. ”h]”hŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ^``echo A > <_staged interface>``: the user requests IMA to stage the entire measurements list;”h]”hï)”}”(hŒ^``echo A > <_staged interface>``: the user requests IMA to stage the entire measurements list;”h]”(j@)”}”(hŒ ``echo A > <_staged interface>``”h]”hŒecho A > <_staged interface>”…””}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¥ubhŒ>: the user requests IMA to stage the entire measurements list;”…””}”(hj¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kƒhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjœubj )”}”(hŒD``cat <_staged interface>``: the user reads the staged measurements;”h]”hï)”}”(hjÉh]”(j@)”}”(hŒ``cat <_staged interface>``”h]”hŒcat <_staged interface>”…””}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjËubhŒ): the user reads the staged measurements;”…””}”(hjËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K…hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjœubj )”}”(hŒX``echo D > <_staged interface>``: the user requests IMA to delete staged measurements. ”h]”hï)”}”(hŒV``echo D > <_staged interface>``: the user requests IMA to delete staged measurements.”h]”(j@)”}”(hŒ ``echo D > <_staged interface>``”h]”hŒecho D > <_staged interface>”…””}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjðubhŒ6: the user requests IMA to delete staged measurements.”…””}”(hjðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K†hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjœubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jšhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³hÇh´Kƒhjgh²hubeh}”(h]”Œstaging-with-prompt”ah ]”h"]”Œstaging with prompt”ah$]”h&]”uh1hÈhjh²hh³hÇh´K{ubhÉ)”}”(hhh]”(hÎ)”}”(hŒStaging and deleting”h]”hŒStaging and deleting”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj+h²hh³hÇh´K‹ubhï)”}”(hŒlN measurements are staged to a temporary staging area, and immediately deleted without further confirmation.”h]”hŒlN measurements are staged to a temporary staging area, and immediately deleted without further confirmation.”…””}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj+h²hubhï)”}”(hŒ:This staging process is achieved with the following steps.”h]”hŒ:This staging process is achieved with the following steps.”…””}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj+h²hubj•)”}”(hX1. ``cat ``: the user reads the current measurements list and determines what the value N for staging should be; 2. ``echo N > ``: the user requests IMA to delete N measurements from the current measurements list. ”h]”j›)”}”(hhh]”(j )”}”(hŒ``cat ``: the user reads the current measurements list and determines what the value N for staging should be;”h]”hï)”}”(hŒ``cat ``: the user reads the current measurements list and determines what the value N for staging should be;”h]”(j@)”}”(hŒ``cat ``”h]”hŒcat ”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjcubhŒe: the user reads the current measurements list and determines what the value N for staging should be;”…””}”(hjch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K’hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj\ubj )”}”(hŒw``echo N > ``: the user requests IMA to delete N measurements from the current measurements list. ”h]”hï)”}”(hŒu``echo N > ``: the user requests IMA to delete N measurements from the current measurements list.”h]”(j@)”}”(hŒ!``echo N > ``”h]”hŒecho N > ”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‰ubhŒT: the user requests IMA to delete N measurements from the current measurements list.”…””}”(hj‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K”hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj\ubeh}”(h]”h ]”h"]”h$]”h&]”jjjhjjuh1jšhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³hÇh´K’hj+h²hubeh}”(h]”Œstaging-and-deleting”ah ]”h"]”Œstaging and deleting”ah$]”h&]”uh1hÈhjh²hh³hÇh´K‹ubeh}”(h]”Œusage”ah ]”h"]”Œusage”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KkubhÉ)”}”(hhh]”(hÎ)”}”(hŒInterface Access”h]”hŒInterface Access”…””}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÇh²hh³hÇh´K™ubhï)”}”(hŒñIn order to avoid the IMA measurements list being suddenly truncated by the staging mechanism during a read, or having multiple concurrent staging, a semaphore-like locking scheme has been implemented on all the measurements list interfaces.”h]”hŒñIn order to avoid the IMA measurements list being suddenly truncated by the staging mechanism during a read, or having multiple concurrent staging, a semaphore-like locking scheme has been implemented on all the measurements list interfaces.”…””}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K›hjÇh²hubhï)”}”(hXMultiple readers can access concurrently the original and staged interfaces, and they can be in mutual exclusion with one writer. In order to see the same state across all the measurement interfaces, the same writer is allowed to open multiple interfaces for write or read/write.”h]”hXMultiple readers can access concurrently the original and staged interfaces, and they can be in mutual exclusion with one writer. In order to see the same state across all the measurement interfaces, the same writer is allowed to open multiple interfaces for write or read/write.”…””}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hjÇh²hubhï)”}”(hŒSIf an illegal access occurs, the open to the measurements list interface is denied.”h]”hŒSIf an illegal access occurs, the open to the measurements list interface is denied.”…””}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¥hjÇh²hubeh}”(h]”Œinterface-access”ah ]”h"]”Œinterface access”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K™ubhÉ)”}”(hhh]”(hÎ)”}”(hŒKexec”h]”hŒKexec”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´Kªubhï)”}”(hŒÝIn the event a kexec() system call occurs between staging and deleting, the staged measurement records are marshalled before the current measurements list, so that they are both available when the secondary kernel starts.”h]”hŒÝIn the event a kexec() system call occurs between staging and deleting, the staged measurement records are marshalled before the current measurements list, so that they are both available when the secondary kernel starts.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¬hj h²hubhï)”}”(hŒãIf measurement is suspended before requesting to delete staged or current measurements, IMA returns an error to user space to let it know that marshalling is already in progress, so that it does not save the measurements twice.”h]”hŒãIf measurement is suspended before requesting to delete staged or current measurements, IMA returns an error to user space to let it know that marshalling is already in progress, so that it does not save the measurements twice.”…””}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K°hj h²hubhï)”}”(hŒÄIMA also disallows staging when suspending measurement, to avoid the situation where neither measurements are carried over to the secondary kernel, nor they are saved by user space to the storage.”h]”hŒÄIMA also disallows staging when suspending measurement, to avoid the situation where neither measurements are carried over to the secondary kernel, nor they are saved by user space to the storage.”…””}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kµhj h²hubeh}”(h]”Œkexec”ah ]”h"]”Œkexec”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KªubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Hash table”h]”hŒ Hash table”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjMh²hh³hÇh´K»ubhï)”}”(hŒ¸By default, the template digest of staged measurement records are kept in kernel memory (only template data are freed), to be able to detect duplicate records independently of staging.”h]”hŒ¸By default, the template digest of staged measurement records are kept in kernel memory (only template data are freed), to be able to detect duplicate records independently of staging.”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K½hjMh²hubhï)”}”(hXfThe new kernel option ``ima_flush_htable`` has been introduced to explicitly request a complete deletion of the staged measurements, for maximum kernel memory saving. If the option has been specified, duplicate records are still avoided on records of the current measurements list, but there can be duplicates between different groups of staged measurements.”h]”(hŒThe new kernel option ”…””}”(hjlh²hh³Nh´Nubj@)”}”(hŒ``ima_flush_htable``”h]”hŒima_flush_htable”…””}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjlubhX< has been introduced to explicitly request a complete deletion of the staged measurements, for maximum kernel memory saving. If the option has been specified, duplicate records are still avoided on records of the current measurements list, but there can be duplicates between different groups of staged measurements.”…””}”(hjlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÁhjMh²hubhï)”}”(hXFlushing the hash table is supported only for the staging with prompt flavor. For the staging and deleting flavor, it would have been necessary to lock the hot path adding new measurements for the time needed to remove each selected measurement individually.”h]”hXFlushing the hash table is supported only for the staging with prompt flavor. For the staging and deleting flavor, it would have been necessary to lock the hot path adding new measurements for the time needed to remove each selected measurement individually.”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÈhjMh²hubeh}”(h]”Œ hash-table”ah ]”h"]”Œ hash table”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K»ubeh}”(h]”Œ"ima-measurements-export-and-delete”ah ]”h"]”Œ"ima measurements export and delete”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÍŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j§j¤jIjFjšj—jjjÄjÁj(j%j¼j¹jjjJjGjŸjœuŒ nametypes”}”(j§‰jI‰jš‰j‰jĉj(‰j¼‰j‰jJ‰jŸ‰uh}”(j¤hÊjFhÝj—jLjjjÁjj%jgj¹j+jjÇjGj jœjMuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.