Implements an image recognition captcha.

"; break; case 'admin/modules#description': case 'admin/modules/textimage': case 'admin/textimage': $output = t('Implements an image recognition captcha.'); break; } return $output; } function textimage_captchachallenge(&$form) { $form['captcha_response'] = array ( '#type' => 'textfield', '#title' => t('Captcha Validation'), '#default_value' => '', '#required' => TRUE, '#validate' => array('_captcha_validate' => array()), '#description' => t('Please type in the letters/numbers that are shown in the image above.'), '#prefix' => 'Captcha Image: you will need to recognize the text in it.', ); return $form; } function textimage_captchavalidate(&$captcha_word, &$correct) { $captcha_word = drupal_strtolower($captcha_word); if (($_SESSION['captcha'] != '') && $captcha_word == $_SESSION['captcha']) { $correct = true; } else { $correct = false; form_set_error('captcha_response', t('The image verification code you entered is incorrect.')); } } /** * Implementation of hook_menu(). */ function textimage_menu($may_cache) { $items = array(); $suffix = ''; if (arg(2)!=null) $suffix='/'.arg(2); $items[] = array( 'path' => '_textimage/image'.$suffix, 'title' => t('textimage'), 'callback' => '_textimage_image', 'access' => user_access('access textimages'), 'type' => MENU_CALLBACK ); return $items; } function textimage_perm() { return array('access textimages'); } function textimage_settings() { $fonts_path = variable_get("textimage_fonts_path", ""); $images_path = variable_get("textimage_images_path", ""); //check for GD if (!function_exists(imagecreate)) drupal_set_message(t('Image library not available. Textimage needs the GD library extension to be installed. Please install GD.')); //check for TTF support elseif (!function_exists(imagettftext)) drupal_set_message(t('Your image library does not seem to have TrueType font support. Textimage will work, but will use the default inbuilt font.'),'status'); //check for valid font path elseif ($fonts_path!="" && !is_dir($fonts_path)) drupal_set_message(t('The current font path is invalid. The default font will be used.')); //check for valid image path if ($images_path!="" && !is_dir($images_path)) drupal_set_message(t('The current images path is invalid. No images will be used.')); //Fonts settings $form['fonts'] = array( '#type' => 'fieldset', '#title' => t('Fonts settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['fonts']['textimage_use_only_upper'] = array( '#type' => 'checkbox', '#title' => t('Use only Uppercase'), '#default_value' => variable_get('textimage_use_only_upper',0) ); $form['fonts']['textimage_fonts_path'] = array( '#type' => 'textfield', '#title' => t('TrueType Fonts Path'), '#default_value' => $fonts_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the Truetype (.ttf) fonts are stored. If you do not provide any fonts, the module will use the default font for text. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['fonts']['textimage_font_size'] = array( '#type' => 'textfield', '#title' => t('Font Size'), '#default_value' => variable_get('textimage_font_size',24), '#size' => 5, '#maxlength' => 2, '#description' => t('Font size of Captcha text (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_font_size")), ); $form['fonts']['textimage_char_spacing_max'] = array( '#type' => 'textfield', '#title' => t('Character Spacing'), '#default_value' => variable_get('textimage_char_spacing_max',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the kerning between letters in Captcha. Higher numbers indicate more spacing.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_spacing_max")), ); $form['fonts']['textimage_char_jiggle_amount'] = array( '#type' => 'textfield', '#title' => t('Character Jiggle'), '#default_value' => variable_get('textimage_char_jiggle_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of up and down movement in the Captcha letters. Higher numbers indicate more jiggling.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_jiggle_amount")), ); $form['fonts']['textimage_char_rotate_amount'] = array( '#type' => 'textfield', '#title' => t('Character Rotation'), '#default_value' => variable_get('textimage_char_rotate_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of rotation in the Captcha letters (in degrees, only works with non-default fonts).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_rotate_amount")), ); $form['fonts']['textimage_char_size_amount'] = array( '#type' => 'textfield', '#title' => t('Character Size Adjustment'), '#default_value' => variable_get('textimage_char_size_amount',2), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of variation in size between the different letters in the Captcha (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_size_amount")), ); //Image settings $form['images'] = array( '#type' => 'fieldset', '#title' => t('Image settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['images']['textimage_images_path'] = array( '#type' => 'textfield', '#title' => t('Background Images Path'), '#default_value' => $images_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the background images are stored. If you do not provide a directory, solid colors will be used. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['images']['textimage_image_noise'] = array( '#type' => 'textfield', '#title' => t('Image Noise (pixels)'), '#default_value' => variable_get('textimage_image_noise',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random pixels) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_noise")), ); $form['images']['textimage_image_lines'] = array( '#type' => 'textfield', '#title' => t('Image Noise (lines)'), '#default_value' => variable_get('textimage_image_lines',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random lines) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_lines")), ); $form['images']['textimage_image_margin'] = array( '#type' => 'textfield', '#title' => t('Image Margin'), '#default_value' => variable_get('textimage_image_margin',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Set a distance between the Captcha letters and the edges of the image.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_margin")), ); $form['info'] = array( '#type' => 'fieldset', '#title' => t('Image and font information'), '#collapsible' => TRUE, '#collapsed' => FALSE ); if (isset($fonts_path)) { $imagefontinfo .= t('Number of fonts found: ').count(_textimage_font_list()); } if (isset($images_path)) { $imagefontinfo .= '
'.t('Number of background images found: ').count(_textimage_image_list()); } $gdinfo = gd_info(); $imagefontinfo .= '
'.t('GD Version: ').$gdinfo["GD Version"]; $imagefontinfo .= '
'.t(' FreeType Support: '); $imagefontinfo .= ($gdinfo["FreeType Support"]==true) ? 'True' : 'False'; $imagefontinfo .= '
'; $form['info']['captcha_info'] = array ( '#type' => 'item', '#value' => $imagefontinfo, ); return $form; } function textimage_settings_form_validate ($form_id,$form) { //check for valid font path if ($form['textimage_fonts_path'] !="" && !is_dir($form['textimage_fonts_path'])) form_set_error('textimage_fonts_path', t('The entered font path is invalid')); //check for valid image path if ($form['textimage_images_path'] !="" && !is_dir($form['textimage_images_path'])) form_set_error('textimage_images_path', t('The entered image path is invalid')); } function _textimage_number_validate ($field,$fieldName) { if (!is_numeric($field['#value'])) { form_set_error($fieldName,t("The value for")." ".t($field['#title'])." ".t("must be a number")); } } /** * Prints an image containing a textimage code. */ function _textimage_image() { //if we don't have GD2 functions, we can't generate the image if (!function_exists('imagecreatetruecolor')) return; // Set headers header('Expires: Mon, 01 Jan 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-type: image/png'); $string = _textimage_code(); // Get truetype font list $fonts = _textimage_font_list(); // Get the background images list $images = _textimage_image_list(); // Randomization amounts: $charSpacingMax = variable_get('textimage_char_spacing_max',10); // Letter spacing max (pixels) $charSpacingMin = max($charSpacingMax*.5,0); // Letter spacing minimum (pixels) $charJiggleAmount = variable_get('textimage_char_jiggle_amount',5); // Up and down randomization (pixels) $charRotateAmount = variable_get('textimage_char_rotate_amount',5); // Character rotation amount (degrees) $charSizeAmount = variable_get('textimage_char_size_amount',2); // Character size amount (pixels) $imageRotateAmount = variable_get('captcha_image_rotate_amount',12); // Image rotation amount (degrees) // Static amounts: $charInitialSize = variable_get('textimage_font_size',24); // Initial Font $imageNoise = variable_get('textimage_image_noise',4); // Amount of noise added to image $imageLines = variable_get('textimage_image_lines',4); // Amount of noise added to image $imageMargin = variable_get('textimage_image_margin',10); // Margin around image (pixels) // write text using a truetype font if (function_exists(imagettftext) && count($fonts) > 0) { // Initialize variables for the loop $characterDetails = array(); // contains the final info about each character // Build a list of character settings for the captcha string for ($i=0;$i $charSize, "angle" => $charAngle, "x" => $x, "y" => $y, "color" => $foreground, "font" => $font, "char" => $char ); // Increment the image size $imageWidth = $x + $charWidth; $imageHeight = max($imageHeight,$y+$charJiggleAmount); } // Create the image based off the string length and margin if (count($images) > 0) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Specify colors to be used in the image $foreground = imagecolorallocate($im, rand(0, 80), rand(0, 80), rand(0, 80)); foreach($characterDetails as $char) { // draw character imagettftext($im,$char['size'],$char['angle'],$char['x']+$imageMargin,$char['y']+$imageMargin,$foreground,$char['font'],$char['char']); } } else { // write text using a built-in font $x = 0; $y = 0; $imageWidth = 60 + drupal_strlen($string)*$charSpacingMax*.35; $imageHeight = 30 + $charJiggleAmount; // Create the image if (count($images) > 0 && function_exists(imagecolorallocatealpha)) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth, $imageHeight); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth, $imageHeight); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Add the text for ($i=0;$i 0) { // Prepare a larger image with a background image $im2 = _textimage_create_transparent_image($imageWidth, $imageHeight); } else { // Prepare a larger image with a solid color $im2 = imagecreatetruecolor($imageWidth, $imageHeight); imagefill($im2, 0, 0, $background); } $result = imagecopyresampled ($im2, $im, $imageMargin, $imageMargin, 0, 0, $imageWidth, $imageHeight, imagesx($im), imagesy($im)); $im = $im2; } // strikethrough imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $foreground); // Add Noise for ($x=0; $x<$imageWidth; $x++) { for ($row=0; $row<$imageNoise;$row++) { $y = rand(0,$imageHeight); imagesetpixel($im, $x, $y, $noisecolor); } } // Add Lines and Ellipses for ($x=0; $x<$imageLines;$x++) { imageline($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); imageellipse($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); } // Fill image with a random background image if available if (count($images) > 0) { $image = $images[rand(0,count($images)-1)]; _textimage_apply_background_image($im,$image); } //output to browser imagepng($im); imagedestroy($im); } /** * Returns a random string for use in a captcha */ function _textimage_code() { $consts='bcdgjxvmnprst'; $vowels='aeiou'; for ($x=0; $x < 6; $x++) { mt_srand ((double) microtime() * 1000000); $const[$x] = drupal_substr($consts,mt_rand(0,drupal_strlen($consts)-1),1); $vow[$x] = drupal_substr($vowels,mt_rand(0,drupal_strlen($vowels)-1),1); } $string = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4]; $string = drupal_substr($string,0,rand(4,6)); //everytime we create a new code, we write it to session $_SESSION['captcha'] = drupal_strtolower($string); if(variable_get('textimage_use_only_upper',0)) $string = drupal_strtoupper($string); return $string; } /** * Returns an array of files with TTF extensions in the specified directory. */ function _textimage_font_list() { $fontdir = variable_get("textimage_fonts_path", ""); $filelist = array(); if (is_dir($fontdir) && $handle = opendir($fontdir)) { while ($file = readdir($handle)) { if (preg_match("/\.ttf$/i",$file) == 1) $filelist[] = $fontdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Returns an array of files with jpg, png, and gif extensions in the specified directory. */ function _textimage_image_list() { $imagesdir = variable_get("textimage_images_path", ""); $filelist = array(); if (is_dir($imagesdir) && $handle = opendir($imagesdir)) { while ($file = readdir($handle)) { if (preg_match("/\.gif|\.png|\.jpg$/i",$file) == 1) $filelist[] = $imagesdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Overlays an image to the supplied image resource */ function _textimage_apply_background_image (&$imageResource,$imageFile) { $backgroundResource = image_gd_open($imageFile,substr($imageFile,-3)); // Copy the text onto the background $backX = imagesx($backgroundResource); $backY = imagesy($backgroundResource); $textX = imagesx($imageResource); $textY = imagesy($imageResource); $randomBackX = rand(0,$backX-$textX); $randomBackY = rand(0,$backY-$textY); // Place the text onto a random location of the background image imagecopyresampled($backgroundResource,$imageResource,$randomBackX,$randomBackY,0,0,$textX,$textY,$textX,$textY); // Crop the background image to the original image size imagecopyresampled($imageResource,$backgroundResource,0,0,$randomBackX,$randomBackY,$textX,$textY,$textX,$textY); } /** * Creates transparent image resources for images with graphic backgrounds */ function _textimage_create_transparent_image($x, $y) { $i = imagecreatetruecolor($x, $y); $b = imagecreatefromstring(base64_decode(_text_image_blankpng())); imagealphablending($i, false); imagesavealpha($i, true); imagecopyresized($i, $b ,0 ,0 ,0 ,0 ,$x, $y, imagesx($b), imagesy($b)); return $i; } function _text_image_blankpng() { $c = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m"; $c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg"; $c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN"; $c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ"; $c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA"; $c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII="; return $c; } ?> Odesskiy Listok | Ежемесячная газета для всех кто любит и помнит Одессу<br>Телефоны редакции: (415) 305-3456, (310) 904-3501, (303) 669-1526

user warning: Table './odessapage/cms_sessions' is marked as crashed and last (automatic?) repair failed query: SELECT COUNT(sid) AS count FROM cms_sessions WHERE timestamp >= 1603980113 AND uid = 0 in /home/hepa/public_html/new/includes/database.mysql.inc on line 121.

Бухгалтерские страсти

Это было во Фрунзе, где в годы войны я оказалась в эвакуации. В один из весенних дней 1943 года я, надев на голову голубую, бархатную, довольно потертую шляпку довоенного покроя, пошла в отделение милиции при рынке, чтобы разыскать свою фанерную корзинку. Дело в том, что я торговала тыквой на Фрунзенском базаре. После облавы на рынке и моего побега из каталажки, куда меня привели два милиционера, я осталась без работы, а семья моя, естественно, без денег.
В приемной никого не было, и я пошла прямо к начальнику. Он узнал меня и спросил:
- Уж не ты ли та девочка, которая убежала, бросив здесь свою чудо-корзинку?
Я увидела ее на подоконнике.
- Да, - говорю, - товарищ начальник. Это я самая.
Он пригласил меня присесть. Ему было далеко за сорок. Он смотрел то на мое молодое личико, то на голубую шляпку-«бабочку», которую я напялила, чтобы придать себе солидности. Пальто на мне, сшитое мамой из байкового одеяла, было канареечного цвета. Чистый попугай. Из-под «бабочки» на пальто свисали две черные косички.
Вдруг начальник спросил:
- Хочешь работать?
- Да, конечно, но кто меня возьмет? Я окончила только 8 классов.
- Ты комсомолка?
- Конечно! - с гордостью ответила я.
- Ты пишешь грамотно? Умеешь печатать на машинке?
- Нет, печатать не умею, но пишу грамотно.
Стал он звонить по многим учреждениям, спрашивая, есть ли работа для подростка. В ответ: все «нет» да «нет». Потом позвонил в райком комсомола. Долго говорил, объяснял что-то. Закончил разговор так:
- Давайте попробуем. Я все, все помню.
Не скажу, что лицо его выглядело радостным.
- Леночка! Ты молодая, хорошенькая и сообразительная девчонка. Не дело тебе торговать на рынке. Надо учиться и работать. Когда кончится война, будет другая жизнь, отменят карточки. В райком поступила заявка – просят прислать молодую девушку на должность... - Он помолчал и выпалил: - На должность личного секретаря наркома коммунального хозяйства Киргизии Иркена Муратова.
Я смотрела на него, а он на меня. Это я-то – личный секретарь наркома?! Недаром начальник сказал: «давайте попробуем». А что значит: «Я все, все помню»?..
Я, чуть-чуть обалдевшая, изобразила серьезную мину, которая приличествует «личному секретарю». Начальник от души расхохотался и сказал:
- Пожалуйста, выбрось эту ужасную голубую тряпку, которая кажется тебе шляпой. Из длинных волос сделай прическу, а пальто подари соседке. Завтра утром пойди в райком за направлением. Тебе там все объяснят.
Забрала я на память свою чудо-корзинку, и мы с ним сердечно попрощались.
- Зайди ко мне, если что-нибудь не так. У меня дочь твоего возраста, и я очень хочу тебе помочь.
Утром я пошла в райком. Старшая сестра дала мне свою красивую кофточку, причесала меня прилично. А мне так нравилась моя бархатная шапочка…
В райкоме комсомола меня рассматривали буквально все, будто собирались отправить меня на продажу и определяли цену. Некоторые, не стесняясь, говорили: «Жалко девочку». Секретарь райкома, молодой человек, рассказал мне, что Иркен Муратов – человек крутого нрава. Больше месяца никто не смог работать с ним. Последняя секретарша, Лиза, окончив курсы радисток, уехала на фронт.
Мне выписали «комсомольскую путевку» и напутствовали:
- Будь осторожна, береги себя.
Все начало казаться мне странным. Ведь меня посылали работать в наркомат, а не разведчицей в тыл врага.
Срочно были куплены на толкучке приличное платье и туфли на каблучках. Волосы я заплетала в одну косу. Во Фрунзе на центральной площади был большой 4-этажный дом. Там располагались наркоматы. На следующий день к 9 часам утра я пришла на работу.
Длинный широкий коридор прямо от входной двери и во всю длину был устлан красивой ковровой дорожкой. По бокам – много дверей с названиями отделов. Видела я это впервые в жизни. Иду медленно и читаю. Вот и «Отдел кадров», куда мне следует обратиться. Захожу. Много письменных столов. За одним из них, под табличкой «Начальник», сидит седовласый в летах мужчина с интеллигентным лицом – Коваль Олег Анатольевич.
Все бросили свои бумажки и уставились на меня. Коваль прочел мою «путевку», куда-то позвонил и говорит:
- Идемте со мной. Нарком сейчас в Москве на совещании. Я хочу представить вас его заместителю – Юдахину Ивану Федоровичу.
Пошли мы в самый конец коридора. На двери – надпись «Приемная». Бог мой! В большой комнате – красивый письменный стол с телефонами, штук 10, не меньше. Над столом – табличка: «Личный секретарь». Справа – столик с пишущей машинкой. На полу – ковер, у стен – кресла, в бочонках – пальмы под потолок. Ну и ну! Это мое рабочее место.
Коваль спрашивает:
- Можно называть вас Еленой?
- Конечно!
Направо – высокая дубовая дверь, на которой золотыми буквами по черному стеклу: «Нарком коммунального хозяйства Киргизии Герой Социалистического труда Иркен Муратов». Налево дверь с надписью: «Заместитель наркома Иван Федорович Юдахин». Заходим. Юдахин протягивает руку и приглашает сесть. Невысокого роста, русый и голубоглазый, лет сорока пяти, лицо приветливое. Стал он расспрашивать о моей семье, откуда я и т.д. Говорю ему сразу:
- На машинке печатать я не умею.
- Ничего, Елена. Научитесь. Это не главное.
Потом попросили меня выйти. Вроде Юдахин остался мной доволен.
Олег Анатольевич повел меня в склад в подвале. Мне дали ящик (!) мыла, новые матрасные наволочки, несколько хороших шерстяных одеял и еще всякой всячины для продажи на толкучем рынке. На вырученные деньги нужно было приобрести приличную одежду. В бухгалтерии мне оформили аванс. Вышла я счастливая, взяла такси и отвезла все домой.
Коваль сказал:
- Елена! Нарком вернется из Москвы через неделю. Помни, ты должна быть украшением приемной. Будь предельно вежлива с посетителями. К нам приезжают большие начальники со всей Киргизии и из других республик, ежедневно приходят наркомы. У тебя есть неделя для ознакомления с работой. Завтра в 8.45 ты должна уже быть здесь.
Я пришла вовремя.
Не успела я занять свое место, как работники из всех отделов начали заходить в приемную. Почему-то лица у многих были враждебные. Одни говорили: «Она лучше Лизы». Другие: «Бедняжка!» А одна пожилая скромная с виду женщина, глядя прямо мне в лицо, сказала: «Несчастная». Какой-то нахальный «тип» отчеканил: «королева № 2».
Сопоставляя все слышанное в милиции, райкоме и наркомате, я чувствовала, что это как-то взаимосвязано. Существует какая-то тайна, пока мне не известная.
Уже с утра начались телефонные звонки. Безостановочно и ежеминутно. Я снимала все трубки подряд (черт его знает, какой из телефонов звонит). Часто говорили по-киргизски, но я, как попугай, отвечала «да» или «нет» и «через неделю». К полудню в «моей» приемной были заняты все кресла и диваны. Какие-то важные дяди приходили посмотреть: кто же теперь восседает за этим столом. Они просто сидели и глазели. Говорили между собой по-киргизски, хотя все знали русский. Часто произносилось имя «Лиза».
Я пришла к выводу, что если мне сказали «королева № 2», значит, была «королева № 1» и, скорее всего, – это пресловутая Лиза. Кто же был король? Конечно, Иркен Муратов! И я нарисовала в своем воображении восточного красавца…
Выглядела я отлично: шелковая, вишневого цвета блузка и короткая черная юбка смотрелись на мне очень элегантно. Я слегка подкрасила губы и сделала маникюр, длинные и острые ноготки были покрыты розовым лаком. Мужчины-киргизы как-то по особому прищелкивали языком. Я видела, что им нравлюсь. Однако я их с трудом отличала – все похожи друг на друга. На моем столе лежал плотный лист с именами и фамилиями всех наркомов и их заместителей, а также номерами телефонов. Запомнить это было просто невозможно. Я ставила «галочки» против фамилий, которые они называли. Уже через несколько дней начались подношения: цветы, духи, конфеты.
Коваль заходил ко мне много раз в день. Почему-то он очень волновался. Несколько раз вызывал меня Юдахин. Он смотрел на меня, как на козленка, которого должен съесть волк. Сотрудники наркомата ко мне не обращались вовсе. А я хотела увидеть короля и считала дни…
За несколько дней до воскресенья в наркомате начался аврал. Оставив работу, начали чистить и мыть все кабинеты. Впервые я увидела кабинет Иркена Муратова. Огромный яркий ковер покрывал весь пол. Вдоль стен – шкафы с диковинными кубками, графинами, хрусталем и серебром. Ни одного книжного шкафа. Кабинет напоминал покои персидского шаха. Письменный стол казался неуместным. За столом стояло кресло – ну прямо-таки трон с высокой спинкой.
Убирали в кабинете самые ответственные работники наркомата. Мне же доверили уборку в кабинете зама Ивана Федоровича. Мы с ним дружно работали. Он помогал мне двигать кресла и т.д. Между делом он говорил:
- Елена! Нарком – человек непростой. Он очень гордый и настойчивый. Никто не смеет возражать ему, он позволяет себе быть грубым…
Настал понедельник. Юдахин на работу не пришел. Все сотрудники вышли из кабинетов и выстроились по обе стороны коридора у стен. Все двери – открыты настежь. Наступила гнетущая тишина. Часы пробили 9.
Я ждала, стоя за своим столом. И вот в наркомат вошел Король! Медленно двинулся он вдоль коридора, никому не сказав слов приветствия. С замиранием сердца я слушала его приближающиеся шаги. Вот он переступил порог приемной. Ходячая доска проследовала мимо меня. «Не повернув головы кочан», он зашел в свой кабинет. Захлопали двери, все разошлись по рабочим местам. Люди начали дышать.
Я видела его лишь несколько минут, но этого было достаточно. Высокий и худой. Большое, плоское, как тарелка, лицо изъедено оспой. Глаза – раскосые и такие узкие, что трудно поверить, что он зрячий. Нос приплюснут. Уши, длиннее, чем надо бы, какие-то мягкие, без хрящей, свисали по обе стороны щек. Но что меня поразило, так это огромный бритый наголо череп. Голова монстра, на которую страшно смотреть. Я села на стул. Теперь многое прояснялось, как на фотопленке, опущенной в раствор. Вспомнилось слово «несчастная». Так вот ты какой – Иркен Муратов!
Тут же раздался звонок. Я стала искать свой блокнот и карандаш, это заняло 1-2 минуты. Ноги меня не слушались. Я вошла в кабинет. На наркоме был китель военного образца без погон. На левой стороне груди – золотая звезда Героя.
- Юдахина и Коваля ко мне! - каркнул Муратов.
Я выскочила и побежала к Ковалю.
- Олег Анатольевич! Вас приглашает Муратов, а Юдахина нет вообще.
- Не волнуйся, Елена. Юдахин заболел.
Так произошло наше первое знакомство.
В этот день приемная была пуста. Телефоны молчали.

***
Начались рабочие дни. Утром я заходила в кабинет с блокнотом, и нарком называл людей и время, когда они должны явиться к нему. Так как говорил он быстро и с акцентом, то я не успевала записывать. Попробуй, отличи Канышбаева от Кашныбаева или Касымова от Намысова. Я все путала, и приходили к нему вовсе не те, которых он ожидал. Он вручал мне бумаги и требовал немедленно их отпечатать, а я печатала одним пальцем и долго искала букву «о» или букву «ж». Коваль, золотой человек, забирал эти бумаги и относил их в машинописное бюро.
Наконец, появился Юдахин. На его немой вопрос я дала немой ответ, скорчив ужасную рожу.

***
В субботу вызвал меня «хозяин», как его величали за глаза.
- Завтра я буду работать. Приходите к 5 часам вечера. Все.
Я вышла. Можно ли его ослушаться?! Он ни разу не назвал меня по имени, ни разу не поздоровался, но, видимо, через свои глаза-щелки хорошо меня разглядел. Хоть и была я очень молода, но два года войны меня многому научили. Сватался ко мне узбек Кадыр, хотела заманить меня в сети и переправить за границу в Иран или Персию женщина из очереди за хлебом. Я помнила все предостережения в райкоме и т.д. В случае нападения я была готова к обороне. Не дурочка же я, в конце концов. Чувства страха перед образиной я не испытывала. Берегись, Муратов!
Я пришла к 5 часам вечера в наркомат. Зашла в кабинет, поздоровалась и приготовилась писать. Иркен не сидел у стола, а ходил взад-вперед по кабинету. Вдруг он схватил меня поперек туловища и сильным толчком пригвоздил к дивану. В эту же секунду раздался дикий вопль – все мои десять острых, как ножи, ноготков от лба до подбородка прорезали его изъеденную оспой рожу. Он схватился руками за окровавленное лицо, меж пальцами сочилась кровь, а я, поджав ноги к животу, резко выпрямила их, угодив каблуками в мужское естество между ног. Он вторично взвыл от боли звериным криком, отняв руки от лица. Теперь он держал их ниже живота. Куда делось его величие?!
Крикнув в ярости: «Скотина, негодяй» и кое-что похлеще, я стрелой вылетела за дверь, схватила сумку, и – бегом на улицу. Мои пальцы были в крови, а из-под ногтей лохмотьями свисали куски содранной с его лица кожи.

***
В понедельник я, как обычно, пришла на работу. А Муратов – нет. Он никогда не опаздывал, но вот уже пробило 12, а он не появился.
Пришел мой ангел-хранитель Олег Анатольевич. Мы уединились, и я ему, как на духу, все рассказала. Слушал он меня молча, не комментируя. Потом сказал:
- Молодец, девочка. После заболевания натуральной оспой, которую он перенес, кожа на лице становится очень тонкой и чувствительной, так что он не скоро придет в себя. Ты причинила ему ужасную боль. Поделом этому мерзавцу.
Я просила уволить меня немедленно, но он сказал: «Не могу».
Вот что рассказал мне Коваль.
Много молодых женщин изнасиловал Иркен. Жалобы были бесполезны. Он их увольнял. Ему все сходило с рук. Но вот однажды оформили на эту должность молодую красивую Лизу. Ей было 25 лет. Опытная, умная и способная секретарша. Никто не знал, как и когда стали они близки. Они ладили между собой. Через некоторое время Лиза стала персоной № 1. Она решала многие важные вопросы работы наркомата самостоятельно. Лиза вызывала людей по своему усмотрению, делала им выговоры, давала указания. Ни одна женщина из других наркоматов не допускалась в кабинет Иркена. Она позволяла себе орать на сотрудников. Ее все боялись и меж собой называли ее «королевой». Порой они с Иркеном исчезали на несколько дней, и только в эти дни люди дышали свободно. Каждый месяц Лиза получала денежные премии. Вопросы приема и увольнения теперь решал не отдел кадров, а «королева». По ее требованию ее теперь называли Елизаветой Михайловной, и горе тому, кто об этом забывал.
Но… всему приходит конец. Лиза, то бишь Елизавета Михайловна, забеременела. А у Иркена были жена и много детей. Разводиться он не собирался. От Лизы он откупился большими деньгами. «Королева» сделала аборт, уволилась, окончила трехнедельные курсы радисток и попросилась на фронт. Наркомат осиротел и… возликовал.
Вот на какой трон взошла я. Теперь стали ясны слова «несчастная» и «королева № 2».

***
Не знаю, как, но скоро об этом происшествии знали все. Благодарили за «дополнительный отпуск».
Коваль пригласил меня в отдел кадров:
- Елена! Звонил нарком.
- Вы меня увольняете, - возликовала я.
- Нет! Он потребовал повысить вас в должности, а так как у нас есть только одно вакантное место, то с завтрашнего дня вы будете работать старшим бухгалтером по бюджету.
Я обалдела.
- Но, товарищ Коваль! Я окончила только 8 классов и могу считать до ста, а также знаю таблицу умножения. И все.
- Я не могу ослушаться приказа наркома. Вы справитесь. Главный бухгалтер Сима Семеновна вам поможет.
Когда мы остались одни, Коваль сказал мне:
- Не глупите. У вас будет прекрасная зарплата, продовольственные карточки и премии.
- Олег Анатольевич! Я знаю понаслышке только слова «дебет», «кредит», «аванс» и «баланс», да еще «сальдо», но понятия не имею, что это значит.
- Ладно, Елена! Приходи утром в бухгалтерию.
Несколько дней никто не мог работать – обсуждался приказ о моем переводе на высокую должность, а на нее претендовали квалифицированные бухгалтеры. Потом до меня дошли слухи, что Иркен сказал:
- Я ее все равно сломаю. Пусть будет на глазах. Эта птичка от меня не упорхнет.

***
Центральная бухгалтерия – как ее величали – представляла собой большущий зал со множеством рабочих столов. Щелкали счеты, трещали арифмометры, которые я увидела впервые в жизни, печатали на машинках. Вдоль самой длинной стены стояли столы с ячейками, в каждой – бланки-карточки. Это картотека – душа и сердце бухгалтерии. Над каждой ячейкой – номер.
Сима Семеновна начала объяснять мне, чем занимается наркомат коммунального хозяйства. Я о таком даже не подозревала. По ее словам выходило, что каждый гвоздик и молоток, каждая подушка и матрас, а также все столы, стулья, лампы, кресла, диваны, школьные парты, кровати в гостиницах, дорожки и ковры, ну, в общем, все имущество пронумеровано и периодически подвергается инвентаризации. Даже картины на стенах, вазы, кастрюли в столовых учитываются. Наркомат распределяет все это по заявкам с мест, принимает отчеты и списывает старое.
Короче – новый мир открывала для меня Сима Семеновна. Но все это было так скучно и нудно. Она понимала, что я ни бельмеса не смыслю в бухгалтерии. Умная женщина, та самая, которая сказала «несчастная», увидев меня в приемной, поручила мне самую легкую работу – разноску по счетам.
Потом она поймет, какую роковую ошибку допустила.
Каждое утро на мой рабочий стол складывали сотни накладных. Нужно было найти соответствующую ячейку в картотеке и вписать, сколько получено или списано материалов, в карточку. Лесоматериалы – в кубометрах. Гвозди – в тоннах. Подушки – в штуках. Расход – красным карандашом, а приход – черным, и на какую сумму. Ходила я вдоль картотеки, все мелькало в моих глазах, и, конечно, я ничего не могла найти. А накладных на моем столе все прибавлялось.
Я решила дело упростить. Поднимала карточку из ячейки и вписывала все подряд: простыни к гвоздям, люстры к кранам, матрасы к партам, а ковры к сковородкам. Табуретки плюсовала к бочкам, кастрюли – к телефонным аппаратам. Я где-то в душе чувствовала, что вношу путаницу, но зато дело продвигалось быстро. Карандаши я меняла по настроению. Попишу 10 минут красным, а потом 15 минут черным. Приход или расход – какая разница. К концу дня нужно было заполнить сводку: сколько чего списано, сколько оприходовано и сумму. Дали мне арифмометр. Я набирала рычажком цифры – какие хотела. Потом крутила ручку: три раза вперед, один – назад. В другой раз – наоборот: два раза на себя, один – от себя. Появлялся результат. Я его вносила в сводку и радостная уходила домой.
Сима Семеновна не могла мною нахвалиться, как попадья Балдой из сказки Пушкина.
- Какая смекалка у девочки, ну, просто прирожденный бухгалтер.
Итак, я проработала две недели секретарем и одну неделю в бухгалтерии. За эту неделю я такого им насчитала, такого натворила в 20 тысячах наименований, прибавляя отвертки к керосиновым лампам, завязала такой узел, что распутать его стало немыслимо. Да! Это был большой грех! А разве не грешно старой облезлой образине в должности наркома пытаться овладеть силой молодой личной секретаршей?
Я работала быстро и с улыбкой, а наркомат распутывал мои штучки медленно и мучительно. Надо было уносить ноги. Больше меня там не видели. Я целыми днями сидела у подружки и штудировала учебники для поступления в институт.
Когда стали подбивать бабки, то натолкнулись на такое, что начали срочно изучать картотеку. Квартальный отчет сорвали. Разоблачив мою «смекалистую» разноску, наркомат был в шоке. Сима Семеновна заболела. «Кредит» не сходился с «дебетом», а «сальдо» (до сих пор не знаю, что это значит) с «балансом». Нужно было заводить новую картотеку, новые карточки, поднять сотни накладных и заново их обработать. Наняли трех бухгалтеров, чтобы поставить все на свои места. Годовой отчет сдали только в июле следующего года. Вот что значит поработать одну неделю «старшим бухгалтером по бюджету». Все это рассказала мне сотрудница бухгалтерии, которую я встретила случайно спустя год. Она удивилась, что я жива. Столько проклятий было адресовано моей «смекалистой» голове.
Иркен Муратов перешел в Совнарком на повышение. Юдахин стал наркомом. Меня не ругали только он и Коваль. Теперь меня заочно называли «королевой бухгалтерского учета».
Надолго запомнили в наркомате «королеву № 2».


Ответ

Содержимое этого поля хранится скрыто и не будет показываться публично.
  • Допустимые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <br> <tr> <td> <table>
  • Строки и параграфы переносятся автоматически.
  • Images can be added to this post.
Больше информации о возможностях форматирования