€•@ZŒ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”Œ5/translations/zh_CN/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/zh_TW/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/it_IT/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/ja_JP/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/ko_KR/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/sp_SP/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒALSA PCM channel-mapping API”h]”hŒALSA PCM channel-mapping API”…””}”(hh¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh£hžhhŸŒO/var/lib/git/docbuild/linux/Documentation/sound/designs/channel-mapping-api.rst”h KubhŒ paragraph”“”)”}”(hŒTakashi Iwai ”h]”(hŒTakashi Iwai <”…””}”(hh¹hžhhŸNh NubhŒ reference”“”)”}”(hŒ tiwai@suse.de”h]”hŒ tiwai@suse.de”…””}”(hhÃhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:tiwai@suse.de”uh1hÁhh¹ubhŒ>”…””}”(hh¹hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khh£hžhubh¢)”}”(hhh]”(h§)”}”(hŒGeneral”h]”hŒGeneral”…””}”(hhàhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hhÝhžhhŸh¶h Kubh¸)”}”(hŒ¤The channel mapping API allows user to query the possible channel maps and the current channel map, also optionally to modify the channel map of the current stream.”h]”hŒ¤The channel mapping API allows user to query the possible channel maps and the current channel map, also optionally to modify the channel map of the current stream.”…””}”(hhîhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K hhÝhžhubh¸)”}”(hŒüA channel map is an array of position for each PCM channel. Typically, a stereo PCM stream has a channel map of ``{ front_left, front_right }`` while a 4.0 surround PCM stream has a channel map of ``{ front left, front right, rear left, rear right }.``”h]”(hŒpA channel map is an array of position for each PCM channel. Typically, a stereo PCM stream has a channel map of ”…””}”(hhühžhhŸNh NubhŒliteral”“”)”}”(hŒ``{ front_left, front_right }``”h]”hŒ{ front_left, front_right }”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhüubhŒ6 while a 4.0 surround PCM stream has a channel map of ”…””}”(hhühžhhŸNh Nubj)”}”(hŒ7``{ front left, front right, rear left, rear right }.``”h]”hŒ3{ front left, front right, rear left, rear right }.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhüubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KhhÝhžhubh¸)”}”(hXŠThe problem, so far, was that we had no standard channel map explicitly, and applications had no way to know which channel corresponds to which (speaker) position. Thus, applications applied wrong channels for 5.1 outputs, and you hear suddenly strange sound from rear. Or, some devices secretly assume that center/LFE is the third/fourth channels while others that C/LFE as 5th/6th channels.”h]”hXŠThe problem, so far, was that we had no standard channel map explicitly, and applications had no way to know which channel corresponds to which (speaker) position. Thus, applications applied wrong channels for 5.1 outputs, and you hear suddenly strange sound from rear. Or, some devices secretly assume that center/LFE is the third/fourth channels while others that C/LFE as 5th/6th channels.”…””}”(hj,hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KhhÝhžhubh¸)”}”(hXAlso, some devices such as HDMI are configurable for different speaker positions even with the same number of total channels. However, there was no way to specify this because of lack of channel map specification. These are the main motivations for the new channel mapping API.”h]”hXAlso, some devices such as HDMI are configurable for different speaker positions even with the same number of total channels. However, there was no way to specify this because of lack of channel map specification. These are the main motivations for the new channel mapping API.”…””}”(hj:hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KhhÝhžhubeh}”(h]”Œgeneral”ah ]”h"]”Œgeneral”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒDesign”h]”hŒDesign”…””}”(hjShžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjPhžhhŸh¶h K#ubh¸)”}”(hŒ¡Actually, "the channel mapping API" doesn't introduce anything new in the kernel/user-space ABI perspective. It uses only the existing control element features.”h]”hŒ§Actually, “the channel mapping API†doesn’t introduce anything new in the kernel/user-space ABI perspective. It uses only the existing control element features.”…””}”(hjahžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K%hjPhžhubh¸)”}”(hŒ As a ground design, each PCM substream may contain a control element providing the channel mapping information and configuration. This element is specified by:”h]”hŒ As a ground design, each PCM substream may contain a control element providing the channel mapping information and configuration. This element is specified by:”…””}”(hjohžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K)hjPhžhubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ iface = SNDRV_CTL_ELEM_IFACE_PCM”h]”h¸)”}”(hj†h]”hŒ iface = SNDRV_CTL_ELEM_IFACE_PCM”…””}”(hjˆhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K-hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjhžhhŸh¶h Nubjƒ)”}”(hŒ6name = "Playback Channel Map" or "Capture Channel Map"”h]”h¸)”}”(hjh]”hŒ>name = “Playback Channel Map†or “Capture Channel Map—…””}”(hjŸhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K.hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjhžhhŸh¶h Nubjƒ)”}”(hŒ>device = the same device number for the assigned PCM substream”h]”h¸)”}”(hj´h]”hŒ>device = the same device number for the assigned PCM substream”…””}”(hj¶hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K/hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjhžhhŸh¶h Nubjƒ)”}”(hŒ=index = the same index number for the assigned PCM substream ”h]”h¸)”}”(hŒhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒ, ”…””}”(hj6hžhhŸNh Nubj)”}”(hŒ``SNDRV_CTL_TLV_CHMAP_VAR``”h]”hŒSNDRV_CTL_TLV_CHMAP_VAR”…””}”(hjPhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒ or ”…””}”(hj6hžhhŸNh Nubj)”}”(hŒ``SNDRV_CTL_TLVT_CHMAP_PAIRED``”h]”hŒSNDRV_CTL_TLVT_CHMAP_PAIRED”…””}”(hjbhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒ can be used. The ”…””}”(hj6hžhhŸNh Nubj)”}”(hŒ ``_FIXED``”h]”hŒ_FIXED”…””}”(hjthžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒt type is for a channel map with the fixed channel position while the latter two are for flexible channel positions. ”…””}”(hj6hžhhŸNh Nubj)”}”(hŒ``_VAR``”h]”hŒ_VAR”…””}”(hj†hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒG type is for a channel map where all channels are freely swappable and ”…””}”(hj6hžhhŸNh Nubj)”}”(hŒ ``_PAIRED``”h]”hŒ_PAIRED”…””}”(hj˜hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒh type is where pair-wise channels are swappable. For example, when you have {FL/FR/RL/RR} channel map, ”…””}”(hj6hžhhŸNh Nubj)”}”(hŒ ``_PAIRED``”h]”hŒ_PAIRED”…””}”(hjªhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒ7 type would allow you to swap only {RL/RR/FL/FR} while ”…””}”(hj6hžhhŸNh Nubj)”}”(hŒ``_VAR``”h]”hŒ_VAR”…””}”(hj¼hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhŒ* type would allow even swapping FL and RR.”…””}”(hj6hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KBhjhžhubh¸)”}”(hŒ3These new TLV types are defined in ``sound/tlv.h``.”h]”(hŒ#These new TLV types are defined in ”…””}”(hjÔhžhhŸNh Nubj)”}”(hŒ``sound/tlv.h``”h]”hŒ sound/tlv.h”…””}”(hjÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubhŒ.”…””}”(hjÔhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KLhjhžhubh¸)”}”(hŒWThe available channel position values are defined in ``sound/asound.h``, here is a cut:”h]”(hŒ5The available channel position values are defined in ”…””}”(hjôhžhhŸNh Nubj)”}”(hŒ``sound/asound.h``”h]”hŒsound/asound.h”…””}”(hjühžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôubhŒ, here is a cut:”…””}”(hjôhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KNhjhžhubhŒ literal_block”“”)”}”(hX /* channel positions */ enum { SNDRV_CHMAP_UNKNOWN = 0, SNDRV_CHMAP_NA, /* N/A, silent */ SNDRV_CHMAP_MONO, /* mono stream */ /* this follows the alsa-lib mixer channel value + 3 */ SNDRV_CHMAP_FL, /* front left */ SNDRV_CHMAP_FR, /* front right */ SNDRV_CHMAP_RL, /* rear left */ SNDRV_CHMAP_RR, /* rear right */ SNDRV_CHMAP_FC, /* front center */ SNDRV_CHMAP_LFE, /* LFE */ SNDRV_CHMAP_SL, /* side left */ SNDRV_CHMAP_SR, /* side right */ SNDRV_CHMAP_RC, /* rear center */ /* new definitions */ SNDRV_CHMAP_FLC, /* front left center */ SNDRV_CHMAP_FRC, /* front right center */ SNDRV_CHMAP_RLC, /* rear left center */ SNDRV_CHMAP_RRC, /* rear right center */ SNDRV_CHMAP_FLW, /* front left wide */ SNDRV_CHMAP_FRW, /* front right wide */ SNDRV_CHMAP_FLH, /* front left high */ SNDRV_CHMAP_FCH, /* front center high */ SNDRV_CHMAP_FRH, /* front right high */ SNDRV_CHMAP_TC, /* top center */ SNDRV_CHMAP_TFL, /* top front left */ SNDRV_CHMAP_TFR, /* top front right */ SNDRV_CHMAP_TFC, /* top front center */ SNDRV_CHMAP_TRL, /* top rear left */ SNDRV_CHMAP_TRR, /* top rear right */ SNDRV_CHMAP_TRC, /* top rear center */ SNDRV_CHMAP_LAST = SNDRV_CHMAP_TRC, };”h]”hX /* channel positions */ enum { SNDRV_CHMAP_UNKNOWN = 0, SNDRV_CHMAP_NA, /* N/A, silent */ SNDRV_CHMAP_MONO, /* mono stream */ /* this follows the alsa-lib mixer channel value + 3 */ SNDRV_CHMAP_FL, /* front left */ SNDRV_CHMAP_FR, /* front right */ SNDRV_CHMAP_RL, /* rear left */ SNDRV_CHMAP_RR, /* rear right */ SNDRV_CHMAP_FC, /* front center */ SNDRV_CHMAP_LFE, /* LFE */ SNDRV_CHMAP_SL, /* side left */ SNDRV_CHMAP_SR, /* side right */ SNDRV_CHMAP_RC, /* rear center */ /* new definitions */ SNDRV_CHMAP_FLC, /* front left center */ SNDRV_CHMAP_FRC, /* front right center */ SNDRV_CHMAP_RLC, /* rear left center */ SNDRV_CHMAP_RRC, /* rear right center */ SNDRV_CHMAP_FLW, /* front left wide */ SNDRV_CHMAP_FRW, /* front right wide */ SNDRV_CHMAP_FLH, /* front left high */ SNDRV_CHMAP_FCH, /* front center high */ SNDRV_CHMAP_FRH, /* front right high */ SNDRV_CHMAP_TC, /* top center */ SNDRV_CHMAP_TFL, /* top front left */ SNDRV_CHMAP_TFR, /* top front right */ SNDRV_CHMAP_TFC, /* top front center */ SNDRV_CHMAP_TRL, /* top rear left */ SNDRV_CHMAP_TRR, /* top rear right */ SNDRV_CHMAP_TRC, /* top rear center */ SNDRV_CHMAP_LAST = SNDRV_CHMAP_TRC, };”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jhŸh¶h KShjhžhubh¸)”}”(hŒ­When a PCM stream can provide more than one channel map, you can provide multiple channel maps in a TLV container type. The TLV data to be returned will contain such as: ::”h]”hŒªWhen a PCM stream can provide more than one channel map, you can provide multiple channel maps in a TLV container type. The TLV data to be returned will contain such as:”…””}”(hj&hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kvhjhžhubj)”}”(hŒñSNDRV_CTL_TLVT_CONTAINER 96 SNDRV_CTL_TLVT_CHMAP_FIXED 4 SNDRV_CHMAP_FC SNDRV_CTL_TLVT_CHMAP_FIXED 8 SNDRV_CHMAP_FL SNDRV_CHMAP_FR SNDRV_CTL_TLVT_CHMAP_FIXED 16 NDRV_CHMAP_FL SNDRV_CHMAP_FR \ SNDRV_CHMAP_RL SNDRV_CHMAP_RR”h]”hŒñSNDRV_CTL_TLVT_CONTAINER 96 SNDRV_CTL_TLVT_CHMAP_FIXED 4 SNDRV_CHMAP_FC SNDRV_CTL_TLVT_CHMAP_FIXED 8 SNDRV_CHMAP_FL SNDRV_CHMAP_FR SNDRV_CTL_TLVT_CHMAP_FIXED 16 NDRV_CHMAP_FL SNDRV_CHMAP_FR \ SNDRV_CHMAP_RL SNDRV_CHMAP_RR”…””}”hj4sbah}”(h]”h ]”h"]”h$]”h&]”j$j%uh1jhŸh¶h K{hjhžhubh¸)”}”(hŒZThe channel position is provided in LSB 16bits. The upper bits are used for bit flags. ::”h]”hŒWThe channel position is provided in LSB 16bits. The upper bits are used for bit flags.”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjhžhubj)”}”(hŒ˜#define SNDRV_CHMAP_POSITION_MASK 0xffff #define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16) #define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16)”h]”hŒ˜#define SNDRV_CHMAP_POSITION_MASK 0xffff #define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16) #define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16)”…””}”hjPsbah}”(h]”h ]”h"]”h$]”h&]”j$j%uh1jhŸh¶h K…hjhžhubh¸)”}”(hŒ±``SNDRV_CHMAP_PHASE_INVERSE`` indicates the channel is phase inverted, (thus summing left and right channels would result in almost silence). Some digital mic devices have this.”h]”(j)”}”(hŒ``SNDRV_CHMAP_PHASE_INVERSE``”h]”hŒSNDRV_CHMAP_PHASE_INVERSE”…””}”(hjbhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^ubhŒ” indicates the channel is phase inverted, (thus summing left and right channels would result in almost silence). Some digital mic devices have this.”…””}”(hj^hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K‰hjhžhubh¸)”}”(hŒˆWhen ``SNDRV_CHMAP_DRIVER_SPEC`` is set, all the channel position values don't follow the standard definition above but driver-specific.”h]”(hŒWhen ”…””}”(hjzhžhhŸNh Nubj)”}”(hŒ``SNDRV_CHMAP_DRIVER_SPEC``”h]”hŒSNDRV_CHMAP_DRIVER_SPEC”…””}”(hj‚hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzubhŒj is set, all the channel position values don’t follow the standard definition above but driver-specific.”…””}”(hjzhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjhžhubeh}”(h]”Œtlv”ah ]”h"]”Œtlv”ah$]”h&]”uh1h¡hjPhžhhŸh¶h K9ubh¢)”}”(hhh]”(h§)”}”(hŒRead Operation”h]”hŒRead Operation”…””}”(hj¥hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hj¢hžhhŸh¶h K‘ubh¸)”}”(hŒ¯The control read operation is for providing the current channel map of the given stream. The control element returns an integer array containing the position of each channel.”h]”hŒ¯The control read operation is for providing the current channel map of the given stream. The control element returns an integer array containing the position of each channel.”…””}”(hj³hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K“hj¢hžhubh¸)”}”(hŒWhen this is performed before the number of the channel is specified (i.e. hw_params is set), it should return all channels set to ``UNKNOWN``.”h]”(hŒƒWhen this is performed before the number of the channel is specified (i.e. hw_params is set), it should return all channels set to ”…””}”(hjÁhžhhŸNh Nubj)”}”(hŒ ``UNKNOWN``”h]”hŒUNKNOWN”…””}”(hjÉhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁubhŒ.”…””}”(hjÁhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K—hj¢hžhubeh}”(h]”Œread-operation”ah ]”h"]”Œread operation”ah$]”h&]”uh1h¡hjPhžhhŸh¶h K‘ubh¢)”}”(hhh]”(h§)”}”(hŒWrite Operation”h]”hŒWrite Operation”…””}”(hjìhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjéhžhhŸh¶h Kœubh¸)”}”(hŒýThe control write operation is optional, and only for devices that can change the channel configuration on the fly, such as HDMI. User needs to pass an integer value containing the valid channel positions for all channels of the assigned PCM substream.”h]”hŒýThe control write operation is optional, and only for devices that can change the channel configuration on the fly, such as HDMI. User needs to pass an integer value containing the valid channel positions for all channels of the assigned PCM substream.”…””}”(hjúhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kžhjéhžhubh¸)”}”(hŒmThis operation is allowed only at PCM PREPARED state. When called in other states, it shall return an error.”h]”hŒmThis operation is allowed only at PCM PREPARED state. When called in other states, it shall return an error.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K£hjéhžhubeh}”(h]”Œwrite-operation”ah ]”h"]”Œwrite operation”ah$]”h&]”uh1h¡hjPhžhhŸh¶h Kœubeh}”(h]”Œdesign”ah ]”h"]”Œdesign”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K#ubeh}”(h]”Œalsa-pcm-channel-mapping-api”ah ]”h"]”Œalsa pcm channel-mapping api”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”jQŒ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(jMjJj#j jŸjœjæjãjjuŒ nametypes”}”(j+‰jM‰j#‰jŸ‰jæ‰j‰uh}”(j(h£jJhÝj jPjœjjãj¢jjéuŒ 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.