{"id":2480,"date":"2016-01-13T23:58:43","date_gmt":"2016-01-13T20:58:43","guid":{"rendered":"http:\/\/fn1.tv\/?p=2480"},"modified":"2016-01-23T12:13:35","modified_gmt":"2016-01-23T09:13:35","slug":"%d8%a7%d8%a8%d8%b1%d8%a7%d9%87%d9%8a%d9%85-%d8%af%d8%b4%d8%aa%d9%8a-%d8%a8%d8%ad%d9%87-%d8%ad%d8%b2%d9%86-2016-ebrahim-dashti-bahhat-hezin","status":"publish","type":"post","link":"http:\/\/fn1q8.com\/?p=2480","title":{"rendered":"\u0627\u0628\u0631\u0627\u0647\u064a\u0645 \u062f\u0634\u062a\u064a &#8211; \u0628\u062d\u0647 \u062d\u0632\u0646 | 2016 Ebrahim Dashti &#8211; Bahhat Hezin"},"content":{"rendered":"<p>https:\/\/youtu.be\/RL5uZIrDwGE?list=PLRvKdiRzD6pJ3cgKvUry7hmiqCqXXDFgQ<\/p>\n<p style=\"text-align: center;\"><script src=\"https:\/\/apis.google.com\/_\/scs\/abc-static\/_\/js\/k=gapi.gapi.en.aCET_C1s-Ek.O\/m=client\/exm=card,gapi_iframes,gapi_iframes_style_slide_menu,iframes\/rt=j\/sv=1\/d=1\/ed=1\/am=AAQ\/rs=AItRSTOKextu3QAZfV0s_SKuW3vYp-SZuA\/cb=gapi.loaded_3\" async=\"\"><\/script><script src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/show_companion_ad.js\"><\/script><script src=\"https:\/\/apis.google.com\/_\/scs\/abc-static\/_\/js\/k=gapi.gapi.en.aCET_C1s-Ek.O\/m=gapi_iframes_style_slide_menu\/exm=card,gapi_iframes,iframes\/rt=j\/sv=1\/d=1\/ed=1\/am=AAQ\/rs=AItRSTOKextu3QAZfV0s_SKuW3vYp-SZuA\/cb=gapi.loaded_2\" async=\"\"><\/script><script src=\"https:\/\/apis.google.com\/_\/scs\/abc-static\/_\/js\/k=gapi.gapi.en.aCET_C1s-Ek.O\/m=iframes\/exm=card,gapi_iframes\/rt=j\/sv=1\/d=1\/ed=1\/am=AAQ\/rs=AItRSTOKextu3QAZfV0s_SKuW3vYp-SZuA\/cb=gapi.loaded_1\" async=\"\"><\/script><script src=\"https:\/\/apis.google.com\/_\/scs\/abc-static\/_\/js\/k=gapi.gapi.en.aCET_C1s-Ek.O\/m=card,gapi_iframes\/rt=j\/sv=1\/d=1\/ed=1\/am=AAQ\/rs=AItRSTOKextu3QAZfV0s_SKuW3vYp-SZuA\/cb=gapi.loaded_0\" async=\"\"><\/script><script>\/\/ <![CDATA[\nif (document.fonts &#038;&#038; document.fonts.load) {document.fonts.load(\"400 10pt Roboto\", \"\u0627\");document.fonts.load(\"500 10pt Roboto\", \"\u0627\");}\n\/\/ ]]><\/script><script>\/\/ <![CDATA[\nvar ytcsi = {gt: function(n) {n = (n || '') + 'data_';return ytcsi[n] || (ytcsi[n] = {tick: {},span: {},info: {}});},tick: function(l, t, n) {ytcsi.gt(n).tick[l] = t || +new Date();},span: function(l, s, e, n) {ytcsi.gt(n).span[l] = (e ? e : +new Date()) - ytcsi.gt(n).tick[s];},setSpan: function(l, s, n) {ytcsi.gt(n).span[l] = s;},info: function(k, v, n) {ytcsi.gt(n).info[k] = v;},setStart: function(s, t, n) {ytcsi.info('yt_sts', s, n);ytcsi.tick('_start', t, n);}};(function(w, d) {ytcsi.perf = w.performance || w.mozPerformance ||w.msPerformance || w.webkitPerformance;ytcsi.setStart('dhs', ytcsi.perf ? ytcsi.perf.timing.responseStart : null);var isPrerender = (d.visibilityState || d.webkitVisibilityState) == 'prerender';var vName = d.webkitVisibilityState ? 'webkitvisibilitychange' : 'visibilitychange';if (isPrerender) {ytcsi.info('prerender', 1);var startTick = function() {ytcsi.setStart('dhs');d.removeEventListener(vName, startTick);};d.addEventListener(vName, startTick, false);}if (d.addEventListener) {d.addEventListener(vName, function() {ytcsi.tick('vc');}, false);}})(window, document);\n\/\/ ]]><\/script><script>\/\/ <![CDATA[\nvar ytcfg = {d: function() {return (window.yt &#038;&#038; yt.config_) || ytcfg.data_ || (ytcfg.data_ = {});},get: function(k, o) {return (k in ytcfg.d()) ? ytcfg.d()[k] : o;},set: function() {var a = arguments;if (a.length > 1) {ytcfg.d()[a[0]] = a[1];} else {for (var k in a[0]) {ytcfg.d()[k] = a[0][k];}}}};\n\/\/ ]]><\/script><script>\/\/ <![CDATA[\nytcfg.set(\"LACT\", null);\n\/\/ ]]><\/script><script>\/\/ <![CDATA[\n(function(){var b={f:\"content-snap-width-1\",h:\"content-snap-width-2\",j:\"content-snap-width-3\"};function f(){var a=[],c;for(c in b)a.push(b[c]);return a}\nfunction g(a){var c=f().concat([\"guide-pinned\",\"show-guide\"]),d=c.length,e=[];a.replace(\/\\S+\/g,function(a){for(var k=0;k<d;k++)if(a==c[k])return;e.push(a)});\nreturn e}\n;function l(a,c,d){var e=document.getElementsByTagName(\"html\")[0],h=g(e.className);a&#038;&#038;1251<=(window.innerWidth||document.documentElement.clientWidth)&#038;&#038;(h.push(\"guide-pinned\"),c&#038;&#038;h.push(\"show-guide\"));d&#038;&#038;(d=(window.innerWidth||document.documentElement.clientWidth)-21-50,1251<=(window.innerWidth||document.documentElement.clientWidth)&#038;&#038;a&#038;&#038;c&#038;&#038;(d-=230),h.push(1262<=d?\"content-snap-width-3\":1056<=d?\"content-snap-width-2\":\"content-snap-width-1\"));e.className=h.join(\" \")} var m=[\"yt\",\"www\",\"masthead\",\"sizing\",\"runBeforeBodyIsReady\"],n=this;m[0]in n||!n.execScript||n.execScript(\"var \"+m[0]);for(var p;m.length&#038;&#038;(p=m.shift());)m.length||void 0===l?n[p]?n=n[p]:n=n[p]={}:n[p]=l;})(); try {window.ytbuffer = {};ytbuffer.handleClick = function(e) {var element = e.target || e.srcElement;while (element.parentElement) {if (\/(^| )yt-can-buffer( |$)\/.test(element.className)) {window.ytbuffer = {bufferedClick: e};element.className += ' yt-is-buffered';break;}element = element.parentElement;}};if (document.addEventListener) {document.addEventListener('click', ytbuffer.handleClick);} else {document.attachEvent('onclick', ytbuffer.handleClick);}} catch(e) {} yt.www.masthead.sizing.runBeforeBodyIsReady(false,false,true);\n\/\/ ]]><\/script><script class=\"js-httpssytimgcomytsjsbinschedulervfl5r_pIbschedulerjs\" src=\"\/\/s.ytimg.com\/yts\/jsbin\/scheduler-vfl5r_pIb\/scheduler.js\" type=\"text\/javascript\"><\/script><script>\/\/ <![CDATA[\nvar ytimg = {};ytimg.count = 1;ytimg.preload = function(src) {var img = new Image();var count = ++ytimg.count;ytimg[count] = img;img.onload = img.onerror = function() {delete ytimg[count];};img.src = src;};\n\/\/ ]]><\/script><script>\/\/ <![CDATA[\nytimg.preload(\"https:\\\/\\\/r3---sn-15wpa-3fpe.googlevideo.com\\\/crossdomain.xml\");ytimg.preload(\"https:\\\/\\\/r3---sn-15wpa-3fpe.googlevideo.com\\\/generate_204\");\n\/\/ ]]><\/script>\u0627\u0628\u0631\u0627\u0647\u064a\u0645 \u062f\u0634\u062a\u064a &#8211; \u0628\u062d\u0647 \u062d\u0632\u0646 2016 |\u00a0Ibrahim dashti &#8211; bahhat hezin\u200e<script src=\"https:\/\/partner.googleadservices.com\/gpt\/pubads_impl_78.js\" async=\"\"><\/script><script src=\"https:\/\/www.google.com\/uds\/api\/ads\/1.0\/df63ad2ae9475886f04f232f6c125dae\/content.I.js\" type=\"text\/javascript\"><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_212\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){ this.KasperskyLab = (function(ns) { ns.addEventListener = function(element, event, handler) { if (element.addEventListener) { element.addEventListener(event, handler, false); } else if (element.attachEvent) { element.attachEvent('on' + event, handler); } else { throw new Error('Cannot attach to event, unsupported browser'); } } return ns })(this.KasperskyLab || {}); return this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_213\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){ this.KasperskyLab = (function(ns) { ns.removeEventListener = function(element, event, handler) { if (element.removeEventListener) { element.removeEventListener(event, handler, false); } else if (element.detachEvent) { element.detachEvent('on' + event, handler); } else { throw new Error('Cannot detach event handler, unsupported browser'); } } return ns })(this.KasperskyLab || {}); return this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_206\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){ this.KasperskyLabVirtualKeyboard = (function(ns) { ns.KeypressEmulator = function(impl) { require(typeof impl === 'object', 'Invalid value for parameter \"impl\"'); var m_impl = impl; \/\/ Emulates keyboard button press event: \/\/ - sends keyboard events to a document, \/\/ - inserts a character (characters) to the active element if this action hasn't been cancelled by event handlers. \/\/ This emulator only works with buttons that have text representation. \/\/ You cannot use it to emulate modifiers keys events. \/\/ Please note that one button press can produce several characters. this.emulateKeyboardEvent = function(element, text, keyCode, isCtrl, isAlt, isShift, isNumpad) { require(!!element, \"Parameter 'element' is null.\"); require(!!element.ownerDocument, \"Element is not attached to document.\"); require(typeof text === 'string', \"Parameter 'text' has invalid type '\" + (typeof text) + \"'.\"); require(typeof keyCode === 'number' &#038;&#038; keyCode % 1 === 0 &#038;&#038; keyCode >= 0, \"Parameter 'keyCode' has invalid type or value.\");\n\t\t\n\t\tensureImplementationIsCreated(element.ownerDocument);\n\n\t\tvar keyLocation = isNumpad ? KeyLocations.DOM_KEY_LOCATION_NUMPAD : KeyLocations.DOM_KEY_LOCATION_STANDARD;\n\t\tvar charCodeForKeyEvents = text.length ? text.charCodeAt(0) : 0;\n\t\tif (fireKeydownEvent(element, charCodeForKeyEvents, keyCode, isCtrl, isAlt, isShift, keyLocation))\n\t\t{\n\t\t\tfor (var textIndex = 0; textIndex < text.length; ++textIndex) { deliverOneCharacter(element, text.charCodeAt(textIndex), isCtrl, isAlt, isShift, keyLocation); } } fireKeyupEvent(element, charCodeForKeyEvents, keyCode, isCtrl, isAlt, isShift, keyLocation); fireChangeEventOnBlur(element); } function deliverOneCharacter(element, charCode, isCtrl, isAlt, isShift, keyLocation) { if (fireKeyboardEvent('keypress', element, charCode, 0 \/* keyCode *\/, isCtrl, isAlt, isShift, keyLocation)) { insertCharToElementIfElementAllows(element, String.fromCharCode(charCode)); if (m_impl.generateInputEvents()) { fireEvent('input', element); } } } function insertCharToElementIfElementAllows(element, char) { require(!!m_impl, 'No implementation found, browser is unsupported'); if (element.maxLength &#038;&#038; element.maxLength > 0 && element.value.length >= element.maxLength)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tm_impl.insertCharacter(element, char);\n\t}\n\n\tfunction fireKeydownEvent(element, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation)\n\t{\n\t\treturn fireKeyboardEvent('keydown', element, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation)\n\t}\n\n\tfunction fireKeyupEvent(element, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation)\n\t{\n\t\treturn fireKeyboardEvent('keyup', element, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation)\n\t}\n\n\tfunction fireEvent(eventType, element)\n\t{\n\t\trequire(!!m_impl, 'No implementation found, browser is unsupported');\n\n\t\tvar event = m_impl.createEvent(element.ownerDocument);\n\t\tm_impl.initEvent(event, eventType);\n\t\treturn m_impl.fireEvent(event, eventType, element);\n\t}\n\n\tfunction fireKeyboardEvent(eventType, element, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation)\n\t{\n\t\trequire(!!m_impl, 'No implementation found, browser is unsupported');\n\n\t\tvar event = m_impl.createKeyboardEvent(element.ownerDocument);\n\t\tm_impl.initKeyboardEvent(element.ownerDocument, event, eventType, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation);\n\t\treturn m_impl.fireEvent(event, eventType, element);\n\t}\n\n\tfunction ensureImplementationIsCreated(document)\n\t{\n\t\trequire(!!document, 'Invalid document');\n\n\t\tif (!m_impl)\n\t\t{\n\t\t\tm_impl = createImpl(document);\n\t\t}\n\t}\n\n\tfunction fireChangeEvent(event)\n\t{\n\t\tvar element = event && event.srcElement ? event.srcElement : this;\n\t\tKasperskyLab.removeEventListener(element, 'blur', fireChangeEvent);\n\t\tfireEvent('change', element);\n\t}\n\n\tfunction fireChangeEventOnBlur(element)\n\t{\n\t\tKasperskyLab.removeEventListener(element, 'blur', fireChangeEvent); \/\/ remove if already set\n\t\tKasperskyLab.addEventListener(element, 'blur', fireChangeEvent);\n\t}\n\n\tvar KeyLocations = {\n\t\tDOM_KEY_LOCATION_STANDARD: 0,\n\t\tDOM_KEY_LOCATION_LEFT: 1,\n\t\tDOM_KEY_LOCATION_RIGHT: 2,\n\t\tDOM_KEY_LOCATION_NUMPAD: 3\n\t};\n}\n\n\/\/ TODO: move this function to a common place\nfunction require(condition, message)\n{\n\tif (!condition)\n\t{\n\t\tthrow new Error(message ? message : 'Requirement failure');\n\t}\n}\n\nreturn ns })(this.KasperskyLabVirtualKeyboard || {});\n\nreturn this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_207\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){ this.KasperskyLabVirtualKeyboard = (function(ns) { ns.KeypressEmulatorInternetExplorerImpl = function() { var m_insertCharacterIe = hasModernSelectionApi() ? insertCharacterIeModern : insertCharacterIeLegacy; this.generateInputEvents = function () { return isInternetExplorer9OrGreaterDocumentMode(); } this.createEvent = function(document) { return { microsoftImpl: new MicrosoftKeyboardEventImpl(document), dom2Impl: new Dom2KeyboardEventImpl(document) }; } this.createKeyboardEvent = this.createEvent; this.initEvent = function(event, eventType) { event.microsoftImpl.initEvent(eventType); event.dom2Impl.initEvent(eventType); } this.initKeyboardEvent = function(document, event, eventType, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation) { event.microsoftImpl.initKeyboardEvent(eventType, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation); event.dom2Impl.initKeyboardEvent(eventType, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation); } this.fireEvent = function(event, eventType, element) { \/\/ IE9 introduces support for DOM Level 2 Events. So IE9 and later versions, in Standards Mode, \/\/ now support 3 event models: \/\/ - DOM Level 2 Events (dispatchEvent\/addEventListener), \/\/ - the Microsoft Event Model (fireEvent\/attachEvent) \/\/ - DOM Level 0 or legacy event model (element.onclick=\"...\"). \/\/ If the event is generated by browser itself all event handlers are called in the order they were attached. \/\/ If element.fireEvent is called, the DOM0 handler is called first followed by the MS handler, \/\/ regardless of the order in which they were registered. The DOM2+ handler is never called in this case. \/\/ If element.dispatchEvent is called, the DOM0 handler and the DOM2+ handler appear in the order they were \/\/ attached and the MS handler is never called. \/\/ Update: IE11 doesn't support MS event model, so we can't call DOM0 handlers using it. if (isMsEventModelAvailable()) \/\/ TODO: refactor { \/\/ Call DOM0 handlers + MS Model handlers (IE10 or older only) var microsoftImplResult = event.microsoftImpl.fireEvent(eventType, element); \/\/ Call modern handlers var dom0Handler = replaceDom0Handler(element, eventType, function() { return true; }); var dom2ImplResult = event.dom2Impl.fireEvent(eventType, element); replaceDom0Handler(element, eventType, dom0Handler); return microsoftImplResult &#038;&#038; dom2ImplResult; } \/\/ Call DOM0 handlers + modern handlers return event.dom2Impl.fireEvent(eventType, element); } this.insertCharacter = function (element, char) { var document = element.ownerDocument; require(document &#038;&#038; document.activeElement === element, 'Element should be in document and should be active'); require(typeof char === 'string' &#038;&#038; char.length === 1, 'Invalid parameter'); m_insertCharacterIe(element, char); } function replaceDom0Handler(element, eventType, newHandler) { var propertyName = 'on' + eventType; var oldHandler = element[propertyName]; element[propertyName] = newHandler; return oldHandler; } function hasModernSelectionApi() { return !!window.getSelection; } function isMsEventModelAvailable() { return !!document.documentElement.attachEvent; } \/\/ document.selection is no longer supported. Starting with Internet Explorer 11 Preview function insertCharacterIeModern(element, char) { \/\/ TODO: this is legacy code, it needs refactoring var selStart = element.selectionStart; var selEnd = element.selectionEnd; var valueLength = element.value.length; var beforeSelection = element.value.substr(0, selStart); var afterSelection = element.value.substr(selEnd, valueLength); element.value = beforeSelection + char + afterSelection; var diffLen = element.value.length - valueLength; var selLength = selEnd - selStart; var pos = selStart + diffLen + selLength; element.setSelectionRange(pos, pos); } function insertCharacterIeLegacy(element, char) { var textRange = document.selection.createRange(); if (textRange.parentElement() !== element) { throw new Error(\"Selection is outside the input field\"); } textRange.text = char; textRange.select(); } function isInternetExplorer9OrGreaterDocumentMode() { return 'geolocation' in navigator; } } \/\/ InternetExplorerImpl function MicrosoftKeyboardEventImpl(document) { var m_event = document.createEventObject ? document.createEventObject() : null; this.initEvent = function(_ \/* eventType *\/) { } this.initKeyboardEvent = function(_ \/* eventType *\/, charCode, keyCode, isCtrl, isAlt, isShift, _ \/* keyLocation *\/) { if (!m_event) return; m_event.keyCode = keyCode ? keyCode : charCode; m_event.ctrlKey = isCtrl; m_event.altKey = isAlt; m_event.shiftKey = isShift; } this.fireEvent = function(eventType, element) { try { if (!!element.fireEvent) { return element.fireEvent('on' + eventType, m_event); } } catch (e) { } return true; } } \/\/ MicrosoftKeyboardEventImpl function Dom2KeyboardEventImpl(document) { m_event = null; this.initEvent = function(eventType) { require(!m_event); createEvent('Event'); if (!m_event || !m_event.initEvent) return; m_event.initEvent(eventType, true, true, document.defaultView); } this.initKeyboardEvent = function(eventType, charCode, keyCode, isCtrl, isAlt, isShift, keyLocation) { require(!m_event); createEvent('KeyboardEvent'); if (!m_event || !m_event.initKeyboardEvent) return; var keyOrCharCode = keyCode ? keyCode : charCode; var char = String.fromCharCode(charCode); Object.defineProperty(m_event, \"which\", { get: function(){ return keyOrCharCode; } }); Object.defineProperty(m_event, \"keyCode\", { get: function(){ return keyOrCharCode; } }); Object.defineProperty(m_event, \"charCode\", { get: function(){ return keyCode ? 0 : charCode; } }); Object.defineProperty(m_event, \"char\", { get: function(){ return char; } }); var internetExplorerKeyLocation = getInternetExplorerKeyLocation(eventType, char, keyLocation); m_event.initKeyboardEvent(eventType, true, true, document.defaultView , getInternetExplorerKey(char, internetExplorerKeyLocation, eventType) \/\/ key , internetExplorerKeyLocation \/\/ location , getInternetExplorerModifiersString(isCtrl, isAlt, isShift) \/\/ modifiers string , false \/\/ repeat , undefined \/\/ locale ); } this.fireEvent = function(eventType, element) { if (!!element.dispatchEvent) { return element.dispatchEvent(m_event); } return true; } function createEvent(eventClass) { m_event = document.createEvent ? document.createEvent(eventClass) : null; } function getInternetExplorerKeyLocation(eventType, char, keyLocation) { if (eventType === 'keypress' &#038;&#038; char === '\/') { return KeyLocations.DOM_KEY_LOCATION_STANDARD; } return keyLocation; } function getInternetExplorerKey(char, keyLocation, eventType) { if (char === '.' &#038;&#038; keyLocation === KeyLocations.DOM_KEY_LOCATION_NUMPAD &#038;&#038; eventType === 'keypress') return 'Del'; \/\/ Looks like a bug in IE if (char === ' ') return 'Spacebar'; var numpadQuirks = { '\/': 'Divide', '*': 'Multiply', '-': 'Subtract', '+': 'Add', '.': 'Decimal' }; return (keyLocation === KeyLocations.DOM_KEY_LOCATION_NUMPAD &#038;&#038; char in numpadQuirks) ? numpadQuirks[char] : char; } function getInternetExplorerModifiersString(isCtrl, isAlt, isShift) { var modifiersArray = []; pushBackIf(isCtrl, 'Control', modifiersArray); pushBackIf(isAlt, 'Alt', modifiersArray); pushBackIf(isShift, 'Shift', modifiersArray); return modifiersArray.join(' '); } function pushBackIf(condition, value, array) { if (condition) { array.push(value); } } var KeyLocations = { DOM_KEY_LOCATION_STANDARD: 0, DOM_KEY_LOCATION_LEFT: 1, DOM_KEY_LOCATION_RIGHT: 2, DOM_KEY_LOCATION_NUMPAD: 3. }; } \/\/ Dom2KeyboardEventImpl \/\/ TODO: move this function to a common place function require(condition, message) { if (!condition) { throw new Error(message ? message : 'Requirement failure'); } } return ns })(this.KasperskyLabVirtualKeyboard || {}); return this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_214\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){ this.KasperskyLab = (function(ns) { ns.getAbsoluteElementPosition = getAbsoluteElementPosition; ns.getPageScroll = getPageScroll; function getAbsoluteElementPosition(element) { var box = element.getBoundingClientRect(); var scroll = getPageScroll(element.ownerDocument); return { left: box.left + scroll.left, top: box.top + scroll.top, right: box.right + scroll.left, bottom: box.bottom + scroll.top }; } function getPageScroll(document) { var window = document.defaultView || document.parentWindow; return { left: ( window.pageXOffset || (document.documentElement &#038;&#038; document.documentElement.scrollLeft) || (document.body &#038;&#038; document.body.scrollLeft) || 0 ), top: ( window.pageYOffset || (document.documentElement &#038;&#038; document.documentElement.scrollTop) || (document.body &#038;&#038; document.body.scrollTop) || 0 ) }; } return ns })(this.KasperskyLab || {}); return this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_211\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){\nthis.KasperskyLab = (function(ns) {\n\nns.getElementScreenPosition = function(element)\n{\n\tvar document = element.ownerDocument;\n\tvar window = document.parentWindow || document.defaultView;\n\treturn getElementBox(element);\n\n\tfunction getElementBox(element)\n\t{\n\t\tvar box = getBoundingClientRect(element);\n\t\tvar frame = window;\n\t\twhile (frame.parent != frame)\n\t\t{\n\t\t\tmoveBox(box, getFrameOffset(frame));\n\t\t\tmoveBox(box, getDocumentOffset(frame.document));\n\t\t\tframe = frame.parent;\n\t\t}\n\n\t\tmoveBox(box, getDocumentOffset(window.top.document));\n\t\treturn box;\n\t}\n\n\tfunction getFrameOffset(frame)\n\t{\n\t\tvar frameElement = frame.frameElement;\n\t\tvar frameElementBox = getBoundingClientRect(frameElement);\n\t\tvar paddingLeft = 0;\n\t\tvar paddingTop = 0;\n\t\tif (frame.getComputedStyle)\n\t\t{\n\t\t\tpaddingLeft = parseInt(frame.getComputedStyle(frameElement, \"\").getPropertyValue('padding-left'), 10) || 0;\n\t\t\tpaddingTop = parseInt(frame.getComputedStyle(frameElement, \"\").getPropertyValue('padding-top'), 10) || 0;\n\t\t}\n\t\telse if (frameElement.currentStyle)\n\t\t{\n\t\t\tif (isIeModernMode(frame.parent.document) || (isIeModernMode(frame.document) &#038;&#038; !isFrameset(frame)))\n\t\t\t{\n\t\t\t\tpaddingLeft = parseInt(frameElement.currentStyle.paddingLeft, 10) || 0;\n\t\t\t\tpaddingTop = parseInt(frameElement.currentStyle.paddingTop, 10) || 0;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tleft: frameElementBox.left + frameElement.clientLeft + paddingLeft,\n\t\t\ttop: frameElementBox.top + frameElement.clientTop + paddingTop\n\t\t\t};\n\t}\n\n\tfunction getBoundingClientRect(element)\n\t{\n\t\tvar box = element.getBoundingClientRect();\n\t\treturn {\n\t\t\tleft: box.left,\n\t\t\ttop: box.top,\n\t\t\tright: box.right,\n\t\t\tbottom: box.bottom\n\t\t\t};\n\t}\n\n\tfunction getDocumentOffset(document)\n\t{\n\t\tvar offset = { left: 0, top: 0 };\n\t\tif (isIe() &#038;&#038; isIeModernMode(document))\n\t\t{\n\t\t\tvar documentBox = getBoundingClientRect(document.documentElement);\n\t\t\toffset.left += documentBox.left < 0 ? -documentBox.left : 0;\n\t\t\toffset.top += documentBox.top < 0 ? -documentBox.top : 0; } return offset; } function isIeModernMode(document) { return document.documentMode &#038;&#038; document.documentMode > 7;\n\t}\n\n\tfunction isIe()\n\t{\n\t\treturn \/Trident\/.test(window.navigator.userAgent);\n\t}\n\n\tfunction isFrameset(window)\n\t{\n\t\treturn window.frames.length > 0 && String(window.frames[0].frameElement.tagName).toUpperCase() === 'FRAME';\n\t}\n\n\tfunction moveBox(box, offset)\n\t{\n\t\tbox.left += offset.left;\n\t\tbox.top += offset.top;\n\t\tbox.right += offset.left;\n\t\tbox.bottom += offset.top;\n\t}\n}\n\nreturn ns })(this.KasperskyLab || {});\n\nreturn this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_209\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){\nthis.KasperskyLabVirtualKeyboard = (function(ns) {\n\nns.TsfCompositionView = function(inputElement, window, document)\n{\n    this.update = function(composition)\n\t{\n\t\tif (composition.text.length == 0)\n\t\t{\n\t\t\thide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tshow(composition);\n\t\t}\n\t}\n\n    this.hide = function()\n\t{\n\t\thide();\n\t}\n\n\tthis.getLayout = function()\n\t{\n\t\tif (!m_view)\n\t\t{\n\t\t\treturn { isVisible: false };\n\t\t}\n\t\treturn {\n\t\t\tisVisible: true,\n\t\t\tcompositionTextRect: KasperskyLab.getElementScreenPosition(getTextContainerElement()),\n\t\t\tselectedTextRect: getSelectionLayout()\n\t\t\t};\n\t}\n\n\tvar m_view = null;\n\n\tvar topZOrder = 'z-index:20000!important;';\n\tvar noPadding = 'padding:0!important;';\n\tvar noMargin = 'margin:0!important;';\n\tvar noBorder = 'border-bottom:1px solid transparent!important;';\n\tvar autoWidthHeight = 'width:auto!important;height:auto!important;';\n\tvar fontSize = '16px';\n\tvar textElementsStyle = noPadding + noMargin + topZOrder + autoWidthHeight +\n\t\t\"font:\" + fontSize + \"\/1 Arial,Helvetica,sans-serif!important;text-align:left!important;\"+\n\t\t\"white-space:nowrap!important;\"\n\t\t;\n\n\tfunction show(composition)\n\t{\n\t\tif (!m_view)\n\t\t{\n\t\t\tm_view = { rootElement: createViewElement() };\n\t\t\tdocument.body.appendChild(m_view.rootElement);\n\t\t\t\/\/ TODO\n\t\t\t\/\/ addEvent(window, \"resize\", updateViewPosition);\n\t\t\t\/\/ TODO: the view should send updated coordinates to the plugin\n\t\t\tm_view.timer = setInterval(updateViewPosition, 500);\n\t\t}\n\t\tupdateViewContent(composition);\n\t\tupdateViewPosition();\n\t};\n\n\tfunction hide()\n\t{\n\t\tif (m_view)\n\t\t{\n\t\t\tif (m_view.timer)\n\t\t\t{\n\t\t\t\tclearInterval(m_view.timer);\n\t\t\t\tdelete m_view.timer;\n\t\t\t}\n\n\t\t\t\/\/ removeEvent(window, \"resize\", updateViewPosition); \/\/ TODO\n\n\t\t\tremoveElementFromDOM(m_view.rootElement);\n\t\t\tm_view = null;\n\t\t}\n\t};\n\n\tfunction removeElementFromDOM(element)\n\t{\n\t\telement.parentNode &#038;&#038; element.parentNode.removeChild(element);\n\t}\n\n\tfunction createViewElement()\n\t{\n\t\tvar viewElement = makeDiv(\n\t\t\ttopZOrder + noMargin + autoWidthHeight +\n\"position:absolute!important;display:block!important;padding:11px 10px!important;\"+\n\"text-align:left!important;border:1px solid #B2B2B2!important;border-radius:5px!important;\"+\n\"background:#fff!important;\"\n\t\t\t);\n\t\tappendChildsToParent(viewElement, createTextContainerElement());\n\t\treturn viewElement;\n\t}\n\n\tfunction updateViewContent(composition)\n\t{\n\t\tvar splitPoints = transformCompositionToSplitPoints(composition);\n\t\tvar textContainerElement = createTextElements(composition.text, splitPoints);\n\t\tm_view.rootElement.replaceChild(textContainerElement, getTextContainerElement());\n\t}\n\n\tfunction getTextContainerElement()\n\t{\n\t    return m_view.rootElement.firstChild;\n\t}\n\n\tfunction createTextContainerElement()\n\t{\n\t\treturn makeDiv(textElementsStyle + \"position:static!important;display:block!important;background:#transparent!important;\");\n\t}\n\n\tfunction transformCompositionToSplitPoints(composition)\n\t{\n\t\tvar sortedRanges = sortRanges(\n\t\t\tmakeRangesFromTextDecorations(composition.textDecorations)\n\t\t\t.concat(makeRangeFromSelection(composition))\n\t\t\t);\n\t\tvar allPoints = generateArray(composition.text.length + 1, function() { return {}; });\n\t\tapplySortedRanges(allPoints, sortedRanges);\n\t\treturn selectSplitPoints(allPoints);\n\t}\n\n\tfunction sortRanges(ranges)\n\t{\n\t\treturn ranges.sort(function(a, b) {\n\t\t\tif (a.start != b.start)\n\t\t\t{\n\t\t\t\treturn a.start < b.start ? -1 : 1; } return a.end > b.end ? -1 : 1;\n\t\t});\n\t}\n\n\tfunction makeRangesFromTextDecorations(textDecorations)\n\t{\n\t\tvar result = new Array(textDecorations.length);\n\t\tfor (var i = 0; i < textDecorations.length; ++i)\n\t\t{\n\t\t\tresult[i] = makeRangeFromTextDecoration(textDecorations[i]);\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction makeRangeFromTextDecoration(textDecoration)\n\t{\n\t\treturn {\n\t\t\tstart: textDecoration.start,\n\t\t\tend: textDecoration.end,\n\t\t\tstyles: {\n\t\t\t\tunderlineStyle: textDecoration.underlineStyle,\n\t\t\t\tisBoldUnderline: textDecoration.isBoldUnderline,\n\t\t\t\ttextColor: textDecoration.textColor,\n\t\t\t\tbackgroundColor: textDecoration.backgroundColor,\n\t\t\t\tunderlineColor: textDecoration.underlineColor\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction makeRangeFromSelection(composition)\n\t{\n\t\treturn composition.selectionStart == composition.selectionEnd ?\n\t\t\t{ start: composition.selectionStart, end: composition.selectionEnd, styles: { cursor: true } } :\n\t\t\t{ start: composition.selectionStart, end: composition.selectionEnd, styles: { selected: true } };\n\t}\n\n\tfunction applySortedRanges(allPoints, sortedRanges)\n\t{\n\t\tfor (var i = 0; i < sortedRanges.length; ++i)\n\t\t{\n\t\t\tapplyRange(allPoints, sortedRanges[i]);\n\t\t}\n\t}\n\n\tfunction applyRange(allPoints, range)\n\t{\n\t\textendObject(allPoints[range.start], range.styles);\n\t\tfor (var i = range.start + 1; i < range.end; ++i)\n\t\t{\n\t\t\textendObject(allPoints[i], range.styles);\n\t\t}\n\t}\n\n\tfunction extendObject(object, addon)\n\t{\n\t\tfor (var key in addon)\n\t\t{\n\t        if (addon.hasOwnProperty(key))\n\t        {\n\t\t\t\tobject[key] = addon[key]\n\t        }\n\t\t}\n\t\treturn object;\n\t}\n\n\tfunction selectSplitPoints(allPoints)\n\t{\n\t\tif (allPoints.length == 0)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\t\tvar splitPoints = [];\n\t\tvar prevStyle = { underlineStyle: 'none' };\n\t\tfor (var i = 0; i < allPoints.length; ++i)\n\t\t{\n\t\t\tvar currentStyle = allPoints[i];\n\t\t\tif (!equalStyles(prevStyle, currentStyle) || currentStyle.cursor)\n\t\t\t{\n\t\t\t\tsplitPoints.push({ position: i, styles: currentStyle });\n\t\t\t\tprevStyle = currentStyle;\n\t\t\t}\n\t\t}\n\t\tif (splitPoints[splitPoints.length - 1].position != allPoints.length - 1)\n\t\t{\n\t\t\tsplitPoints.push({ position: allPoints.length - 1, styles: currentStyle });\n\t\t}\n\t\treturn splitPoints;\n\t}\n\n\tfunction equalStyles(a, b)\n\t{\n\t\treturn a.underlineStyle == b.underlineStyle &#038;&#038;\n\t\t\ta.isBoldUnderline == b.isBoldUnderline &#038;&#038;\n\t\t\ta.textColor == b.textColor &#038;&#038;\n\t\t\ta.backgroundColor == b.backgroundColor &#038;&#038;\n\t\t\ta.underlineColor == b.underlineColor &#038;&#038;\n\t\t\ta.selected == b.selected;\n\t}\n\n\tfunction generateArray(length, valueGenerator)\n\t{\n\t\tvar array = new Array(length);\n\t\tfor (var i = 0; i < length; ++i)\n\t\t{\n\t\t\tarray[i] = valueGenerator();\n\t\t}\n\t\treturn array;\n\t}\n\n\tfunction createTextElements(text, splitPoints)\n\t{\n\t\tvar rootElement = createTextContainerElement();\n\t\tfor (var i = 0; i < splitPoints.length; ++i)\n\t\t{\n\t\t\tif (splitPoints[i].styles.cursor)\n\t\t\t{\n\t\t\t\tvar commonStyles = noPadding + noMargin + topZOrder + noBorder + \"height:\"\n\t\t\t\t\t\t+ fontSize + \"!important;\";\n\t\t\t\tvar caretWrapperElement = makeDiv(commonStyles + \"position:relative!important;display:inline!important;width:1px!important;\");\n\t\t\t\tcaretWrapperElement.selected = 1;\n\t\t\t\tvar caretElement = makeDiv(commonStyles + \"position:absolute!important;display:block!important;top:0!important;left:-1px!important;width:1px!important;background:#000!important;\");\n\t\t\t\tappendChildsToParent(rootElement, appendChildsToParent(caretWrapperElement, caretElement));\n\t\t\t}\n\t\t\tif (i + 1 < splitPoints.length) { var colorCSS = splitPoints[i].styles.selected ? getSelectedTextColorCSS(splitPoints[i].styles) : getTextColorCSS(splitPoints[i].styles); var underlineCSS = getUnderlineCSS(splitPoints[i].styles); var textElement = makeDiv(textElementsStyle + \"position:static!important;display:inline!important;\" + colorCSS + underlineCSS); textElement.selected = splitPoints[i].styles.selected ? 1 : 0; setInnerText(textElement, text.substr(splitPoints[i].position, splitPoints[i+1].position - splitPoints[i].position)); appendChildsToParent(rootElement, textElement); } } return rootElement; } function getSelectionLayout() { var container = getTextContainerElement(); var selectedElements = filter(container.childNodes, function(element) { return element.selected; }); if (!selectedElements.length) { return KasperskyLab.getElementScreenPosition(container); } var firstElement = selectedElements[0]; var lastElement = selectedElements[selectedElements.length - 1]; var topLeft = KasperskyLab.getElementScreenPosition(firstElement); var bottomRight = KasperskyLab.getElementScreenPosition(lastElement); return { top: topLeft.top, left: topLeft.left, bottom: bottomRight.bottom, right: bottomRight.right }; } var underlineTypesToStylesConversionTable = { 'solid': 'solid', 'dotted': 'dotted', 'dashed': 'dashed', 'wavy': 'dotted' }; function getSelectedTextColorCSS(styles) { return 'color:#fff!important;background:#3297FD!important;'; } function getTextColorCSS(styles) { return 'color:' + cssColor(styles.textColor) + '!important;background:' + cssColor(styles.backgroundColor) + '!important;'; } function getUnderlineCSS(styles) { var style = underlineTypesToStylesConversionTable[styles.underlineStyle]; if (!style) { return noBorder; } var width = styles.isBoldUnderline ? '2px' : '1px'; return 'border-bottom: ' + width + ' ' + style + ' ' + cssColor(styles.underlineColor) + '!important;border-top:none!important;border-left:none!important;border-right:none!important;'; } function cssColor(rgb) { var bgr = (parseInt(rgb, 10) + 0x1000000).toString(16); return '#' + bgr.substr(5, 2) + bgr.substr(3, 2) + bgr.substr(1, 2); } function setInnerText(element, text) { if (typeof(element.textContent) != 'undefined') { element.textContent = text; } else { element.innerText = text; } } function updateViewPosition() { var view = m_view.rootElement; var inputPosition = KasperskyLab.getAbsoluteElementPosition(inputElement); var viewHeight = view.offsetHeight; var topInputWindowPosition = inputPosition.top - KasperskyLab.getPageScroll(inputElement.ownerDocument).top; \/\/ vertical position of the element relative to the window var bottomInputWindowPosition = getHeightOfVisiblePartOfPage() - topInputWindowPosition - inputElement.offsetHeight; \/\/ free space right to the element if (!m_view.currentPosition || m_view.currentPosition.top != inputPosition.top || m_view.currentPosition.left != inputPosition.left) { view.style.left = inputPosition.left + \"px\"; if (bottomInputWindowPosition > viewHeight - 1)\n\t\t\t{\n\t\t\t\tview.style.top = (inputPosition.top + inputElement.offsetHeight - 1) + \"px\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tview.style.top = (inputPosition.top - viewHeight + 1) + \"px\";\n\t\t\t}\n\t\t\tm_view.currentPosition = inputPosition;\n\t\t}\n\t}\n\n\tfunction getHeightOfVisiblePartOfPage()\n\t{\n\t\tvar windowHeight;\n\t\tif (window.innerHeight)\n\t\t{\n\t\t\twindowHeight = window.innerHeight;\n\t\t}\n\t\telse if (document.documentElement && document.documentElement.clientHeight)\n\t\t{\n\t\t\twindowHeight = document.documentElement.clientHeight;\n\t\t}\n\t\telse if (document.body)\n\t\t{\n\t\t\twindowHeight = document.body.clientHeight;\n\t\t}\n\t\treturn windowHeight;\n\t}\n\n\tfunction makeDiv(cssText)\n\t{\n\t\tvar div = document.createElement('div');\n\t\tdiv.style.cssText = cssText || '';\n\t\treturn div;\n\t}\n\n\tfunction appendChildsToParent(parent)\n\t{\n\t\tfor (var i = 1, length = arguments.length; i < length; ++i)\n\t\t{\n\t\t\tparent.appendChild(arguments[i]);\n\t\t}\n\t\treturn parent;\n\t}\n\n\tfunction filter(list, predicate)\n\t{\n\t    var result = [];\n\t    for (var i = 0; i < list.length; ++i) { if (predicate(list[i])) { result.push(list[i]); } } return result; } } return ns })(this.KasperskyLabVirtualKeyboard || {}); return this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_210\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){ this.KasperskyLabVirtualKeyboard = (function(ns) { ns.TsfEditor = function(inputElement, window, document, eventsSink, viewFactory) { var m_compositionView = null; this.destroy = function() { if (m_compositionView) { m_compositionView.hide(); m_compositionView = null; } } this.insertText = function(text) { \/\/ TODO: use keypress emulator to insert text insertText(inputElement, text); } this.setComposition = function(composition) { if (!m_compositionView) { m_compositionView = viewFactory(inputElement, window, document); } m_compositionView.update(composition); eventsSink.onCompositionLayoutChange(m_compositionView.getLayout(), getTopWindowLayout()); } function getTopWindowLayout() { var topElement = window.top.document.documentElement; check(topElement, 'Top element is not defined'); check(typeof(topElement.offsetWidth) != 'undefined', 'offsetWidth is not found'); check(typeof(topElement.offsetHeight) != 'undefined', 'offsetHeight is not found'); return { width: topElement.offsetWidth, height: topElement.offsetHeight }; } function insertText(element, text) { check(typeof(text) == 'string', 'Invalid parameter'); if (document.selection &#038;&#038; document.selection.createRange) { var textRange = document.selection.createRange(); if (textRange.parentElement() !== element) { throw new Error(\"Selection is outside the input field\"); } textRange.text = text; textRange.select(); } else { var selectionStart = element.selectionStart; var selectionEnd = element.selectionEnd; var textBeforeSelection = element.value.substr(0, selectionStart); var textAfterSelection = element.value.substr(selectionEnd, element.value.length - selectionEnd); element.value = textBeforeSelection + text + textAfterSelection; var positionAfterText = textBeforeSelection.length + text.length; element.setSelectionRange(positionAfterText, positionAfterText); } } function check(condition, requirementMessage) { if (!condition) { throw new Error('Requirement failed: ' + requirementMessage); } } } return ns })(this.KasperskyLabVirtualKeyboard || {}); return this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script id=\"$B5D5BB14C8E2478D9C97574AC10AF9E8_208\" type=\"text\/javascript\">\/\/ <![CDATA[\nthis.$B5D5BB14C8E2478D9C97574AC10AF9E8=(function(){with(this){\nthis.KasperskyLabVirtualKeyboard = (function(ns) {\n\nns.keyboardEventsDelivery = new KeyboardEventsDeliveryExtension();\n\nfunction KeyboardEventsDeliveryExtension()\n{\n\tvar m_keypressEmulator = new KasperskyLabVirtualKeyboard.KeypressEmulator(new KasperskyLabVirtualKeyboard.KeypressEmulatorInternetExplorerImpl());\n\tvar m_tsfEditor = null;\n\n\tthis.cleanup = function()\n\t{\n\t\tdestroyTsfEditor();\n\t}\n\n\tthis.deliverProtectedKeyboardEventToDocument = function(text, keyCode, isCtrl, isAlt, isShift, isNumpad)\n\t{\n\t\ttry\n\t\t{\n\t\t\tcheck(!!document.activeElement, 'No element has focus');\n\n\t\t\tm_keypressEmulator.emulateKeyboardEvent(document.activeElement, text, keyCode, isCtrl, isAlt, isShift, isNumpad);\n\t\t}\n\t\tcatch (e)\n\t\t{\n\t\t\ttraceError('Cannot deliver keyboard event: ' + e.message)\n\t\t}\n\t}\n\n\tthis.tsfEditorCreate = function(tsfEditorEventsSink)\n\t{\n\t\tdestroyTsfEditor();\n\n\t\tcheck(!!document.activeElement, 'No element has focus');\n\t\tvar viewFactory = function(element, window, document)\n\t\t{\n\t\t\treturn new KasperskyLabVirtualKeyboard.TsfCompositionView(element, window, document);\n\t\t}\n\t\tm_tsfEditor = new KasperskyLabVirtualKeyboard.TsfEditor(document.activeElement, window, document, tsfEditorEventsSink, viewFactory);\n\t}\n\n\tfunction destroyTsfEditor()\n\t{\n\t\tif (m_tsfEditor)\n\t\t{\n\t\t\tm_tsfEditor.destroy();\n\t\t\tm_tsfEditor = null;\n\t\t}\n\t}\n\n\tthis.tsfEditorInsertText = function(text)\n\t{\n\t\tcheck(!!m_tsfEditor, 'No TSF editor is avaliable');\n\t\tm_tsfEditor.insertText(text);\n\t}\n\n\tthis.tsfEditorSetComposition = function(text, selectionStart, selectionEnd)\n\t{\n\t    check(!!m_tsfEditor, 'No TSF editor is avaliable');\n\t\tm_tsfEditor.setComposition({\n\t\t\ttext: text,\n\t\t\tselectionStart: selectionStart,\n\t\t\tselectionEnd: selectionEnd,\n\t\t\ttextDecorations: decodeDecorations(Array.prototype.slice.call(arguments, 3))\n\t\t\t});\n\t}\n\n\tfunction decodeDecorations(listOfTuples)\n\t{\n\t    var tupleSize = 7;\n\t    check(listOfTuples.length % tupleSize == 0);\n\t    var decorations = [];\n\t    for (var i = 0; i + tupleSize <= listOfTuples.length; i += tupleSize) { decorations.push({ start: listOfTuples[i], end: listOfTuples[i + 1], underlineStyle: listOfTuples[i + 2], isBoldUnderline: listOfTuples[i + 3], textColor: listOfTuples[i + 4], backgroundColor: listOfTuples[i + 5], underlineColor: listOfTuples[i + 6] }); } return decorations; } } \/\/ TODO: move this function to a common place function check(condition, message) { if (!condition) { throw new Error(message ? message : 'Requirement failure'); } } \/\/ TODO: move this function to a common place function traceError(msg) { if (console &#038;&#038; console.error) console.error(msg); } return ns })(this.KasperskyLabVirtualKeyboard || {}); return this}}).call(this.$B5D5BB14C8E2478D9C97574AC10AF9E8||{});\n\/\/ ]]><\/script><script src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/osd.js\" type=\"text\/javascript\"><\/script><\/p>\n<div id=\"body-container\">\n<div id=\"page-container\">\n<div id=\"page\" class=\" watch watch-non-stage-mode clearfix\">\n<div id=\"content\" class=\" content-alignment\">\n<div id=\"watch7-container\">\n<div id=\"watch7-main-container\">\n<div id=\"watch7-main\" class=\"clearfix\">\n<div id=\"watch7-content\" class=\"watch-main-col \">\n<div id=\"action-panel-details\" class=\"action-panel-content yt-uix-expander yt-card yt-card-has-padding\" tabindex=\"0\">\n<div id=\"watch-description\" class=\"yt-uix-button-panel\">\n<div id=\"watch-description-content\">\n<div id=\"watch-description-clip\">\n<div id=\"watch-description-text\">\n<p id=\"eow-description\" style=\"text-align: center;\">\u063a\u0646\u0627\u0621 :- \u0627\u0628\u0631\u0627\u0647\u064a\u0645 \u062f\u0634\u062a\u064a<br \/>\n\u0643\u0644\u0645\u0627\u062a :- \u062d\u0627\u0641\u0638 \u0627\u0644\u0631\u0633\u0646<br \/>\n\u0627\u0644\u062d\u0627\u0646 :- \u0641\u0647\u062f \u0627\u0644\u0646\u0627\u0635\u0631<br \/>\n\u062a\u0648\u0632\u064a\u0639 \u0648 \u0645\u0627\u0633\u062a\u0631\u064a\u0646\u063a :- \u0639\u0628\u062f\u0627\u0644\u0644\u0647 \u0627\u0644\u0639\u0645\u0627\u0646\u064a<br \/>\n\u062c\u064a\u062a\u0627\u0631 :- \u064a\u0648\u0633\u0641 \u062e\u0633\u0631\u0648\u0647<br \/>\n\u0646\u0627\u064a :- \u0627\u064a\u0645\u0646 \u0627\u0644\u0627\u0628\u064a\u0636<br \/>\n\u062a\u0635\u0648\u064a\u0631 \u0627\u0644\u0628\u0648\u0633\u062a\u0631 :- \u063a\u0631\u0628\u0644\u0644\u064a \u0627\u0644\u063a\u0631\u0628\u0644\u0644\u064a &#8211; ballyooo<\/p>\n<p style=\"text-align: center;\">:: \u0627\u062f\u0627\u0631\u0629 \u0627\u0639\u0645\u0627\u0644 \u0627\u0644\u0641\u0646\u0627\u0646 \u0627\u0628\u0631\u0627\u0647\u064a\u0645 \u062f\u0634\u062a\u064a ::<br \/>\n0096597611688<\/p>\n<p style=\"text-align: center;\">:: \u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0627\u063a\u0646\u064a\u0647 ::<\/p>\n<p style=\"text-align: center;\">\u0646\u0627 \u0628\u062d\u0651\u0629 \u062d\u0632\u0646 \u0641\u064a \u0648\u0646\u0651\u0629 \u0627\u0644\u0646\u0627\u064a<br \/>\n\u0648\u0627\u0646\u0627 \u062f\u0645\u0639\u0629 \u0642\u0647\u0631 \u0628\u0639\u064a\u0648\u0646 \u0645\u0638\u0644\u0648\u0645<\/p>\n<p style=\"text-align: center;\">\u0623\u0646\u0627 \u063a\u0635\u0646 \u0627\u0644\u062c\u0641\u0627\u0641 \u0627\u0644\u0644\u064a \u0646\u0637\u0631 \u0645\u0627\u064a<br \/>\n\u0633\u0645\u0627 \u0639\u0645\u0631\u0647 \u0628\u062e\u064a\u0644\u0647 \u0648\u0634\u0651\u062d\u0629 \u063a\u064a\u0648\u0645<\/p>\n<p style=\"text-align: center;\">\u0623\u0646\u0627 \u0641\u0631\u0627\u0634\u064a \u0627\u0644\u062a\u0639\u0628 \u0648\u0627\u0647\u0627\u062a\u0647 \u063a\u0637\u0627\u064a<br \/>\n\u0648\u0635\u0628\u0631 \u0639\u0645\u0631\u064a \u062c\u0631\u064a\u062d \u064a\u0637\u064a\u062d \u0648\u064a\u0642\u0648\u0645<\/p>\n<p style=\"text-align: center;\">\u0623\u0644\u0645 \u062c\u0631\u062d\u064a \u0645\u0636\u064a\u0639 \u062e\u0637\u0648\u0629 \u062f\u0648\u0627\u064a<br \/>\n\u062a\u062c\u064a \u0647\u0645\u0648\u0645 \u0648\u062a\u0631\u0648\u062d \u0648\u062a\u0631\u062c\u0639 \u0647\u0645\u0648\u0645<\/p>\n<p style=\"text-align: center;\">\u0639\u0644\u0627\u0645\u0643 \u064a\u0627\u0641\u0631\u062d \u0628\u0633 \u0639\u0646\u062f\u064a \u0646\u0633\u0627\u064a<br \/>\n\u0639\u0646 \u0643\u0641\u0648\u0641\u064a \u0645\u0633\u0627\u0641\u0629 \u0628\u0639\u062f\u0643 \u0646\u062c\u0648\u0645<\/p>\n<p style=\"text-align: center;\">\u062a\u062d\u062a \u0631\u062d\u0645\u0629 \u062e\u0631\u064a\u0641\u064a \u0648\u0642\u0633\u0648\u0629 \u0634\u062a\u0627\u064a<br \/>\n\u0648\u0644\u0643\u0646 \u0627\u0644\u0631\u0628\u064a\u0639 \u0644\u0639\u0645\u0631\u064a \u0645\u0642\u0633\u0648\u0645<\/p>\n<p style=\"text-align: center;\">\u0646\u0637\u0631\u062a\u0643 \u064a\u0627\u0644\u0641\u0631\u062c \u0645\u0648 \u0642\u0644\u062a\u0644\u064a \u062c\u0627\u064a<br \/>\n\u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0639\u062f \u0628\u0635\u0628\u0651\u0631 \u062d\u0644\u0645\u064a \u0686\u0645 \u064a\u0648\u0645<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/youtu.be\/RL5uZIrDwGE?list=PLRvKdiRzD6pJ3cgKvUry7hmiqCqXXDFgQ \u0627\u0628\u0631\u0627\u0647\u064a\u0645 \u062f\u0634\u062a\u064a &#8211; \u0628\u062d\u0647 \u062d\u0632\u0646 2016 |\u00a0Ibrahim dashti &#8211; bahhat hezin\u200e \u063a\u0646\u0627\u0621 :- \u0627\u0628\u0631\u0627\u0647\u064a\u0645 \u062f\u0634\u062a\u064a \u0643\u0644\u0645\u0627\u062a :- \u062d\u0627\u0641\u0638 \u0627\u0644\u0631\u0633\u0646 \u0627\u0644\u062d\u0627\u0646 :- \u0641\u0647\u062f \u0627\u0644\u0646\u0627\u0635\u0631 \u062a\u0648\u0632\u064a\u0639 \u0648 \u0645\u0627\u0633\u062a\u0631\u064a\u0646\u063a :- \u0639\u0628\u062f\u0627\u0644\u0644\u0647 \u0627\u0644\u0639\u0645\u0627\u0646\u064a \u062c\u064a\u062a\u0627\u0631 :- \u064a\u0648\u0633\u0641 \u062e\u0633\u0631\u0648\u0647 \u0646\u0627\u064a :- \u0627\u064a\u0645\u0646 \u0627\u0644\u0627\u0628\u064a\u0636 \u062a\u0635\u0648\u064a\u0631 \u0627\u0644\u0628\u0648\u0633\u062a\u0631 :- \u063a\u0631\u0628\u0644\u0644\u064a \u0627\u0644\u063a\u0631\u0628\u0644\u0644\u064a &#8211; ballyooo :: \u0627\u062f\u0627\u0631\u0629 \u0627\u0639\u0645\u0627\u0644 \u0627\u0644\u0641\u0646\u0627\u0646 \u0627\u0628\u0631\u0627\u0647\u064a\u0645 \u062f\u0634\u062a\u064a :: 0096597611688 :: \u0643\u0644\u0645\u0627\u062a &#8230;<\/p>\n","protected":false},"author":1,"featured_media":2481,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"image","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-2480","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-3","post_format-post-format-image"],"_links":{"self":[{"href":"http:\/\/fn1q8.com\/index.php?rest_route=\/wp\/v2\/posts\/2480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/fn1q8.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/fn1q8.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/fn1q8.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/fn1q8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2480"}],"version-history":[{"count":4,"href":"http:\/\/fn1q8.com\/index.php?rest_route=\/wp\/v2\/posts\/2480\/revisions"}],"predecessor-version":[{"id":2485,"href":"http:\/\/fn1q8.com\/index.php?rest_route=\/wp\/v2\/posts\/2480\/revisions\/2485"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/fn1q8.com\/index.php?rest_route=\/wp\/v2\/media\/2481"}],"wp:attachment":[{"href":"http:\/\/fn1q8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/fn1q8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2480"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/fn1q8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}