Список инструкций CIL

редактировать

Это список инструкций в наборе инструкций байт-кода Common Intermediate Language.

  • Код операции, сокращенный от кода операции, представляет собой часть инструкции на машинном языке, которая определяет операцию, которая должна быть выполнена.
  • Базовые инструкции образуют полный по Тьюрингу набор команд.
  • Команды объектной модели обеспечивают реализацию Common Type System.
Opcode InstructionОписаниеТип инструкции
0x58addДобавить два значения, возвращая новое значение.Базовая инструкция
0xD6add.ovfДобавить целые числа со знаком с overfнизкой проверкой.Базовая инструкция
0xD7add.ovf.unДобавить целочисленные значения без знака с overfнизкой проверкой.Базовая инструкция
0x5FиПобитовое И двух целочисленных значений возвращает целое значение.Базовая инструкция
0xFE 0x00arglistВозвращает arg ument список дескриптор для текущего метода.Базовая инструкция
0x3Bbeq Bранжируется до цели, если eq ual.Базовая инструкция
0x2Ebeq.s Bранжируется до целевой, если eq ual, s hort form.Базовая инструкция
0x3Cbge Bранжируется до цели, если g reater than или e соответствует требованиям.Базовая инструкция
0x2Fbge.s Bранжируется до цели, если g больше или e соответствует, s форма hort.Базовая инструкция
0x41bge.un Bранжирование до целевой, если g reater than или e соответствует (un подписано или ин заказано).Базовая инструкция
0x34bge.un.s Bранжирование до цели, если g больше или e соответствует (un подписано или un заказано), s hort form.Базовая инструкция
0x3Dbgt Bранчо до цели, если g reater t han.Базовая инструкция
0x30bgt.s Bранчирование до цели, если g reater t han, s hort форма.Базовая инструкция
0x42bgt.un Bранчирование к цели, если g reater t han (un подписано или ин заказано).Базовая инструкция
0x35bgt.un.s Bранжирование до цели, если g reater t han (un подписанный или un заказанный), s hort form.Базовая инструкция
0x3Eble Bранжируется до цели, если l ess than или e соответствует требованиям.Базовая инструкция
0x31ble.s Bранжируется до цели, если l ess than или e соответствует, краткая форма.Базовая инструкция
0x43ble.un Bранжировать до цели, если l ess than или e соответствует (un подписано или ин заказано).Базовая инструкция
0x36ble.un.s Bранжировать до цели, если l ess than или e соответствует (un подписано или un заказано), s hort form.Базовая инструкция
0x3Fblt Bранчо до цели, если l ess t han.Базовая инструкция
0x32blt.s Bранжирование до цели, если l ess t han, s hort форма.Базовая инструкция
0x44blt.un Bранчирование к цели, если l ess t han (un подписано или ин заказано).Базовая инструкция
0x37blt.un.s Bранжирование до цели, если l ess t han (un подписанный или un заказанный), s hort form.Базовая инструкция
0x40bne.un Bранчо для назначения, если заказано une qual или un .Базовая инструкция
0x33bne.un.s Bранжирование до цели, если une qual или un заказано, s форма hort.Базовая инструкция
0x8Cbox Преобразование допустимого значения box в его форму box ed.Инструкция объектной модели
0x38br Brпривязать к цели.Базовая инструкция
0x2Bbr.s Brпривязка к цели, s hort form.Базовая инструкция
0x01breakСообщает отладчику, что достигнута точка break .Базовая инструкция
0x39brfalse Brпривязать к цели, если значение равно нулю (false ).Базовая инструкция
0x2Cbrfalse.s Brпривязать к цели, если значение равно нулю (false ), s hort form.Базовая инструкция
0x3Abrinst Brпривязать к цели, если значение является ненулевой ссылкой на объект (псевдоним для brtrue ).Базовая инструкция
0x2Dbrinst.s Brпривязать к цели, если значение является ненулевой ссылкой на объект, s hort form (псевдоним для brtrue.s ).Базовая инструкция
0x39brnull Brпривязать к цели, если значение равно null (псевдоним для brfalse ).Базовая инструкция
0x2Cbrnull.s Brпривязать к цели, если значение равно null (псевдоним для brfalse.s ), s краткая форма.Базовая инструкция
0x3Abrtrue Brпривязать к цели, если значение не равно нулю (истина ).Базовая инструкция
0x2Dbrtrue.s Brпривязать к цели, если значение не равно нулю (true ), s hort form.Базовая инструкция
0x39brzero Brпривязать к цели, если значение равно ноль (псевдоним для brfalse ).Базовая инструкция
0x2Cbrzero.s Brпривязать к цели, если значение равно ноль (псевдоним для brfalse.s ), s краткая форма.Базовая инструкция
0x28вызов Вызов метода, описанного методом.Базовая инструкция
0x29calli Вызвать метод i, указанный в стеке с аргументами, описанными callitedescr.Базовая инструкция
0x6Fcallvirt Вызов метода, связанного с объектом.Инструкция объектной модели
0x74castclass Приведение obj к классу .Инструкция объектной модели
0xFE 0x01ceqPush 1 (типа int32), если значение1 e соответствует значению2, иначе нажмите 0.Базовая инструкция
0xFE 0x02cgtНажмите 1 (типа int32), если значение1 g повторно введите это значение2, иначе нажмите 0.Базовая инструкция
0xFE 0x03cgt.unНажмите 1 (типа int32), если значение1 g повторить это значение2, un подписано или un упорядочено, иначе нажмите 0.Базовая инструкция
0xC3ckfiniteвыбросить ArithmeticException если значение не является конечным числом.Базовая инструкция
0xFE 0x04cltНажмите 1 (типа int32), если значение1 l больше значения2, иначе нажмите 0.Базовая инструкция
0xFE 0x05clt.unНажмите 1 (типа int32), если значение1 l больше значения2, un со знаком или un заказано, иначе нажмите 0.Базовая инструкция
0xFE 0x16ограничена. Вызов виртуального метода для типа с ограничением на тип T.Префикс к инструкции
0xD3conv.iConv ert to native i nt, помещая собственный int в стек.Базовая инструкция
0x67conv.i1Conv ert в i nt8, помещая i nt32 в стек.Базовая инструкция
0x68conv.i2Conv ert в i nt16, помещая i nt32 в стек.Базовая инструкция
0x69conv.i4Conv ert в i nt32, помещая i nt32 в стек.Базовая инструкция
0x6Aconv.i8Conv ert в i nt64, помещая i nt64 в стек.Базовая инструкция
0xD4conv.ovf.iConv ert в собственный i nt (в стеке как собственный i nt) и выбросить исключение на overflow.Базовая инструкция
0x8Aconv.ovf.i.unConv ert un подписана на собственный i nt ( в стеке как родной i nt) и выбросить исключение на overflow.Базовая инструкция
0xB3conv.ovf.i1Conv ert в i nt8 (в стеке как i nt32) и выбросить исключение на overflow.Базовая инструкция
0x82conv.ovf.i1.unПреобразование беззнакового в int8 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0xB5conv.ovf.i2Преобразование в int16 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0x83conv.ovf.i2.unПреобразование беззнакового в int16 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0xB7conv.ovf.i4Преобразование в int32 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0x84conv.ovf.i4.unПреобразование unsigned в int32 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0xB9conv.ovf.i8Преобразование в int64 (в стеке как int64) и выдача исключения при переполнении.Базовая инструкция
0x85conv.ovf.i8.unПреобразование беззнакового в int64 (в стеке как int64) и выдача исключения при переполнении.Базовая инструкция
0xD5conv.ovf.uПреобразовать в собственный беззнаковый int (в стеке как собственный int) и выбросить исключение при переполнении.Базовая инструкция
0x8Bconv.ovf.u.unПреобразование беззнакового в собственный беззнаковый int (в стеке как собственный int) и выдача исключения при переполнении.Базовая инструкция
0xB4conv.ovf.u1Преобразование в int8 без знака (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0x86conv.ovf.u1.unПреобразование беззнакового в беззнаковый int8 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0xB6conv.ovf.u2Преобразование в int16 без знака (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0x87conv.ovf.u2.unПреобразование беззнакового в беззнаковый int16 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0xB8conv.ovf.u4Преобразование в int32 без знака (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0x88conv.ovf.u4.unПреобразование беззнакового в беззнаковый int32 (в стеке как int32) и выдача исключения при переполнении.Базовая инструкция
0xBAconv.ovf.u8Преобразование в int64 без знака (в стеке как int64) и выдача исключения при переполнении.Базовая инструкция
0x89conv.ovf.u8.unПреобразование беззнакового в беззнаковый int64 (в стеке как int64) и выдача исключения при переполнении.Базовая инструкция
0x76conv.r.unПреобразование целого числа без знака в число с плавающей запятой, помещая F в стек.Базовая инструкция
0x6Bconv.r4Преобразовать в float32, поместив F в стек.Базовая инструкция
0x6Cconv.r8Преобразовать в float64, поместив F в стек.Базовая инструкция
0xE0conv.uПреобразовать в собственный беззнаковый int, поместив собственный int в стек.Базовая инструкция
0xD2conv.u1Преобразовать в int8 без знака, поместив int32 в стек.Базовая инструкция
0xD1conv.u2Преобразовать в int16 без знака, поместив int32 в стек.Базовая инструкция
0x6Dconv.u4Преобразовать в int32 без знака, поместив int32 в стек.Базовая инструкция
0x6Econv.u8Преобразовать в int64 без знака, помещая int64 в стек.Базовая инструкция
0xFE 0x17cpblkКопирование данных из памяти в память.Базовая инструкция
0x70cpobj Скопируйте тип значения из src в dest.Инструкция объектной модели
0x5BdivРазделите два значения, чтобы получить результат частного или с плавающей запятой.Базовая инструкция
0x5Cdiv.unРазделите два значения без знака, возвращая частное.Базовая инструкция
0x25dupДублируйте значение наверху стека.Базовая инструкция
0xDCendfaultЗавершить условие ошибки блока исключения.Базовая инструкция
0xFE 0x11endfilterЗавершить предложение фильтра обработки исключений.Базовая инструкция
0xDCendfinallyЗавершить предложение finally блока исключения.Базовая инструкция
0xFE 0x18initblkУстанавливает все байты в блоке памяти на заданное значение байта.Базовая инструкция
0xFE 0x15initobj Инициализировать значение по адресу dest.Инструкция объектной модели
0x75isinst Проверить, является ли obj экземпляром класса, возвращая null или экземпляр этого класса или интерфейса.Инструкция объектной модели
0x27jmp Выйти из текущего метода и перейти к указанному методу.Базовая инструкция
0xFE 0x09ldarg Загрузить аргумент с пронумерованным номером в стек.Базовая инструкция
0x02ldarg.0Загрузить аргумент 0 в стек.Базовая инструкция
0x03ldarg.1Загрузить аргумент 1 в стек.Базовая инструкция
0x04ldarg.2Загрузить аргумент 2 в стек.Базовая инструкция
0x05ldarg.3Загрузить аргумент 3 в стек.Базовая инструкция
0x0Eldarg.s Загрузить аргумент с пронумерованным номером в стек, краткая форма.Базовая инструкция
0xFE 0x0Aldarga Получить адрес аргумента argNum.Базовая инструкция
0x0Fldarga.s Получить адрес аргумента argNum в краткой форме.Базовая инструкция
0x20ldc.i4 Поместить число типа int32 в стек как int32.Базовая инструкция
0x16ldc.i4.0Поместите 0 в стек как int32.Базовая инструкция
0x17ldc.i4.1Поместите 1 в стек как int32.Базовая инструкция
0x18ldc.i4.2Поместите 2 в стек как int32.Базовая инструкция
0x19ldc.i4.3Поместите 3 в стек как int32.Базовая инструкция
0x1Aldc.i4.4Поместите 4 в стек как int32.Базовая инструкция
0x1Bldc.i4.5Поместите 5 в стек как int32.Базовая инструкция
0x1Cldc.i4.6Поместите 6 в стек как int32.Базовая инструкция
0x1Dldc.i4.7Поместите 7 в стек как int32.Базовая инструкция
0x1Eldc.i4.8Поместите 8 в стек как int32.Базовая инструкция
0x15ldc.i4.m1Помещает -1 в стек как int32.Базовая инструкция
0x15ldc.i4.M1Помещает -1 в стек как int32 (псевдоним для ldc.i4.m1).Базовая инструкция
0x1Fldc.i4.s Поместить число в стек как int32, краткая форма.Базовая инструкция
0x21ldc.i8 Поместить число типа int64 в стек как int64.Базовая инструкция
0x22ldc.r4 Поместите число типа float32 в стек как F.Базовая инструкция
0x23ldc.r8 Поместить число типа float64 в стек как F.Базовая инструкция
0xA3ldelem Загрузить элемент по индексу в верхнюю часть стека.Инструкция объектной модели
0x97ldelem.iЗагрузить элемент с типом native int по индексу на вершину стека как собственный int.Инструкция объектной модели
0x90ldelem.i1Загрузить элемент с типом int8 по индексу на вершину стека как int32.Инструкция объектной модели
0x92ldelem.i2Загрузить элемент с типом int16 по индексу на вершину стека как int32.Инструкция объектной модели
0x94ldelem.i4Загрузить элемент с типом int32 по индексу на вершину стека как int32.Инструкция объектной модели
0x96ldelem.i8Загрузить элемент с типом int64 по индексу в верхнюю часть стека как int64.Инструкция объектной модели
0x98ldelem.r4Загрузить элемент с типом float32 по индексу на вершину стека как F.Инструкция объектной модели
0x99ldelem.r8Загрузить элемент с типом float64 по индексу в верхнюю часть стека как F.Инструкция объектной модели
0x9Aldelem.refЗагрузить элемент по индексу в верхнюю часть стека как O. Тип O такой же, как тип элемента массива, помещенного в стек CIL.Инструкция объектной модели
0x91ldelem.u1Загрузить элемент типа unsigned int8 по индексу на вершину стека как int32.Инструкция объектной модели
0x93ldelem.u2Загрузить элемент типа unsigned int16 по индексу на вершину стека как int32.Инструкция объектной модели
0x95ldelem.u4Загрузить элемент с типом unsigned int32 по индексу на вершину стека как int32.Инструкция объектной модели
0x96ldelem.u8Загрузить элемент с типом unsigned int64 по индексу в верхнюю часть стека как int64 (псевдоним для ldelem.i8).Инструкция объектной модели
0x8Fldelema Загрузить адрес элемента по индексу в верхнюю часть стека.Инструкция объектной модели
0x7Bldfld Поместить значение поля объекта (или типа значения) obj в стек.Инструкция объектной модели
0x7Cldflda Поместите адрес поля объекта obj в стек.Инструкция объектной модели
0xFE 0x06ldftn Помещает указатель на метод, на который ссылается метод, в стеке.Базовая инструкция
0x4Dldind.iЗначение косвенной загрузки типа native int как native int в стек.Базовая инструкция
0x46ldind.i1Значение косвенной загрузки типа int8 как int32 в стек.Базовая инструкция
0x48ldind.i2Значение косвенной загрузки типа int16 как int32 в стек.Базовая инструкция
0x4Aldind.i4Значение косвенной загрузки типа int32 как int32 в стек.Базовая инструкция
0x4Cldind.i8Значение косвенной загрузки типа int64 как int64 в стек.Базовая инструкция
0x4Eldind.r4Значение косвенной загрузки типа float32 как F в стек.Базовая инструкция
0x4Fldind.r8Непрямая загрузка значения типа float64 как F в стек.Базовая инструкция
0x50ldind.refКосвенная загрузка значения типа object ref как O в стеке.Базовая инструкция
0x47ldind.u1Косвенная загрузка значения типа unsigned int8 как int32 в стек.Базовая инструкция
0x49ldind.u2Значение косвенной загрузки типа unsigned int16 как int32 в стек.Базовая инструкция
0x4Bldind.u4Значение косвенной загрузки типа unsigned int32 как int32 в стеке.Базовая инструкция
0x4Cldind.u8Непрямая загрузка значения типа unsigned int64 как int64 в стек (псевдоним для ldind.i8).Базовая инструкция
0x8EldlenПомещает длину (типа native unsigned int) массива в стек.Инструкция объектной модели
0xFE 0x0Cldloc Загрузить локальную переменную индекса indx в стек.Базовая инструкция
0x06ldloc.0Загрузить локальную переменную 0 в стек.Базовая инструкция
0x07ldloc.1Загрузить локальную переменную 1 в стек.Базовая инструкция
0x08ldloc.2Загрузить локальную переменную 2 в стек.Базовая инструкция
0x09ldloc.3Загрузить локальную переменную 3 в стек.Базовая инструкция
0x11ldloc.s Загрузить локальную переменную индекса indx в стек, краткая форма.Базовая инструкция
0xFE 0x0Dldloca Загрузить адрес локальной переменной с индексом indx.Базовая инструкция
0x12ldloca.s Загрузить адрес локальной переменной с индексом indx, краткая форма.Базовая инструкция
0x14ldnullПомещает пустую ссылку в стек.Базовая инструкция
0x71ldobj Скопируйте значение, хранящееся по адресу src, в стек.Инструкция объектной модели
0x7Eldsfld Поместите значение статического поля в стек.Инструкция объектной модели
0x7Fldsflda Поместите адрес статического поля field в стек.Инструкция объектной модели
0x72ldstr Вставить строковый объект для литеральной строки.Инструкция объектной модели
0xD0ldtoken Преобразование токена метаданных в его представление среды выполнения.Инструкция объектной модели
0xFE 0x07ldvirtftn Отправить адрес виртуального метода в стек.Инструкция объектной модели
0xDDleave Выход из защищенной области кода.Базовая инструкция
0xDEleave.s Выход из защищенной области кода, краткая форма.Базовая инструкция
0xFE 0x0FlocallocВыделить пространство из пула локальной памяти.Базовая инструкция
0xC6mkrefany Помещает типизированную ссылку на ptr типа class в стек.Инструкция объектной модели
0x5AmulУмножение значений.Базовая инструкция
0xD8mul.ovfУмножение целочисленных значений со знаком. Подписанный результат должен соответствовать размеру.Базовая инструкция
0xD9mul.ovf.unУмножение целочисленных значений без знака. Беззнаковый результат должен соответствовать тому же размеру.Базовая инструкция
0x65negОтменить значение.Базовая инструкция
0x8Dnewarr Создайте новый массив с элементами типа etype.Инструкция объектной модели
0x73newobj Выделите неинициализированный объект или тип значения и вызовите ctor.Инструкция объектной модели
0xFE 0x19
нет. {typecheck, rangecheck, nullcheck}
Указанная (ые) проверка (и) ошибок, обычно выполняемая как часть выполнения последующей инструкции, может / должна быть пропущена.Префикс к инструкции
0x00nopНичего не делать (No operation).Базовая инструкция
0x66неПобитовое дополнение (логическое не ).Базовая инструкция
0x60orПоразрядное ИЛИ двух целочисленных значений, возвращает целое число.Базовая инструкция
0x26popИзвлечь значение из стека.Базовая инструкция
0xFE 0x1Eтолько для чтения.Указывает, что последующая операция адресации массива не выполняет проверку типа во время выполнения и возвращает управляемый указатель с управляемой изменчивостью.Префикс к инструкции
0xFE 0x1DrefanytypeПротолкнуть маркер типа, хранящийся в типизированной ссылке.Инструкция объектной модели
0xC2refanyval Вставить адрес, хранящийся в типизированной ссылке.Инструкция объектной модели
0x5DremRem при делении одного значения на другое.Базовая инструкция
0x5Erem.unRem ainder при делении одного un значения со знаком на другое.Базовая инструкция
0x2AretRet urn from method, возможно, со значением.Базовая инструкция
0xFE 0x1Aповторно вызватьВосстановить текущее исключение.Инструкция объектной модели
0x62shlShесли целое число l eft (сдвиг в нули), вернуть целое число.Базовая инструкция
0x63shrShесли целое число r ight (сдвиг знака), вернуть целое число.Базовая инструкция
0x64shr.unСдвиг целого числа вправо (сдвиг в ноль), возврат целого числа.Базовая инструкция
0xFE 0x1Csizeof Вставляет размер в байтах типа как int32 без знака.Инструкция объектной модели
0xFE 0x0Bпреобразовать значение в аргумент arg пронумерованный номер.Базовая инструкция
0x10starg.s Stпреобразовывает значение в аргумент arg пронумерованный номер, s hort form.Базовая инструкция
0xA4stelem Заменить элемент массива по индексу на значение в стеке.Инструкция объектной модели
0x9Bstelem.iЗаменить элемент массива по индексу на значение i в стеке.Инструкция объектной модели
0x9Cstelem.i1Заменить элемент массива по индексу на значение int8 в стеке.Инструкция объектной модели
0x9Dstelem.i2Заменить элемент массива по индексу на значение int16 в стеке.Инструкция объектной модели
0x9Estelem.i4Заменить элемент массива по индексу на значение int32 в стеке.Инструкция объектной модели
0x9Fstelem.i8Заменить элемент массива по индексу на значение int64 в стеке.Инструкция объектной модели
0xA0stelem.r4Заменить элемент массива по индексу на значение float32 в стеке.Инструкция объектной модели
0xA1stelem.r8Заменить элемент массива по индексу на значение float64 в стеке.Инструкция объектной модели
0xA2stelem.refЗаменить элемент массива по индексу на значение ref в стеке.Инструкция объектной модели
0x7Dstfld Заменить значение поля объекта obj на значение.Инструкция объектной модели
0xDFstind.iСохранение значения типа native int в памяти по адресу.Базовая инструкция
0x52stind.i1Сохранение значения типа int8 в памяти по адресу.Базовая инструкция
0x53stind.i2Сохранение значения типа int16 в памяти по адресу.Базовая инструкция
0x54stind.i4Сохранение значения типа int32 в памяти по адресу.Базовая инструкция
0x55stind.i8Сохранение значения типа int64 в памяти по адресу.Базовая инструкция
0x56stind.r4Сохранение значения типа float32 в памяти по адресу.Базовая инструкция
0x57stind.r8Сохранение значения типа float64 в памяти по адресу.Базовая инструкция
0x51stind.refСохранение значения типа object ref (тип O) в памяти по адресу.Базовая инструкция
0xFE 0x0Estloc Вставить значение из стека в локальную переменную indx.Базовая инструкция
0x0Astloc.0Извлечь значение из стека в локальную переменную 0.Базовая инструкция
0x0Bstloc.1Извлечь значение из стека в локальную переменную 1.Базовая инструкция
0x0Cstloc.2Извлечь значение из стека в локальную переменную 2.Базовая инструкция
0x0Dstloc.3Извлечь значение из стека в локальную переменную 3.Базовая инструкция
0x13stloc.s Извлечь значение из стека в локальную переменную indx, краткую форму.Базовая инструкция
0x81stobj Сохранение значения типа typeTok по адресу.Инструкция объектной модели
0x80stsfld Замените значение статического поля на val.Инструкция объектной модели
0x59subSub tract value2 from value1, возвращая новое значение.Базовая инструкция
0xDAsub.ovfПодложка tract native int из собственного int. Подписанный результат должен соответствовать размеру.Базовая инструкция
0xDBsub.ovf.unВычесть собственный беззнаковый int из собственного беззнакового int. Беззнаковый результат должен соответствовать тому же размеру.Базовая инструкция
0x45переключатель Переход к одному из n значений.Базовая инструкция
0xFE 0x14хвост.Последующий вызов завершает текущий метод.Префикс к инструкции
0x7AброситьБросить исключение.Инструкция объектной модели
0xFE 0x12без выравнивания. (выравнивание)Последующая инструкция указателя может быть невыровненной .Префикс к инструкции
0x79unbox Извлечь тип-значение из obj, его упакованное представление и нажать управляемую изменяемость удалось указать на него указатель на вершину стека.Инструкция объектной модели
0xA5unbox.any Извлечь тип значения из obj, его упакованного представления, и скопировать в верхнюю часть стека.Инструкция объектной модели
0xFE 0x13volatile.Последующая ссылка на указатель volatile .Префикс к инструкции
0x61xorПобитовый XOR целочисленных значений, возвращает целое число.Базовая инструкция
См. Также
Ссылки
Последняя правка сделана 2021-05-27 12:36:30
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте