





     Министерство приборостроения, средств автоматизации

                    и систем управления



                Операционная система МОС ВП



             Подсистема системного программиста

            ПРОГРАММА ОПРЕДЕЛЕНИЯ ДИСКОВЫХ КВОТ

                 Руководство пользователя



                     Лист утверждения

                  2б.00152-01 92 13-ЛУ

                         Листов 2



                 Представители предприятия-разработчика:

                        Руководитель темы

                        Зам. директора

                        _____________ С.Н.Хрущев

                        "__"_________ 1987 г.

                        Ответственный исполнитель темы

                        Зав. отделением

                        _____________ Г.П.Остапенко

                        "__"_________ 1987 г.

                        Зав. отделением КО ИНЭУМ

                        _____________ И.И.Макаров

                        "__"_________ 1987 г.





Перв. примен.              1987                Литера
2б.00152-01


                          - 2 -

                  2б.00152-01 92 13-ЛУ








                        Ст. инженер

                        ______________ С.С.Кутлина

                        "__"__________ 1987 г.

                        Нормоконтролер

                        ______________ В.А.Скворцов

                        "__"__________ 1987 г.









Утвержден
2б.00152-01 92 13-ЛУ













                Операционная система МОС ВП



             Подсистема системного программиста



             ПРОГРАММА ОПРЕДЕЛЕНИЯ ДИСКОВЫХ КВОТ



                 Руководство пользователя





                    2б.00152-01 92 13



                        Листов 19/4К



                                                     











                           1987

Перв. примен.                                     Литера
2б.00152-01























                Операционная система МОС ВП



             Подсистема системного программиста



             ПРОГРАММА ОПРЕДЕЛЕНИЯ ДИСКОВЫХ КВОТ



                 Руководство пользователя





                       00152-01 92 13



                         Листов 15















                           1987






                          - 2 -

                      00152-01 92 13






                     АННОТАЦИЯ



     Настоящий документ предназначен для  пользователей  с

целью изучения возможностей программы определения дисковых

квот DISKQUOTA.

     В документе содержится описание программы  DISKQUOTA,

которая является системным средством, доступным любой  ка-

тегории  пользователей,  и  используется   для   выделения

пользователям пространства на дисковом томе.

     В документе приводятся общее описание работы програм-

мы DISKQUOTA, команд,  квалификаторов  и  примеры  их  ис-

пользования.




                          - 3 -

                      00152-01 92 13






                       СОДЕРЖАНИЕ



1.      Назначение и условия выполнения программы

        DISKQUOTA......................................4

2.      Выполнение программы DISKQUOTA.................6

2.1.    Команды программы DISKQUOTA....................6

2.1.1.  Команда ADD....................................6

2.1.2.  Команда CREATE.................................7

2.1.3.  Команда DISABLE................................8

2.1.4.  Команда ENABLE.................................8

2.1.5.  Команда EXIT...................................9

2.1.6.  Команда HELP...................................9

2.1.7.  Команда MODIFY................................10

2.1.8.  Команда REBUILD...............................11

2.1.9.  Команда REMOVE................................12

2.1.10. Команда SHOW..................................12

2.1.11. Команда USE...................................13

3.      Сообщения программы DISKQUOTA.................14

Перечень ссылочных документов.........................15




                          - 3K -

                    2б.00152-01 92 13






                       содержание



1.      Назначение и условия выполнения программы

        DISKQUOTA......................................4

2.      Выполнение программы DISKQUOTA.................6

2.1.    Команды программы DISKQUOTA....................6

2.1.1.  Команда ADD....................................6

2.1.2.  Команда CREATE.................................7

2.1.3.  Команда DISABLE................................8

2.1.4.  Команда ENABLE.................................8

2.1.5.  Команда EXIT...................................9

2.1.6.  Команда HELP...................................9

2.1.7.  Команда MODIFY................................10

2.1.8.  Команда REBUILD...............................11

2.1.9.  Команда REMOVE................................12

2.1.10. Команда SHOW..................................12

2.1.11. Команда USE...................................13

3.      Сообщения программы DISKQUOTA.................14

Перечень ссылочных документов........................15к





                          - 4 -

                      00152-01 92 13




     1. Назначение и условия выполнения программы

                     DISKQUOTA



     Программа DISKQUOTA  дает  возможность  пользователям

контролировать использование дисковых томов.

     Для каждого кода идентификации пользователя (UIC)  на

томе выделяется определенная порция  (квота)  пространства

на дисковом томе. Эта  информация  заносится  в  отдельный

файл (файл квот).

     В таблице приведены форматы и функции команд програм-

мы DISKQUOTA.



     Форматы и функции команд программы DISKQUOTA

----------------------------------------------------------

        Формат             !           Функция

----------------------------------------------------------

АDD UIC [/PERMQUOTA=Kвота] ! Добавляет запись в файл квот

   [/OVERDRAFT=квота-плюс] ! для указанного UIC

CREATE                     ! Создает файл квот для тома

DISABLE                    ! Запрещает ограничение квоты

                           ! на томе

еNABLE                     ! Возобновляет действие квоты

                           ! на томе

EXIT                       ! Возвращает управление на ко-

                           ! мандный уровень DCL

HELP                       ! Распечатывает описания команд

                           ! программы DISKQUOTA

MODIFY [/PERMQUOTA=квота]  ! Изменяет  запись в файле

  [/OVERDRAFT=квота-плюс]  ! квот для указанного UIC


                          - 5 -

                      00152-01 92 13


                                           Продолжение

---------------------------------------------------------

         Формат            !        Функция

---------------------------------------------------------

REBUILD                    ! Перестраивает  счетчики  ис-

                           ! пользованных блоков для всех

                           ! записей

REMOVE                     ! Убирает запись из файла квот

                           ! для указанного UIC

SHOW                       ! Выводит на дисплей квоты,

                           ! квоты-плюс  и  содержимое

                           ! счетчиков использованных

                           ! блоков для указанного UIC

USE                        ! Определяет активный том



     Обычно для создания нового  файла  квот  используется

следующая последовательность команд:

     1) USE - задает имя устройства (может  быть  опущена,

если устройство определено по умолчанию);

     2) CREATE - создает файл квот;

     3) MODIFY - устанавливает квоту и квоту-плюс для UIC

[0,0];

     4) REBUILD - добавляет записи в  файл  квот  для  су-

ществующих файлов (для пустого тома может быть опущена);

     5) ADD - если после 4-го шага записи для UIC  автома-

тически не добавились, то добавляет  записи  в  файл  квот

(одна команда ADD добавляет одну запись).

     Последовательность команд для изменения существующего

файла квот обычно включает команды: USE, ADD,  MODIFY  или

REMOVE, для каждой выполняемой записи.


                          - 6 -

                      00152-01 92 13


        2. Выполнение програмы DISKQUOTA



     Программа DISKQUOTA вызывается по команде:

     $RUN SYS$SYSTEM:DISKQUOTA

     Команда не имеет ни квалификаторов, ни параметров, ни

значений по умолчанию.

     Программа DISKQUOTA выводит отзыв:

     DISKQ>

     После этого можно набрать одну из команд (см.  табли-

цу) в формате:

     DISKQ>команда [параметр]

где команда - имя команды;

    параметр -квалификатор команды и его значение.

     Если нужно выполнить операции программы DISKQUOTA  на

диске, отличном от текущего диска по умолчанию (SYS$DISK),

необходимо ввести команду USE для указания соответствующе-

го диска.

     Выход из программы DISKQUOTA осуществляется  либо  по

команде EXIT, либо вводом CTRL/Z. В обоих случаях происхо-

дит возврат управления на командный уровень DCL.



     2.1. Команды программы DISKQUOTA



     2.1.1. Kоманда ADD



     По Kоманде ADD добавляется запись  в  файл  квот  для

указанного UIC.

     Формат команды:

     ADD UIC [/квалификатор,...]

где UIC - код идентификации пользователя, для которого до-


                          - 7 -

                      00152-01 92 13


бавляется запись в файл квот. Код идентификации  пользова-

теля может быть указан в цифровом  или  алфавитно-цифровом

формате. Формат UIC приведен в [1];

    квалификаторы - один или несколько квалификаторов ко-

манды:

     1)  /PERMQUOTA=квота

где квота - положительное число блоков, которое выделяется

для указанного UIC. Если значение квоты опущено, по  умол-

чанию выделяется квота из записи для UIC [0,0];

     2)  /OVERDRAFT=квота-плюс

где квота-плюс - положительное  целое число блоков,  выде-

ляемое сверх установленной квоты для указанного UIC.  Если

значение квоты-плюс опущено, по умолчанию  устанавливается

квота-плюс из записи для UIC [0,0].

     Пример.

     DISKQ> ADD [300,211] /PERMQUOTA=200/OVERDRAFT=50

     По Kоманде ADD устанавливается квота, равная 200 бло-

кам для UIC[300,211] и квота-плюс, равная 50  блокам  (для

абсолютного предела 250 блоков).



     2.1.2. Команда CREATE



     По команде CREATE создается новый файл квот.

     Формат команды:

     CREATE

     Команда не имеет ни параметров, ни квалификаторов.

     Файл квот не всегда может находится  на  используемом

томе.

     Команда CREATE должна предшествовать  команде  MODIFY

для UIC [0,0] с установленными  значениями  квоты  и  кво-


                          - 8 -

                      00152-01 92 13


ты-плюс по умолчанию.

     Команда CREATE требует  права  доступа  на  запись  в

главный каталог файлов (MFD) тома, а также одну  или  нес-

колько характеристик: привилегию SYSPRV, системный  UIC  и

права собственникA тома.

     Пример.

     DISKQ> CREATE

     По команде создается новый файл квот.



     2.1.3. Команда DISABLE



     По команде DISABLE запрещается ограничение  квоты  на

томе.

     Команда DISABLE требует одну или  несколько  характе-

ристик: привилегию SYSPRV, системный UIC и права собствен-

ника тома.

     Формат команды:

     DISABLE

     Команда не имеет ни параметров, ни квалификаторов.

     Пример.

     DISKQ> DISABLE

     По команде DISABLE приостанавливается действие квоты.



     2.1.4. Команда ENABLE



     По команде ENABLE возобновляется  действие  квоты  на

томе.

     Команда ENABLE требует одну или несколько характерис-

тик: привилегию SYSPRV, системный UIC и права собственника

тома.


                          - 9 -

                      00152-01 92 13


     Формат команды:

     ENABLE

     Команда не имеет ни параметров, ни квалификаторов.

     Пример.

     DISKQ> ENABLE

     По команде ENABLE возобновляется действие квоты.



     2.1.5. Команда EXIT



     По  команде  EXIT  производится  выход  из  программы

DISKQUOTA и возврат управления на командный уровень DCL.

     Формат команды:

     ЕXIT

     Команда не имеет ни параметров, ни квалификаторов.

     Пример.

     DISKQ> EXIT

     По  команде   осуществляется   выход   из   программы

DISKQUOTA и возврат управления на командный уровень DCL.



     2.1.6. Команда HELP



     По команде HELP на терминал выводится список и описа-

ние команд программы DISKQUOTA.

     Формат команды:

     HELP [Kоманда]

где команда - имя команды программы DISKQUOTA.

     Команда не имеет Kвалификаторов.

     Пример.

     DISKQ> HELP ENABLE

  ENABLE


                          - 10 -

                      00152-01 92 13


     ENABLE DISKQUOTAS ON THE DEFAULT VOLUME. THE DEFAULT

     VOLUME MAY BE SELECTED BY ISSUING THE USE COMMAND.

     ONCE A QUOTA FILE IS CREATED ON A VOLUME, DISK

     QUOTAS ARE ASSUMED ENABLED UNTIL EXPLICITLY DISABLED.

     FORMAT:

      ENABLE

     По команде HELP на экран выводится информация  о  ко-

манде ENABLE.



     2.1.7. Команда MODIFY



     По Kоманде MODIFY изменяется запись в файле квот.

     Команда MODIFY требует  доступа  на  запись  к  файлу

квот.

     Если квота диска меньше, чем текущее содержимое счет-

чика использованных блоков, выдается предупреждающее сооб-

щение (действует новая квота).

     Формат команды:

     MODIFY UIC [/квалификаторы,...]

где UIC - код идентификации пользователя. UIC можно ука-

зать в цифровом или алфавитно-цифровом формате.

    Квалификаторы - один или несколько квалификаторов

команды:

     1)  /PERMQUOTA=квота

где квота - положительное целое число, которое задает кво-

ту для указаного UIC.  Если  значение  квоты  опущено,  по

умолчанию выделяется квота из записи для UIC [0,0];

     2)  /OVERDRAFT=квота-плюс

где квота-плюс - положительное целое число, которое задает

значение квоты-плюс для указанного UIC. Если значение кво-


                          - 11 -

                      00152-01 92 13


ты-плюс опущено, по  умолчанию  оно  равно  значению  кво-

ты-плюс из записи для UIC [0,0].

     Пример.

DISKQ> MODIFY [300,211] /PERMQUOTA=300

     По команде MODIFY устанавливается  постоянная  квота,

равная 300 блокам для UIC[300,211].



     2.1.8. Команда REBUILD



     По команде REBUILD перестраиваются счетчики использо-

ванных блоков для всех записей на томе.

     Формат команды:

     REBUILD

     Команда не имеет ни параметров, ни квалификаторов.

     По команде REBUILD автоматически  добавляются  записи

для файлов владельцев UIC,  не  имеющих  записей  в  файле

квот, устанавливая по умолчанию их квоты и  квоты-плюс  из

записи для UIC [0,0].

     При выполнении команды REBUILD файлы  не  могут  быть

созданы, уничтожены, расширены или усечены.

     Команду REBUILD целесообразно использовать:

     1) при создании файла квот - когда файл квот создает-

ся на томе с существующими файлами, команда REBUILD должна

быть выполнена до команды ADD. По команде REBUILD добавля-

ются элементы и записи использованных блоков для всех UIC;

     2) при переустановке квот диска - если некоторое вре-

мя счетчики использованных блоков не изменялись из-за  по-

давления  или  запрещения   каких-то   функций   программы

DISKQUOTA, необходимо выполнить команду REBUILD  для  кор-

ректировки счетчика использованных блоков.


                          - 12 -

                      00152-01 92 13


     Команда REBUILD требует права  доступа  на  запись  в

файл квот, а также одну или несколько характеристик:  при-

вилегию SYSPRV, системный UIC и право собственника тома.

     Пример.

     DISKQ> REBUILD

     По команде REBUILD переустанавливаются  счетчики  ис-

пользованных блоков для всех записей на томе.



     2.1.9. Команда REMOVE



     По команде REMOVE убирается запись из файла квот, со-

ответствующая указанному UIC. Команда REMOVE требует  дос-

тупа на запись к файлу квот.

     Если счетчик использованных блоков для UIC  не  равен

0, то выдается предупреждающее сообщение и UIC  удаляется.

UIC [0,0] не может быть удален.

     Формат команды:

     REMOVE UIC

где UIC - код идентификации пользователя. Может быть ука-

зан в цифровом или алфавитно-цифровом формате.

     Команда не имеет квалификаторов.

     Пример.

     DISKQ> REMOVE [300,211]

     По команде REMOVE  удаляется  UIC[300,211]  из  файла

квот.



     2.1.10. Команда SHOW



     По команде SHOW на  терминал  выводятся  квоты,  кво-

ты-плюс и содержимое счетчиков использованных блоков.


                          - 13 -

                      00152-01 92 13


     Команда требует доступа на чтение файла квот.

     Формат команды:

     SHOW UIC

где UIC - код идентификации пользователя. Может быть ука-

зан в цифровом или алфавитно-цифровом формате.

     Для указания UIC можно использовать символ  звездочки

(*).

     Примеры:

1. DISKQ> SHOW [300,211]

     По команде SHOW выводятся квоты, квоты-плюс и  содер-

жимое счетчиков использованных блоков для пользователя 211

из группы 300.

2. DISKQ> SHOW [300,*]

     По команде SHOW выводятся квоты, квоты-плюс и  содер-

жимое счетчиков использованных блоков для всех пользовате-

лей из группы 300.

3. DISKQ> SHOW [*,211]

     По команде SHOW выводятся квоты, квоты-плюс и  содер-

жимое счетчиков использованных блоков для всех пользовате-

лей с номером 211.

4. DISKQ> SHOW [*,*]

     По команде SHOW выводятся квоты, квоты-плюс и  содер-

жимое счетчиков использованных блоков для всех пользовате-

лей.



     2.1.11. Команда USE



     По команде USE указывается том,  активный  в  течение

некоторого времени.




                          - 14 -

                      00152-01 92 13


     Формат команды:

     USE устройство

где устройство - физическое или логическое имя устройства,

для которого устанавливаются квоты диска.

     Если команда USE не указана, программа DISKQUOTA  ис-

пользует устройство пользователя по умолчанию. Команда USE

может быть указана более чем один раз за  сеанс  работы  с

файлами квот более чем на одном томе.

     Может быть указан любой том из набора томов.  Однако,

во время работы с программой DISKQUOTA должен быть включен

относительный том 1.

     Примеры:

     1. DISKQ> USE DMA2:

     По команде USE указывается  устройство  с  физическим

именем DMA2:.

     2. DISKQ> USE X2_RESEARCH_DATA

     По команде USE указывается логическое имя физического

устройства.





     3. Сообщения программы DISKQUOTA



     Сообщения   об   ошибках,    выдаваемые    программой

DISKQUOTA, пояснения к ним и предлагаемые действия пользо-

вателя даны в [2], [3], [4].




                          - 15 -

                      00152-01 92 13




         Перечень ссылочных документов



     1. Операционная система МОС ВП.  Подсистема  управле-

ния.  Диалоговый  командный  язык.  Руководство  оператора

00152-01 34 01-1

     2. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  00152-01 97 02-1

     3. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  00152-01 97 02-2

     4. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  00152-01 97 02-3




                          - 15K -

                    2б.00152-01 92 13





                                  


           Перечень ссылочных документов



     1. Операционная система МОС ВП.  Подсистема  управле-

ния.  Диалоговый  командный  язык.  Руководство  оператора

2б.00152-01 34 01-1

     2. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  2б.00152-01 97 02-1

     3. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  2б.00152-01 97 02-2

     4. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  2б.00152-01 97 02-3





   
                       - 16K -  
  
                    00152-01 92 13  
                                                      
   ------------------------------------------------------------
   I                                                          I
   I                  Лист регистрации изменений              I
   I                                                          I
   I----------------------------------------------------------I
   IНомера листов (страниц)IВсего IN     IВходящий IПодп.IДатаI
   I-----------------------IлистовIдоку- IN сопро- I     I    I
   IИ IИз- IЗа- IНо- IАнну-I(стра-Iмента Iводитель-I     I    I
   Iз Iме- Iме- Iвых Iлиро-Iниц   I      Iного до- I     I    I
   Iм Iнен-Iнен-I    Iван- Iв до- I      Iкум. и   I     I    I
   I. Iных Iных I    Iных  Iкум.  I      Iдата     I     I    I
   I----------------------------------------------------------I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!