Audio/a> provides functions for audio devices.<\/p>\n<h2 id=\"content-required-header\"><a href=https://samsungtizenos.com/"#content-required-header\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Required Header<\/h2>\n<p>#include <hal-audio.h><\/p>\n<h2 id=\"content-overview\"><a href=https://samsungtizenos.com/"#content-overview\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Overview<\/h2>\n<p>The Audio module in the HAL provides functions to manage audio playback and capture.<\/p>\n<p>Key functionalities include:<\/p>\n<ul>\n<li>Initializing and deinitializing the audio hardware.<\/li>\n<li>Opening and configuring PCM audio streams.<\/li>\n<li>Starting and stopping audio operations.<\/li>\n<li>Recovering from audio errors.<\/li>\n<li>Closing audio streams to free resources.<\/li>\n<\/ul>\n<h3 id=\"content-state-diagram\"><a href=https://samsungtizenos.com/"#content-state-diagram\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>State Diagram<\/h3>\n<p><img src=https://samsungtizenos.com/"media//hal_audio_state_diagram.png/" alt=\"hal_audio_state_diagram.png\" \/><\/p>\n<h3 id=\"content-state-transitions\"><a href=https://samsungtizenos.com/"#content-state-transitions\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>State Transitions<\/h3>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><strong>FUNCTION<\/strong><\/th>\n<th><strong>PRE-STATE<\/strong><\/th>\n<th><strong>POST-STATE<\/strong><\/th>\n<th><strong>SYNC TYPE<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>hal_audio_init()<\/td>\n<td>N\/A<\/td>\n<td>CLOSE<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_audio_deinit()<\/td>\n<td>CLOSE<\/td>\n<td>N\/A<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_audio_pcm_open()<\/td>\n<td>CLOSE<\/td>\n<td>OPEN<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_audio_pcm_set_params()<\/td>\n<td>OPEN<\/td>\n<td>SETUP<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_audio_pcm_start()<\/td>\n<td>SETUP<\/td>\n<td>RUNNING<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_audio_pcm_stop()<\/td>\n<td>RUNNING<\/td>\n<td>STOP<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_audio_pcm_close()<\/td>\n<td>STOP<\/td>\n<td>CLOSE<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_audio_pcm_recover()<\/td>\n<td>XRUN<\/td>\n<td>RUNNING<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p>For more information on the Audio features and the macros, see HAL Audio programming guides and tutorials.<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Typedefs<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga6a15547a8343774333f4ec1659a2d223\">audio_return<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for return codes.<\/td>\n<\/tr>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#gaa287b452bbc4d83699a5965038fe6cb6\">audio_direction<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga698b63cf55685c12926dcba842d606c3\">audio_direction_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for audio direction.<\/td>\n<\/tr>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga0b4af3df8e32c3489e39f089a8ad136f\">audio_state<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga325ed11b87d4609f0dc637432281dbf5\">audio_state_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for audio state.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structdevice__info\">device_info<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#gab6db7f040c21fa85bdfbb862da2999b9\">device_info_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Device information including type, direction and id.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__volume__info\">audio_volume_info<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Volume information including type, gain and direction.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__route__info\">audio_route_info<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5c5fe2b0186455963946708611707ed8\">audio_route_info_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Route information including role and device.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__route__option\">audio_route_option<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga97a5998810d0a65e2ca3facb64e40491\">audio_route_option_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Route option including role, name and value.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__stream__info\">audio_stream_info<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga88eab994ef404684b00edc0329b54da0\">audio_stream_info_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Stream information including role, direction and index.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__ducking__info\">audio_ducking_info<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga25d3e47f35189875e443fc69c23629a9\">audio_ducking_info_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Ducking information including target role, duration and ratio.<\/td>\n<\/tr>\n<tr>\n<td>typedef void(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga52c4ca22db221c18c59b92af8fcfc37f\">message_cb<\/a> )(const char *name, int value, void *user_data)<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Called when audio hal implementation needs to send a message.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#struct__hal__backend__media__audio__funcs\">_hal_backend_media_audio_funcs<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga9bf92c21ab4676909c1d46cf992de45c\">hal_backend_audio_funcs<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>The structure type of the audio HAL functions.<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h2 id=\"content-data-structure-documentation\"><a href=https://samsungtizenos.com/"#content-data-structure-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Data Structure Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct device_info<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Device information including type, direction and id.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a86f7850d057d6ee84399fe64e09deb08\">type<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#af4a8c4c3ff9041c9be1a32ac5a5365d7\">direction<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a8fc36bf09b2422086240dc06e808db78\">id<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation\"><a href=https://samsungtizenos.com/"#content-field-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#af4a8c4c3ff9041c9be1a32ac5a5365d7\">device_info::direction<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>playback or capture<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a8fc36bf09b2422086240dc06e808db78\">device_info::id<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>device id<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a86f7850d057d6ee84399fe64e09deb08\">device_info::type<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>device type<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct audio_volume_info<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Volume information including type, gain and direction.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ac2dbc309bec60fef305c8d12aa70ed45\">type<\/a><\/td>\n<\/tr>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a0fdf24666b0502a041feafdf2ba1813f\">gain<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#aa05b78aec693f10b5bdd5e3d9aac79df\">direction<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-1\"><a href=https://samsungtizenos.com/"#content-field-documentation-1\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#aa05b78aec693f10b5bdd5e3d9aac79df\">audio_volume_info::direction<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>playback or capture<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a0fdf24666b0502a041feafdf2ba1813f\">audio_volume_info::gain<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>volume gain<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ac2dbc309bec60fef305c8d12aa70ed45\">audio_volume_info::type<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>volume type<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct audio_route_info<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Route information including role and device.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a3610b90e789da960fcea8e4921854c57\">role<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#gab6db7f040c21fa85bdfbb862da2999b9\">device_info_s<\/a> *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#abc8363d158c94f04260208a36c66a06f\">device_infos<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a05a77dc89556bd31ccba80d58e41ad62\">num_of_devices<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-2\"><a href=https://samsungtizenos.com/"#content-field-documentation-2\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#gab6db7f040c21fa85bdfbb862da2999b9\">device_info_s<\/a>* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#abc8363d158c94f04260208a36c66a06f\">audio_route_info::device_infos<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>device info<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a05a77dc89556bd31ccba80d58e41ad62\">audio_route_info::num_of_devices<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>number of devices<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a3610b90e789da960fcea8e4921854c57\">audio_route_info::role<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>stream role<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct audio_route_option<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Route option including role, name and value.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a10f447b10f43cccb9ed59c18e0b44f98\">role<\/a><\/td>\n<\/tr>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a5561e76a1fe18b22e7ba876ffb6a5a74\">name<\/a><\/td>\n<\/tr>\n<tr>\n<td>int32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a41a849efe66280db6f03789355c379c5\">value<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-3\"><a href=https://samsungtizenos.com/"#content-field-documentation-3\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a5561e76a1fe18b22e7ba876ffb6a5a74\">audio_route_option::name<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>key<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a10f447b10f43cccb9ed59c18e0b44f98\">audio_route_option::role<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>stream role<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a41a849efe66280db6f03789355c379c5\">audio_route_option::value<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>value<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct audio_stream_info<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Stream information including role, direction and index.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#afc73dcade3a0a1d3f682e971d7959e9d\">role<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ae914bc548850a12d0557bda4734bab19\">direction<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ac4f1deb724f454c64c0ebd1daaf79a5e\">idx<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-4\"><a href=https://samsungtizenos.com/"#content-field-documentation-4\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ae914bc548850a12d0557bda4734bab19\">audio_stream_info::direction<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>playback or capture<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ac4f1deb724f454c64c0ebd1daaf79a5e\">audio_stream_info::idx<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>stream index<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#afc73dcade3a0a1d3f682e971d7959e9d\">audio_stream_info::role<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>stream role<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct audio_ducking_info<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Ducking information including target role, duration and ratio.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ae52c3bac361b412b350f99c1dfc5e660\">target_role<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab988915c8a1207a4a4042a5e479fdc72\">duration<\/a><\/td>\n<\/tr>\n<tr>\n<td>double<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a940d95307d99db3a840ace20839d6df4\">ratio<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-5\"><a href=https://samsungtizenos.com/"#content-field-documentation-5\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab988915c8a1207a4a4042a5e479fdc72\">audio_ducking_info::duration<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>ducking duration<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>double <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a940d95307d99db3a840ace20839d6df4\">audio_ducking_info::ratio<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>volume ratio<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ae52c3bac361b412b350f99c1dfc5e660\">audio_ducking_info::target_role<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>ducking target role<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct _hal_backend_media_audio_funcs<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of the audio HAL functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a4acd372f7158d22829dc2cc6e5ba2813\">init<\/a> )(void **audio_handle)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#aa0425be93e8487ee6b668990bc229acb\">deinit<\/a> )(void *audio_handle)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab284f9dac0d53020b521565847615712\">get_volume_level_max<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t *level)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a60182595cd657115a6d2bbb853884e71\">get_volume_level<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t *level)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a43c661c6b9e887c6938acbbc551ec012\">set_volume_level<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t level)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab279236b5f9d1157c3bd8eee1a28c57f\">get_volume_value<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t level, double *value)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a15189d5cf7b9023b7bf8b4fba0b6dea1\">get_volume_mute<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t *mute)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a43370057ca0d159e0bcd9988f4ed907b\">set_volume_mute<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t mute)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a55d24b2860d61712e2f38a6eb4316fa7\">set_volume_ratio<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga88eab994ef404684b00edc0329b54da0\">audio_stream_info_s<\/a> *info, double ratio)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#abe67b561f4e8d94404de29fc966b56a8\">notify_ducking_activation_changed<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga25d3e47f35189875e443fc69c23629a9\">audio_ducking_info_s<\/a> *info, uint32_t is_activated)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a823a728241bf49c8ce41af814589346b\">update_route<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5c5fe2b0186455963946708611707ed8\">audio_route_info_s<\/a> *info)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab3199a17bfe610611c3cef1e80e63af5\">update_route_option<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga97a5998810d0a65e2ca3facb64e40491\">audio_route_option_s<\/a> *option)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a1b2028f3778b7a3efc8fbd19c76d8c71\">notify_stream_connection_changed<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga88eab994ef404684b00edc0329b54da0\">audio_stream_info_s<\/a> *info, uint32_t is_connected)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a70a1494a58cea08266b79e11c069157d\">pcm_open<\/a> )(void *audio_handle, const char *card, const char *device, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods, void **pcm_handle)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a314d8b4b17ab05f96d2b4a76db369faa\">pcm_start<\/a> )(void *audio_handle, void *pcm_handle)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a03bf9652fca3bff5177bb327dbcaa020\">pcm_stop<\/a> )(void *audio_handle, void *pcm_handle)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a6d1305bbda9dc518946d6fdff4b27ca5\">pcm_close<\/a> )(void *audio_handle, void *pcm_handle)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a68d747bce79b60fccab37fa7952c12d2\">pcm_avail<\/a> )(void *audio_handle, void *pcm_handle, uint32_t *avail)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#adcd44154331926587cdad7bd3bfda8d1\">pcm_write<\/a> )(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a590528d2bfa872ab420aa4dcbaae2bf6\">pcm_read<\/a> )(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#abcc5ab204b86f04baeb478e51733a7f0\">pcm_get_fd<\/a> )(void *audio_handle, void *pcm_handle, int *fd)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a7766e70a78ad85e56cfcd643cb210bae\">pcm_recover<\/a> )(void *audio_handle, void *pcm_handle, int revents)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a989c32a79eac8ccc3d873abd6824e5a6\">pcm_get_params<\/a> )(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t *period_size, uint32_t *periods)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a97fe69e655e7f46f2e26c6d4d9aa33ac\">pcm_set_params<\/a> )(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a60f1401047bf38fdf0353e66fd0de422\">pcm_avail_delay<\/a> )(void *audio_handle, void *pcm_handle, int32_t *avail, int32_t *delay)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#aabf5e2940d915c8b89778c0840b03d5a\">pcm_mmap_begin<\/a> )(void *audio_handle, void *pcm_handle, void **areas, uint32_t *offset, uint32_t *frames, void **ptr)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a7fa34aef36e7895ae8a4a6af2a6d8d8e\">pcm_mmap_commit<\/a> )(void *audio_handle, void *pcm_handle, uint32_t offset, uint32_t frames)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ac3b620acb8d1f0a3d7d7ca501dc51abe\">pcm_get_state<\/a> )(void *audio_handle, void *pcm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga325ed11b87d4609f0dc637432281dbf5\">audio_state_e<\/a> *state)<\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a0e4496c8be84fe9ca6b9324681f5cb2f\">add_message_cb<\/a> )(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga52c4ca22db221c18c59b92af8fcfc37f\">message_cb<\/a> callback, void *user_data)<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-6\"><a href=https://samsungtizenos.com/"#content-field-documentation-6\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a0e4496c8be84fe9ca6b9324681f5cb2f\">_hal_backend_media_audio_funcs::add_message_cb<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga52c4ca22db221c18c59b92af8fcfc37f\">message_cb<\/a> callback, void *user_data)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Remove message callback<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#aa0425be93e8487ee6b668990bc229acb\">_hal_backend_media_audio_funcs::deinit<\/a>)(void *audio_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get volume max level<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a60182595cd657115a6d2bbb853884e71\">_hal_backend_media_audio_funcs::get_volume_level<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t *level)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set volume level<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab284f9dac0d53020b521565847615712\">_hal_backend_media_audio_funcs::get_volume_level_max<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t *level)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get volume level<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a15189d5cf7b9023b7bf8b4fba0b6dea1\">_hal_backend_media_audio_funcs::get_volume_mute<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t *mute)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set volume mute<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab279236b5f9d1157c3bd8eee1a28c57f\">_hal_backend_media_audio_funcs::get_volume_value<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t level, double *value)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get volume mute<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a4acd372f7158d22829dc2cc6e5ba2813\">_hal_backend_media_audio_funcs::init<\/a>)(void **audio_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>< Initialize HAL backend Deinitialize HAL backend<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#abe67b561f4e8d94404de29fc966b56a8\">_hal_backend_media_audio_funcs::notify_ducking_activation_changed<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga25d3e47f35189875e443fc69c23629a9\">audio_ducking_info_s<\/a> *info, uint32_t is_activated)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Update route<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a1b2028f3778b7a3efc8fbd19c76d8c71\">_hal_backend_media_audio_funcs::notify_stream_connection_changed<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga88eab994ef404684b00edc0329b54da0\">audio_stream_info_s<\/a> *info, uint32_t is_connected)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Open device<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a68d747bce79b60fccab37fa7952c12d2\">_hal_backend_media_audio_funcs::pcm_avail<\/a>)(void *audio_handle, void *pcm_handle, uint32_t *avail)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Write data<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a60f1401047bf38fdf0353e66fd0de422\">_hal_backend_media_audio_funcs::pcm_avail_delay<\/a>)(void *audio_handle, void *pcm_handle, int32_t *avail, int32_t *delay)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Start mmap<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a6d1305bbda9dc518946d6fdff4b27ca5\">_hal_backend_media_audio_funcs::pcm_close<\/a>)(void *audio_handle, void *pcm_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get available size<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#abcc5ab204b86f04baeb478e51733a7f0\">_hal_backend_media_audio_funcs::pcm_get_fd<\/a>)(void *audio_handle, void *pcm_handle, int *fd)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Try recovering device<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a989c32a79eac8ccc3d873abd6824e5a6\">_hal_backend_media_audio_funcs::pcm_get_params<\/a>)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t *period_size, uint32_t *periods)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set device params<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ac3b620acb8d1f0a3d7d7ca501dc51abe\">_hal_backend_media_audio_funcs::pcm_get_state<\/a>)(void *audio_handle, void *pcm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga325ed11b87d4609f0dc637432281dbf5\">audio_state_e<\/a> *state)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Add message callback<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#aabf5e2940d915c8b89778c0840b03d5a\">_hal_backend_media_audio_funcs::pcm_mmap_begin<\/a>)(void *audio_handle, void *pcm_handle, void **areas, uint32_t *offset, uint32_t *frames, void **ptr)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Commit mmap<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a7fa34aef36e7895ae8a4a6af2a6d8d8e\">_hal_backend_media_audio_funcs::pcm_mmap_commit<\/a>)(void *audio_handle, void *pcm_handle, uint32_t offset, uint32_t frames)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get state<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a70a1494a58cea08266b79e11c069157d\">_hal_backend_media_audio_funcs::pcm_open<\/a>)(void *audio_handle, const char *card, const char *device, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods, void **pcm_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Start device<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a590528d2bfa872ab420aa4dcbaae2bf6\">_hal_backend_media_audio_funcs::pcm_read<\/a>)(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get file descriptor<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a7766e70a78ad85e56cfcd643cb210bae\">_hal_backend_media_audio_funcs::pcm_recover<\/a>)(void *audio_handle, void *pcm_handle, int revents)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get device params<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a97fe69e655e7f46f2e26c6d4d9aa33ac\">_hal_backend_media_audio_funcs::pcm_set_params<\/a>)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get delay and latency both<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a314d8b4b17ab05f96d2b4a76db369faa\">_hal_backend_media_audio_funcs::pcm_start<\/a>)(void *audio_handle, void *pcm_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Stop device<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a03bf9652fca3bff5177bb327dbcaa020\">_hal_backend_media_audio_funcs::pcm_stop<\/a>)(void *audio_handle, void *pcm_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Close device<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#adcd44154331926587cdad7bd3bfda8d1\">_hal_backend_media_audio_funcs::pcm_write<\/a>)(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Read data<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a43c661c6b9e887c6938acbbc551ec012\">_hal_backend_media_audio_funcs::set_volume_level<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t level)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set volume value<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a43370057ca0d159e0bcd9988f4ed907b\">_hal_backend_media_audio_funcs::set_volume_mute<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a> *info, uint32_t mute)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set volume ratio<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a55d24b2860d61712e2f38a6eb4316fa7\">_hal_backend_media_audio_funcs::set_volume_ratio<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga88eab994ef404684b00edc0329b54da0\">audio_stream_info_s<\/a> *info, double ratio)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Notify ducking activation<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#a823a728241bf49c8ce41af814589346b\">_hal_backend_media_audio_funcs::update_route<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5c5fe2b0186455963946708611707ed8\">audio_route_info_s<\/a> *info)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Update route with option<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a>(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ab3199a17bfe610611c3cef1e80e63af5\">_hal_backend_media_audio_funcs::update_route_option<\/a>)(void *audio_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga97a5998810d0a65e2ca3facb64e40491\">audio_route_option_s<\/a> *option)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Notify stream connection<\/p>\n<hr \/>\n<h2 id=\"content-typedef-documentation\"><a href=https://samsungtizenos.com/"#content-typedef-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Typedef Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#gaa287b452bbc4d83699a5965038fe6cb6\">audio_direction<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga698b63cf55685c12926dcba842d606c3\">audio_direction_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for audio direction.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__ducking__info\">audio_ducking_info<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga25d3e47f35189875e443fc69c23629a9\">audio_ducking_info_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Ducking information including target role, duration and ratio.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga6a15547a8343774333f4ec1659a2d223\">audio_return<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga8a3957c7ba94add21edd73a98c712ae2\">audio_return_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for return codes.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__route__info\">audio_route_info<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5c5fe2b0186455963946708611707ed8\">audio_route_info_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Route information including role and device.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__route__option\">audio_route_option<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga97a5998810d0a65e2ca3facb64e40491\">audio_route_option_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Route option including role, name and value.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga0b4af3df8e32c3489e39f089a8ad136f\">audio_state<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga325ed11b87d4609f0dc637432281dbf5\">audio_state_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for audio state.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__stream__info\">audio_stream_info<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga88eab994ef404684b00edc0329b54da0\">audio_stream_info_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Stream information including role, direction and index.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structaudio__volume__info\">audio_volume_info<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga5584c1f96e62450edac4565d91cc442e\">audio_volume_info_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Volume information including type, gain and direction.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#structdevice__info\">device_info<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#gab6db7f040c21fa85bdfbb862da2999b9\">device_info_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Device information including type, direction and id.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#struct__hal__backend__media__audio__funcs\">_hal_backend_media_audio_funcs<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga9bf92c21ab4676909c1d46cf992de45c\">hal_backend_audio_funcs<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of the audio HAL functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef void(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga52c4ca22db221c18c59b92af8fcfc37f\">message_cb<\/a>)(const char *name, int value, void *user_data)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Called when audio hal implementation needs to send a message.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<p><strong>Parameters:<\/strong>\n: | [in] | name | The message name |\n| --- | --- | --- |\n| [in] | value | The message value |\n| [in] | user_data | The user data passed from the callback registration function |<\/p>\n<p><strong>See also:<\/strong>\n: add_message_cb()\n: remove_message_cb()<\/p>\n<hr \/>\n<h2 id=\"content-enumeration-type-documentation\"><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Enumeration Type Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#gaa287b452bbc4d83699a5965038fe6cb6\">audio_direction<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for audio direction.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>AUDIO_DIRECTION_IN<\/em> | Capture |\n| --- | --- |\n| <em>AUDIO_DIRECTION_OUT<\/em> | Playback |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga6a15547a8343774333f4ec1659a2d223\">audio_return<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for return codes.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>AUDIO_RET_OK<\/em> | Error none |\n| --- | --- |\n| <em>AUDIO_ERR_UNDEFINED<\/em> | Undefined error |\n| <em>AUDIO_ERR_RESOURCE<\/em> | Resource error |\n| <em>AUDIO_ERR_PARAMETER<\/em> | Invalid parameters |\n| <em>AUDIO_ERR_IOCTL<\/em> | ioctl error |\n| <em>AUDIO_ERR_INVALID_STATE<\/em> | Invalid state |\n| <em>AUDIO_ERR_INTERNAL<\/em> | Internal error |\n| <em>AUDIO_ERR_NOT_IMPLEMENTED<\/em> | Not Implemented |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__AUDIO__MODULE.md#ga0b4af3df8e32c3489e39f089a8ad136f\">audio_state<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for audio state.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_AUDIO 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>AUDIO_STATE_OPEN<\/em> | Open state |\n| --- | --- |\n| <em>AUDIO_STATE_SETUP<\/em> | Setup state |\n| <em>AUDIO_STATE_PREPARED<\/em> | Prepared state |\n| <em>AUDIO_STATE_RUNNING<\/em> | Running state |\n| <em>AUDIO_STATE_XRUN<\/em> | Playback:underrun, Capture:overrun |\n| <em>AUDIO_STATE_DRAINING<\/em> | Drain state |\n| <em>AUDIO_STATE_PAUSED<\/em> | Pause state |\n| <em>AUDIO_STATE_SUSPENDED<\/em> | Suspend state |\n| <em>AUDIO_STATE_DISCONNECTED<\/em> | Disconnected state |\n| <em>AUDIO_STATE_UNKNOWN<\/em> | Unknown state |<\/p>\n<hr \/>\n<p>Except as noted, this content - excluding the Code Examples - is licensed under <a href=https://samsungtizenos.com/"http:////creativecommons.org//licenses//by//3.0//legalcode/">Creative Commons Attribution 3.0<\/a>\nand all of the Code Examples contained herein are licensed under <a href=https://samsungtizenos.com/"https:////www.tizen.org//bsd-3-clause-license/">BSD-3-Clause/a>.
Content License<\/a>.<\/p>\n","table_of_content":"<ul class=\"table-of-contents\">\n<li><a href=https://samsungtizenos.com/"#content-required-header\">Required Header<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-overview\">Overview<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-state-diagram\">State Diagram<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-state-transitions\">State Transitions<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-data-structure-documentation\">Data Structure Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-1\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-2\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-3\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-4\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-5\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-6\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-typedef-documentation\">Typedef Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\">Enumeration Type Documentation<\/a><\/li>\n<\/ul>\n","title":"Tizen HAL API: Audio","raw":null},{"class":"App\\Services\\Documentation\\Data\\RenderedMarkdown","s":"wrbl"}]},"memo":{"id":"PY0TO73BBwKxxljqFc9z","name":"documentation::article","path":"docs\/platform\/hal\/api\/1.0.0\/group__HALAPI__HAL__AUDIO__MODULE","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"lazyLoaded":false,"lazyIsolated":true,"errors":[],"locale":"en","islands":[]},"checksum":"2b68c74d2ebc286ab2fea3b4e341222ec0eb4150690237e71c4294cd740611e1"}" wire:effects="[]" wire:id="PY0TO73BBwKxxljqFc9z" wire:name="documentation::article" x-init="$wire.__lazyLoad('eyJkYXRhIjp7ImZvck1vdW50IjpbeyJtYXJrZG93biI6W3siYm9keSI6IjxoMSBpZD1cImNvbnRlbnQtdGl6ZW4taGFsLWFwaS1hdWRpb1wiPjxhIGhyZWY9XCIjY29udGVudC10aXplbi1oYWwtYXBpLWF1ZGlvXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5UaXplbiBIQUwgQVBJOiBBdWRpbzxcL2gxPjxkaXYgZGF0YS1rbm93bGVkZ2UtYmFzZS1tZXRhZGF0YT48XC9kaXY+XG48aHIgXC8+XG48cD5UaGUgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZFwiPkF1ZGlvPFwvYT4gcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBhdWRpbyBkZXZpY2VzLjxcL3A+XG48aDIgaWQ9XCJjb250ZW50LXJlcXVpcmVkLWhlYWRlclwiPjxhIGhyZWY9XCIjY29udGVudC1yZXF1aXJlZC1oZWFkZXJcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlJlcXVpcmVkIEhlYWRlcjxcL2gyPlxuPHA+I2luY2x1ZGUgJmx0O2hhbC1hdWRpby5oJmd0OzxcL3A+XG48aDIgaWQ9XCJjb250ZW50LW92ZXJ2aWV3XCI+PGEgaHJlZj1cIiNjb250ZW50LW92ZXJ2aWV3XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5PdmVydmlldzxcL2gyPlxuPHA+VGhlIEF1ZGlvIG1vZHVsZSBpbiB0aGUgSEFMIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBtYW5hZ2UgYXVkaW8gcGxheWJhY2sgYW5kIGNhcHR1cmUuPFwvcD5cbjxwPktleSBmdW5jdGlvbmFsaXRpZXMgaW5jbHVkZTo8XC9wPlxuPHVsPlxuPGxpPkluaXRpYWxpemluZyBhbmQgZGVpbml0aWFsaXppbmcgdGhlIGF1ZGlvIGhhcmR3YXJlLjxcL2xpPlxuPGxpPk9wZW5pbmcgYW5kIGNvbmZpZ3VyaW5nIFBDTSBhdWRpbyBzdHJlYW1zLjxcL2xpPlxuPGxpPlN0YXJ0aW5nIGFuZCBzdG9wcGluZyBhdWRpbyBvcGVyYXRpb25zLjxcL2xpPlxuPGxpPlJlY292ZXJpbmcgZnJvbSBhdWRpbyBlcnJvcnMuPFwvbGk+XG48bGk+Q2xvc2luZyBhdWRpbyBzdHJlYW1zIHRvIGZyZWUgcmVzb3VyY2VzLjxcL2xpPlxuPFwvdWw+XG48aDMgaWQ9XCJjb250ZW50LXN0YXRlLWRpYWdyYW1cIj48YSBocmVmPVwiI2NvbnRlbnQtc3RhdGUtZGlhZ3JhbVwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+U3RhdGUgRGlhZ3JhbTxcL2gzPlxuPHA+PGltZyBzcmM9XCJtZWRpYVwvaGFsX2F1ZGlvX3N0YXRlX2RpYWdyYW0ucG5nXCIgYWx0PVwiaGFsX2F1ZGlvX3N0YXRlX2RpYWdyYW0ucG5nXCIgXC8+PFwvcD5cbjxoMyBpZD1cImNvbnRlbnQtc3RhdGUtdHJhbnNpdGlvbnNcIj48YSBocmVmPVwiI2NvbnRlbnQtc3RhdGUtdHJhbnNpdGlvbnNcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlN0YXRlIFRyYW5zaXRpb25zPFwvaDM+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48c3Ryb25nPkZVTkNUSU9OPFwvc3Ryb25nPjxcL3RoPlxuPHRoPjxzdHJvbmc+UFJFLVNUQVRFPFwvc3Ryb25nPjxcL3RoPlxuPHRoPjxzdHJvbmc+UE9TVC1TVEFURTxcL3N0cm9uZz48XC90aD5cbjx0aD48c3Ryb25nPlNZTkMgVFlQRTxcL3N0cm9uZz48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX2luaXQoKTxcL3RkPlxuPHRkPk5cL0E8XC90ZD5cbjx0ZD5DTE9TRTxcL3RkPlxuPHRkPlNZTkM8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmhhbF9hdWRpb19kZWluaXQoKTxcL3RkPlxuPHRkPkNMT1NFPFwvdGQ+XG48dGQ+TlwvQTxcL3RkPlxuPHRkPlNZTkM8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmhhbF9hdWRpb19wY21fb3BlbigpPFwvdGQ+XG48dGQ+Q0xPU0U8XC90ZD5cbjx0ZD5PUEVOPFwvdGQ+XG48dGQ+U1lOQzxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX3BjbV9zZXRfcGFyYW1zKCk8XC90ZD5cbjx0ZD5PUEVOPFwvdGQ+XG48dGQ+U0VUVVA8XC90ZD5cbjx0ZD5TWU5DPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5oYWxfYXVkaW9fcGNtX3N0YXJ0KCk8XC90ZD5cbjx0ZD5TRVRVUDxcL3RkPlxuPHRkPlJVTk5JTkc8XC90ZD5cbjx0ZD5TWU5DPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5oYWxfYXVkaW9fcGNtX3N0b3AoKTxcL3RkPlxuPHRkPlJVTk5JTkc8XC90ZD5cbjx0ZD5TVE9QPFwvdGQ+XG48dGQ+U1lOQzxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX3BjbV9jbG9zZSgpPFwvdGQ+XG48dGQ+U1RPUDxcL3RkPlxuPHRkPkNMT1NFPFwvdGQ+XG48dGQ+U1lOQzxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX3BjbV9yZWNvdmVyKCk8XC90ZD5cbjx0ZD5YUlVOPFwvdGQ+XG48dGQ+UlVOTklORzxcL3RkPlxuPHRkPlNZTkM8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXVkaW8gZmVhdHVyZXMgYW5kIHRoZSBtYWNyb3MsIHNlZSBIQUwgQXVkaW8gcHJvZ3JhbW1pbmcgZ3VpZGVzIGFuZCB0dXRvcmlhbHMuPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPlR5cGVkZWZzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPnR5cGVkZWYgZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNmExNTU0N2E4MzQzNzc0MzMzZjRlYzE2NTlhMmQyMjNcIj5hdWRpb19yZXR1cm48XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkVudW1lcmF0aW9uIGZvciByZXR1cm4gY29kZXMuPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWEyODdiNDUyYmJjNGQ4MzY5OWE1OTY1MDM4ZmU2Y2I2XCI+YXVkaW9fZGlyZWN0aW9uPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNjk4YjYzY2Y1NTY4NWMxMjkyNmRjYmE4NDJkNjA2YzNcIj5hdWRpb19kaXJlY3Rpb25fZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5FbnVtZXJhdGlvbiBmb3IgYXVkaW8gZGlyZWN0aW9uLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EwYjRhZjNkZjhlMzJjMzQ4OWUzOWYwODlhOGFkMTM2ZlwiPmF1ZGlvX3N0YXRlPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhMzI1ZWQxMWI4N2Q0NjA5ZjBkYzYzNzQzMjI4MWRiZjVcIj5hdWRpb19zdGF0ZV9lPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkVudW1lcmF0aW9uIGZvciBhdWRpbyBzdGF0ZS48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0ZGV2aWNlX19pbmZvXCI+ZGV2aWNlX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2FiNmRiN2YwNDBjMjFmYTg1YmRmYmI4NjJkYTI5OTliOVwiPmRldmljZV9pbmZvX3M8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+RGV2aWNlIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBkaXJlY3Rpb24gYW5kIGlkLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fdm9sdW1lX19pbmZvXCI+YXVkaW9fdm9sdW1lX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1NTg0YzFmOTZlNjI0NTBlZGFjNDU2NWQ5MWNjNDQyZVwiPmF1ZGlvX3ZvbHVtZV9pbmZvX3M8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+Vm9sdW1lIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBnYWluIGFuZCBkaXJlY3Rpb24uPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdGF1ZGlvX19yb3V0ZV9faW5mb1wiPmF1ZGlvX3JvdXRlX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1YzVmZTJiMDE4NjQ1NTk2Mzk0NjcwODYxMTcwN2VkOFwiPmF1ZGlvX3JvdXRlX2luZm9fczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5Sb3V0ZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgcm9sZSBhbmQgZGV2aWNlLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fcm91dGVfX29wdGlvblwiPmF1ZGlvX3JvdXRlX29wdGlvbjxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTk3YTU5OTg4MTBkMGE2NWUyY2EzZmFjYjY0ZTQwNDkxXCI+YXVkaW9fcm91dGVfb3B0aW9uX3M8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+Um91dGUgb3B0aW9uIGluY2x1ZGluZyByb2xlLCBuYW1lIGFuZCB2YWx1ZS48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX3N0cmVhbV9faW5mb1wiPmF1ZGlvX3N0cmVhbV9pbmZvPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhODhlYWI5OTRlZjQwNDY4NGIwMGVkYzAzMjliNTRkYTBcIj5hdWRpb19zdHJlYW1faW5mb19zPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPlN0cmVhbSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgcm9sZSwgZGlyZWN0aW9uIGFuZCBpbmRleC48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX2R1Y2tpbmdfX2luZm9cIj5hdWRpb19kdWNraW5nX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EyNWQzZTQ3ZjM1MTg5ODc1ZTQ0M2ZjNjljMjM2MjlhOVwiPmF1ZGlvX2R1Y2tpbmdfaW5mb19zPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkR1Y2tpbmcgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRhcmdldCByb2xlLCBkdXJhdGlvbiBhbmQgcmF0aW8uPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIHZvaWQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1MmM0Y2EyMmRiMjIxYzE4YzU5YjkyYWY4ZmNmYzM3ZlwiPm1lc3NhZ2VfY2I8XC9hPiApKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSwgdm9pZCAqdXNlcl9kYXRhKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+Q2FsbGVkIHdoZW4gYXVkaW8gaGFsIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIHNlbmQgYSBtZXNzYWdlLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgICA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19tZWRpYV9fYXVkaW9fX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOWJmOTJjMjFhYjQ2NzY5MDljMWQ0NmNmOTkyZGU0NWNcIj5oYWxfYmFja2VuZF9hdWRpb19mdW5jczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5UaGUgc3RydWN0dXJlIHR5cGUgb2YgdGhlIGF1ZGlvIEhBTCBmdW5jdGlvbnMuPFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGgyIGlkPVwiY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCI+PGEgaHJlZj1cIiNjb250ZW50LWRhdGEtc3RydWN0dXJlLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkRhdGEgU3RydWN0dXJlIERvY3VtZW50YXRpb248XC9oMj5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnN0cnVjdCBkZXZpY2VfaW5mbzxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkRldmljZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgdHlwZSwgZGlyZWN0aW9uIGFuZCBpZC48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+Y29uc3QgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhODZmNzg1MGQwNTdkNmVlODQzOTlmZTY0ZTA5ZGViMDhcIj50eXBlPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnVpbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZjRhOGM0YzNmZjkwNDFjOWJlMWEzMmFjNWE1MzY1ZDdcIj5kaXJlY3Rpb248XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E4ZmMzNmJmMDliMjQyMjA4NjI0MGRjMDZlODA4ZGI3OFwiPmlkPFwvYT48XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dWludDMyX3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZjRhOGM0YzNmZjkwNDFjOWJlMWEzMmFjNWE1MzY1ZDdcIj5kZXZpY2VfaW5mbzo6ZGlyZWN0aW9uPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5wbGF5YmFjayBvciBjYXB0dXJlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVpbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYThmYzM2YmYwOWIyNDIyMDg2MjQwZGMwNmU4MDhkYjc4XCI+ZGV2aWNlX2luZm86OmlkPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5kZXZpY2UgaWQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhODZmNzg1MGQwNTdkNmVlODQzOTlmZTY0ZTA5ZGViMDhcIj5kZXZpY2VfaW5mbzo6dHlwZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+ZGV2aWNlIHR5cGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGF1ZGlvX3ZvbHVtZV9pbmZvPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Vm9sdW1lIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBnYWluIGFuZCBkaXJlY3Rpb24uPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPmNvbnN0IGNoYXIgKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWMyZGJjMzA5YmVjNjBmZWYzMDVjOGQxMmFhNzBlZDQ1XCI+dHlwZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5jb25zdCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EwZmRmMjQ2NjZiMDUwMmEwNDFmZWFmZGYyYmExODEzZlwiPmdhaW48XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDViNzhhZWM2OTNmMTBiNWJkZDVlM2Q5YWFjNzlkZlwiPmRpcmVjdGlvbjxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTFcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0xXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDViNzhhZWM2OTNmMTBiNWJkZDVlM2Q5YWFjNzlkZlwiPmF1ZGlvX3ZvbHVtZV9pbmZvOjpkaXJlY3Rpb248XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPnBsYXliYWNrIG9yIGNhcHR1cmU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMGZkZjI0NjY2YjA1MDJhMDQxZmVhZmRmMmJhMTgxM2ZcIj5hdWRpb192b2x1bWVfaW5mbzo6Z2FpbjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dm9sdW1lIGdhaW48XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYzJkYmMzMDliZWM2MGZlZjMwNWM4ZDEyYWE3MGVkNDVcIj5hdWRpb192b2x1bWVfaW5mbzo6dHlwZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dm9sdW1lIHR5cGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGF1ZGlvX3JvdXRlX2luZm88XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Sb3V0ZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgcm9sZSBhbmQgZGV2aWNlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD5jb25zdCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EzNjEwYjkwZTc4OWRhOTYwZmNlYThlNDkyMTg1NGM1N1wiPnJvbGU8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWI2ZGI3ZjA0MGMyMWZhODViZGZiYjg2MmRhMjk5OWI5XCI+ZGV2aWNlX2luZm9fczxcL2E+ICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiYzgzNjNkMTU4Yzk0ZjA0MjYwMjA4YTM2YzY2YTA2ZlwiPmRldmljZV9pbmZvczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTA1YTc3ZGM4OTU1NmJkMzFjY2JhODBkNThlNDFhZDYyXCI+bnVtX29mX2RldmljZXM8XC9hPjxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoNCBpZD1cImNvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0yXCI+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tMlwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWI2ZGI3ZjA0MGMyMWZhODViZGZiYjg2MmRhMjk5OWI5XCI+ZGV2aWNlX2luZm9fczxcL2E+KiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiYzgzNjNkMTU4Yzk0ZjA0MjYwMjA4YTM2YzY2YTA2ZlwiPmF1ZGlvX3JvdXRlX2luZm86OmRldmljZV9pbmZvczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+ZGV2aWNlIGluZm88XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dWludDMyX3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMDVhNzdkYzg5NTU2YmQzMWNjYmE4MGQ1OGU0MWFkNjJcIj5hdWRpb19yb3V0ZV9pbmZvOjpudW1fb2ZfZGV2aWNlczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+bnVtYmVyIG9mIGRldmljZXM8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMzYxMGI5MGU3ODlkYTk2MGZjZWE4ZTQ5MjE4NTRjNTdcIj5hdWRpb19yb3V0ZV9pbmZvOjpyb2xlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5zdHJlYW0gcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgYXVkaW9fcm91dGVfb3B0aW9uPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Um91dGUgb3B0aW9uIGluY2x1ZGluZyByb2xlLCBuYW1lIGFuZCB2YWx1ZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+Y29uc3QgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMTBmNDQ3YjEwZjQzY2NjYjllZDU5YzE4ZTBiNDRmOThcIj5yb2xlPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmNvbnN0IGNoYXIgKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTU1NjFlNzZhMWZlMThiMjJlN2JhODc2ZmZiNmE1YTc0XCI+bmFtZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNDFhODQ5ZWZlNjYyODBkYjZmMDM3ODkzNTVjMzc5YzVcIj52YWx1ZTxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTNcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0zXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5jb25zdCBjaGFyKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E1NTYxZTc2YTFmZTE4YjIyZTdiYTg3NmZmYjZhNWE3NFwiPmF1ZGlvX3JvdXRlX29wdGlvbjo6bmFtZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+a2V5PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmNvbnN0IGNoYXIqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTEwZjQ0N2IxMGY0M2NjY2I5ZWQ1OWMxOGUwYjQ0Zjk4XCI+YXVkaW9fcm91dGVfb3B0aW9uOjpyb2xlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5zdHJlYW0gcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTQxYTg0OWVmZTY2MjgwZGI2ZjAzNzg5MzU1YzM3OWM1XCI+YXVkaW9fcm91dGVfb3B0aW9uOjp2YWx1ZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dmFsdWU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGF1ZGlvX3N0cmVhbV9pbmZvPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RyZWFtIGluZm9ybWF0aW9uIGluY2x1ZGluZyByb2xlLCBkaXJlY3Rpb24gYW5kIGluZGV4LjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD5jb25zdCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FmYzczZGNhZGUzYTBhMWQzZjY4MmU5NzFkNzk1OWU5ZFwiPnJvbGU8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FlOTE0YmM1NDg4NTBhMTJkMDU1N2JkYTQ3MzRiYWIxOVwiPmRpcmVjdGlvbjxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWM0ZjFkZWI3MjRmNDU0YzY0YzBlYmQxZGFhZjc5YTVlXCI+aWR4PFwvYT48XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNFwiPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTRcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkZpZWxkIERvY3VtZW50YXRpb248XC9oND5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVpbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWU5MTRiYzU0ODg1MGExMmQwNTU3YmRhNDczNGJhYjE5XCI+YXVkaW9fc3RyZWFtX2luZm86OmRpcmVjdGlvbjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+cGxheWJhY2sgb3IgY2FwdHVyZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FjNGYxZGViNzI0ZjQ1NGM2NGMwZWJkMWRhYWY3OWE1ZVwiPmF1ZGlvX3N0cmVhbV9pbmZvOjppZHg8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPnN0cmVhbSBpbmRleDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5jb25zdCBjaGFyKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FmYzczZGNhZGUzYTBhMWQzZjY4MmU5NzFkNzk1OWU5ZFwiPmF1ZGlvX3N0cmVhbV9pbmZvOjpyb2xlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5zdHJlYW0gcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgYXVkaW9fZHVja2luZ19pbmZvPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RHVja2luZyBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgdGFyZ2V0IHJvbGUsIGR1cmF0aW9uIGFuZCByYXRpby48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+Y29uc3QgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZTUyYzNiYWMzNjFiNDEyYjM1MGY5OWMxZGZjNWU2NjBcIj50YXJnZXRfcm9sZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWI5ODg5MTVjOGExMjA3YTRhNDA0MmE1ZTQ3OWZkYzcyXCI+ZHVyYXRpb248XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+ZG91YmxlPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhOTQwZDk1MzA3ZDk5ZGIzYTg0MGFjZTIwODM5ZDZkZjRcIj5yYXRpbzxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTVcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi01XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiOTg4OTE1YzhhMTIwN2E0YTQwNDJhNWU0NzlmZGM3MlwiPmF1ZGlvX2R1Y2tpbmdfaW5mbzo6ZHVyYXRpb248XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPmR1Y2tpbmcgZHVyYXRpb248XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZG91YmxlIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTk0MGQ5NTMwN2Q5OWRiM2E4NDBhY2UyMDgzOWQ2ZGY0XCI+YXVkaW9fZHVja2luZ19pbmZvOjpyYXRpbzxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dm9sdW1lIHJhdGlvPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmNvbnN0IGNoYXIqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWU1MmMzYmFjMzYxYjQxMmIzNTBmOTljMWRmYzVlNjYwXCI+YXVkaW9fZHVja2luZ19pbmZvOjp0YXJnZXRfcm9sZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+ZHVja2luZyB0YXJnZXQgcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgX2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIHRoZSBhdWRpbyBIQUwgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E0YWNkMzcyZjcxNThkMjI4MjlkYzJjYzZlNWJhMjgxM1wiPmluaXQ8XC9hPiApKHZvaWQgKiphdWRpb19oYW5kbGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDQyNWJlOTNlODQ4N2VlNmI2Njg5OTBiYzIyOWFjYlwiPmRlaW5pdDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYjI4NGY5ZGFjMGQ1MzAyMGI1MjE1NjU4NDc2MTU3MTJcIj5nZXRfdm9sdW1lX2xldmVsX21heDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTYwMTgyNTk1Y2Q2NTcxMTVhNmQyYmJiODUzODg0ZTcxXCI+Z2V0X3ZvbHVtZV9sZXZlbDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTQzYzY2MWM2YjllODg3YzY5MzhhY2JiYzU1MWVjMDEyXCI+c2V0X3ZvbHVtZV9sZXZlbDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGxldmVsKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYjI3OTIzNmI1ZjlkMTE1N2MzYmQ4ZWVlMWEyOGM1N2ZcIj5nZXRfdm9sdW1lX3ZhbHVlPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1NTg0YzFmOTZlNjI0NTBlZGFjNDU2NWQ5MWNjNDQyZVwiPmF1ZGlvX3ZvbHVtZV9pbmZvX3M8XC9hPiAqaW5mbywgdWludDMyX3QgbGV2ZWwsIGRvdWJsZSAqdmFsdWUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2ExNTE4OWQ1Y2Y3YjkwMjNiN2JmOGI0ZmJhMGI2ZGVhMVwiPmdldF92b2x1bWVfbXV0ZTxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICptdXRlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNDMzNzAwNTdjYTBkMTU5ZTBiY2Q5OTg4ZjRlZDkwN2JcIj5zZXRfdm9sdW1lX211dGU8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTU1ODRjMWY5NmU2MjQ1MGVkYWM0NTY1ZDkxY2M0NDJlXCI+YXVkaW9fdm9sdW1lX2luZm9fczxcL2E+ICppbmZvLCB1aW50MzJfdCBtdXRlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNTVkMjRiMjg2MGQ2MTcxMmUyZjM4YTZlYjQzMTZmYTdcIj5zZXRfdm9sdW1lX3JhdGlvPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4OGVhYjk5NGVmNDA0Njg0YjAwZWRjMDMyOWI1NGRhMFwiPmF1ZGlvX3N0cmVhbV9pbmZvX3M8XC9hPiAqaW5mbywgZG91YmxlIHJhdGlvKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYmU2N2I1NjFmNGU4ZDk0NDA0ZGUyOWZjOTY2YjU2YThcIj5ub3RpZnlfZHVja2luZ19hY3RpdmF0aW9uX2NoYW5nZWQ8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTI1ZDNlNDdmMzUxODk4NzVlNDQzZmM2OWMyMzYyOWE5XCI+YXVkaW9fZHVja2luZ19pbmZvX3M8XC9hPiAqaW5mbywgdWludDMyX3QgaXNfYWN0aXZhdGVkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhODIzYTcyODI0MWJmNDljOGNlNDFhZjgxNDU4OTM0NmJcIj51cGRhdGVfcm91dGU8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTVjNWZlMmIwMTg2NDU1OTYzOTQ2NzA4NjExNzA3ZWQ4XCI+YXVkaW9fcm91dGVfaW5mb19zPFwvYT4gKmluZm8pPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiMzE5OWExN2JmZTYxMDYxMWMzY2VmMWU4MGU2M2FmNVwiPnVwZGF0ZV9yb3V0ZV9vcHRpb248XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTk3YTU5OTg4MTBkMGE2NWUyY2EzZmFjYjY0ZTQwNDkxXCI+YXVkaW9fcm91dGVfb3B0aW9uX3M8XC9hPiAqb3B0aW9uKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMWIyMDI4ZjM3NzhiN2EzZWZjOGZiZDE5Yzc2ZDhjNzFcIj5ub3RpZnlfc3RyZWFtX2Nvbm5lY3Rpb25fY2hhbmdlZDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhODhlYWI5OTRlZjQwNDY4NGIwMGVkYzAzMjliNTRkYTBcIj5hdWRpb19zdHJlYW1faW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGlzX2Nvbm5lY3RlZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTcwYTE0OTRhNThjZWEwODI2NmI3OWUxMWMwNjkxNTdkXCI+cGNtX29wZW48XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgY29uc3QgY2hhciAqY2FyZCwgY29uc3QgY2hhciAqZGV2aWNlLCB1aW50MzJfdCBkaXJlY3Rpb24sIHZvaWQgKnNhbXBsZV9zcGVjLCB1aW50MzJfdCBwZXJpb2Rfc2l6ZSwgdWludDMyX3QgcGVyaW9kcywgdm9pZCAqKnBjbV9oYW5kbGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EzMTRkOGI0YjE3YWIwNWY5NmQyYjRhNzZkYjM2OWZhYVwiPnBjbV9zdGFydDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMDNiZjk2NTJmY2EzYmZmNTE3N2JiMzI3ZGJjYWEwMjBcIj5wY21fc3RvcDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNmQxMzA1YmJkYTlkYzUxODk0NmQ2ZmRmZjRiMjdjYTVcIj5wY21fY2xvc2U8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTY4ZDc0N2JjZTc5YjYwZmNjYWIzN2ZhNzk1MmMxMmQyXCI+cGNtX2F2YWlsPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHVpbnQzMl90ICphdmFpbCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWRjZDQ0MTU0MzMxOTI2NTg3Y2RhZDdiZDNiZmRhOGQxXCI+cGNtX3dyaXRlPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdWludDMyX3QgZnJhbWVzKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNTkwNTI4ZDJiZmE4NzJhYjQyMGFhNGRjYmFhZTJiZjZcIj5wY21fcmVhZDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCB2b2lkICpidWZmZXIsIHVpbnQzMl90IGZyYW1lcyk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWJjYzVhYjIwNGI4NmYwNGJhZWI0NzhlNTE3MzNhN2YwXCI+cGNtX2dldF9mZDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQgKmZkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNzc2NmU3MGE3OGFkODVlNTZjZmNkNjQzY2IyMTBiYWVcIj5wY21fcmVjb3ZlcjxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQgcmV2ZW50cyk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTk4OWMzMmE3OWVhYzhjY2MzZDg3M2FiZDY4MjRlNWE2XCI+cGNtX2dldF9wYXJhbXM8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgZGlyZWN0aW9uLCB2b2lkICpzYW1wbGVfc3BlYywgdWludDMyX3QgKnBlcmlvZF9zaXplLCB1aW50MzJfdCAqcGVyaW9kcyk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTk3ZmU2OWU2NTVlN2Y0NmYyZTI2YzZkNGQ5YWEzM2FjXCI+cGNtX3NldF9wYXJhbXM8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgZGlyZWN0aW9uLCB2b2lkICpzYW1wbGVfc3BlYywgdWludDMyX3QgcGVyaW9kX3NpemUsIHVpbnQzMl90IHBlcmlvZHMpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E2MGYxNDAxMDQ3YmYzOGZkZjAzNTNlNjZmZDBkZTQyMlwiPnBjbV9hdmFpbF9kZWxheTxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQzMl90ICphdmFpbCwgaW50MzJfdCAqZGVsYXkpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhYmY1ZTI5NDBkOTE1YzhiODk3NzhjMDg0MGIwM2Q1YVwiPnBjbV9tbWFwX2JlZ2luPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHZvaWQgKiphcmVhcywgdWludDMyX3QgKm9mZnNldCwgdWludDMyX3QgKmZyYW1lcywgdm9pZCAqKnB0cik8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTdmYTM0YWVmMzZlNzg5NWFlOGE0YTZhZjJhNmQ4ZDhlXCI+cGNtX21tYXBfY29tbWl0PFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgZnJhbWVzKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYzNiNjIwYWNiOGQxZjBhM2Q3ZDdjYTUwMWRjNTFhYmVcIj5wY21fZ2V0X3N0YXRlPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EzMjVlZDExYjg3ZDQ2MDlmMGRjNjM3NDMyMjgxZGJmNVwiPmF1ZGlvX3N0YXRlX2U8XC9hPiAqc3RhdGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EwZTQ0OTZjOGJlODRmZTljYTZiOTMyNDY4MWY1Y2IyZlwiPmFkZF9tZXNzYWdlX2NiPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1MmM0Y2EyMmRiMjIxYzE4YzU5YjkyYWY4ZmNmYzM3ZlwiPm1lc3NhZ2VfY2I8XC9hPiBjYWxsYmFjaywgdm9pZCAqdXNlcl9kYXRhKTxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoNCBpZD1cImNvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi02XCI+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNlwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTBlNDQ5NmM4YmU4NGZlOWNhNmI5MzI0NjgxZjVjYjJmXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjphZGRfbWVzc2FnZV9jYjxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1MmM0Y2EyMmRiMjIxYzE4YzU5YjkyYWY4ZmNmYzM3ZlwiPm1lc3NhZ2VfY2I8XC9hPiBjYWxsYmFjaywgdm9pZCAqdXNlcl9kYXRhKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlJlbW92ZSBtZXNzYWdlIGNhbGxiYWNrPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDQyNWJlOTNlODQ4N2VlNmI2Njg5OTBiYzIyOWFjYlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6ZGVpbml0PFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdm9sdW1lIG1heCBsZXZlbDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNjAxODI1OTVjZDY1NzExNWE2ZDJiYmI4NTM4ODRlNzFcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OmdldF92b2x1bWVfbGV2ZWw8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXQgdm9sdW1lIGxldmVsPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiMjg0ZjlkYWMwZDUzMDIwYjUyMTU2NTg0NzYxNTcxMlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6Z2V0X3ZvbHVtZV9sZXZlbF9tYXg8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdm9sdW1lIGxldmVsPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2ExNTE4OWQ1Y2Y3YjkwMjNiN2JmOGI0ZmJhMGI2ZGVhMVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6Z2V0X3ZvbHVtZV9tdXRlPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTU1ODRjMWY5NmU2MjQ1MGVkYWM0NTY1ZDkxY2M0NDJlXCI+YXVkaW9fdm9sdW1lX2luZm9fczxcL2E+ICppbmZvLCB1aW50MzJfdCAqbXV0ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXQgdm9sdW1lIG11dGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWIyNzkyMzZiNWY5ZDExNTdjM2JkOGVlZTFhMjhjNTdmXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpnZXRfdm9sdW1lX3ZhbHVlPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTU1ODRjMWY5NmU2MjQ1MGVkYWM0NTY1ZDkxY2M0NDJlXCI+YXVkaW9fdm9sdW1lX2luZm9fczxcL2E+ICppbmZvLCB1aW50MzJfdCBsZXZlbCwgZG91YmxlICp2YWx1ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdm9sdW1lIG11dGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTRhY2QzNzJmNzE1OGQyMjgyOWRjMmNjNmU1YmEyODEzXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjppbml0PFwvYT4pKHZvaWQgKiphdWRpb19oYW5kbGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Jmx0OyBJbml0aWFsaXplIEhBTCBiYWNrZW5kIERlaW5pdGlhbGl6ZSBIQUwgYmFja2VuZDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYmU2N2I1NjFmNGU4ZDk0NDA0ZGUyOWZjOTY2YjU2YThcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6Om5vdGlmeV9kdWNraW5nX2FjdGl2YXRpb25fY2hhbmdlZDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EyNWQzZTQ3ZjM1MTg5ODc1ZTQ0M2ZjNjljMjM2MjlhOVwiPmF1ZGlvX2R1Y2tpbmdfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGlzX2FjdGl2YXRlZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5VcGRhdGUgcm91dGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTFiMjAyOGYzNzc4YjdhM2VmYzhmYmQxOWM3NmQ4YzcxXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpub3RpZnlfc3RyZWFtX2Nvbm5lY3Rpb25fY2hhbmdlZDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4OGVhYjk5NGVmNDA0Njg0YjAwZWRjMDMyOWI1NGRhMFwiPmF1ZGlvX3N0cmVhbV9pbmZvX3M8XC9hPiAqaW5mbywgdWludDMyX3QgaXNfY29ubmVjdGVkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPk9wZW4gZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E2OGQ3NDdiY2U3OWI2MGZjY2FiMzdmYTc5NTJjMTJkMlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2F2YWlsPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgKmF2YWlsKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPldyaXRlIGRhdGE8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTYwZjE0MDEwNDdiZjM4ZmRmMDM1M2U2NmZkMGRlNDIyXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpwY21fYXZhaWxfZGVsYXk8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQzMl90ICphdmFpbCwgaW50MzJfdCAqZGVsYXkpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RhcnQgbW1hcDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNmQxMzA1YmJkYTlkYzUxODk0NmQ2ZmRmZjRiMjdjYTVcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9jbG9zZTxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+R2V0IGF2YWlsYWJsZSBzaXplPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiY2M1YWIyMDRiODZmMDRiYWViNDc4ZTUxNzMzYTdmMFwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2dldF9mZDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIGludCAqZmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VHJ5IHJlY292ZXJpbmcgZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E5ODljMzJhNzllYWM4Y2NjM2Q4NzNhYmQ2ODI0ZTVhNlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2dldF9wYXJhbXM8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCB1aW50MzJfdCBkaXJlY3Rpb24sIHZvaWQgKnNhbXBsZV9zcGVjLCB1aW50MzJfdCAqcGVyaW9kX3NpemUsIHVpbnQzMl90ICpwZXJpb2RzKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldCBkZXZpY2UgcGFyYW1zPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FjM2I2MjBhY2I4ZDFmMGEzZDdkN2NhNTAxZGM1MWFiZVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2dldF9zdGF0ZTxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EzMjVlZDExYjg3ZDQ2MDlmMGRjNjM3NDMyMjgxZGJmNVwiPmF1ZGlvX3N0YXRlX2U8XC9hPiAqc3RhdGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+QWRkIG1lc3NhZ2UgY2FsbGJhY2s8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWFiZjVlMjk0MGQ5MTVjOGI4OTc3OGMwODQwYjAzZDVhXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpwY21fbW1hcF9iZWdpbjxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHZvaWQgKiphcmVhcywgdWludDMyX3QgKm9mZnNldCwgdWludDMyX3QgKmZyYW1lcywgdm9pZCAqKnB0cik8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Db21taXQgbW1hcDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhN2ZhMzRhZWYzNmU3ODk1YWU4YTRhNmFmMmE2ZDhkOGVcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9tbWFwX2NvbW1pdDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgZnJhbWVzKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkdldCBzdGF0ZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNzBhMTQ5NGE1OGNlYTA4MjY2Yjc5ZTExYzA2OTE1N2RcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9vcGVuPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgY29uc3QgY2hhciAqY2FyZCwgY29uc3QgY2hhciAqZGV2aWNlLCB1aW50MzJfdCBkaXJlY3Rpb24sIHZvaWQgKnNhbXBsZV9zcGVjLCB1aW50MzJfdCBwZXJpb2Rfc2l6ZSwgdWludDMyX3QgcGVyaW9kcywgdm9pZCAqKnBjbV9oYW5kbGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RhcnQgZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E1OTA1MjhkMmJmYTg3MmFiNDIwYWE0ZGNiYWFlMmJmNlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX3JlYWQ8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCB2b2lkICpidWZmZXIsIHVpbnQzMl90IGZyYW1lcyk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgZmlsZSBkZXNjcmlwdG9yPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E3NzY2ZTcwYTc4YWQ4NWU1NmNmY2Q2NDNjYjIxMGJhZVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX3JlY292ZXI8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQgcmV2ZW50cyk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgZGV2aWNlIHBhcmFtczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhOTdmZTY5ZTY1NWU3ZjQ2ZjJlMjZjNmQ0ZDlhYTMzYWNcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9zZXRfcGFyYW1zPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgZGlyZWN0aW9uLCB2b2lkICpzYW1wbGVfc3BlYywgdWludDMyX3QgcGVyaW9kX3NpemUsIHVpbnQzMl90IHBlcmlvZHMpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+R2V0IGRlbGF5IGFuZCBsYXRlbmN5IGJvdGg8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTMxNGQ4YjRiMTdhYjA1Zjk2ZDJiNGE3NmRiMzY5ZmFhXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpwY21fc3RhcnQ8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlN0b3AgZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EwM2JmOTY1MmZjYTNiZmY1MTc3YmIzMjdkYmNhYTAyMFwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX3N0b3A8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNsb3NlIGRldmljZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZGNkNDQxNTQzMzE5MjY1ODdjZGFkN2JkM2JmZGE4ZDFcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV93cml0ZTxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdWludDMyX3QgZnJhbWVzKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlJlYWQgZGF0YTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNDNjNjYxYzZiOWU4ODdjNjkzOGFjYmJjNTUxZWMwMTJcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnNldF92b2x1bWVfbGV2ZWw8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGxldmVsKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldCB2b2x1bWUgdmFsdWU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTQzMzcwMDU3Y2EwZDE1OWUwYmNkOTk4OGY0ZWQ5MDdiXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpzZXRfdm9sdW1lX211dGU8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IG11dGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHZvbHVtZSByYXRpbzxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNTVkMjRiMjg2MGQ2MTcxMmUyZjM4YTZlYjQzMTZmYTdcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnNldF92b2x1bWVfcmF0aW88XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhODhlYWI5OTRlZjQwNDY4NGIwMGVkYzAzMjliNTRkYTBcIj5hdWRpb19zdHJlYW1faW5mb19zPFwvYT4gKmluZm8sIGRvdWJsZSByYXRpbyk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Ob3RpZnkgZHVja2luZyBhY3RpdmF0aW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E4MjNhNzI4MjQxYmY0OWM4Y2U0MWFmODE0NTg5MzQ2YlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6dXBkYXRlX3JvdXRlPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTVjNWZlMmIwMTg2NDU1OTYzOTQ2NzA4NjExNzA3ZWQ4XCI+YXVkaW9fcm91dGVfaW5mb19zPFwvYT4gKmluZm8pPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VXBkYXRlIHJvdXRlIHdpdGggb3B0aW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiMzE5OWExN2JmZTYxMDYxMWMzY2VmMWU4MGU2M2FmNVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6dXBkYXRlX3JvdXRlX29wdGlvbjxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E5N2E1OTk4ODEwZDBhNjVlMmNhM2ZhY2I2NGU0MDQ5MVwiPmF1ZGlvX3JvdXRlX29wdGlvbl9zPFwvYT4gKm9wdGlvbik8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Ob3RpZnkgc3RyZWFtIGNvbm5lY3Rpb248XC9wPlxuPGhyIFwvPlxuPGgyIGlkPVwiY29udGVudC10eXBlZGVmLWRvY3VtZW50YXRpb25cIj48YSBocmVmPVwiI2NvbnRlbnQtdHlwZWRlZi1kb2N1bWVudGF0aW9uXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5UeXBlZGVmIERvY3VtZW50YXRpb248XC9oMj5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhYTI4N2I0NTJiYmM0ZDgzNjk5YTU5NjUwMzhmZTZjYjZcIj5hdWRpb19kaXJlY3Rpb248XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNjk4YjYzY2Y1NTY4NWMxMjkyNmRjYmE4NDJkNjA2YzNcIj5hdWRpb19kaXJlY3Rpb25fZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIGF1ZGlvIGRpcmVjdGlvbi48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fZHVja2luZ19faW5mb1wiPmF1ZGlvX2R1Y2tpbmdfaW5mbzxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EyNWQzZTQ3ZjM1MTg5ODc1ZTQ0M2ZjNjljMjM2MjlhOVwiPmF1ZGlvX2R1Y2tpbmdfaW5mb19zPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5EdWNraW5nIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0YXJnZXQgcm9sZSwgZHVyYXRpb24gYW5kIHJhdGlvLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTZhMTU1NDdhODM0Mzc3NDMzM2Y0ZWMxNjU5YTJkMjIzXCI+YXVkaW9fcmV0dXJuPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciByZXR1cm4gY29kZXMuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX3JvdXRlX19pbmZvXCI+YXVkaW9fcm91dGVfaW5mbzxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1YzVmZTJiMDE4NjQ1NTk2Mzk0NjcwODYxMTcwN2VkOFwiPmF1ZGlvX3JvdXRlX2luZm9fczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Um91dGUgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHJvbGUgYW5kIGRldmljZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fcm91dGVfX29wdGlvblwiPmF1ZGlvX3JvdXRlX29wdGlvbjxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E5N2E1OTk4ODEwZDBhNjVlMmNhM2ZhY2I2NGU0MDQ5MVwiPmF1ZGlvX3JvdXRlX29wdGlvbl9zPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Sb3V0ZSBvcHRpb24gaW5jbHVkaW5nIHJvbGUsIG5hbWUgYW5kIHZhbHVlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTBiNGFmM2RmOGUzMmMzNDg5ZTM5ZjA4OWE4YWQxMzZmXCI+YXVkaW9fc3RhdGU8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhMzI1ZWQxMWI4N2Q0NjA5ZjBkYzYzNzQzMjI4MWRiZjVcIj5hdWRpb19zdGF0ZV9lPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5FbnVtZXJhdGlvbiBmb3IgYXVkaW8gc3RhdGUuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX3N0cmVhbV9faW5mb1wiPmF1ZGlvX3N0cmVhbV9pbmZvPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTg4ZWFiOTk0ZWY0MDQ2ODRiMDBlZGMwMzI5YjU0ZGEwXCI+YXVkaW9fc3RyZWFtX2luZm9fczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RyZWFtIGluZm9ybWF0aW9uIGluY2x1ZGluZyByb2xlLCBkaXJlY3Rpb24gYW5kIGluZGV4LjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdGF1ZGlvX192b2x1bWVfX2luZm9cIj5hdWRpb192b2x1bWVfaW5mbzxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1NTg0YzFmOTZlNjI0NTBlZGFjNDU2NWQ5MWNjNDQyZVwiPmF1ZGlvX3ZvbHVtZV9pbmZvX3M8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlZvbHVtZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgdHlwZSwgZ2FpbiBhbmQgZGlyZWN0aW9uLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdGRldmljZV9faW5mb1wiPmRldmljZV9pbmZvPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWI2ZGI3ZjA0MGMyMWZhODViZGZiYjg2MmRhMjk5OWI5XCI+ZGV2aWNlX2luZm9fczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RGV2aWNlIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBkaXJlY3Rpb24gYW5kIGlkLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19tZWRpYV9fYXVkaW9fX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTliZjkyYzIxYWI0Njc2OTA5YzFkNDZjZjk5MmRlNDVjXCI+aGFsX2JhY2tlbmRfYXVkaW9fZnVuY3M8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiB0aGUgYXVkaW8gSEFMIGZ1bmN0aW9ucy48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiB2b2lkKCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTUyYzRjYTIyZGIyMjFjMThjNTliOTJhZjhmY2ZjMzdmXCI+bWVzc2FnZV9jYjxcL2E+KShjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUsIHZvaWQgKnVzZXJfZGF0YSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DYWxsZWQgd2hlbiBhdWRpbyBoYWwgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gc2VuZCBhIG1lc3NhZ2UuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxwPjxzdHJvbmc+UGFyYW1ldGVyczo8XC9zdHJvbmc+XG46ICAgfCBbaW5dIHwgbmFtZSB8IFRoZSBtZXNzYWdlIG5hbWUgfFxufCAtLS0gfCAtLS0gfCAtLS0gfFxufCBbaW5dIHwgdmFsdWUgfCBUaGUgbWVzc2FnZSB2YWx1ZSB8XG58IFtpbl0gfCB1c2VyX2RhdGEgfCBUaGUgdXNlciBkYXRhIHBhc3NlZCBmcm9tIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZnVuY3Rpb24gfDxcL3A+XG48cD48c3Ryb25nPlNlZSBhbHNvOjxcL3N0cm9uZz5cbjogICBhZGRfbWVzc2FnZV9jYigpXG46ICAgcmVtb3ZlX21lc3NhZ2VfY2IoKTxcL3A+XG48aHIgXC8+XG48aDIgaWQ9XCJjb250ZW50LWVudW1lcmF0aW9uLXR5cGUtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1lbnVtZXJhdGlvbi10eXBlLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkVudW1lcmF0aW9uIFR5cGUgRG9jdW1lbnRhdGlvbjxcL2gyPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhYTI4N2I0NTJiYmM0ZDgzNjk5YTU5NjUwMzhmZTZjYjZcIj5hdWRpb19kaXJlY3Rpb248XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBhdWRpbyBkaXJlY3Rpb24uPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+QVVESU9fRElSRUNUSU9OX0lOPFwvZW0+IHwgQ2FwdHVyZSB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5BVURJT19ESVJFQ1RJT05fT1VUPFwvZW0+IHwgUGxheWJhY2sgfDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5lbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E2YTE1NTQ3YTgzNDM3NzQzMzNmNGVjMTY1OWEyZDIyM1wiPmF1ZGlvX3JldHVybjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIHJldHVybiBjb2Rlcy48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPHA+PHN0cm9uZz5FbnVtZXJhdG9yOjxcL3N0cm9uZz5cbjogICB8IDxlbT5BVURJT19SRVRfT0s8XC9lbT4gfCBFcnJvciBub25lIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkFVRElPX0VSUl9VTkRFRklORUQ8XC9lbT4gfCBVbmRlZmluZWQgZXJyb3IgfFxufCA8ZW0+QVVESU9fRVJSX1JFU09VUkNFPFwvZW0+IHwgUmVzb3VyY2UgZXJyb3IgfFxufCA8ZW0+QVVESU9fRVJSX1BBUkFNRVRFUjxcL2VtPiB8IEludmFsaWQgcGFyYW1ldGVycyB8XG58IDxlbT5BVURJT19FUlJfSU9DVEw8XC9lbT4gfCBpb2N0bCBlcnJvciB8XG58IDxlbT5BVURJT19FUlJfSU5WQUxJRF9TVEFURTxcL2VtPiB8IEludmFsaWQgc3RhdGUgfFxufCA8ZW0+QVVESU9fRVJSX0lOVEVSTkFMPFwvZW0+IHwgSW50ZXJuYWwgZXJyb3IgfFxufCA8ZW0+QVVESU9fRVJSX05PVF9JTVBMRU1FTlRFRDxcL2VtPiB8IE5vdCBJbXBsZW1lbnRlZCB8PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTBiNGFmM2RmOGUzMmMzNDg5ZTM5ZjA4OWE4YWQxMzZmXCI+YXVkaW9fc3RhdGU8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBhdWRpbyBzdGF0ZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPHA+PHN0cm9uZz5FbnVtZXJhdG9yOjxcL3N0cm9uZz5cbjogICB8IDxlbT5BVURJT19TVEFURV9PUEVOPFwvZW0+IHwgT3BlbiBzdGF0ZSB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5BVURJT19TVEFURV9TRVRVUDxcL2VtPiB8IFNldHVwIHN0YXRlIHxcbnwgPGVtPkFVRElPX1NUQVRFX1BSRVBBUkVEPFwvZW0+IHwgUHJlcGFyZWQgc3RhdGUgfFxufCA8ZW0+QVVESU9fU1RBVEVfUlVOTklORzxcL2VtPiB8IFJ1bm5pbmcgc3RhdGUgfFxufCA8ZW0+QVVESU9fU1RBVEVfWFJVTjxcL2VtPiB8IFBsYXliYWNrOnVuZGVycnVuLCBDYXB0dXJlOm92ZXJydW4gfFxufCA8ZW0+QVVESU9fU1RBVEVfRFJBSU5JTkc8XC9lbT4gfCBEcmFpbiBzdGF0ZSB8XG58IDxlbT5BVURJT19TVEFURV9QQVVTRUQ8XC9lbT4gfCBQYXVzZSBzdGF0ZSB8XG58IDxlbT5BVURJT19TVEFURV9TVVNQRU5ERUQ8XC9lbT4gfCBTdXNwZW5kIHN0YXRlIHxcbnwgPGVtPkFVRElPX1NUQVRFX0RJU0NPTk5FQ1RFRDxcL2VtPiB8IERpc2Nvbm5lY3RlZCBzdGF0ZSB8XG58IDxlbT5BVURJT19TVEFURV9VTktOT1dOPFwvZW0+IHwgVW5rbm93biBzdGF0ZSB8PFwvcD5cbjxociBcLz5cbjxwPkV4Y2VwdCBhcyBub3RlZCwgdGhpcyBjb250ZW50IC0gZXhjbHVkaW5nIHRoZSBDb2RlIEV4YW1wbGVzIC0gaXMgbGljZW5zZWQgdW5kZXIgPGEgaHJlZj1cImh0dHA6XC9cL2NyZWF0aXZlY29tbW9ucy5vcmdcL2xpY2Vuc2VzXC9ieVwvMy4wXC9sZWdhbGNvZGVcIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDMuMDxcL2E+XG5hbmQgYWxsIG9mIHRoZSBDb2RlIEV4YW1wbGVzIGNvbnRhaW5lZCBoZXJlaW4gYXJlIGxpY2Vuc2VkIHVuZGVyIDxhIGhyZWY9XCJodHRwczpcL1wvd3d3LnRpemVuLm9yZ1wvYnNkLTMtY2xhdXNlLWxpY2Vuc2VcIj5CU0QtMy1DbGF1c2U8XC9hPi48YnIgXC8+XG5Gb3IgZGV0YWlscywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cHM6XC9cL3d3dy50aXplbi5vcmdcL2NvbnRlbnQtbGljZW5zZVwiPkNvbnRlbnQgTGljZW5zZTxcL2E+LjxcL3A+XG4iLCJ0YWJsZV9vZl9jb250ZW50IjoiPHVsIGNsYXNzPVwidGFibGUtb2YtY29udGVudHNcIj5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtcmVxdWlyZWQtaGVhZGVyXCI+UmVxdWlyZWQgSGVhZGVyPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtb3ZlcnZpZXdcIj5PdmVydmlldzxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LXN0YXRlLWRpYWdyYW1cIj5TdGF0ZSBEaWFncmFtPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtc3RhdGUtdHJhbnNpdGlvbnNcIj5TdGF0ZSBUcmFuc2l0aW9uczxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWRhdGEtc3RydWN0dXJlLWRvY3VtZW50YXRpb25cIj5EYXRhIFN0cnVjdHVyZSBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvblwiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTFcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0yXCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tM1wiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTRcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi01XCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNlwiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC10eXBlZGVmLWRvY3VtZW50YXRpb25cIj5UeXBlZGVmIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1lbnVtZXJhdGlvbi10eXBlLWRvY3VtZW50YXRpb25cIj5FbnVtZXJhdGlvbiBUeXBlIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPFwvdWw+XG4iLCJ0aXRsZSI6IlRpemVuIEhBTCBBUEk6IEF1ZGlvIiwicmF3IjpudWxsfSx7ImNsYXNzIjoiQXBwXFxTZXJ2aWNlc1xcRG9jdW1lbnRhdGlvblxcRGF0YVxcUmVuZGVyZWRNYXJrZG93biIsInMiOiJ3cmJsIn1dfSx7InMiOiJhcnIifV19LCJtZW1vIjp7ImlkIjoiZDJ2Vzd2V2pUaU4zVnRqSTN1akoiLCJuYW1lIjoiX19tb3VudFBhcmFtc0NvbnRhaW5lciIsInBhdGgiOiJkb2NzXC9wbGF0Zm9ybVwvaGFsXC9hcGlcLzEuMC4wXC9ncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUiLCJtZXRob2QiOiJHRVQiLCJyZWxlYXNlIjoiYS1hLWEifSwiY2hlY2tzdW0iOiI1NTVkN2VhN2NhZGU2NDk2ZTI1MzJlMDE5OGI4NDQ3MDNlN2UzYjgxNDQxN2QxZjEwOWMyYmYzNTUwMzY4YTZmIn0=')" >
Content License<\/a>.<\/p>\n","table_of_content":"<ul class=\"table-of-contents\">\n<li><a href=https://samsungtizenos.com/"#content-required-header\">Required Header<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-overview\">Overview<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-state-diagram\">State Diagram<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-state-transitions\">State Transitions<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-data-structure-documentation\">Data Structure Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-1\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-2\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-3\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-4\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-5\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-6\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-typedef-documentation\">Typedef Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\">Enumeration Type Documentation<\/a><\/li>\n<\/ul>\n","title":"Tizen HAL API: Audio","raw":null},{"class":"App\\Services\\Documentation\\Data\\RenderedMarkdown","s":"wrbl"}]},"memo":{"id":"PY0TO73BBwKxxljqFc9z","name":"documentation::article","path":"docs\/platform\/hal\/api\/1.0.0\/group__HALAPI__HAL__AUDIO__MODULE","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"lazyLoaded":false,"lazyIsolated":true,"errors":[],"locale":"en","islands":[]},"checksum":"2b68c74d2ebc286ab2fea3b4e341222ec0eb4150690237e71c4294cd740611e1"}" wire:effects="[]" wire:id="PY0TO73BBwKxxljqFc9z" wire:name="documentation::article" x-init="$wire.__lazyLoad('eyJkYXRhIjp7ImZvck1vdW50IjpbeyJtYXJrZG93biI6W3siYm9keSI6IjxoMSBpZD1cImNvbnRlbnQtdGl6ZW4taGFsLWFwaS1hdWRpb1wiPjxhIGhyZWY9XCIjY29udGVudC10aXplbi1oYWwtYXBpLWF1ZGlvXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5UaXplbiBIQUwgQVBJOiBBdWRpbzxcL2gxPjxkaXYgZGF0YS1rbm93bGVkZ2UtYmFzZS1tZXRhZGF0YT48XC9kaXY+XG48aHIgXC8+XG48cD5UaGUgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZFwiPkF1ZGlvPFwvYT4gcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBhdWRpbyBkZXZpY2VzLjxcL3A+XG48aDIgaWQ9XCJjb250ZW50LXJlcXVpcmVkLWhlYWRlclwiPjxhIGhyZWY9XCIjY29udGVudC1yZXF1aXJlZC1oZWFkZXJcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlJlcXVpcmVkIEhlYWRlcjxcL2gyPlxuPHA+I2luY2x1ZGUgJmx0O2hhbC1hdWRpby5oJmd0OzxcL3A+XG48aDIgaWQ9XCJjb250ZW50LW92ZXJ2aWV3XCI+PGEgaHJlZj1cIiNjb250ZW50LW92ZXJ2aWV3XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5PdmVydmlldzxcL2gyPlxuPHA+VGhlIEF1ZGlvIG1vZHVsZSBpbiB0aGUgSEFMIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBtYW5hZ2UgYXVkaW8gcGxheWJhY2sgYW5kIGNhcHR1cmUuPFwvcD5cbjxwPktleSBmdW5jdGlvbmFsaXRpZXMgaW5jbHVkZTo8XC9wPlxuPHVsPlxuPGxpPkluaXRpYWxpemluZyBhbmQgZGVpbml0aWFsaXppbmcgdGhlIGF1ZGlvIGhhcmR3YXJlLjxcL2xpPlxuPGxpPk9wZW5pbmcgYW5kIGNvbmZpZ3VyaW5nIFBDTSBhdWRpbyBzdHJlYW1zLjxcL2xpPlxuPGxpPlN0YXJ0aW5nIGFuZCBzdG9wcGluZyBhdWRpbyBvcGVyYXRpb25zLjxcL2xpPlxuPGxpPlJlY292ZXJpbmcgZnJvbSBhdWRpbyBlcnJvcnMuPFwvbGk+XG48bGk+Q2xvc2luZyBhdWRpbyBzdHJlYW1zIHRvIGZyZWUgcmVzb3VyY2VzLjxcL2xpPlxuPFwvdWw+XG48aDMgaWQ9XCJjb250ZW50LXN0YXRlLWRpYWdyYW1cIj48YSBocmVmPVwiI2NvbnRlbnQtc3RhdGUtZGlhZ3JhbVwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+U3RhdGUgRGlhZ3JhbTxcL2gzPlxuPHA+PGltZyBzcmM9XCJtZWRpYVwvaGFsX2F1ZGlvX3N0YXRlX2RpYWdyYW0ucG5nXCIgYWx0PVwiaGFsX2F1ZGlvX3N0YXRlX2RpYWdyYW0ucG5nXCIgXC8+PFwvcD5cbjxoMyBpZD1cImNvbnRlbnQtc3RhdGUtdHJhbnNpdGlvbnNcIj48YSBocmVmPVwiI2NvbnRlbnQtc3RhdGUtdHJhbnNpdGlvbnNcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlN0YXRlIFRyYW5zaXRpb25zPFwvaDM+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48c3Ryb25nPkZVTkNUSU9OPFwvc3Ryb25nPjxcL3RoPlxuPHRoPjxzdHJvbmc+UFJFLVNUQVRFPFwvc3Ryb25nPjxcL3RoPlxuPHRoPjxzdHJvbmc+UE9TVC1TVEFURTxcL3N0cm9uZz48XC90aD5cbjx0aD48c3Ryb25nPlNZTkMgVFlQRTxcL3N0cm9uZz48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX2luaXQoKTxcL3RkPlxuPHRkPk5cL0E8XC90ZD5cbjx0ZD5DTE9TRTxcL3RkPlxuPHRkPlNZTkM8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmhhbF9hdWRpb19kZWluaXQoKTxcL3RkPlxuPHRkPkNMT1NFPFwvdGQ+XG48dGQ+TlwvQTxcL3RkPlxuPHRkPlNZTkM8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmhhbF9hdWRpb19wY21fb3BlbigpPFwvdGQ+XG48dGQ+Q0xPU0U8XC90ZD5cbjx0ZD5PUEVOPFwvdGQ+XG48dGQ+U1lOQzxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX3BjbV9zZXRfcGFyYW1zKCk8XC90ZD5cbjx0ZD5PUEVOPFwvdGQ+XG48dGQ+U0VUVVA8XC90ZD5cbjx0ZD5TWU5DPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5oYWxfYXVkaW9fcGNtX3N0YXJ0KCk8XC90ZD5cbjx0ZD5TRVRVUDxcL3RkPlxuPHRkPlJVTk5JTkc8XC90ZD5cbjx0ZD5TWU5DPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5oYWxfYXVkaW9fcGNtX3N0b3AoKTxcL3RkPlxuPHRkPlJVTk5JTkc8XC90ZD5cbjx0ZD5TVE9QPFwvdGQ+XG48dGQ+U1lOQzxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX3BjbV9jbG9zZSgpPFwvdGQ+XG48dGQ+U1RPUDxcL3RkPlxuPHRkPkNMT1NFPFwvdGQ+XG48dGQ+U1lOQzxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aGFsX2F1ZGlvX3BjbV9yZWNvdmVyKCk8XC90ZD5cbjx0ZD5YUlVOPFwvdGQ+XG48dGQ+UlVOTklORzxcL3RkPlxuPHRkPlNZTkM8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXVkaW8gZmVhdHVyZXMgYW5kIHRoZSBtYWNyb3MsIHNlZSBIQUwgQXVkaW8gcHJvZ3JhbW1pbmcgZ3VpZGVzIGFuZCB0dXRvcmlhbHMuPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPlR5cGVkZWZzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPnR5cGVkZWYgZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNmExNTU0N2E4MzQzNzc0MzMzZjRlYzE2NTlhMmQyMjNcIj5hdWRpb19yZXR1cm48XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkVudW1lcmF0aW9uIGZvciByZXR1cm4gY29kZXMuPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWEyODdiNDUyYmJjNGQ4MzY5OWE1OTY1MDM4ZmU2Y2I2XCI+YXVkaW9fZGlyZWN0aW9uPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNjk4YjYzY2Y1NTY4NWMxMjkyNmRjYmE4NDJkNjA2YzNcIj5hdWRpb19kaXJlY3Rpb25fZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5FbnVtZXJhdGlvbiBmb3IgYXVkaW8gZGlyZWN0aW9uLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EwYjRhZjNkZjhlMzJjMzQ4OWUzOWYwODlhOGFkMTM2ZlwiPmF1ZGlvX3N0YXRlPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhMzI1ZWQxMWI4N2Q0NjA5ZjBkYzYzNzQzMjI4MWRiZjVcIj5hdWRpb19zdGF0ZV9lPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkVudW1lcmF0aW9uIGZvciBhdWRpbyBzdGF0ZS48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0ZGV2aWNlX19pbmZvXCI+ZGV2aWNlX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2FiNmRiN2YwNDBjMjFmYTg1YmRmYmI4NjJkYTI5OTliOVwiPmRldmljZV9pbmZvX3M8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+RGV2aWNlIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBkaXJlY3Rpb24gYW5kIGlkLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fdm9sdW1lX19pbmZvXCI+YXVkaW9fdm9sdW1lX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1NTg0YzFmOTZlNjI0NTBlZGFjNDU2NWQ5MWNjNDQyZVwiPmF1ZGlvX3ZvbHVtZV9pbmZvX3M8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+Vm9sdW1lIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBnYWluIGFuZCBkaXJlY3Rpb24uPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdGF1ZGlvX19yb3V0ZV9faW5mb1wiPmF1ZGlvX3JvdXRlX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1YzVmZTJiMDE4NjQ1NTk2Mzk0NjcwODYxMTcwN2VkOFwiPmF1ZGlvX3JvdXRlX2luZm9fczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5Sb3V0ZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgcm9sZSBhbmQgZGV2aWNlLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fcm91dGVfX29wdGlvblwiPmF1ZGlvX3JvdXRlX29wdGlvbjxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTk3YTU5OTg4MTBkMGE2NWUyY2EzZmFjYjY0ZTQwNDkxXCI+YXVkaW9fcm91dGVfb3B0aW9uX3M8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+Um91dGUgb3B0aW9uIGluY2x1ZGluZyByb2xlLCBuYW1lIGFuZCB2YWx1ZS48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX3N0cmVhbV9faW5mb1wiPmF1ZGlvX3N0cmVhbV9pbmZvPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhODhlYWI5OTRlZjQwNDY4NGIwMGVkYzAzMjliNTRkYTBcIj5hdWRpb19zdHJlYW1faW5mb19zPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPlN0cmVhbSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgcm9sZSwgZGlyZWN0aW9uIGFuZCBpbmRleC48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX2R1Y2tpbmdfX2luZm9cIj5hdWRpb19kdWNraW5nX2luZm88XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EyNWQzZTQ3ZjM1MTg5ODc1ZTQ0M2ZjNjljMjM2MjlhOVwiPmF1ZGlvX2R1Y2tpbmdfaW5mb19zPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkR1Y2tpbmcgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRhcmdldCByb2xlLCBkdXJhdGlvbiBhbmQgcmF0aW8uPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIHZvaWQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1MmM0Y2EyMmRiMjIxYzE4YzU5YjkyYWY4ZmNmYzM3ZlwiPm1lc3NhZ2VfY2I8XC9hPiApKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSwgdm9pZCAqdXNlcl9kYXRhKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+Q2FsbGVkIHdoZW4gYXVkaW8gaGFsIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIHNlbmQgYSBtZXNzYWdlLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgICA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19tZWRpYV9fYXVkaW9fX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOWJmOTJjMjFhYjQ2NzY5MDljMWQ0NmNmOTkyZGU0NWNcIj5oYWxfYmFja2VuZF9hdWRpb19mdW5jczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5UaGUgc3RydWN0dXJlIHR5cGUgb2YgdGhlIGF1ZGlvIEhBTCBmdW5jdGlvbnMuPFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGgyIGlkPVwiY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCI+PGEgaHJlZj1cIiNjb250ZW50LWRhdGEtc3RydWN0dXJlLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkRhdGEgU3RydWN0dXJlIERvY3VtZW50YXRpb248XC9oMj5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnN0cnVjdCBkZXZpY2VfaW5mbzxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkRldmljZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgdHlwZSwgZGlyZWN0aW9uIGFuZCBpZC48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+Y29uc3QgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhODZmNzg1MGQwNTdkNmVlODQzOTlmZTY0ZTA5ZGViMDhcIj50eXBlPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnVpbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZjRhOGM0YzNmZjkwNDFjOWJlMWEzMmFjNWE1MzY1ZDdcIj5kaXJlY3Rpb248XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E4ZmMzNmJmMDliMjQyMjA4NjI0MGRjMDZlODA4ZGI3OFwiPmlkPFwvYT48XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dWludDMyX3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZjRhOGM0YzNmZjkwNDFjOWJlMWEzMmFjNWE1MzY1ZDdcIj5kZXZpY2VfaW5mbzo6ZGlyZWN0aW9uPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5wbGF5YmFjayBvciBjYXB0dXJlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVpbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYThmYzM2YmYwOWIyNDIyMDg2MjQwZGMwNmU4MDhkYjc4XCI+ZGV2aWNlX2luZm86OmlkPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5kZXZpY2UgaWQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhODZmNzg1MGQwNTdkNmVlODQzOTlmZTY0ZTA5ZGViMDhcIj5kZXZpY2VfaW5mbzo6dHlwZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+ZGV2aWNlIHR5cGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGF1ZGlvX3ZvbHVtZV9pbmZvPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Vm9sdW1lIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBnYWluIGFuZCBkaXJlY3Rpb24uPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPmNvbnN0IGNoYXIgKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWMyZGJjMzA5YmVjNjBmZWYzMDVjOGQxMmFhNzBlZDQ1XCI+dHlwZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5jb25zdCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EwZmRmMjQ2NjZiMDUwMmEwNDFmZWFmZGYyYmExODEzZlwiPmdhaW48XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDViNzhhZWM2OTNmMTBiNWJkZDVlM2Q5YWFjNzlkZlwiPmRpcmVjdGlvbjxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTFcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0xXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDViNzhhZWM2OTNmMTBiNWJkZDVlM2Q5YWFjNzlkZlwiPmF1ZGlvX3ZvbHVtZV9pbmZvOjpkaXJlY3Rpb248XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPnBsYXliYWNrIG9yIGNhcHR1cmU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMGZkZjI0NjY2YjA1MDJhMDQxZmVhZmRmMmJhMTgxM2ZcIj5hdWRpb192b2x1bWVfaW5mbzo6Z2FpbjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dm9sdW1lIGdhaW48XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYzJkYmMzMDliZWM2MGZlZjMwNWM4ZDEyYWE3MGVkNDVcIj5hdWRpb192b2x1bWVfaW5mbzo6dHlwZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dm9sdW1lIHR5cGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGF1ZGlvX3JvdXRlX2luZm88XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Sb3V0ZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgcm9sZSBhbmQgZGV2aWNlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD5jb25zdCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EzNjEwYjkwZTc4OWRhOTYwZmNlYThlNDkyMTg1NGM1N1wiPnJvbGU8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWI2ZGI3ZjA0MGMyMWZhODViZGZiYjg2MmRhMjk5OWI5XCI+ZGV2aWNlX2luZm9fczxcL2E+ICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiYzgzNjNkMTU4Yzk0ZjA0MjYwMjA4YTM2YzY2YTA2ZlwiPmRldmljZV9pbmZvczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTA1YTc3ZGM4OTU1NmJkMzFjY2JhODBkNThlNDFhZDYyXCI+bnVtX29mX2RldmljZXM8XC9hPjxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoNCBpZD1cImNvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0yXCI+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tMlwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWI2ZGI3ZjA0MGMyMWZhODViZGZiYjg2MmRhMjk5OWI5XCI+ZGV2aWNlX2luZm9fczxcL2E+KiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiYzgzNjNkMTU4Yzk0ZjA0MjYwMjA4YTM2YzY2YTA2ZlwiPmF1ZGlvX3JvdXRlX2luZm86OmRldmljZV9pbmZvczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+ZGV2aWNlIGluZm88XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dWludDMyX3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMDVhNzdkYzg5NTU2YmQzMWNjYmE4MGQ1OGU0MWFkNjJcIj5hdWRpb19yb3V0ZV9pbmZvOjpudW1fb2ZfZGV2aWNlczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+bnVtYmVyIG9mIGRldmljZXM8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Y29uc3QgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMzYxMGI5MGU3ODlkYTk2MGZjZWE4ZTQ5MjE4NTRjNTdcIj5hdWRpb19yb3V0ZV9pbmZvOjpyb2xlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5zdHJlYW0gcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgYXVkaW9fcm91dGVfb3B0aW9uPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Um91dGUgb3B0aW9uIGluY2x1ZGluZyByb2xlLCBuYW1lIGFuZCB2YWx1ZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+Y29uc3QgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMTBmNDQ3YjEwZjQzY2NjYjllZDU5YzE4ZTBiNDRmOThcIj5yb2xlPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmNvbnN0IGNoYXIgKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTU1NjFlNzZhMWZlMThiMjJlN2JhODc2ZmZiNmE1YTc0XCI+bmFtZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNDFhODQ5ZWZlNjYyODBkYjZmMDM3ODkzNTVjMzc5YzVcIj52YWx1ZTxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTNcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0zXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5jb25zdCBjaGFyKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E1NTYxZTc2YTFmZTE4YjIyZTdiYTg3NmZmYjZhNWE3NFwiPmF1ZGlvX3JvdXRlX29wdGlvbjo6bmFtZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+a2V5PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmNvbnN0IGNoYXIqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTEwZjQ0N2IxMGY0M2NjY2I5ZWQ1OWMxOGUwYjQ0Zjk4XCI+YXVkaW9fcm91dGVfb3B0aW9uOjpyb2xlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5zdHJlYW0gcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTQxYTg0OWVmZTY2MjgwZGI2ZjAzNzg5MzU1YzM3OWM1XCI+YXVkaW9fcm91dGVfb3B0aW9uOjp2YWx1ZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dmFsdWU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGF1ZGlvX3N0cmVhbV9pbmZvPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RyZWFtIGluZm9ybWF0aW9uIGluY2x1ZGluZyByb2xlLCBkaXJlY3Rpb24gYW5kIGluZGV4LjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD5jb25zdCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FmYzczZGNhZGUzYTBhMWQzZjY4MmU5NzFkNzk1OWU5ZFwiPnJvbGU8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FlOTE0YmM1NDg4NTBhMTJkMDU1N2JkYTQ3MzRiYWIxOVwiPmRpcmVjdGlvbjxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWM0ZjFkZWI3MjRmNDU0YzY0YzBlYmQxZGFhZjc5YTVlXCI+aWR4PFwvYT48XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNFwiPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTRcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkZpZWxkIERvY3VtZW50YXRpb248XC9oND5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVpbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWU5MTRiYzU0ODg1MGExMmQwNTU3YmRhNDczNGJhYjE5XCI+YXVkaW9fc3RyZWFtX2luZm86OmRpcmVjdGlvbjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+cGxheWJhY2sgb3IgY2FwdHVyZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FjNGYxZGViNzI0ZjQ1NGM2NGMwZWJkMWRhYWY3OWE1ZVwiPmF1ZGlvX3N0cmVhbV9pbmZvOjppZHg8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPnN0cmVhbSBpbmRleDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5jb25zdCBjaGFyKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FmYzczZGNhZGUzYTBhMWQzZjY4MmU5NzFkNzk1OWU5ZFwiPmF1ZGlvX3N0cmVhbV9pbmZvOjpyb2xlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5zdHJlYW0gcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgYXVkaW9fZHVja2luZ19pbmZvPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RHVja2luZyBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgdGFyZ2V0IHJvbGUsIGR1cmF0aW9uIGFuZCByYXRpby48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+Y29uc3QgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZTUyYzNiYWMzNjFiNDEyYjM1MGY5OWMxZGZjNWU2NjBcIj50YXJnZXRfcm9sZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWI5ODg5MTVjOGExMjA3YTRhNDA0MmE1ZTQ3OWZkYzcyXCI+ZHVyYXRpb248XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+ZG91YmxlPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhOTQwZDk1MzA3ZDk5ZGIzYTg0MGFjZTIwODM5ZDZkZjRcIj5yYXRpbzxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTVcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi01XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiOTg4OTE1YzhhMTIwN2E0YTQwNDJhNWU0NzlmZGM3MlwiPmF1ZGlvX2R1Y2tpbmdfaW5mbzo6ZHVyYXRpb248XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPmR1Y2tpbmcgZHVyYXRpb248XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZG91YmxlIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTk0MGQ5NTMwN2Q5OWRiM2E4NDBhY2UyMDgzOWQ2ZGY0XCI+YXVkaW9fZHVja2luZ19pbmZvOjpyYXRpbzxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+dm9sdW1lIHJhdGlvPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmNvbnN0IGNoYXIqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWU1MmMzYmFjMzYxYjQxMmIzNTBmOTljMWRmYzVlNjYwXCI+YXVkaW9fZHVja2luZ19pbmZvOjp0YXJnZXRfcm9sZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+ZHVja2luZyB0YXJnZXQgcm9sZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgX2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIHRoZSBhdWRpbyBIQUwgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E0YWNkMzcyZjcxNThkMjI4MjlkYzJjYzZlNWJhMjgxM1wiPmluaXQ8XC9hPiApKHZvaWQgKiphdWRpb19oYW5kbGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDQyNWJlOTNlODQ4N2VlNmI2Njg5OTBiYzIyOWFjYlwiPmRlaW5pdDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYjI4NGY5ZGFjMGQ1MzAyMGI1MjE1NjU4NDc2MTU3MTJcIj5nZXRfdm9sdW1lX2xldmVsX21heDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTYwMTgyNTk1Y2Q2NTcxMTVhNmQyYmJiODUzODg0ZTcxXCI+Z2V0X3ZvbHVtZV9sZXZlbDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTQzYzY2MWM2YjllODg3YzY5MzhhY2JiYzU1MWVjMDEyXCI+c2V0X3ZvbHVtZV9sZXZlbDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGxldmVsKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYjI3OTIzNmI1ZjlkMTE1N2MzYmQ4ZWVlMWEyOGM1N2ZcIj5nZXRfdm9sdW1lX3ZhbHVlPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1NTg0YzFmOTZlNjI0NTBlZGFjNDU2NWQ5MWNjNDQyZVwiPmF1ZGlvX3ZvbHVtZV9pbmZvX3M8XC9hPiAqaW5mbywgdWludDMyX3QgbGV2ZWwsIGRvdWJsZSAqdmFsdWUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2ExNTE4OWQ1Y2Y3YjkwMjNiN2JmOGI0ZmJhMGI2ZGVhMVwiPmdldF92b2x1bWVfbXV0ZTxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICptdXRlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNDMzNzAwNTdjYTBkMTU5ZTBiY2Q5OTg4ZjRlZDkwN2JcIj5zZXRfdm9sdW1lX211dGU8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTU1ODRjMWY5NmU2MjQ1MGVkYWM0NTY1ZDkxY2M0NDJlXCI+YXVkaW9fdm9sdW1lX2luZm9fczxcL2E+ICppbmZvLCB1aW50MzJfdCBtdXRlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNTVkMjRiMjg2MGQ2MTcxMmUyZjM4YTZlYjQzMTZmYTdcIj5zZXRfdm9sdW1lX3JhdGlvPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4OGVhYjk5NGVmNDA0Njg0YjAwZWRjMDMyOWI1NGRhMFwiPmF1ZGlvX3N0cmVhbV9pbmZvX3M8XC9hPiAqaW5mbywgZG91YmxlIHJhdGlvKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYmU2N2I1NjFmNGU4ZDk0NDA0ZGUyOWZjOTY2YjU2YThcIj5ub3RpZnlfZHVja2luZ19hY3RpdmF0aW9uX2NoYW5nZWQ8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTI1ZDNlNDdmMzUxODk4NzVlNDQzZmM2OWMyMzYyOWE5XCI+YXVkaW9fZHVja2luZ19pbmZvX3M8XC9hPiAqaW5mbywgdWludDMyX3QgaXNfYWN0aXZhdGVkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhODIzYTcyODI0MWJmNDljOGNlNDFhZjgxNDU4OTM0NmJcIj51cGRhdGVfcm91dGU8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTVjNWZlMmIwMTg2NDU1OTYzOTQ2NzA4NjExNzA3ZWQ4XCI+YXVkaW9fcm91dGVfaW5mb19zPFwvYT4gKmluZm8pPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiMzE5OWExN2JmZTYxMDYxMWMzY2VmMWU4MGU2M2FmNVwiPnVwZGF0ZV9yb3V0ZV9vcHRpb248XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTk3YTU5OTg4MTBkMGE2NWUyY2EzZmFjYjY0ZTQwNDkxXCI+YXVkaW9fcm91dGVfb3B0aW9uX3M8XC9hPiAqb3B0aW9uKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMWIyMDI4ZjM3NzhiN2EzZWZjOGZiZDE5Yzc2ZDhjNzFcIj5ub3RpZnlfc3RyZWFtX2Nvbm5lY3Rpb25fY2hhbmdlZDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhODhlYWI5OTRlZjQwNDY4NGIwMGVkYzAzMjliNTRkYTBcIj5hdWRpb19zdHJlYW1faW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGlzX2Nvbm5lY3RlZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTcwYTE0OTRhNThjZWEwODI2NmI3OWUxMWMwNjkxNTdkXCI+cGNtX29wZW48XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgY29uc3QgY2hhciAqY2FyZCwgY29uc3QgY2hhciAqZGV2aWNlLCB1aW50MzJfdCBkaXJlY3Rpb24sIHZvaWQgKnNhbXBsZV9zcGVjLCB1aW50MzJfdCBwZXJpb2Rfc2l6ZSwgdWludDMyX3QgcGVyaW9kcywgdm9pZCAqKnBjbV9oYW5kbGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EzMTRkOGI0YjE3YWIwNWY5NmQyYjRhNzZkYjM2OWZhYVwiPnBjbV9zdGFydDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhMDNiZjk2NTJmY2EzYmZmNTE3N2JiMzI3ZGJjYWEwMjBcIj5wY21fc3RvcDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNmQxMzA1YmJkYTlkYzUxODk0NmQ2ZmRmZjRiMjdjYTVcIj5wY21fY2xvc2U8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTY4ZDc0N2JjZTc5YjYwZmNjYWIzN2ZhNzk1MmMxMmQyXCI+cGNtX2F2YWlsPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHVpbnQzMl90ICphdmFpbCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWRjZDQ0MTU0MzMxOTI2NTg3Y2RhZDdiZDNiZmRhOGQxXCI+cGNtX3dyaXRlPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdWludDMyX3QgZnJhbWVzKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNTkwNTI4ZDJiZmE4NzJhYjQyMGFhNGRjYmFhZTJiZjZcIj5wY21fcmVhZDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCB2b2lkICpidWZmZXIsIHVpbnQzMl90IGZyYW1lcyk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWJjYzVhYjIwNGI4NmYwNGJhZWI0NzhlNTE3MzNhN2YwXCI+cGNtX2dldF9mZDxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQgKmZkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNzc2NmU3MGE3OGFkODVlNTZjZmNkNjQzY2IyMTBiYWVcIj5wY21fcmVjb3ZlcjxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQgcmV2ZW50cyk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTk4OWMzMmE3OWVhYzhjY2MzZDg3M2FiZDY4MjRlNWE2XCI+cGNtX2dldF9wYXJhbXM8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgZGlyZWN0aW9uLCB2b2lkICpzYW1wbGVfc3BlYywgdWludDMyX3QgKnBlcmlvZF9zaXplLCB1aW50MzJfdCAqcGVyaW9kcyk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTk3ZmU2OWU2NTVlN2Y0NmYyZTI2YzZkNGQ5YWEzM2FjXCI+cGNtX3NldF9wYXJhbXM8XC9hPiApKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgZGlyZWN0aW9uLCB2b2lkICpzYW1wbGVfc3BlYywgdWludDMyX3QgcGVyaW9kX3NpemUsIHVpbnQzMl90IHBlcmlvZHMpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E2MGYxNDAxMDQ3YmYzOGZkZjAzNTNlNjZmZDBkZTQyMlwiPnBjbV9hdmFpbF9kZWxheTxcL2E+ICkodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQzMl90ICphdmFpbCwgaW50MzJfdCAqZGVsYXkpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhYmY1ZTI5NDBkOTE1YzhiODk3NzhjMDg0MGIwM2Q1YVwiPnBjbV9tbWFwX2JlZ2luPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHZvaWQgKiphcmVhcywgdWludDMyX3QgKm9mZnNldCwgdWludDMyX3QgKmZyYW1lcywgdm9pZCAqKnB0cik8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTdmYTM0YWVmMzZlNzg5NWFlOGE0YTZhZjJhNmQ4ZDhlXCI+cGNtX21tYXBfY29tbWl0PFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgZnJhbWVzKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYzNiNjIwYWNiOGQxZjBhM2Q3ZDdjYTUwMWRjNTFhYmVcIj5wY21fZ2V0X3N0YXRlPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EzMjVlZDExYjg3ZDQ2MDlmMGRjNjM3NDMyMjgxZGJmNVwiPmF1ZGlvX3N0YXRlX2U8XC9hPiAqc3RhdGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EwZTQ0OTZjOGJlODRmZTljYTZiOTMyNDY4MWY1Y2IyZlwiPmFkZF9tZXNzYWdlX2NiPFwvYT4gKSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1MmM0Y2EyMmRiMjIxYzE4YzU5YjkyYWY4ZmNmYzM3ZlwiPm1lc3NhZ2VfY2I8XC9hPiBjYWxsYmFjaywgdm9pZCAqdXNlcl9kYXRhKTxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoNCBpZD1cImNvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi02XCI+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNlwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTBlNDQ5NmM4YmU4NGZlOWNhNmI5MzI0NjgxZjVjYjJmXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjphZGRfbWVzc2FnZV9jYjxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1MmM0Y2EyMmRiMjIxYzE4YzU5YjkyYWY4ZmNmYzM3ZlwiPm1lc3NhZ2VfY2I8XC9hPiBjYWxsYmFjaywgdm9pZCAqdXNlcl9kYXRhKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlJlbW92ZSBtZXNzYWdlIGNhbGxiYWNrPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FhMDQyNWJlOTNlODQ4N2VlNmI2Njg5OTBiYzIyOWFjYlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6ZGVpbml0PFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdm9sdW1lIG1heCBsZXZlbDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNjAxODI1OTVjZDY1NzExNWE2ZDJiYmI4NTM4ODRlNzFcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OmdldF92b2x1bWVfbGV2ZWw8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXQgdm9sdW1lIGxldmVsPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiMjg0ZjlkYWMwZDUzMDIwYjUyMTU2NTg0NzYxNTcxMlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6Z2V0X3ZvbHVtZV9sZXZlbF9tYXg8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90ICpsZXZlbCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdm9sdW1lIGxldmVsPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2ExNTE4OWQ1Y2Y3YjkwMjNiN2JmOGI0ZmJhMGI2ZGVhMVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6Z2V0X3ZvbHVtZV9tdXRlPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTU1ODRjMWY5NmU2MjQ1MGVkYWM0NTY1ZDkxY2M0NDJlXCI+YXVkaW9fdm9sdW1lX2luZm9fczxcL2E+ICppbmZvLCB1aW50MzJfdCAqbXV0ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXQgdm9sdW1lIG11dGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWIyNzkyMzZiNWY5ZDExNTdjM2JkOGVlZTFhMjhjNTdmXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpnZXRfdm9sdW1lX3ZhbHVlPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTU1ODRjMWY5NmU2MjQ1MGVkYWM0NTY1ZDkxY2M0NDJlXCI+YXVkaW9fdm9sdW1lX2luZm9fczxcL2E+ICppbmZvLCB1aW50MzJfdCBsZXZlbCwgZG91YmxlICp2YWx1ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdm9sdW1lIG11dGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTRhY2QzNzJmNzE1OGQyMjgyOWRjMmNjNmU1YmEyODEzXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjppbml0PFwvYT4pKHZvaWQgKiphdWRpb19oYW5kbGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Jmx0OyBJbml0aWFsaXplIEhBTCBiYWNrZW5kIERlaW5pdGlhbGl6ZSBIQUwgYmFja2VuZDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhYmU2N2I1NjFmNGU4ZDk0NDA0ZGUyOWZjOTY2YjU2YThcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6Om5vdGlmeV9kdWNraW5nX2FjdGl2YXRpb25fY2hhbmdlZDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EyNWQzZTQ3ZjM1MTg5ODc1ZTQ0M2ZjNjljMjM2MjlhOVwiPmF1ZGlvX2R1Y2tpbmdfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGlzX2FjdGl2YXRlZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5VcGRhdGUgcm91dGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTFiMjAyOGYzNzc4YjdhM2VmYzhmYmQxOWM3NmQ4YzcxXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpub3RpZnlfc3RyZWFtX2Nvbm5lY3Rpb25fY2hhbmdlZDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4OGVhYjk5NGVmNDA0Njg0YjAwZWRjMDMyOWI1NGRhMFwiPmF1ZGlvX3N0cmVhbV9pbmZvX3M8XC9hPiAqaW5mbywgdWludDMyX3QgaXNfY29ubmVjdGVkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPk9wZW4gZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E2OGQ3NDdiY2U3OWI2MGZjY2FiMzdmYTc5NTJjMTJkMlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2F2YWlsPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgKmF2YWlsKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPldyaXRlIGRhdGE8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTYwZjE0MDEwNDdiZjM4ZmRmMDM1M2U2NmZkMGRlNDIyXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpwY21fYXZhaWxfZGVsYXk8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQzMl90ICphdmFpbCwgaW50MzJfdCAqZGVsYXkpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RhcnQgbW1hcDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNmQxMzA1YmJkYTlkYzUxODk0NmQ2ZmRmZjRiMjdjYTVcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9jbG9zZTxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+R2V0IGF2YWlsYWJsZSBzaXplPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiY2M1YWIyMDRiODZmMDRiYWViNDc4ZTUxNzMzYTdmMFwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2dldF9mZDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIGludCAqZmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VHJ5IHJlY292ZXJpbmcgZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E5ODljMzJhNzllYWM4Y2NjM2Q4NzNhYmQ2ODI0ZTVhNlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2dldF9wYXJhbXM8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCB1aW50MzJfdCBkaXJlY3Rpb24sIHZvaWQgKnNhbXBsZV9zcGVjLCB1aW50MzJfdCAqcGVyaW9kX3NpemUsIHVpbnQzMl90ICpwZXJpb2RzKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldCBkZXZpY2UgcGFyYW1zPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FjM2I2MjBhY2I4ZDFmMGEzZDdkN2NhNTAxZGM1MWFiZVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX2dldF9zdGF0ZTxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EzMjVlZDExYjg3ZDQ2MDlmMGRjNjM3NDMyMjgxZGJmNVwiPmF1ZGlvX3N0YXRlX2U8XC9hPiAqc3RhdGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+QWRkIG1lc3NhZ2UgY2FsbGJhY2s8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYWFiZjVlMjk0MGQ5MTVjOGI4OTc3OGMwODQwYjAzZDVhXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpwY21fbW1hcF9iZWdpbjxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHZvaWQgKiphcmVhcywgdWludDMyX3QgKm9mZnNldCwgdWludDMyX3QgKmZyYW1lcywgdm9pZCAqKnB0cik8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Db21taXQgbW1hcDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhN2ZhMzRhZWYzNmU3ODk1YWU4YTRhNmFmMmE2ZDhkOGVcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9tbWFwX2NvbW1pdDxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgZnJhbWVzKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkdldCBzdGF0ZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNzBhMTQ5NGE1OGNlYTA4MjY2Yjc5ZTExYzA2OTE1N2RcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9vcGVuPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgY29uc3QgY2hhciAqY2FyZCwgY29uc3QgY2hhciAqZGV2aWNlLCB1aW50MzJfdCBkaXJlY3Rpb24sIHZvaWQgKnNhbXBsZV9zcGVjLCB1aW50MzJfdCBwZXJpb2Rfc2l6ZSwgdWludDMyX3QgcGVyaW9kcywgdm9pZCAqKnBjbV9oYW5kbGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RhcnQgZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E1OTA1MjhkMmJmYTg3MmFiNDIwYWE0ZGNiYWFlMmJmNlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX3JlYWQ8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCB2b2lkICpidWZmZXIsIHVpbnQzMl90IGZyYW1lcyk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgZmlsZSBkZXNjcmlwdG9yPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E3NzY2ZTcwYTc4YWQ4NWU1NmNmY2Q2NDNjYjIxMGJhZVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX3JlY292ZXI8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlLCBpbnQgcmV2ZW50cyk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgZGV2aWNlIHBhcmFtczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhOTdmZTY5ZTY1NWU3ZjQ2ZjJlMjZjNmQ0ZDlhYTMzYWNcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV9zZXRfcGFyYW1zPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgdm9pZCAqcGNtX2hhbmRsZSwgdWludDMyX3QgZGlyZWN0aW9uLCB2b2lkICpzYW1wbGVfc3BlYywgdWludDMyX3QgcGVyaW9kX3NpemUsIHVpbnQzMl90IHBlcmlvZHMpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+R2V0IGRlbGF5IGFuZCBsYXRlbmN5IGJvdGg8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTMxNGQ4YjRiMTdhYjA1Zjk2ZDJiNGE3NmRiMzY5ZmFhXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpwY21fc3RhcnQ8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlN0b3AgZGV2aWNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2EwM2JmOTY1MmZjYTNiZmY1MTc3YmIzMjdkYmNhYTAyMFwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6cGNtX3N0b3A8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCB2b2lkICpwY21faGFuZGxlKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNsb3NlIGRldmljZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhZGNkNDQxNTQzMzE5MjY1ODdjZGFkN2JkM2JmZGE4ZDFcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnBjbV93cml0ZTxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIHZvaWQgKnBjbV9oYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdWludDMyX3QgZnJhbWVzKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlJlYWQgZGF0YTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNDNjNjYxYzZiOWU4ODdjNjkzOGFjYmJjNTUxZWMwMTJcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnNldF92b2x1bWVfbGV2ZWw8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IGxldmVsKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldCB2b2x1bWUgdmFsdWU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPigqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjYTQzMzcwMDU3Y2EwZDE1OWUwYmNkOTk4OGY0ZWQ5MDdiXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzOjpzZXRfdm9sdW1lX211dGU8XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNTU4NGMxZjk2ZTYyNDUwZWRhYzQ1NjVkOTFjYzQ0MmVcIj5hdWRpb192b2x1bWVfaW5mb19zPFwvYT4gKmluZm8sIHVpbnQzMl90IG11dGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHZvbHVtZSByYXRpbzxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhOGEzOTU3YzdiYTk0YWRkMjFlZGQ3M2E5OGM3MTJhZTJcIj5hdWRpb19yZXR1cm5fZTxcL2E+KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNhNTVkMjRiMjg2MGQ2MTcxMmUyZjM4YTZlYjQzMTZmYTdcIj5faGFsX2JhY2tlbmRfbWVkaWFfYXVkaW9fZnVuY3M6OnNldF92b2x1bWVfcmF0aW88XC9hPikodm9pZCAqYXVkaW9faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhODhlYWI5OTRlZjQwNDY4NGIwMGVkYzAzMjliNTRkYTBcIj5hdWRpb19zdHJlYW1faW5mb19zPFwvYT4gKmluZm8sIGRvdWJsZSByYXRpbyk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Ob3RpZnkgZHVja2luZyBhY3RpdmF0aW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2E4MjNhNzI4MjQxYmY0OWM4Y2U0MWFmODE0NTg5MzQ2YlwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6dXBkYXRlX3JvdXRlPFwvYT4pKHZvaWQgKmF1ZGlvX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTVjNWZlMmIwMTg2NDU1OTYzOTQ2NzA4NjExNzA3ZWQ4XCI+YXVkaW9fcm91dGVfaW5mb19zPFwvYT4gKmluZm8pPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VXBkYXRlIHJvdXRlIHdpdGggb3B0aW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E4YTM5NTdjN2JhOTRhZGQyMWVkZDczYTk4YzcxMmFlMlwiPmF1ZGlvX3JldHVybl9lPFwvYT4oKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2FiMzE5OWExN2JmZTYxMDYxMWMzY2VmMWU4MGU2M2FmNVwiPl9oYWxfYmFja2VuZF9tZWRpYV9hdWRpb19mdW5jczo6dXBkYXRlX3JvdXRlX29wdGlvbjxcL2E+KSh2b2lkICphdWRpb19oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E5N2E1OTk4ODEwZDBhNjVlMmNhM2ZhY2I2NGU0MDQ5MVwiPmF1ZGlvX3JvdXRlX29wdGlvbl9zPFwvYT4gKm9wdGlvbik8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Ob3RpZnkgc3RyZWFtIGNvbm5lY3Rpb248XC9wPlxuPGhyIFwvPlxuPGgyIGlkPVwiY29udGVudC10eXBlZGVmLWRvY3VtZW50YXRpb25cIj48YSBocmVmPVwiI2NvbnRlbnQtdHlwZWRlZi1kb2N1bWVudGF0aW9uXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5UeXBlZGVmIERvY3VtZW50YXRpb248XC9oMj5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhYTI4N2I0NTJiYmM0ZDgzNjk5YTU5NjUwMzhmZTZjYjZcIj5hdWRpb19kaXJlY3Rpb248XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhNjk4YjYzY2Y1NTY4NWMxMjkyNmRjYmE4NDJkNjA2YzNcIj5hdWRpb19kaXJlY3Rpb25fZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIGF1ZGlvIGRpcmVjdGlvbi48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fZHVja2luZ19faW5mb1wiPmF1ZGlvX2R1Y2tpbmdfaW5mbzxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2EyNWQzZTQ3ZjM1MTg5ODc1ZTQ0M2ZjNjljMjM2MjlhOVwiPmF1ZGlvX2R1Y2tpbmdfaW5mb19zPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5EdWNraW5nIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0YXJnZXQgcm9sZSwgZHVyYXRpb24gYW5kIHJhdGlvLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTZhMTU1NDdhODM0Mzc3NDMzM2Y0ZWMxNjU5YTJkMjIzXCI+YXVkaW9fcmV0dXJuPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYThhMzk1N2M3YmE5NGFkZDIxZWRkNzNhOThjNzEyYWUyXCI+YXVkaW9fcmV0dXJuX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciByZXR1cm4gY29kZXMuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX3JvdXRlX19pbmZvXCI+YXVkaW9fcm91dGVfaW5mbzxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1YzVmZTJiMDE4NjQ1NTk2Mzk0NjcwODYxMTcwN2VkOFwiPmF1ZGlvX3JvdXRlX2luZm9fczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Um91dGUgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHJvbGUgYW5kIGRldmljZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNzdHJ1Y3RhdWRpb19fcm91dGVfX29wdGlvblwiPmF1ZGlvX3JvdXRlX29wdGlvbjxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E5N2E1OTk4ODEwZDBhNjVlMmNhM2ZhY2I2NGU0MDQ5MVwiPmF1ZGlvX3JvdXRlX29wdGlvbl9zPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Sb3V0ZSBvcHRpb24gaW5jbHVkaW5nIHJvbGUsIG5hbWUgYW5kIHZhbHVlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTBiNGFmM2RmOGUzMmMzNDg5ZTM5ZjA4OWE4YWQxMzZmXCI+YXVkaW9fc3RhdGU8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhMzI1ZWQxMWI4N2Q0NjA5ZjBkYzYzNzQzMjI4MWRiZjVcIj5hdWRpb19zdGF0ZV9lPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5FbnVtZXJhdGlvbiBmb3IgYXVkaW8gc3RhdGUuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgc3RydWN0IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjc3RydWN0YXVkaW9fX3N0cmVhbV9faW5mb1wiPmF1ZGlvX3N0cmVhbV9pbmZvPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTg4ZWFiOTk0ZWY0MDQ2ODRiMDBlZGMwMzI5YjU0ZGEwXCI+YXVkaW9fc3RyZWFtX2luZm9fczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RyZWFtIGluZm9ybWF0aW9uIGluY2x1ZGluZyByb2xlLCBkaXJlY3Rpb24gYW5kIGluZGV4LjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdGF1ZGlvX192b2x1bWVfX2luZm9cIj5hdWRpb192b2x1bWVfaW5mbzxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E1NTg0YzFmOTZlNjI0NTBlZGFjNDU2NWQ5MWNjNDQyZVwiPmF1ZGlvX3ZvbHVtZV9pbmZvX3M8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlZvbHVtZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgdHlwZSwgZ2FpbiBhbmQgZGlyZWN0aW9uLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdGRldmljZV9faW5mb1wiPmRldmljZV9pbmZvPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYWI2ZGI3ZjA0MGMyMWZhODViZGZiYjg2MmRhMjk5OWI5XCI+ZGV2aWNlX2luZm9fczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RGV2aWNlIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0eXBlLCBkaXJlY3Rpb24gYW5kIGlkLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0FVRElPIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19tZWRpYV9fYXVkaW9fX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX21lZGlhX2F1ZGlvX2Z1bmNzPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTliZjkyYzIxYWI0Njc2OTA5YzFkNDZjZjk5MmRlNDVjXCI+aGFsX2JhY2tlbmRfYXVkaW9fZnVuY3M8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiB0aGUgYXVkaW8gSEFMIGZ1bmN0aW9ucy48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiB2b2lkKCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTUyYzRjYTIyZGIyMjFjMThjNTliOTJhZjhmY2ZjMzdmXCI+bWVzc2FnZV9jYjxcL2E+KShjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUsIHZvaWQgKnVzZXJfZGF0YSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DYWxsZWQgd2hlbiBhdWRpbyBoYWwgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gc2VuZCBhIG1lc3NhZ2UuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxwPjxzdHJvbmc+UGFyYW1ldGVyczo8XC9zdHJvbmc+XG46ICAgfCBbaW5dIHwgbmFtZSB8IFRoZSBtZXNzYWdlIG5hbWUgfFxufCAtLS0gfCAtLS0gfCAtLS0gfFxufCBbaW5dIHwgdmFsdWUgfCBUaGUgbWVzc2FnZSB2YWx1ZSB8XG58IFtpbl0gfCB1c2VyX2RhdGEgfCBUaGUgdXNlciBkYXRhIHBhc3NlZCBmcm9tIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZnVuY3Rpb24gfDxcL3A+XG48cD48c3Ryb25nPlNlZSBhbHNvOjxcL3N0cm9uZz5cbjogICBhZGRfbWVzc2FnZV9jYigpXG46ICAgcmVtb3ZlX21lc3NhZ2VfY2IoKTxcL3A+XG48aHIgXC8+XG48aDIgaWQ9XCJjb250ZW50LWVudW1lcmF0aW9uLXR5cGUtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1lbnVtZXJhdGlvbi10eXBlLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkVudW1lcmF0aW9uIFR5cGUgRG9jdW1lbnRhdGlvbjxcL2gyPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19BVURJT19fTU9EVUxFLm1kI2dhYTI4N2I0NTJiYmM0ZDgzNjk5YTU5NjUwMzhmZTZjYjZcIj5hdWRpb19kaXJlY3Rpb248XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBhdWRpbyBkaXJlY3Rpb24uPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfQVVESU8gMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+QVVESU9fRElSRUNUSU9OX0lOPFwvZW0+IHwgQ2FwdHVyZSB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5BVURJT19ESVJFQ1RJT05fT1VUPFwvZW0+IHwgUGxheWJhY2sgfDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5lbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUubWQjZ2E2YTE1NTQ3YTgzNDM3NzQzMzNmNGVjMTY1OWEyZDIyM1wiPmF1ZGlvX3JldHVybjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIHJldHVybiBjb2Rlcy48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPHA+PHN0cm9uZz5FbnVtZXJhdG9yOjxcL3N0cm9uZz5cbjogICB8IDxlbT5BVURJT19SRVRfT0s8XC9lbT4gfCBFcnJvciBub25lIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkFVRElPX0VSUl9VTkRFRklORUQ8XC9lbT4gfCBVbmRlZmluZWQgZXJyb3IgfFxufCA8ZW0+QVVESU9fRVJSX1JFU09VUkNFPFwvZW0+IHwgUmVzb3VyY2UgZXJyb3IgfFxufCA8ZW0+QVVESU9fRVJSX1BBUkFNRVRFUjxcL2VtPiB8IEludmFsaWQgcGFyYW1ldGVycyB8XG58IDxlbT5BVURJT19FUlJfSU9DVEw8XC9lbT4gfCBpb2N0bCBlcnJvciB8XG58IDxlbT5BVURJT19FUlJfSU5WQUxJRF9TVEFURTxcL2VtPiB8IEludmFsaWQgc3RhdGUgfFxufCA8ZW0+QVVESU9fRVJSX0lOVEVSTkFMPFwvZW0+IHwgSW50ZXJuYWwgZXJyb3IgfFxufCA8ZW0+QVVESU9fRVJSX05PVF9JTVBMRU1FTlRFRDxcL2VtPiB8IE5vdCBJbXBsZW1lbnRlZCB8PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fQVVESU9fX01PRFVMRS5tZCNnYTBiNGFmM2RmOGUzMmMzNDg5ZTM5ZjA4OWE4YWQxMzZmXCI+YXVkaW9fc3RhdGU8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBhdWRpbyBzdGF0ZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9BVURJTyAxLjA8XC9wPlxuPHA+PHN0cm9uZz5FbnVtZXJhdG9yOjxcL3N0cm9uZz5cbjogICB8IDxlbT5BVURJT19TVEFURV9PUEVOPFwvZW0+IHwgT3BlbiBzdGF0ZSB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5BVURJT19TVEFURV9TRVRVUDxcL2VtPiB8IFNldHVwIHN0YXRlIHxcbnwgPGVtPkFVRElPX1NUQVRFX1BSRVBBUkVEPFwvZW0+IHwgUHJlcGFyZWQgc3RhdGUgfFxufCA8ZW0+QVVESU9fU1RBVEVfUlVOTklORzxcL2VtPiB8IFJ1bm5pbmcgc3RhdGUgfFxufCA8ZW0+QVVESU9fU1RBVEVfWFJVTjxcL2VtPiB8IFBsYXliYWNrOnVuZGVycnVuLCBDYXB0dXJlOm92ZXJydW4gfFxufCA8ZW0+QVVESU9fU1RBVEVfRFJBSU5JTkc8XC9lbT4gfCBEcmFpbiBzdGF0ZSB8XG58IDxlbT5BVURJT19TVEFURV9QQVVTRUQ8XC9lbT4gfCBQYXVzZSBzdGF0ZSB8XG58IDxlbT5BVURJT19TVEFURV9TVVNQRU5ERUQ8XC9lbT4gfCBTdXNwZW5kIHN0YXRlIHxcbnwgPGVtPkFVRElPX1NUQVRFX0RJU0NPTk5FQ1RFRDxcL2VtPiB8IERpc2Nvbm5lY3RlZCBzdGF0ZSB8XG58IDxlbT5BVURJT19TVEFURV9VTktOT1dOPFwvZW0+IHwgVW5rbm93biBzdGF0ZSB8PFwvcD5cbjxociBcLz5cbjxwPkV4Y2VwdCBhcyBub3RlZCwgdGhpcyBjb250ZW50IC0gZXhjbHVkaW5nIHRoZSBDb2RlIEV4YW1wbGVzIC0gaXMgbGljZW5zZWQgdW5kZXIgPGEgaHJlZj1cImh0dHA6XC9cL2NyZWF0aXZlY29tbW9ucy5vcmdcL2xpY2Vuc2VzXC9ieVwvMy4wXC9sZWdhbGNvZGVcIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDMuMDxcL2E+XG5hbmQgYWxsIG9mIHRoZSBDb2RlIEV4YW1wbGVzIGNvbnRhaW5lZCBoZXJlaW4gYXJlIGxpY2Vuc2VkIHVuZGVyIDxhIGhyZWY9XCJodHRwczpcL1wvd3d3LnRpemVuLm9yZ1wvYnNkLTMtY2xhdXNlLWxpY2Vuc2VcIj5CU0QtMy1DbGF1c2U8XC9hPi48YnIgXC8+XG5Gb3IgZGV0YWlscywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cHM6XC9cL3d3dy50aXplbi5vcmdcL2NvbnRlbnQtbGljZW5zZVwiPkNvbnRlbnQgTGljZW5zZTxcL2E+LjxcL3A+XG4iLCJ0YWJsZV9vZl9jb250ZW50IjoiPHVsIGNsYXNzPVwidGFibGUtb2YtY29udGVudHNcIj5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtcmVxdWlyZWQtaGVhZGVyXCI+UmVxdWlyZWQgSGVhZGVyPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtb3ZlcnZpZXdcIj5PdmVydmlldzxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LXN0YXRlLWRpYWdyYW1cIj5TdGF0ZSBEaWFncmFtPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtc3RhdGUtdHJhbnNpdGlvbnNcIj5TdGF0ZSBUcmFuc2l0aW9uczxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWRhdGEtc3RydWN0dXJlLWRvY3VtZW50YXRpb25cIj5EYXRhIFN0cnVjdHVyZSBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvblwiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTFcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0yXCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tM1wiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTRcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi01XCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNlwiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC10eXBlZGVmLWRvY3VtZW50YXRpb25cIj5UeXBlZGVmIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1lbnVtZXJhdGlvbi10eXBlLWRvY3VtZW50YXRpb25cIj5FbnVtZXJhdGlvbiBUeXBlIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPFwvdWw+XG4iLCJ0aXRsZSI6IlRpemVuIEhBTCBBUEk6IEF1ZGlvIiwicmF3IjpudWxsfSx7ImNsYXNzIjoiQXBwXFxTZXJ2aWNlc1xcRG9jdW1lbnRhdGlvblxcRGF0YVxcUmVuZGVyZWRNYXJrZG93biIsInMiOiJ3cmJsIn1dfSx7InMiOiJhcnIifV19LCJtZW1vIjp7ImlkIjoiZDJ2Vzd2V2pUaU4zVnRqSTN1akoiLCJuYW1lIjoiX19tb3VudFBhcmFtc0NvbnRhaW5lciIsInBhdGgiOiJkb2NzXC9wbGF0Zm9ybVwvaGFsXC9hcGlcLzEuMC4wXC9ncm91cF9fSEFMQVBJX19IQUxfX0FVRElPX19NT0RVTEUiLCJtZXRob2QiOiJHRVQiLCJyZWxlYXNlIjoiYS1hLWEifSwiY2hlY2tzdW0iOiI1NTVkN2VhN2NhZGU2NDk2ZTI1MzJlMDE5OGI4NDQ3MDNlN2UzYjgxNDQxN2QxZjEwOWMyYmYzNTUwMzY4YTZmIn0=')" >