Ozon.ru
Flash-MX.ru: Форум о Flash - Not logged in
Forum На главную Help Search Login
Up Blog Nox Noctis
1 2 Previous Next  
Topic duplicateMovieClip() в ActionScript 3.0 Date 06-03-08 11:56
http://flash-mx.ru/forum/topic_show.pl?tid=2898
Comments (0)
Topic о событиях Date 15-12-07 15:40
currentSection.addEventListener("хуй", onNebulaHide, false, 0, true);

работает.
Comments (10)
Topic как перенести базу форума из MSSQL в MySQL, не заработав перелом головы Date 31-07-07 12:43
как перенести базу форума из MSSQL в MySQL, не заработав перелом головы
Comments (0)
Topic flash projector Date 27-06-07 20:13
чтобы потом опять не вспоминать. :)

    проектор = плеер + свфка + размер свфки в виде 32-битового числа в LE порядке.

не важно, включена ли у свфки компрессия.
код плеера и свфки входят в проектор "как есть".

инструкция.
Comments (0)
Topic гимнастика Date 05-06-07 14:47
спросили в ruFlash.
простите за АС1 стиль, переводить в АС2 лень. :)

МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
 var getFilledCopy:Function = function():MovieClip
 {
   import flash.display.BitmapData;
   import flash.geom.Matrix;  
   
   var bounds:Object = clip.getBounds(clip);
   
   var d:Number = clip._parent.getNextHighestDepth();
   var filledCopy:MovieClip = clip._parent.createEmptyMovieClip("filledCopy"+d, d);
   
   var fill:MovieClip = filledCopy.createEmptyMovieClip("fill", 0);
   var mask:MovieClip = filledCopy.createEmptyMovieClip("mask", 1);
   
   mask.cacheAsBitmap = true;
   fill.cacheAsBitmap = true;
   fill.setMask(mask);
   
   // для маски
   var image:BitmapData = new BitmapData(bounds.xMax-bounds.xMin, bounds.yMax-bounds.yMin, true, 0);
   var matrix:Matrix = new Matrix(1, 0, 0, 1, -bounds.xMin, -bounds.yMin);
   image.draw(clip, matrix);
   mask.attachBitmap(image, 0);
   mask._x = bounds.xMin;
   mask._y = bounds.yMin;    
   
   // для заливки
   var fillImage:MovieClip = fill.createEmptyMovieClip("fillImage", 0);
   var loader:MovieClipLoader = new MovieClipLoader();
   loader.addListener(fill);  
   
   fill.targetBounds = bounds;
   fill.loader = loader;
   fill.onLoadInit = function () 
   {
     var bmp:BitmapData = new BitmapData(this.fillImage._width, this.fillImage._height, true, 0);
     bmp.draw(this.fillImage);
 
     this.lineStyle(0, 0, 0)
     this.moveTo(this.targetBounds.xMin, this.targetBounds.yMin);
     this.beginBitmapFill(bmp);
       this.lineTo(this.targetBounds.xMin, this.targetBounds.yMax);
       this.lineTo(this.targetBounds.xMax, this.targetBounds.yMax);
       this.lineTo(this.targetBounds.xMax, this.targetBounds.yMin);
       this.lineTo(this.targetBounds.xMin, this.targetBounds.yMin);
     this.endFill();
     
     // чистка
     delete this.targetBounds;
     delete this.onLoadComplete;
     this.loader.removeEventListener(this);
     this.fillImage.removeMovieClip();    
   }  
   
   /* 
   адрес картинки.
   можно всю загрузку убрать, а картинку в объект BitmapData
   взять из библиотеки при помощи BitmapData.loadBitamp(linkage)
   */ 
   loader.loadClip("http://flash-mx.ru/i/admin.gif", fillImage);  
   
   return filledCopy;
 }
 
 // clip - любой клип
 var copy:MovieClip = getFilledCopy(clip);
 
 // чисто позырить
 copy.onEnterFrame = function () 
 {
   this._x = this._parent._xmouse;
   this._y = this._parent._ymouse;
 }
Comments (3)
Topic setMask и cacheAsBitmap Date 17-05-07 20:58
1. известно, что для создания масок с прозрачностью, нужно назначить маску скриптом, задав обоим клипам - маске и маскируемому - cacheAsBitmap = true.

2. известно, что клип с маской может быть вложен в маскируемый клип - это работает без проблем.

а вот совмещение 1. + 2. - не работает.
в принципе, логично, но на грабли всё же наступил. :)
Comments (1)
Topic CS3 Date 15-05-07 18:01
алилуйа!! :))

ЧЕТЫРЕ версии флэша ушло на то, чтобы добавить в контектное меню этот пункт...



а вообще давайте вместе собирать :)
http://flash-mx.ru/forum/topic_show.pl?tid=1853
Comments (0)
Topic +_+ Date 15-05-07 15:32
наткнулся на интересную дискуссию по поводу одного бояна:

    int i = 5; i = ++i + ++i; Question: i = ? ; ( PHP: 13; C: 14) Why?
    http://programming.reddit.com/info/1po78/comments

во флэше нет таких проблем, ибо поведение конcтрукции определено, арифметический плюс тоже является разделителем для порядка операций.

немного похожую тему когда-то обсуждали:
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
 var a:Number = 1;
 var test:Function = function ()
 {
   a *= 10;
   return 1;
 }
 a += test();
 trace(a);

что выведется в консоль? :)
Comments (5)
Topic лавка древностей Date 03-05-07 16:42
Ваня Дембицкий при выходе 8 плеера наткнулся на следующий баг:

МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
 MovieClip.prototype.onEnterFrame = function()
 {
   trace("prototype: "+this);
 };
 this.onEnterFrame = function()
 {
   trace("custom: "+this);
 };
 this.onMouseDown = function()
 {
   trace(this.hasOwnProperty("onEnterFrame")); // выводит true
   delete this.onEnterFrame; 
   trace(this.hasOwnProperty("onEnterFrame")); // выводит false
   trace(this.onEnterFrame); // выводит [type Function]
   
   // если раскомментировать следующее, то всё встает на место:
   // снова начинает срабатывать прототипный onEnterFrame
 
   // this.onEnterFrame = this.onEnterFrame;
 };

Честно говоря, я даже на выстрел не подходил к таким граблям, поскольку мне не приходило в голову повесить такой обработчик на прототип. :)

Но эффект занятный. В 8 плеере удаление из мувиклипа ссылки на обработчик стандартного события не меняет поведение прототипной цепи: продолжает использоваться локальный обработчик (хотя его нет уже и в помине).

Это касается только стандартных событий, на которые все мувиклипы подписаны по умолчанию. С onMouseMove, например, такая же история.

Видимо, только в момент задания обработчика флэш подцепляет клип к потоку стандартного события. В момент удаления ссылки этого не происходит. :)
Comments (0)
Topic Сортировка по дате Date 21-11-06 07:18
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
 // Увы, это не работает, сортировка идет по строковым значениям.
 
 var list:Array = [];
 list[0] = new Date(2006, 0);
 list[1] = new Date(2006, 1);
 list[2] = new Date(2007, 0);
 list[3] = new Date(2000, 0);
 
 list.sort(Array.NUMERIC);

А могло бы, ведь new Date().valueOf(), как и Number(new Date()) дают ЧИСЛА (таймстэмпы)...
Почему бы стандартной сортировке при флаге Array.NUMERIC не приводить аргументы к числам?

Ну да, конечно, можно написать свою функцию сортировки ради этого.
Бу-бу-бу.

Бангалор-Бангалор, я не твой, отпусти меня, Бангалор.
Comments (0)
Topic на память: stop() в классе, расширяющем MovieClip Date 09-11-06 18:06
Делимитер докопался до сути бага компилятора:
http://www.flash-mx.ru/forum/topic_show.pl?tid=1269#fp

то, что компилятор в классах AS2.0 спотыкается на неквалифицированных именах, совпадающих с именами глобальных функций, давно известно. но чтобы тааак...

встретив вызовы stop(), play(), getURL() и прочих функций такого рода, компилятор пытается понять, глобальную ли функцию мы вызвали, или метод класса, в котором происходит действие (определяет, сделать однобайтовый stop() или вызвать this.stop(), метод класса).

у глобальных функций есть специфические свойства:
- на этапе компиляции они превращаются в команды ассемблера
- они ничего не возвращают

например, в таком случае:
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
 class Test
 {
   function Test () 
   {
     stop();
   }
 }

скомпилируется глобальная функция stop(), превратится в один байт кода.

а вот в таком случае:
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
 class Test extends MovieClip
 {
   function Test () 
   {
     stop();
   }
 }

скомпилируется this.stop()... но почему-то компилятор забывает, что в этом случае метод возвращает значение, записывает его в стек. хуже того - забрать из стека ненужное значение компилятор тоже забывает, и забытое в стеке значение приводит к непредсказуемому поведению программы.

эта аномалия также может сопровождаться загадочными надписями в списке переменных.

в байткоде приведенный выше конструктор выглядит так:
МинимизироватьПо высоте текста
function2 () (r:1='this', r:2='super')
      push 0.0, r:super, UNDEF
      callMethod
      pop // после вызова суперконструктора
             в стеке осталось возвращенное им значение,
             и его нужно оттуда выкинуть

      push 0.0, r:this, 'stop'
      callMethod
      // а чем провинился метод stop()?
         где "pop" для удаления возвращенного им значения из стека?

end // of function
Comments (0)
Topic переезд noregret.org Date 16-10-06 15:51
noregret.org переехал на сервер flash-mx.ru :)
гип. гип. :)
Comments (0)
Topic незаконнорожденные объекты Date 16-10-06 13:00
навеяно обсуждением:
http://flash-mx.ru/forum/topic_show.pl?pid=8020#pid8020

все объекты в ActionScript должны наследовать от одного базового класса - Object.

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

список таких объектов (что вспомнилось):
МинимизироватьПо высоте текста
_global
XML.idMap
XMLNode.attributes
объект, возвращаемый TextFormat.getTextExtent()
объект, возвращаемый MovieClip.getBounds()
объект, возвращаемый Color.getTransform()
объект, возвращаемый Sound.getTransform()

обычно это не проблема.

разве что может озадачить, почему у таких объектов странно работают подобные вещи:
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
 var test:XML = new XML("<a id='1' />");
 trace(test); // <a id="1" />
 trace(test.attributes); // [type Object]
 
 // "непонятное":
 trace(test.attributes instanceof Object); // false
 trace("test.attributes = "+test.attributes); // test.attributes = undefined
 trace(test.attributes == undefined); // true
 trace(test.attributes === undefined); // false
отсутствие наследственных признаков проявляется в том, что у этих объектов нет ссылок __proto__ и constructor, и как следствие отстутвуют ссылки на методы, унаследованные от класса Object: addProperty, hasOwnProperty, isPropertyEnumerable, isPrototypeOf, toString(), valueOf() и т. д.

кстати, про _global я писал отдельно.
Comments (0)
Topic неиспользуемый слушатель Date 12-10-06 04:57
Все, кто пользовался mx.utils.Delegate + mx.events.EventDispatcher, скорее всего слышали про анти-паттерн "неиспользуемый слушатель". это известная ошибка в проектировании, не только во флэше, Макс и Майк писали про это пару раз на novemberain.com

Delegate.create() создает новую функцию и возвращает на неё ссылку. Ссылок на созданную функцию этот класс не сохраняет. Проблема возникает тогда, когда мы создаём делегированную функцию для обработки события. Чаще всего можно встретить такой код:
МинимизироватьПо высоте текста
   1
 источникСобытий.addEventListener("имяСобытия", Delegate.create(получательСобытий, функцияОбработчик));

В результате этого действия ссылки на делегирующую функцию в явном виде нигде не остается, а слушателем является именно она, а не функцияОбработчик. И удалить такого слушателя становится проблематично (а часто никто и не заботится об этом).

Решения проблемы, которые встречаются чаще всего, связаны с запоминанием ссылок на делегатов для последующего удаления. А это вызывает кучу лишней мороки, поскольку нужно где-то хранить ссылки, не забывать вовремя удалять их и т. п.

Для случая удаления слушателя из функции-обработчика, есть решение куда проще. Такая ситуация встречается очень часто: при срабатывании обработчика нужно отписаться от получения событий.

Делегирующая функция вызывает делегируемую. При этом слушателем является делегирующая. Хвала ECMA, при вызове любой функции ей доступна ссылка arguments.caller, которая является ссылкой-на-того-кто-вызвал-меня. Более того, поскольку мы говорим о сочетании EventDispatcher + Delegate, функция-обработчик всегда получает ссылку на истоник событий и на имя события в виде свойств eventObject.target и eventObject.type

Таким образом, у нас внутри функцииОбработчика есть все необходимые ссылки для операций со слушателем. Если необходимо удалить слушателя изнутри обработчика, можно сделать так:
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
 function делегируемаяФункцияОбработчик(eventObject:Object):Тип
 {
     var eventSource:Object = eventObject["target"];
     var eventName:String = eventObject["type"];
 
     // !
     eventSource.removeEventListener(eventName, arguments.caller);
 }
Comments (7)
Topic isNaN(undefined) Date 11-10-06 15:09
не забыть:
МинимизироватьПо высоте текста
   1
 trace(isNaN(undefined));

Flash Player 9-8-7: true
Flash Player 6-5: false

обратная совместимость, обратная совместимость, обратная...
Comments (0)
Topic FileReference.upload() и modsecurity Date 03-10-06 12:02
Если на апач поставлен модуль безопасности modsecurity, вы будете долго биться головой о твёрдые предметы, пытаясь заставить работать аплоад из флэша.

И не заставите.
Потому что этот модуль при вызове FileReference.upload() сообщает о следующей ошибке:
МинимизироватьПо высоте текста
User-Agent: Shockwave Flash
mod_security-message: Access denied with code 500. Error processing request body: Multipart: invalid part header (missing colon): Submit Query\r\n [severity "EMERGENCY"]
mod_security-action: 500

Что внутри флэша отражается как http error с кодом 500.
Comments (0)
Topic прозрачный фон, wmode="transparent" Date 29-09-06 08:39
известные проблемы с прозрачным фоном для флэшек в хтмл (wmode="transparent")

  1. невозможно вводить не-латинские символы в поля ввода. для Internet Explorer'а есть заплатка, и то с ограничениями.

  2. FireFox: глюки с координатами внутри флэшки при скроллинге страницы с прозрачным флэшем.

  3. FireFox: при размещении над флэшкой хтмльных таблиц или дивов, перекрытые элементы внутри флэшки недоступны для мышки.

  4. Safari: при размещении над флэшкой хтмльных элементов вроде ссылок или кнопок, возникают чудовищные глюки с прозрачностями при наведении мышки на эти элементы.

  5. производительность ролика ниже, чем при использовании обычного режима window (не катастрофа, но разница есть).

список постоянно дополняется.
вам правда необходим прозрачный фон?
Comments (0)
Topic TextField.StyleSheet Date 29-09-06 08:09
наличие у текстового инпутного поля свойства styleSheet не дает вводить в него текст.
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
 // вот так инпут работает:
 this.createTextField("TF0", 0, 0, 0, 0, 0);
 TF0.autoSize = true;
 TF0.html = true;
 TF0.type = "input";
 TF0.border = true;
 TF0.htmlText = "TF0 type: "+TF0.type;
 //
 // а так нет:
 this.createTextField("TF1", 1, 0, 30, 0, 0);
 TF1.autoSize = true;
 TF1.html = true;
 TF1.type = "input";
 TF1.border = true;
 TF1.htmlText = "TF1 type: "+TF1.type;
 // причина здесь:
 TF1.styleSheet = new TextField.StyleSheet();

при этом поле может даже не быть хтмльным.
главное, определен styleSheet или нет.
Comments (1)
Topic СontextMenu Date 26-09-06 11:10
невозможно добавить в контекстное меню пункт с именем "1". :)

МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
 menu = new ContextMenu();
 menu.hideBuiltInItems();
 onContext = function ()
 {
 };
 menu.customItems = [];
 for (var i:Number = -2; i<3; i++) {
   menu.customItems.push(new ContextMenuItem(String(i), onContext, true));
 }
Comments (0)
Topic cacheAsBitmap и габариты клипа Date 26-09-06 05:07
- есть клип1 с градиентной заливкой
- есть клип2 с кучей текстовых полей
МинимизироватьПо высоте текста
   1
   2
   3
 клип1.cacheAsBitmap = true;
 клип2.cacheAsBitmap = true;
 клип2.setMask(клип1);

благодаря cacheAsBitmap и восьмому флэшу, маска должна стать градиентной.

на днях с Ивом искали ошибку в ролике, использующем такой прием: маска не работала вовсе.

а проблема простая, про неё даже в хэлпе написано. :) клип2 по ширине был больше 2880 пикселей, а в этом случае cacheAsBitmap не работает.

цитата:
МинимизироватьПо высоте текста
ActionScript classes > MovieClip > cacheAsBitmap (MovieClip.cacheAsBitmap property)

cacheAsBitmap (MovieClip.cacheAsBitmap property)
public cacheAsBitmap : Boolean
<...>
In the following cases a movie clip does not use a bitmap even if the cacheAsBitmap property is set to true, and instead renders the movie clip from vector data:
- The bitmap is too large: greater than 2880 pixels in either direction.
- The bitmap fails to allocate memory (due to an out of memory error).
интересно, что из-за неполадок с cacheAsBitmap не просто пропала градиентность маски, а маска вообще перестала действовать.

ps: делать клипы таких больших габаритов вредно в любом случае. :)
Comments (2)
Topic о высоте Date 18-09-06 14:00
где-то я уже это писал, но забыл где. :)
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
 this.createTextField("TF", 0, 0, 0, 200, 0);
 TF.multiline = TF.wordWrap=true;
 TF.autoSize = true;
 TF.text = "Jackdaws love my big sphinx of quartz.";
 TF.text += TF.text += TF.text;
 //
 trace(TF._height); // 19
 trace(TF._height); // 64

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

со свойством textHeight и того хуже: до первой смены кадров высота текста известна не будет.
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
 this.createTextField("TF", 0, 0, 0, 200, 0);
 TF.multiline = TF.wordWrap=true;
 TF.autoSize = true;
 TF.text = "Jackdaws love my big sphinx of quartz.";
 TF.text += TF.text += TF.text;
 //
 trace(TF.textHeight); // 15
 trace(TF.textHeight); // 15
 this.onEnterFrame = function()
 {
   trace(TF.textHeight);  // 60
   delete this.onEnterFrame;
 };

update 10.11.2006:
На форуме Мигель подал хорошую мысль - всё дело в автоматическом переносе по словам.
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
 this.createTextField("TF", 0, 0, 0, 200, 0);
 TF.multiline = TF.wordWrap=true;
 TF.autoSize = true;
 TF.text = "Jackdaws love my big\nsphinx of quartz.\n";
 TF.text += TF.text += TF.text;
 //
 trace(TF._height); // 94
 trace(TF._height); // 94
Видим, что, исключив необходимость переносить текст по словам мы устранили и глюк с определением высоты. К сожалению в большинстве случаев применить такой прием невозможно. :(
Comments (13)
Topic утечка памяти в плагине Date 16-08-06 11:29
когда делал ледышки, наткнулся на занятную вещь.

чтобы сделать "стеклянный" объект, нужно использовать DisplacementMapFilter. в качестве параметра этот фильтр принимает объект BitmapData. то есть нужно:
1. сгенерить объект BitmapData
2. создать DisplacementMapFilter
3. применить этот фильтр к клипу: clip.filters = [displacement];

если "стеклянный" объект двигается над неоднородным фоном, в общем случае нужно в каждом кадре генерить новый объект BitmapData и выполнять описанные выше действия.

и вот тут надо не забыть, что после применения фильтра объект BitmapData остается жить. причем если мы зададим новый фильтр - то предыдущий объект BitmapData из памяти не удалится (даже если у нас на него нигде нет ссылок). то есть, если мы будем последовательно генерить объекты BitmapData, делать их них фильтры, а потом эти фильтры применять, то оперативной памяти определенно ни на что не хватит. :) странно, но такое поведение я обнаружил только в плагинах. и в ИЕ и в Фаерфоксе. в standalone плеере, вроде бы, всё в порядке. в IDE - тоже.

исправить ситуaцию очень просто: прежде чем создавать новый объект BitmapData, нужно освободить память от предыдущего: bitmap.dispose();

мораль сей басни:
- обязательно нужно в процессе работы тестить результат в броузерах
- лучше всегда самостоятельно уничтожать объект BitmapData при помощи метода dispose(), а не полагаться в этом деле на сборщик мусора.
Comments (0)
Topic swapDepth и gotoAndStop Date 05-07-06 22:20
чудодейственные грабли swapDepth для клипов, созданных в редакторе, всё еще иногда дают о себе знать.

1. свапнул клип наверх,
2. перешел на несколько кадров назад в родительском клипе,
=> получил два клипа с одинаковыми именами на разных глубинах.

хорошо забитое старое.
Comments (0)
Topic Объект активации функции Date 27-06-06 18:03
подробнее:
http://www.novemberain.com/blog/?p=695

МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
 var test = "я снаружи!";
 var a = function ()
 {
     function b()
     {
         trace(this.test); // куда укажет this?
     }
     var test = "я внутри!";
     b();
 };
 a();


в Output'e видим:

    "я внутри!"

т.е. все локальные переменные, созданные в a(), внутри b() будут доступны через this.
и работает это только если внутреннюю функцию вы объявите в формате "function имя () {}".

но кто такой этот this?

цитирую спецификацию ECMA 262-3:
МинимизироватьПо высоте текста
The activation object is purely a specification mechanism. It is impossible for ECMAscript program to access the activation object. It can access members of the activation object, but not the activation object itself.

Объект активации функции - это внутренний механизм спецификации. Программа на ECMA-скрипте не может получить доступ к объекту активации функции, но может получить доступ к его свойствам. К свойствам, но не к самому объекту активации.
Comments (0)
Topic _global == undefined Date 25-06-06 08:26
1.
объект _global не является наследником класса Object
МинимизироватьПо высоте текста
   1
   2
 trace(_global instanceof Object); // false
 trace(_global.__proto__); // undefined


2.
МинимизироватьПо высоте текста
   1
 trace(_global == undefined); // true

потому что в глобале не определена valueOf():
МинимизироватьПо высоте текста
   1
 trace(_global.valueOf); // undefined

а эта функция нужна для вычисления равенства:
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
 _global.valueOf = function()
 {
   trace("_global.valueOf()");
 };
 trace(_global == undefined); // true


3.
если же сделать вид, что глобал является наследником Object, то метод valueOf() у него появится. стандартный.
МинимизироватьПо высоте текста
   1
   2
 _global.__proto__ = Object.prototype;
 trace(_global == undefined); // false
Comments (0)
 

с 19.04.2006 Trusted comodo ev ssl will be needed for everyone . Pokerspiele online . домашний текстиль . обои. обои для рабочего стола. бесплатные обои . iphone 4

Page created in 0.459s with 11 database queries.