/* Outlook specific API library */
/* Version: 16.0.6807.1000 */
/*
	Copyright (c) Microsoft Corporation.  All rights reserved.
*/

/*
	Your use of this file is governed by the Microsoft Services Agreement http://go.microsoft.com/fwlink/?LinkId=266419.
*/

var __extends=this && this.__extends || function(d, b)
	{
		for(var p in b)
			if(b.hasOwnProperty(p))
				d[p]=b[p];
		function __()
		{
			this.constructor=d
		}
		d.prototype=b===null ? Object.create(b) : (__.prototype=b.prototype,new __)
	};
var OfficeExt;
(function(OfficeExt)
{
	var MicrosoftAjaxFactory=function()
		{
			function MicrosoftAjaxFactory(){}
			MicrosoftAjaxFactory.prototype.isMsAjaxLoaded=function()
			{
				if(typeof Sys !=="undefined" && typeof Type !=="undefined" && Sys.StringBuilder && typeof Sys.StringBuilder==="function" && Type.registerNamespace && typeof Type.registerNamespace==="function" && Type.registerClass && typeof Type.registerClass==="function" && typeof Function._validateParams==="function")
					return true;
				else
					return false
			};
			MicrosoftAjaxFactory.prototype.loadMsAjaxFull=function(callback)
			{
				var msAjaxCDNPath=(window.location.protocol.toLowerCase()==="https:" ? "https:" : "http:")+"//ajax.aspnetcdn.com/ajax/3.5/MicrosoftAjax.js";
				OSF.OUtil.loadScript(msAjaxCDNPath,callback)
			};
			Object.defineProperty(MicrosoftAjaxFactory.prototype,"msAjaxError",{
				get: function()
				{
					if(this._msAjaxError==null && this.isMsAjaxLoaded())
						this._msAjaxError=Error;
					return this._msAjaxError
				},
				set: function(errorClass)
				{
					this._msAjaxError=errorClass
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(MicrosoftAjaxFactory.prototype,"msAjaxSerializer",{
				get: function()
				{
					if(this._msAjaxSerializer==null && this.isMsAjaxLoaded())
						this._msAjaxSerializer=Sys.Serialization.JavaScriptSerializer;
					return this._msAjaxSerializer
				},
				set: function(serializerClass)
				{
					this._msAjaxSerializer=serializerClass
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(MicrosoftAjaxFactory.prototype,"msAjaxString",{
				get: function()
				{
					if(this._msAjaxString==null && this.isMsAjaxLoaded())
						this._msAjaxSerializer=String;
					return this._msAjaxString
				},
				set: function(stringClass)
				{
					this._msAjaxString=stringClass
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(MicrosoftAjaxFactory.prototype,"msAjaxDebug",{
				get: function()
				{
					if(this._msAjaxDebug==null && this.isMsAjaxLoaded())
						this._msAjaxDebug=Sys.Debug;
					return this._msAjaxDebug
				},
				set: function(debugClass)
				{
					this._msAjaxDebug=debugClass
				},
				enumerable: true,
				configurable: true
			});
			return MicrosoftAjaxFactory
		}();
	OfficeExt.MicrosoftAjaxFactory=MicrosoftAjaxFactory
})(OfficeExt || (OfficeExt={}));
var OsfMsAjaxFactory=new OfficeExt.MicrosoftAjaxFactory;
var OSF=OSF || {};
var OfficeExt;
(function(OfficeExt)
{
	var SafeStorage=function()
		{
			function SafeStorage(_internalStorage)
			{
				this._internalStorage=_internalStorage
			}
			SafeStorage.prototype.getItem=function(key)
			{
				try
				{
					return this._internalStorage && this._internalStorage.getItem(key)
				}
				catch(e)
				{
					return null
				}
			};
			SafeStorage.prototype.setItem=function(key, data)
			{
				try
				{
					this._internalStorage && this._internalStorage.setItem(key,data)
				}
				catch(e){}
			};
			SafeStorage.prototype.clear=function()
			{
				try
				{
					this._internalStorage && this._internalStorage.clear()
				}
				catch(e){}
			};
			SafeStorage.prototype.removeItem=function(key)
			{
				try
				{
					this._internalStorage && this._internalStorage.removeItem(key)
				}
				catch(e){}
			};
			SafeStorage.prototype.getKeysWithPrefix=function(keyPrefix)
			{
				var keyList=[];
				try
				{
					var len=this._internalStorage && this._internalStorage.length || 0;
					for(var i=0; i < len; i++)
					{
						var key=this._internalStorage.key(i);
						if(key.indexOf(keyPrefix)===0)
							keyList.push(key)
					}
				}
				catch(e){}
				return keyList
			};
			return SafeStorage
		}();
	OfficeExt.SafeStorage=SafeStorage
})(OfficeExt || (OfficeExt={}));
OSF.OUtil=function()
{
	var _uniqueId=-1;
	var _xdmInfoKey="&_xdm_Info=";
	var _serializerVersionKey="&_serializer_version=";
	var _xdmSessionKeyPrefix="_xdm_";
	var _serializerVersionKeyPrefix="_serializer_version=";
	var _fragmentSeparator="#";
	var _loadedScripts={};
	var _defaultScriptLoadingTimeout=3e4;
	var _safeSessionStorage=null;
	var _safeLocalStorage=null;
	var _rndentropy=(new Date).getTime();
	function _random()
	{
		var nextrand=2147483647 * Math.random();
		nextrand ^=_rndentropy ^ (new Date).getMilliseconds() << Math.floor(Math.random() * (31 - 10));
		return nextrand.toString(16)
	}
	function _getSessionStorage()
	{
		if(!_safeSessionStorage)
		{
			try
			{
				var sessionStorage=window.sessionStorage
			}
			catch(ex)
			{
				sessionStorage=null
			}
			_safeSessionStorage=new OfficeExt.SafeStorage(sessionStorage)
		}
		return _safeSessionStorage
	}
	return{
			set_entropy: function OSF_OUtil$set_entropy(entropy)
			{
				if(typeof entropy=="string")
					for(var i=0; i < entropy.length; i+=4)
					{
						var temp=0;
						for(var j=0; j < 4 && i+j < entropy.length; j++)
							temp=(temp << 8)+entropy.charCodeAt(i+j);
						_rndentropy ^=temp
					}
				else if(typeof entropy=="number")
					_rndentropy ^=entropy;
				else
					_rndentropy ^=2147483647 * Math.random();
				_rndentropy &=2147483647
			},
			extend: function OSF_OUtil$extend(child, parent)
			{
				var F=function(){};
				F.prototype=parent.prototype;
				child.prototype=new F;
				child.prototype.constructor=child;
				child.uber=parent.prototype;
				if(parent.prototype.constructor===Object.prototype.constructor)
					parent.prototype.constructor=parent
			},
			setNamespace: function OSF_OUtil$setNamespace(name, parent)
			{
				if(parent && name && !parent[name])
					parent[name]={}
			},
			unsetNamespace: function OSF_OUtil$unsetNamespace(name, parent)
			{
				if(parent && name && parent[name])
					delete parent[name]
			},
			loadScript: function OSF_OUtil$loadScript(url, callback, timeoutInMs)
			{
				if(url && callback)
				{
					var doc=window.document;
					var _loadedScriptEntry=_loadedScripts[url];
					if(!_loadedScriptEntry)
					{
						var script=doc.createElement("script");
						script.type="text/javascript";
						_loadedScriptEntry={
							loaded: false,
							pendingCallbacks: [callback],
							timer: null
						};
						_loadedScripts[url]=_loadedScriptEntry;
						var onLoadCallback=function OSF_OUtil_loadScript$onLoadCallback()
							{
								if(_loadedScriptEntry.timer !=null)
								{
									clearTimeout(_loadedScriptEntry.timer);
									delete _loadedScriptEntry.timer
								}
								_loadedScriptEntry.loaded=true;
								var pendingCallbackCount=_loadedScriptEntry.pendingCallbacks.length;
								for(var i=0; i < pendingCallbackCount; i++)
								{
									var currentCallback=_loadedScriptEntry.pendingCallbacks.shift();
									currentCallback()
								}
							};
						var onLoadError=function OSF_OUtil_loadScript$onLoadError()
							{
								delete _loadedScripts[url];
								if(_loadedScriptEntry.timer !=null)
								{
									clearTimeout(_loadedScriptEntry.timer);
									delete _loadedScriptEntry.timer
								}
								var pendingCallbackCount=_loadedScriptEntry.pendingCallbacks.length;
								for(var i=0; i < pendingCallbackCount; i++)
								{
									var currentCallback=_loadedScriptEntry.pendingCallbacks.shift();
									currentCallback()
								}
							};
						if(script.readyState)
							script.onreadystatechange=function()
							{
								if(script.readyState=="loaded" || script.readyState=="complete")
								{
									script.onreadystatechange=null;
									onLoadCallback()
								}
							};
						else
							script.onload=onLoadCallback;
						script.onerror=onLoadError;
						timeoutInMs=timeoutInMs || _defaultScriptLoadingTimeout;
						_loadedScriptEntry.timer=setTimeout(onLoadError,timeoutInMs);
						script.src=url;
						doc.getElementsByTagName("head")[0].appendChild(script)
					}
					else if(_loadedScriptEntry.loaded)
						callback();
					else
						_loadedScriptEntry.pendingCallbacks.push(callback)
				}
			},
			loadCSS: function OSF_OUtil$loadCSS(url)
			{
				if(url)
				{
					var doc=window.document;
					var link=doc.createElement("link");
					link.type="text/css";
					link.rel="stylesheet";
					link.href=url;
					doc.getElementsByTagName("head")[0].appendChild(link)
				}
			},
			parseEnum: function OSF_OUtil$parseEnum(str, enumObject)
			{
				var parsed=enumObject[str.trim()];
				if(typeof parsed=="undefined")
				{
					OsfMsAjaxFactory.msAjaxDebug.trace("invalid enumeration string:"+str);
					throw OsfMsAjaxFactory.msAjaxError.argument("str");
				}
				return parsed
			},
			delayExecutionAndCache: function OSF_OUtil$delayExecutionAndCache()
			{
				var obj={calc: arguments[0]};
				return function()
					{
						if(obj.calc)
						{
							obj.val=obj.calc.apply(this,arguments);
							delete obj.calc
						}
						return obj.val
					}
			},
			getUniqueId: function OSF_OUtil$getUniqueId()
			{
				_uniqueId=_uniqueId+1;
				return _uniqueId.toString()
			},
			formatString: function OSF_OUtil$formatString()
			{
				var args=arguments;
				var source=args[0];
				return source.replace(/{(\d+)}/gm,function(match, number)
					{
						var index=parseInt(number,10)+1;
						return args[index]===undefined ? "{"+number+"}" : args[index]
					})
			},
			generateConversationId: function OSF_OUtil$generateConversationId()
			{
				return[_random(),_random(),(new Date).getTime().toString()].join("_")
			},
			getFrameNameAndConversationId: function OSF_OUtil$getFrameNameAndConversationId(cacheKey, frame)
			{
				var frameName=_xdmSessionKeyPrefix+cacheKey+this.generateConversationId();
				frame.setAttribute("name",frameName);
				return this.generateConversationId()
			},
			addXdmInfoAsHash: function OSF_OUtil$addXdmInfoAsHash(url, xdmInfoValue)
			{
				return OSF.OUtil.addInfoAsHash(url,_xdmInfoKey,xdmInfoValue)
			},
			addSerializerVersionAsHash: function OSF_OUtil$addSerializerVersionAsHash(url, serializerVersion)
			{
				return OSF.OUtil.addInfoAsHash(url,_serializerVersionKey,serializerVersion)
			},
			addInfoAsHash: function OSF_OUtil$addInfoAsHash(url, keyName, infoValue)
			{
				url=url.trim() || "";
				var urlParts=url.split(_fragmentSeparator);
				var urlWithoutFragment=urlParts.shift();
				var fragment=urlParts.join(_fragmentSeparator);
				return[urlWithoutFragment,_fragmentSeparator,fragment,keyName,infoValue].join("")
			},
			parseXdmInfo: function OSF_OUtil$parseXdmInfo(skipSessionStorage)
			{
				return OSF.OUtil.parseXdmInfoWithGivenFragment(skipSessionStorage,window.location.hash)
			},
			parseXdmInfoWithGivenFragment: function OSF_OUtil$parseXdmInfoWithGivenFragment(skipSessionStorage, fragment)
			{
				return OSF.OUtil.parseInfoWithGivenFragment(_xdmInfoKey,_xdmSessionKeyPrefix,skipSessionStorage,fragment)
			},
			parseSerializerVersion: function OSF_OUtil$parseSerializerVersion(skipSessionStorage)
			{
				return OSF.OUtil.parseSerializerVersionWithGivenFragment(skipSessionStorage,window.location.hash)
			},
			parseSerializerVersionWithGivenFragment: function OSF_OUtil$parseSerializerVersionWithGivenFragment(skipSessionStorage, fragment)
			{
				return parseInt(OSF.OUtil.parseInfoWithGivenFragment(_serializerVersionKey,_serializerVersionKeyPrefix,skipSessionStorage,fragment))
			},
			parseInfoWithGivenFragment: function OSF_OUtil$parseInfoWithGivenFragment(infoKey, infoKeyPrefix, skipSessionStorage, fragment)
			{
				var fragmentParts=fragment.split(infoKey);
				var xdmInfoValue=fragmentParts.length > 1 ? fragmentParts[fragmentParts.length - 1] : null;
				var osfSessionStorage=_getSessionStorage();
				if(!skipSessionStorage && osfSessionStorage)
				{
					var sessionKeyStart=window.name.indexOf(infoKeyPrefix);
					if(sessionKeyStart > -1)
					{
						var sessionKeyEnd=window.name.indexOf(";",sessionKeyStart);
						if(sessionKeyEnd==-1)
							sessionKeyEnd=window.name.length;
						var sessionKey=window.name.substring(sessionKeyStart,sessionKeyEnd);
						if(xdmInfoValue)
							osfSessionStorage.setItem(sessionKey,xdmInfoValue);
						else
							xdmInfoValue=osfSessionStorage.getItem(sessionKey)
					}
				}
				return xdmInfoValue
			},
			getConversationId: function OSF_OUtil$getConversationId()
			{
				var searchString=window.location.search;
				var conversationId=null;
				if(searchString)
				{
					var index=searchString.indexOf("&");
					conversationId=index > 0 ? searchString.substring(1,index) : searchString.substr(1);
					if(conversationId && conversationId.charAt(conversationId.length - 1)==="=")
					{
						conversationId=conversationId.substring(0,conversationId.length - 1);
						if(conversationId)
							conversationId=decodeURIComponent(conversationId)
					}
				}
				return conversationId
			},
			getInfoItems: function OSF_OUtil$getInfoItems(strInfo)
			{
				var items=strInfo.split("$");
				if(typeof items[1]=="undefined")
					items=strInfo.split("|");
				return items
			},
			getConversationUrl: function OSF_OUtil$getConversationUrl()
			{
				var conversationUrl="";
				var xdmInfoValue=OSF.OUtil.parseXdmInfo(true);
				if(xdmInfoValue)
				{
					var items=OSF.OUtil.getInfoItems(xdmInfoValue);
					if(items !=undefined && items.length >=3)
						conversationUrl=items[2]
				}
				return conversationUrl
			},
			validateParamObject: function OSF_OUtil$validateParamObject(params, expectedProperties, callback)
			{
				var e=Function._validateParams(arguments,[{
							name: "params",
							type: Object,
							mayBeNull: false
						},{
							name: "expectedProperties",
							type: Object,
							mayBeNull: false
						},{
							name: "callback",
							type: Function,
							mayBeNull: true
						}]);
				if(e)
					throw e;
				for(var p in expectedProperties)
				{
					e=Function._validateParameter(params[p],expectedProperties[p],p);
					if(e)
						throw e;
				}
			},
			writeProfilerMark: function OSF_OUtil$writeProfilerMark(text)
			{
				if(window.msWriteProfilerMark)
				{
					window.msWriteProfilerMark(text);
					OsfMsAjaxFactory.msAjaxDebug.trace(text)
				}
			},
			outputDebug: function OSF_OUtil$outputDebug(text)
			{
				if(typeof Sys !=="undefined" && Sys && Sys.Debug)
					OsfMsAjaxFactory.msAjaxDebug.trace(text)
			},
			defineNondefaultProperty: function OSF_OUtil$defineNondefaultProperty(obj, prop, descriptor, attributes)
			{
				descriptor=descriptor || {};
				for(var nd in attributes)
				{
					var attribute=attributes[nd];
					if(descriptor[attribute]==undefined)
						descriptor[attribute]=true
				}
				Object.defineProperty(obj,prop,descriptor);
				return obj
			},
			defineNondefaultProperties: function OSF_OUtil$defineNondefaultProperties(obj, descriptors, attributes)
			{
				descriptors=descriptors || {};
				for(var prop in descriptors)
					OSF.OUtil.defineNondefaultProperty(obj,prop,descriptors[prop],attributes);
				return obj
			},
			defineEnumerableProperty: function OSF_OUtil$defineEnumerableProperty(obj, prop, descriptor)
			{
				return OSF.OUtil.defineNondefaultProperty(obj,prop,descriptor,["enumerable"])
			},
			defineEnumerableProperties: function OSF_OUtil$defineEnumerableProperties(obj, descriptors)
			{
				return OSF.OUtil.defineNondefaultProperties(obj,descriptors,["enumerable"])
			},
			defineMutableProperty: function OSF_OUtil$defineMutableProperty(obj, prop, descriptor)
			{
				return OSF.OUtil.defineNondefaultProperty(obj,prop,descriptor,["writable","enumerable","configurable"])
			},
			defineMutableProperties: function OSF_OUtil$defineMutableProperties(obj, descriptors)
			{
				return OSF.OUtil.defineNondefaultProperties(obj,descriptors,["writable","enumerable","configurable"])
			},
			finalizeProperties: function OSF_OUtil$finalizeProperties(obj, descriptor)
			{
				descriptor=descriptor || {};
				var props=Object.getOwnPropertyNames(obj);
				var propsLength=props.length;
				for(var i=0; i < propsLength; i++)
				{
					var prop=props[i];
					var desc=Object.getOwnPropertyDescriptor(obj,prop);
					if(!desc.get && !desc.set)
						desc.writable=descriptor.writable || false;
					desc.configurable=descriptor.configurable || false;
					desc.enumerable=descriptor.enumerable || true;
					Object.defineProperty(obj,prop,desc)
				}
				return obj
			},
			mapList: function OSF_OUtil$MapList(list, mapFunction)
			{
				var ret=[];
				if(list)
					for(var item in list)
						ret.push(mapFunction(list[item]));
				return ret
			},
			listContainsKey: function OSF_OUtil$listContainsKey(list, key)
			{
				for(var item in list)
					if(key==item)
						return true;
				return false
			},
			listContainsValue: function OSF_OUtil$listContainsElement(list, value)
			{
				for(var item in list)
					if(value==list[item])
						return true;
				return false
			},
			augmentList: function OSF_OUtil$augmentList(list, addenda)
			{
				var add=list.push ? function(key, value)
					{
						list.push(value)
					} : function(key, value)
					{
						list[key]=value
					};
				for(var key in addenda)
					add(key,addenda[key])
			},
			redefineList: function OSF_Outil$redefineList(oldList, newList)
			{
				for(var key1 in oldList)
					delete oldList[key1];
				for(var key2 in newList)
					oldList[key2]=newList[key2]
			},
			isArray: function OSF_OUtil$isArray(obj)
			{
				return Object.prototype.toString.apply(obj)==="[object Array]"
			},
			isFunction: function OSF_OUtil$isFunction(obj)
			{
				return Object.prototype.toString.apply(obj)==="[object Function]"
			},
			isDate: function OSF_OUtil$isDate(obj)
			{
				return Object.prototype.toString.apply(obj)==="[object Date]"
			},
			addEventListener: function OSF_OUtil$addEventListener(element, eventName, listener)
			{
				if(element.addEventListener)
					element.addEventListener(eventName,listener,false);
				else if(Sys.Browser.agent===Sys.Browser.InternetExplorer && element.attachEvent)
					element.attachEvent("on"+eventName,listener);
				else
					element["on"+eventName]=listener
			},
			removeEventListener: function OSF_OUtil$removeEventListener(element, eventName, listener)
			{
				if(element.removeEventListener)
					element.removeEventListener(eventName,listener,false);
				else if(Sys.Browser.agent===Sys.Browser.InternetExplorer && element.detachEvent)
					element.detachEvent("on"+eventName,listener);
				else
					element["on"+eventName]=null
			},
			getCookieValue: function OSF_OUtil$getCookieValue(cookieName)
			{
				var tmpCookieString=RegExp(cookieName+"[^;]+").exec(document.cookie);
				return tmpCookieString.toString().replace(/^[^=]+./,"")
			},
			xhrGet: function OSF_OUtil$xhrGet(url, onSuccess, onError)
			{
				var xmlhttp;
				try
				{
					xmlhttp=new XMLHttpRequest;
					xmlhttp.onreadystatechange=function()
					{
						if(xmlhttp.readyState==4)
							if(xmlhttp.status==200)
								onSuccess(xmlhttp.responseText);
							else
								onError(xmlhttp.status)
					};
					xmlhttp.open("GET",url,true);
					xmlhttp.send()
				}
				catch(ex)
				{
					onError(ex)
				}
			},
			xhrGetFull: function OSF_OUtil$xhrGetFull(url, oneDriveFileName, onSuccess, onError)
			{
				var xmlhttp;
				var requestedFileName=oneDriveFileName;
				try
				{
					xmlhttp=new XMLHttpRequest;
					xmlhttp.onreadystatechange=function()
					{
						if(xmlhttp.readyState==4)
							if(xmlhttp.status==200)
								onSuccess(xmlhttp,requestedFileName);
							else
								onError(xmlhttp.status)
					};
					xmlhttp.open("GET",url,true);
					xmlhttp.send()
				}
				catch(ex)
				{
					onError(ex)
				}
			},
			encodeBase64: function OSF_Outil$encodeBase64(input)
			{
				if(!input)
					return input;
				var codex="ABCDEFGHIJKLMNOP"+"QRSTUVWXYZabcdef"+"ghijklmnopqrstuv"+"wxyz0123456789+/=";
				var output=[];
				var temp=[];
				var index=0;
				var c1,
					c2,
					c3,
					a,
					b,
					c;
				var i;
				var length=input.length;
				do
				{
					c1=input.charCodeAt(index++);
					c2=input.charCodeAt(index++);
					c3=input.charCodeAt(index++);
					i=0;
					a=c1 & 255;
					b=c1 >> 8;
					c=c2 & 255;
					temp[i++]=a >> 2;
					temp[i++]=(a & 3) << 4 | b >> 4;
					temp[i++]=(b & 15) << 2 | c >> 6;
					temp[i++]=c & 63;
					if(!isNaN(c2))
					{
						a=c2 >> 8;
						b=c3 & 255;
						c=c3 >> 8;
						temp[i++]=a >> 2;
						temp[i++]=(a & 3) << 4 | b >> 4;
						temp[i++]=(b & 15) << 2 | c >> 6;
						temp[i++]=c & 63
					}
					if(isNaN(c2))
						temp[i - 1]=64;
					else if(isNaN(c3))
					{
						temp[i - 2]=64;
						temp[i - 1]=64
					}
					for(var t=0; t < i; t++)
						output.push(codex.charAt(temp[t]))
				} while(index < length);
				return output.join("")
			},
			getSessionStorage: function OSF_Outil$getSessionStorage()
			{
				return _getSessionStorage()
			},
			getLocalStorage: function OSF_Outil$getLocalStorage()
			{
				if(!_safeLocalStorage)
				{
					try
					{
						var localStorage=window.localStorage
					}
					catch(ex)
					{
						localStorage=null
					}
					_safeLocalStorage=new OfficeExt.SafeStorage(localStorage)
				}
				return _safeLocalStorage
			},
			convertIntToCssHexColor: function OSF_Outil$convertIntToCssHexColor(val)
			{
				var hex="#"+(Number(val)+16777216).toString(16).slice(-6);
				return hex
			},
			attachClickHandler: function OSF_Outil$attachClickHandler(element, handler)
			{
				element.onclick=function(e)
				{
					handler()
				};
				element.ontouchend=function(e)
				{
					handler();
					e.preventDefault()
				}
			},
			getQueryStringParamValue: function OSF_Outil$getQueryStringParamValue(queryString, paramName)
			{
				var e=Function._validateParams(arguments,[{
							name: "queryString",
							type: String,
							mayBeNull: false
						},{
							name: "paramName",
							type: String,
							mayBeNull: false
						}]);
				if(e)
				{
					OsfMsAjaxFactory.msAjaxDebug.trace("OSF_Outil_getQueryStringParamValue: Parameters cannot be null.");
					return""
				}
				var queryExp=new RegExp("[\\?&]"+paramName+"=([^&#]*)","i");
				if(!queryExp.test(queryString))
				{
					OsfMsAjaxFactory.msAjaxDebug.trace("OSF_Outil_getQueryStringParamValue: The parameter is not found.");
					return""
				}
				return queryExp.exec(queryString)[1]
			},
			isiOS: function OSF_Outil$isiOS()
			{
				return window.navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false
			},
			shallowCopy: function OSF_Outil$shallowCopy(sourceObj)
			{
				var copyObj=sourceObj.constructor();
				for(var property in sourceObj)
					if(sourceObj.hasOwnProperty(property))
						copyObj[property]=sourceObj[property];
				return copyObj
			},
			serializeOMEXResponseErrorMessage: function OSF_Outil$serializeObjectToString(response)
			{
				if(typeof JSON !=="undefined")
					try
					{
						return JSON.stringify(response)
					}
					catch(ex){}
				return""
			},
			createObject: function OSF_Outil$createObject(properties)
			{
				var obj=null;
				if(properties)
				{
					obj={};
					var len=properties.length;
					for(var i=0; i < len; i++)
						obj[properties[i].name]=properties[i].value
				}
				return obj
			}
		}
}();
OSF.OUtil.Guid=function()
{
	var hexCode=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
	return{generateNewGuid: function OSF_Outil_Guid$generateNewGuid()
			{
				var result="";
				var tick=(new Date).getTime();
				var index=0;
				for(; index < 32 && tick > 0; index++)
				{
					if(index==8 || index==12 || index==16 || index==20)
						result+="-";
					result+=hexCode[tick % 16];
					tick=Math.floor(tick / 16)
				}
				for(; index < 32; index++)
				{
					if(index==8 || index==12 || index==16 || index==20)
						result+="-";
					result+=hexCode[Math.floor(Math.random() * 16)]
				}
				return result
			}}
}();
window.OSF=OSF;
OSF.OUtil.setNamespace("OSF",window);
OSF.AppName={
	Unsupported: 0,
	Excel: 1,
	Word: 2,
	PowerPoint: 4,
	Outlook: 8,
	ExcelWebApp: 16,
	WordWebApp: 32,
	OutlookWebApp: 64,
	Project: 128,
	AccessWebApp: 256,
	PowerpointWebApp: 512,
	ExcelIOS: 1024,
	Sway: 2048,
	WordIOS: 4096,
	PowerPointIOS: 8192,
	Access: 16384,
	Lync: 32768,
	OutlookIOS: 65536,
	OneNoteWebApp: 131072
};
OSF.InternalPerfMarker={
	DataCoercionBegin: "Agave.HostCall.CoerceDataStart",
	DataCoercionEnd: "Agave.HostCall.CoerceDataEnd"
};
OSF.HostCallPerfMarker={
	IssueCall: "Agave.HostCall.IssueCall",
	ReceiveResponse: "Agave.HostCall.ReceiveResponse",
	RuntimeExceptionRaised: "Agave.HostCall.RuntimeExecptionRaised"
};
OSF.AgaveHostAction={
	Select: 0,
	UnSelect: 1,
	CancelDialog: 2,
	InsertAgave: 3,
	CtrlF6In: 4,
	CtrlF6Exit: 5,
	CtrlF6ExitShift: 6,
	SelectWithError: 7,
	NotifyHostError: 8,
	RefreshAddinCommands: 9
};
OSF.SharedConstants={NotificationConversationIdSuffix: "_ntf"};
OSF.DialogMessageType={
	DialogMessageReceived: 0,
	DialogClosed: 1,
	NavigationFailed: 2,
	InvalidSchema: 3
};
OSF.OfficeAppContext=function OSF_OfficeAppContext(id, appName, appVersion, appUILocale, dataLocale, docUrl, clientMode, settings, reason, osfControlType, eToken, correlationId, appInstanceId, touchEnabled, commerceAllowed, appMinorVersion, requirementMatrix)
{
	this._id=id;
	this._appName=appName;
	this._appVersion=appVersion;
	this._appUILocale=appUILocale;
	this._dataLocale=dataLocale;
	this._docUrl=docUrl;
	this._clientMode=clientMode;
	this._settings=settings;
	this._reason=reason;
	this._osfControlType=osfControlType;
	this._eToken=eToken;
	this._correlationId=correlationId;
	this._appInstanceId=appInstanceId;
	this._touchEnabled=touchEnabled;
	this._commerceAllowed=commerceAllowed;
	this._appMinorVersion=appMinorVersion;
	this._requirementMatrix=requirementMatrix;
	this._isDialog=false;
	this.get_id=function get_id()
	{
		return this._id
	};
	this.get_appName=function get_appName()
	{
		return this._appName
	};
	this.get_appVersion=function get_appVersion()
	{
		return this._appVersion
	};
	this.get_appUILocale=function get_appUILocale()
	{
		return this._appUILocale
	};
	this.get_dataLocale=function get_dataLocale()
	{
		return this._dataLocale
	};
	this.get_docUrl=function get_docUrl()
	{
		return this._docUrl
	};
	this.get_clientMode=function get_clientMode()
	{
		return this._clientMode
	};
	this.get_bindings=function get_bindings()
	{
		return this._bindings
	};
	this.get_settings=function get_settings()
	{
		return this._settings
	};
	this.get_reason=function get_reason()
	{
		return this._reason
	};
	this.get_osfControlType=function get_osfControlType()
	{
		return this._osfControlType
	};
	this.get_eToken=function get_eToken()
	{
		return this._eToken
	};
	this.get_correlationId=function get_correlationId()
	{
		return this._correlationId
	};
	this.get_appInstanceId=function get_appInstanceId()
	{
		return this._appInstanceId
	};
	this.get_touchEnabled=function get_touchEnabled()
	{
		return this._touchEnabled
	};
	this.get_commerceAllowed=function get_commerceAllowed()
	{
		return this._commerceAllowed
	};
	this.get_appMinorVersion=function get_appMinorVersion()
	{
		return this._appMinorVersion
	};
	this.get_requirementMatrix=function get_requirementMatrix()
	{
		return this._requirementMatrix
	};
	this.get_isDialog=function get_isDialog()
	{
		return this._isDialog
	}
};
OSF.OsfControlType={
	DocumentLevel: 0,
	ContainerLevel: 1
};
OSF.ClientMode={
	ReadOnly: 0,
	ReadWrite: 1
};
OSF.OUtil.setNamespace("Microsoft",window);
OSF.OUtil.setNamespace("Office",Microsoft);
OSF.OUtil.setNamespace("Client",Microsoft.Office);
OSF.OUtil.setNamespace("WebExtension",Microsoft.Office);
Microsoft.Office.WebExtension.InitializationReason={
	Inserted: "inserted",
	DocumentOpened: "documentOpened"
};
Microsoft.Office.WebExtension.ValueFormat={
	Unformatted: "unformatted",
	Formatted: "formatted"
};
Microsoft.Office.WebExtension.FilterType={All: "all"};
Microsoft.Office.WebExtension.Parameters={
	BindingType: "bindingType",
	CoercionType: "coercionType",
	ValueFormat: "valueFormat",
	FilterType: "filterType",
	Columns: "columns",
	SampleData: "sampleData",
	GoToType: "goToType",
	SelectionMode: "selectionMode",
	Id: "id",
	PromptText: "promptText",
	ItemName: "itemName",
	FailOnCollision: "failOnCollision",
	StartRow: "startRow",
	StartColumn: "startColumn",
	RowCount: "rowCount",
	ColumnCount: "columnCount",
	Callback: "callback",
	AsyncContext: "asyncContext",
	Data: "data",
	Rows: "rows",
	OverwriteIfStale: "overwriteIfStale",
	FileType: "fileType",
	EventType: "eventType",
	Handler: "handler",
	SliceSize: "sliceSize",
	SliceIndex: "sliceIndex",
	ActiveView: "activeView",
	Status: "status",
	Xml: "xml",
	Namespace: "namespace",
	Prefix: "prefix",
	XPath: "xPath",
	Text: "text",
	ImageLeft: "imageLeft",
	ImageTop: "imageTop",
	ImageWidth: "imageWidth",
	ImageHeight: "imageHeight",
	TaskId: "taskId",
	FieldId: "fieldId",
	FieldValue: "fieldValue",
	ServerUrl: "serverUrl",
	ListName: "listName",
	ResourceId: "resourceId",
	ViewType: "viewType",
	ViewName: "viewName",
	GetRawValue: "getRawValue",
	CellFormat: "cellFormat",
	TableOptions: "tableOptions",
	TaskIndex: "taskIndex",
	ResourceIndex: "resourceIndex",
	Url: "url",
	MessageHandler: "messageHandler",
	Width: "width",
	Height: "height",
	RequireHTTPs: "requireHTTPS",
	MessageToParent: "messageToParent",
	XFrameDenySafe: "xFrameDenySafe"
};
OSF.OUtil.setNamespace("DDA",OSF);
OSF.DDA.DocumentMode={
	ReadOnly: 1,
	ReadWrite: 0
};
OSF.DDA.PropertyDescriptors={AsyncResultStatus: "AsyncResultStatus"};
OSF.DDA.EventDescriptors={};
OSF.DDA.ListDescriptors={};
OSF.DDA.UI={};
OSF.DDA.getXdmEventName=function OSF_DDA$GetXdmEventName(bindingId, eventType)
{
	if(eventType==Microsoft.Office.WebExtension.EventType.BindingSelectionChanged || eventType==Microsoft.Office.WebExtension.EventType.BindingDataChanged)
		return bindingId+"_"+eventType;
	else
		return eventType
};
OSF.DDA.MethodDispId={
	dispidMethodMin: 64,
	dispidGetSelectedDataMethod: 64,
	dispidSetSelectedDataMethod: 65,
	dispidAddBindingFromSelectionMethod: 66,
	dispidAddBindingFromPromptMethod: 67,
	dispidGetBindingMethod: 68,
	dispidReleaseBindingMethod: 69,
	dispidGetBindingDataMethod: 70,
	dispidSetBindingDataMethod: 71,
	dispidAddRowsMethod: 72,
	dispidClearAllRowsMethod: 73,
	dispidGetAllBindingsMethod: 74,
	dispidLoadSettingsMethod: 75,
	dispidSaveSettingsMethod: 76,
	dispidGetDocumentCopyMethod: 77,
	dispidAddBindingFromNamedItemMethod: 78,
	dispidAddColumnsMethod: 79,
	dispidGetDocumentCopyChunkMethod: 80,
	dispidReleaseDocumentCopyMethod: 81,
	dispidNavigateToMethod: 82,
	dispidGetActiveViewMethod: 83,
	dispidGetDocumentThemeMethod: 84,
	dispidGetOfficeThemeMethod: 85,
	dispidGetFilePropertiesMethod: 86,
	dispidClearFormatsMethod: 87,
	dispidSetTableOptionsMethod: 88,
	dispidSetFormatsMethod: 89,
	dispidExecuteRichApiRequestMethod: 93,
	dispidAppCommandInvocationCompletedMethod: 94,
	dispidAddDataPartMethod: 128,
	dispidGetDataPartByIdMethod: 129,
	dispidGetDataPartsByNamespaceMethod: 130,
	dispidGetDataPartXmlMethod: 131,
	dispidGetDataPartNodesMethod: 132,
	dispidDeleteDataPartMethod: 133,
	dispidGetDataNodeValueMethod: 134,
	dispidGetDataNodeXmlMethod: 135,
	dispidGetDataNodesMethod: 136,
	dispidSetDataNodeValueMethod: 137,
	dispidSetDataNodeXmlMethod: 138,
	dispidAddDataNamespaceMethod: 139,
	dispidGetDataUriByPrefixMethod: 140,
	dispidGetDataPrefixByUriMethod: 141,
	dispidGetDataNodeTextMethod: 142,
	dispidSetDataNodeTextMethod: 143,
	dispidMethodMax: 143,
	dispidGetSelectedTaskMethod: 110,
	dispidGetSelectedResourceMethod: 111,
	dispidGetTaskMethod: 112,
	dispidGetResourceFieldMethod: 113,
	dispidGetWSSUrlMethod: 114,
	dispidGetTaskFieldMethod: 115,
	dispidGetProjectFieldMethod: 116,
	dispidGetSelectedViewMethod: 117,
	dispidGetTaskByIndexMethod: 118,
	dispidGetResourceByIndexMethod: 119,
	dispidSetTaskFieldMethod: 120,
	dispidSetResourceFieldMethod: 121,
	dispidGetMaxTaskIndexMethod: 122,
	dispidGetMaxResourceIndexMethod: 123,
	dispidMessageParentMethod: 900
};
OSF.DDA.EventDispId={
	dispidEventMin: 0,
	dispidInitializeEvent: 0,
	dispidSettingsChangedEvent: 1,
	dispidDocumentSelectionChangedEvent: 2,
	dispidBindingSelectionChangedEvent: 3,
	dispidBindingDataChangedEvent: 4,
	dispidDocumentOpenEvent: 5,
	dispidDocumentCloseEvent: 6,
	dispidActiveViewChangedEvent: 7,
	dispidDocumentThemeChangedEvent: 8,
	dispidOfficeThemeChangedEvent: 9,
	dispidDialogMessageReceivedEvent: 10,
	dispidActivationStatusChangedEvent: 32,
	dispidAppCommandInvokedEvent: 39,
	dispidTaskSelectionChangedEvent: 56,
	dispidResourceSelectionChangedEvent: 57,
	dispidViewSelectionChangedEvent: 58,
	dispidDataNodeAddedEvent: 60,
	dispidDataNodeReplacedEvent: 61,
	dispidDataNodeDeletedEvent: 62,
	dispidEventMax: 63
};
OSF.DDA.ErrorCodeManager=function()
{
	var _errorMappings={};
	return{
			getErrorArgs: function OSF_DDA_ErrorCodeManager$getErrorArgs(errorCode)
			{
				var errorArgs=_errorMappings[errorCode];
				if(!errorArgs)
					errorArgs=_errorMappings[this.errorCodes.ooeInternalError];
				if(!errorArgs.name)
					errorArgs.name=_errorMappings[this.errorCodes.ooeInternalError].name;
				if(!errorArgs.message)
					errorArgs.message=_errorMappings[this.errorCodes.ooeInternalError].message;
				return errorArgs
			},
			addErrorMessage: function OSF_DDA_ErrorCodeManager$addErrorMessage(errorCode, errorNameMessage)
			{
				_errorMappings[errorCode]=errorNameMessage
			},
			errorCodes: {
				ooeSuccess: 0,
				ooeChunkResult: 1,
				ooeCoercionTypeNotSupported: 1e3,
				ooeGetSelectionNotMatchDataType: 1001,
				ooeCoercionTypeNotMatchBinding: 1002,
				ooeInvalidGetRowColumnCounts: 1003,
				ooeSelectionNotSupportCoercionType: 1004,
				ooeInvalidGetStartRowColumn: 1005,
				ooeNonUniformPartialGetNotSupported: 1006,
				ooeGetDataIsTooLarge: 1008,
				ooeFileTypeNotSupported: 1009,
				ooeGetDataParametersConflict: 1010,
				ooeInvalidGetColumns: 1011,
				ooeInvalidGetRows: 1012,
				ooeInvalidReadForBlankRow: 1013,
				ooeUnsupportedDataObject: 2e3,
				ooeCannotWriteToSelection: 2001,
				ooeDataNotMatchSelection: 2002,
				ooeOverwriteWorksheetData: 2003,
				ooeDataNotMatchBindingSize: 2004,
				ooeInvalidSetStartRowColumn: 2005,
				ooeInvalidDataFormat: 2006,
				ooeDataNotMatchCoercionType: 2007,
				ooeDataNotMatchBindingType: 2008,
				ooeSetDataIsTooLarge: 2009,
				ooeNonUniformPartialSetNotSupported: 2010,
				ooeInvalidSetColumns: 2011,
				ooeInvalidSetRows: 2012,
				ooeSetDataParametersConflict: 2013,
				ooeCellDataAmountBeyondLimits: 2014,
				ooeSelectionCannotBound: 3e3,
				ooeBindingNotExist: 3002,
				ooeBindingToMultipleSelection: 3003,
				ooeInvalidSelectionForBindingType: 3004,
				ooeOperationNotSupportedOnThisBindingType: 3005,
				ooeNamedItemNotFound: 3006,
				ooeMultipleNamedItemFound: 3007,
				ooeInvalidNamedItemForBindingType: 3008,
				ooeUnknownBindingType: 3009,
				ooeOperationNotSupportedOnMatrixData: 3010,
				ooeInvalidColumnsForBinding: 3011,
				ooeSettingNameNotExist: 4e3,
				ooeSettingsCannotSave: 4001,
				ooeSettingsAreStale: 4002,
				ooeOperationNotSupported: 5e3,
				ooeInternalError: 5001,
				ooeDocumentReadOnly: 5002,
				ooeEventHandlerNotExist: 5003,
				ooeInvalidApiCallInContext: 5004,
				ooeShuttingDown: 5005,
				ooeUnsupportedEnumeration: 5007,
				ooeIndexOutOfRange: 5008,
				ooeBrowserAPINotSupported: 5009,
				ooeInvalidParam: 5010,
				ooeRequestTimeout: 5011,
				ooeTooManyIncompleteRequests: 5100,
				ooeRequestTokenUnavailable: 5101,
				ooeActivityLimitReached: 5102,
				ooeCustomXmlNodeNotFound: 6e3,
				ooeCustomXmlError: 6100,
				ooeCustomXmlExceedQuota: 6101,
				ooeCustomXmlOutOfDate: 6102,
				ooeNoCapability: 7e3,
				ooeCannotNavTo: 7001,
				ooeSpecifiedIdNotExist: 7002,
				ooeNavOutOfBound: 7004,
				ooeElementMissing: 8e3,
				ooeProtectedError: 8001,
				ooeInvalidCellsValue: 8010,
				ooeInvalidTableOptionValue: 8011,
				ooeInvalidFormatValue: 8012,
				ooeRowIndexOutOfRange: 8020,
				ooeColIndexOutOfRange: 8021,
				ooeFormatValueOutOfRange: 8022,
				ooeCellFormatAmountBeyondLimits: 8023,
				ooeMemoryFileLimit: 11e3,
				ooeNetworkProblemRetrieveFile: 11001,
				ooeInvalidSliceSize: 11002,
				ooeInvalidCallback: 11101,
				ooeInvalidWidth: 12e3,
				ooeInvalidHeight: 12001,
				ooeNavigationError: 12002,
				ooeInvalidScheme: 12003,
				ooeAppDomains: 12004,
				ooeRequireHTTPS: 12005,
				ooeWebDialogClosed: 12006,
				ooeDialogAlreadyOpened: 12007
			},
			initializeErrorMessages: function OSF_DDA_ErrorCodeManager$initializeErrorMessages(stringNS)
			{
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCoercionTypeNotSupported]={
					name: stringNS.L_InvalidCoercion,
					message: stringNS.L_CoercionTypeNotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeGetSelectionNotMatchDataType]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_GetSelectionNotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCoercionTypeNotMatchBinding]={
					name: stringNS.L_InvalidCoercion,
					message: stringNS.L_CoercionTypeNotMatchBinding
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetRowColumnCounts]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_InvalidGetRowColumnCounts
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSelectionNotSupportCoercionType]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_SelectionNotSupportCoercionType
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetStartRowColumn]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_InvalidGetStartRowColumn
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNonUniformPartialGetNotSupported]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_NonUniformPartialGetNotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeGetDataIsTooLarge]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_GetDataIsTooLarge
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeFileTypeNotSupported]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_FileTypeNotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeGetDataParametersConflict]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_GetDataParametersConflict
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetColumns]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_InvalidGetColumns
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetRows]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_InvalidGetRows
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidReadForBlankRow]={
					name: stringNS.L_DataReadError,
					message: stringNS.L_InvalidReadForBlankRow
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeUnsupportedDataObject]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_UnsupportedDataObject
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCannotWriteToSelection]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_CannotWriteToSelection
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchSelection]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_DataNotMatchSelection
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOverwriteWorksheetData]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_OverwriteWorksheetData
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchBindingSize]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_DataNotMatchBindingSize
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSetStartRowColumn]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_InvalidSetStartRowColumn
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidDataFormat]={
					name: stringNS.L_InvalidFormat,
					message: stringNS.L_InvalidDataFormat
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchCoercionType]={
					name: stringNS.L_InvalidDataObject,
					message: stringNS.L_DataNotMatchCoercionType
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchBindingType]={
					name: stringNS.L_InvalidDataObject,
					message: stringNS.L_DataNotMatchBindingType
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSetDataIsTooLarge]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_SetDataIsTooLarge
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNonUniformPartialSetNotSupported]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_NonUniformPartialSetNotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSetColumns]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_InvalidSetColumns
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSetRows]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_InvalidSetRows
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSetDataParametersConflict]={
					name: stringNS.L_DataWriteError,
					message: stringNS.L_SetDataParametersConflict
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSelectionCannotBound]={
					name: stringNS.L_BindingCreationError,
					message: stringNS.L_SelectionCannotBound
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeBindingNotExist]={
					name: stringNS.L_InvalidBindingError,
					message: stringNS.L_BindingNotExist
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeBindingToMultipleSelection]={
					name: stringNS.L_BindingCreationError,
					message: stringNS.L_BindingToMultipleSelection
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSelectionForBindingType]={
					name: stringNS.L_BindingCreationError,
					message: stringNS.L_InvalidSelectionForBindingType
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationNotSupportedOnThisBindingType]={
					name: stringNS.L_InvalidBindingOperation,
					message: stringNS.L_OperationNotSupportedOnThisBindingType
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNamedItemNotFound]={
					name: stringNS.L_BindingCreationError,
					message: stringNS.L_NamedItemNotFound
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeMultipleNamedItemFound]={
					name: stringNS.L_BindingCreationError,
					message: stringNS.L_MultipleNamedItemFound
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidNamedItemForBindingType]={
					name: stringNS.L_BindingCreationError,
					message: stringNS.L_InvalidNamedItemForBindingType
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeUnknownBindingType]={
					name: stringNS.L_InvalidBinding,
					message: stringNS.L_UnknownBindingType
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationNotSupportedOnMatrixData]={
					name: stringNS.L_InvalidBindingOperation,
					message: stringNS.L_OperationNotSupportedOnMatrixData
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidColumnsForBinding]={
					name: stringNS.L_InvalidBinding,
					message: stringNS.L_InvalidColumnsForBinding
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSettingNameNotExist]={
					name: stringNS.L_ReadSettingsError,
					message: stringNS.L_SettingNameNotExist
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSettingsCannotSave]={
					name: stringNS.L_SaveSettingsError,
					message: stringNS.L_SettingsCannotSave
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSettingsAreStale]={
					name: stringNS.L_SettingsStaleError,
					message: stringNS.L_SettingsAreStale
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationNotSupported]={
					name: stringNS.L_HostError,
					message: stringNS.L_OperationNotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError]={
					name: stringNS.L_InternalError,
					message: stringNS.L_InternalErrorDescription
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDocumentReadOnly]={
					name: stringNS.L_PermissionDenied,
					message: stringNS.L_DocumentReadOnly
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeEventHandlerNotExist]={
					name: stringNS.L_EventRegistrationError,
					message: stringNS.L_EventHandlerNotExist
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidApiCallInContext]={
					name: stringNS.L_InvalidAPICall,
					message: stringNS.L_InvalidApiCallInContext
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeShuttingDown]={
					name: stringNS.L_ShuttingDown,
					message: stringNS.L_ShuttingDown
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeUnsupportedEnumeration]={
					name: stringNS.L_UnsupportedEnumeration,
					message: stringNS.L_UnsupportedEnumerationMessage
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeIndexOutOfRange]={
					name: stringNS.L_IndexOutOfRange,
					message: stringNS.L_IndexOutOfRange
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeBrowserAPINotSupported]={
					name: stringNS.L_APINotSupported,
					message: stringNS.L_BrowserAPINotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRequestTimeout]={
					name: stringNS.L_APICallFailed,
					message: stringNS.L_RequestTimeout
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeTooManyIncompleteRequests]={
					name: stringNS.L_APICallFailed,
					message: stringNS.L_TooManyIncompleteRequests
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRequestTokenUnavailable]={
					name: stringNS.L_APICallFailed,
					message: stringNS.L_RequestTokenUnavailable
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeActivityLimitReached]={
					name: stringNS.L_APICallFailed,
					message: stringNS.L_ActivityLimitReached
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlNodeNotFound]={
					name: stringNS.L_InvalidNode,
					message: stringNS.L_CustomXmlNodeNotFound
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlError]={
					name: stringNS.L_CustomXmlError,
					message: stringNS.L_CustomXmlError
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlExceedQuota]={
					name: stringNS.L_CustomXmlError,
					message: stringNS.L_CustomXmlError
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlOutOfDate]={
					name: stringNS.L_CustomXmlError,
					message: stringNS.L_CustomXmlError
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNoCapability]={
					name: stringNS.L_PermissionDenied,
					message: stringNS.L_NoCapability
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCannotNavTo]={
					name: stringNS.L_CannotNavigateTo,
					message: stringNS.L_CannotNavigateTo
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSpecifiedIdNotExist]={
					name: stringNS.L_SpecifiedIdNotExist,
					message: stringNS.L_SpecifiedIdNotExist
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNavOutOfBound]={
					name: stringNS.L_NavOutOfBound,
					message: stringNS.L_NavOutOfBound
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCellDataAmountBeyondLimits]={
					name: stringNS.L_DataWriteReminder,
					message: stringNS.L_CellDataAmountBeyondLimits
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeElementMissing]={
					name: stringNS.L_MissingParameter,
					message: stringNS.L_ElementMissing
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeProtectedError]={
					name: stringNS.L_PermissionDenied,
					message: stringNS.L_NoCapability
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidCellsValue]={
					name: stringNS.L_InvalidValue,
					message: stringNS.L_InvalidCellsValue
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidTableOptionValue]={
					name: stringNS.L_InvalidValue,
					message: stringNS.L_InvalidTableOptionValue
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidFormatValue]={
					name: stringNS.L_InvalidValue,
					message: stringNS.L_InvalidFormatValue
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRowIndexOutOfRange]={
					name: stringNS.L_OutOfRange,
					message: stringNS.L_RowIndexOutOfRange
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeColIndexOutOfRange]={
					name: stringNS.L_OutOfRange,
					message: stringNS.L_ColIndexOutOfRange
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeFormatValueOutOfRange]={
					name: stringNS.L_OutOfRange,
					message: stringNS.L_FormatValueOutOfRange
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCellFormatAmountBeyondLimits]={
					name: stringNS.L_FormattingReminder,
					message: stringNS.L_CellFormatAmountBeyondLimits
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeMemoryFileLimit]={
					name: stringNS.L_MemoryLimit,
					message: stringNS.L_CloseFileBeforeRetrieve
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNetworkProblemRetrieveFile]={
					name: stringNS.L_NetworkProblem,
					message: stringNS.L_NetworkProblemRetrieveFile
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSliceSize]={
					name: stringNS.L_InvalidValue,
					message: stringNS.L_SliceSizeNotSupported
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened]={
					name: stringNS.L_DisplayDialogError,
					message: stringNS.L_DialogAlreadyOpened
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidWidth]={
					name: stringNS.L_IndexOutOfRange,
					message: stringNS.L_IndexOutOfRange
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidHeight]={
					name: stringNS.L_IndexOutOfRange,
					message: stringNS.L_IndexOutOfRange
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNavigationError]={
					name: stringNS.L_DisplayDialogError,
					message: stringNS.L_NetworkProblem
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidScheme]={
					name: stringNS.L_DialogNavigateError,
					message: stringNS.L_DialogAddressNotTrusted
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeAppDomains]={
					name: stringNS.L_DisplayDialogError,
					message: stringNS.L_DialogAddressNotTrusted
				};
				_errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRequireHTTPS]={
					name: stringNS.L_DisplayDialogError,
					message: stringNS.L_DialogAddressNotTrusted
				}
			}
		}
}();
var OfficeExt;
(function(OfficeExt)
{
	var Requirement;
	(function(Requirement)
	{
		var RequirementMatrix=function()
			{
				function RequirementMatrix(_setMap)
				{
					this.isSetSupported=function _isSetSupported(name, minVersion)
					{
						if(name==undefined)
							return false;
						if(minVersion==undefined)
							minVersion=0;
						var setSupportArray=this._setMap;
						var sets=setSupportArray._sets;
						if(sets.hasOwnProperty(name.toLowerCase()))
						{
							var setMaxVersion=sets[name.toLowerCase()];
							return setMaxVersion > 0 && setMaxVersion >=minVersion
						}
						else
							return false
					};
					this._setMap=_setMap
				}
				return RequirementMatrix
			}();
		Requirement.RequirementMatrix=RequirementMatrix;
		var DefaultSetRequirement=function()
			{
				function DefaultSetRequirement(setMap)
				{
					this._addSetMap=function DefaultSetRequirement_addSetMap(addedSet)
					{
						for(var name in addedSet)
							this._sets[name]=addedSet[name]
					};
					this._sets=setMap
				}
				return DefaultSetRequirement
			}();
		Requirement.DefaultSetRequirement=DefaultSetRequirement;
		var ExcelClientDefaultSetRequirement=function(_super)
			{
				__extends(ExcelClientDefaultSetRequirement,_super);
				function ExcelClientDefaultSetRequirement()
				{
					_super.call(this,{
						bindingevents: 1.1,
						documentevents: 1.1,
						excelapi: 1.1,
						matrixbindings: 1.1,
						matrixcoercion: 1.1,
						selection: 1.1,
						settings: 1.1,
						tablebindings: 1.1,
						tablecoercion: 1.1,
						textbindings: 1.1,
						textcoercion: 1.1
					})
				}
				return ExcelClientDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.ExcelClientDefaultSetRequirement=ExcelClientDefaultSetRequirement;
		var ExcelClientV1DefaultSetRequirement=function(_super)
			{
				__extends(ExcelClientV1DefaultSetRequirement,_super);
				function ExcelClientV1DefaultSetRequirement()
				{
					_super.call(this);
					this._addSetMap({imagecoercion: 1.1})
				}
				return ExcelClientV1DefaultSetRequirement
			}(ExcelClientDefaultSetRequirement);
		Requirement.ExcelClientV1DefaultSetRequirement=ExcelClientV1DefaultSetRequirement;
		var OutlookClientDefaultSetRequirement=function(_super)
			{
				__extends(OutlookClientDefaultSetRequirement,_super);
				function OutlookClientDefaultSetRequirement()
				{
					_super.call(this,{mailbox: 1.3})
				}
				return OutlookClientDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.OutlookClientDefaultSetRequirement=OutlookClientDefaultSetRequirement;
		var WordClientDefaultSetRequirement=function(_super)
			{
				__extends(WordClientDefaultSetRequirement,_super);
				function WordClientDefaultSetRequirement()
				{
					_super.call(this,{
						bindingevents: 1.1,
						compressedfile: 1.1,
						customxmlparts: 1.1,
						documentevents: 1.1,
						file: 1.1,
						htmlcoercion: 1.1,
						matrixbindings: 1.1,
						matrixcoercion: 1.1,
						ooxmlcoercion: 1.1,
						pdffile: 1.1,
						selection: 1.1,
						settings: 1.1,
						tablebindings: 1.1,
						tablecoercion: 1.1,
						textbindings: 1.1,
						textcoercion: 1.1,
						textfile: 1.1,
						wordapi: 1.1
					})
				}
				return WordClientDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.WordClientDefaultSetRequirement=WordClientDefaultSetRequirement;
		var WordClientV1DefaultSetRequirement=function(_super)
			{
				__extends(WordClientV1DefaultSetRequirement,_super);
				function WordClientV1DefaultSetRequirement()
				{
					_super.call(this);
					this._addSetMap({
						customxmlparts: 1.2,
						wordapi: 1.2,
						imagecoercion: 1.1
					})
				}
				return WordClientV1DefaultSetRequirement
			}(WordClientDefaultSetRequirement);
		Requirement.WordClientV1DefaultSetRequirement=WordClientV1DefaultSetRequirement;
		var PowerpointClientDefaultSetRequirement=function(_super)
			{
				__extends(PowerpointClientDefaultSetRequirement,_super);
				function PowerpointClientDefaultSetRequirement()
				{
					_super.call(this,{
						activeview: 1.1,
						compressedfile: 1.1,
						documentevents: 1.1,
						file: 1.1,
						pdffile: 1.1,
						selection: 1.1,
						settings: 1.1,
						textcoercion: 1.1
					})
				}
				return PowerpointClientDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.PowerpointClientDefaultSetRequirement=PowerpointClientDefaultSetRequirement;
		var PowerpointClientV1DefaultSetRequirement=function(_super)
			{
				__extends(PowerpointClientV1DefaultSetRequirement,_super);
				function PowerpointClientV1DefaultSetRequirement()
				{
					_super.call(this);
					this._addSetMap({imagecoercion: 1.1})
				}
				return PowerpointClientV1DefaultSetRequirement
			}(PowerpointClientDefaultSetRequirement);
		Requirement.PowerpointClientV1DefaultSetRequirement=PowerpointClientV1DefaultSetRequirement;
		var ProjectClientDefaultSetRequirement=function(_super)
			{
				__extends(ProjectClientDefaultSetRequirement,_super);
				function ProjectClientDefaultSetRequirement()
				{
					_super.call(this,{
						selection: 1.1,
						textcoercion: 1.1
					})
				}
				return ProjectClientDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.ProjectClientDefaultSetRequirement=ProjectClientDefaultSetRequirement;
		var ExcelWebDefaultSetRequirement=function(_super)
			{
				__extends(ExcelWebDefaultSetRequirement,_super);
				function ExcelWebDefaultSetRequirement()
				{
					_super.call(this,{
						bindingevents: 1.1,
						documentevents: 1.1,
						matrixbindings: 1.1,
						matrixcoercion: 1.1,
						selection: 1.1,
						settings: 1.1,
						tablebindings: 1.1,
						tablecoercion: 1.1,
						textbindings: 1.1,
						textcoercion: 1.1,
						file: 1.1
					})
				}
				return ExcelWebDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.ExcelWebDefaultSetRequirement=ExcelWebDefaultSetRequirement;
		var WordWebDefaultSetRequirement=function(_super)
			{
				__extends(WordWebDefaultSetRequirement,_super);
				function WordWebDefaultSetRequirement()
				{
					_super.call(this,{
						customxmlparts: 1.1,
						documentevents: 1.1,
						file: 1.1,
						ooxmlcoercion: 1.1,
						selection: 1.1,
						settings: 1.1,
						textcoercion: 1.1
					})
				}
				return WordWebDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.WordWebDefaultSetRequirement=WordWebDefaultSetRequirement;
		var PowerpointWebDefaultSetRequirement=function(_super)
			{
				__extends(PowerpointWebDefaultSetRequirement,_super);
				function PowerpointWebDefaultSetRequirement()
				{
					_super.call(this,{
						activeview: 1.1,
						settings: 1.1
					})
				}
				return PowerpointWebDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.PowerpointWebDefaultSetRequirement=PowerpointWebDefaultSetRequirement;
		var OutlookWebDefaultSetRequirement=function(_super)
			{
				__extends(OutlookWebDefaultSetRequirement,_super);
				function OutlookWebDefaultSetRequirement()
				{
					_super.call(this,{mailbox: 1.3})
				}
				return OutlookWebDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.OutlookWebDefaultSetRequirement=OutlookWebDefaultSetRequirement;
		var SwayWebDefaultSetRequirement=function(_super)
			{
				__extends(SwayWebDefaultSetRequirement,_super);
				function SwayWebDefaultSetRequirement()
				{
					_super.call(this,{
						activeview: 1.1,
						documentevents: 1.1,
						selection: 1.1,
						settings: 1.1,
						textcoercion: 1.1
					})
				}
				return SwayWebDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.SwayWebDefaultSetRequirement=SwayWebDefaultSetRequirement;
		var AccessWebDefaultSetRequirement=function(_super)
			{
				__extends(AccessWebDefaultSetRequirement,_super);
				function AccessWebDefaultSetRequirement()
				{
					_super.call(this,{
						bindingevents: 1.1,
						partialtablebindings: 1.1,
						settings: 1.1,
						tablebindings: 1.1,
						tablecoercion: 1.1
					})
				}
				return AccessWebDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.AccessWebDefaultSetRequirement=AccessWebDefaultSetRequirement;
		var ExcelIOSDefaultSetRequirement=function(_super)
			{
				__extends(ExcelIOSDefaultSetRequirement,_super);
				function ExcelIOSDefaultSetRequirement()
				{
					_super.call(this,{
						bindingevents: 1.1,
						documentevents: 1.1,
						matrixbindings: 1.1,
						matrixcoercion: 1.1,
						selection: 1.1,
						settings: 1.1,
						tablebindings: 1.1,
						tablecoercion: 1.1,
						textbindings: 1.1,
						textcoercion: 1.1
					})
				}
				return ExcelIOSDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.ExcelIOSDefaultSetRequirement=ExcelIOSDefaultSetRequirement;
		var WordIOSDefaultSetRequirement=function(_super)
			{
				__extends(WordIOSDefaultSetRequirement,_super);
				function WordIOSDefaultSetRequirement()
				{
					_super.call(this,{
						bindingevents: 1.1,
						compressedfile: 1.1,
						customxmlparts: 1.1,
						documentevents: 1.1,
						file: 1.1,
						htmlcoercion: 1.1,
						matrixbindings: 1.1,
						matrixcoercion: 1.1,
						ooxmlcoercion: 1.1,
						pdffile: 1.1,
						selection: 1.1,
						settings: 1.1,
						tablebindings: 1.1,
						tablecoercion: 1.1,
						textbindings: 1.1,
						textcoercion: 1.1,
						textfile: 1.1
					})
				}
				return WordIOSDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.WordIOSDefaultSetRequirement=WordIOSDefaultSetRequirement;
		var WordIOSV1DefaultSetRequirement=function(_super)
			{
				__extends(WordIOSV1DefaultSetRequirement,_super);
				function WordIOSV1DefaultSetRequirement()
				{
					_super.call(this);
					this._addSetMap({
						customxmlparts: 1.2,
						wordapi: 1.2
					})
				}
				return WordIOSV1DefaultSetRequirement
			}(WordIOSDefaultSetRequirement);
		Requirement.WordIOSV1DefaultSetRequirement=WordIOSV1DefaultSetRequirement;
		var PowerpointIOSDefaultSetRequirement=function(_super)
			{
				__extends(PowerpointIOSDefaultSetRequirement,_super);
				function PowerpointIOSDefaultSetRequirement()
				{
					_super.call(this,{
						activeview: 1.1,
						compressedfile: 1.1,
						documentevents: 1.1,
						file: 1.1,
						pdffile: 1.1,
						selection: 1.1,
						settings: 1.1,
						textcoercion: 1.1
					})
				}
				return PowerpointIOSDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.PowerpointIOSDefaultSetRequirement=PowerpointIOSDefaultSetRequirement;
		var OutlookIOSDefaultSetRequirement=function(_super)
			{
				__extends(OutlookIOSDefaultSetRequirement,_super);
				function OutlookIOSDefaultSetRequirement()
				{
					_super.call(this,{mailbox: 1.1})
				}
				return OutlookIOSDefaultSetRequirement
			}(DefaultSetRequirement);
		Requirement.OutlookIOSDefaultSetRequirement=OutlookIOSDefaultSetRequirement;
		var RequirementsMatrixFactory=function()
			{
				function RequirementsMatrixFactory(){}
				RequirementsMatrixFactory.initializeOsfDda=function()
				{
					OSF.OUtil.setNamespace("Requirement",OSF.DDA)
				};
				RequirementsMatrixFactory.getDefaultRequirementMatrix=function(appContext)
				{
					this.initializeDefaultSetMatrix();
					var defaultRequirementMatrix=undefined;
					var clientRequirement=appContext.get_requirementMatrix();
					if(clientRequirement !=undefined && clientRequirement.length > 0 && typeof JSON !=="undefined")
					{
						var matrixItem=JSON.parse(appContext.get_requirementMatrix().toLowerCase());
						defaultRequirementMatrix=new RequirementMatrix(new DefaultSetRequirement(matrixItem))
					}
					else
					{
						var appLocator=RequirementsMatrixFactory.getClientFullVersionString(appContext);
						if(RequirementsMatrixFactory.DefaultSetArrayMatrix !=undefined && RequirementsMatrixFactory.DefaultSetArrayMatrix[appLocator] !=undefined)
							defaultRequirementMatrix=new RequirementMatrix(RequirementsMatrixFactory.DefaultSetArrayMatrix[appLocator]);
						else
							defaultRequirementMatrix=new RequirementMatrix(new DefaultSetRequirement({}))
					}
					return defaultRequirementMatrix
				};
				RequirementsMatrixFactory.getClientFullVersionString=function(appContext)
				{
					var appMinorVersion=appContext.get_appMinorVersion();
					var appMinorVersionString="";
					var appFullVersion="";
					var appName=appContext.get_appName();
					var isIOSClient=appName==1024 || appName==4096 || appName==8192 || appName==65536;
					if(isIOSClient && appContext.get_appVersion()==1)
						if(appName==4096 && appMinorVersion >=15)
							appFullVersion="16.00.01";
						else
							appFullVersion="16.00";
					else if(appContext.get_appName()==64)
						appFullVersion=appContext.get_appVersion();
					else
					{
						if(appMinorVersion < 10)
							appMinorVersionString="0"+appMinorVersion;
						else
							appMinorVersionString=""+appMinorVersion;
						appFullVersion=appContext.get_appVersion()+"."+appMinorVersionString
					}
					return appContext.get_appName()+"-"+appFullVersion
				};
				RequirementsMatrixFactory.initializeDefaultSetMatrix=function()
				{
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_RCLIENT_1600]=new ExcelClientDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_RCLIENT_1600]=new WordClientDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_RCLIENT_1600]=new PowerpointClientDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_RCLIENT_1601]=new ExcelClientV1DefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_RCLIENT_1601]=new WordClientV1DefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_RCLIENT_1601]=new PowerpointClientV1DefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_RCLIENT_1600]=new OutlookClientDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_WAC_1600]=new ExcelWebDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_WAC_1600]=new WordWebDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_WAC_1600]=new OutlookWebDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_WAC_1601]=new OutlookWebDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Project_RCLIENT_1600]=new ProjectClientDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Access_WAC_1600]=new AccessWebDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_WAC_1600]=new PowerpointWebDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_IOS_1600]=new ExcelIOSDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.SWAY_WAC_1600]=new SwayWebDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_IOS_1600]=new WordIOSDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_IOS_16001]=new WordIOSV1DefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_IOS_1600]=new PowerpointIOSDefaultSetRequirement;
					RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_IOS_1600]=new OutlookIOSDefaultSetRequirement
				};
				RequirementsMatrixFactory.Excel_RCLIENT_1600="1-16.00";
				RequirementsMatrixFactory.Excel_RCLIENT_1601="1-16.01";
				RequirementsMatrixFactory.Word_RCLIENT_1600="2-16.00";
				RequirementsMatrixFactory.Word_RCLIENT_1601="2-16.01";
				RequirementsMatrixFactory.PowerPoint_RCLIENT_1600="4-16.00";
				RequirementsMatrixFactory.PowerPoint_RCLIENT_1601="4-16.01";
				RequirementsMatrixFactory.Outlook_RCLIENT_1600="8-16.00";
				RequirementsMatrixFactory.Excel_WAC_1600="16-16.00";
				RequirementsMatrixFactory.Word_WAC_1600="32-16.00";
				RequirementsMatrixFactory.Outlook_WAC_1600="64-16.00";
				RequirementsMatrixFactory.Outlook_WAC_1601="64-16.01";
				RequirementsMatrixFactory.Project_RCLIENT_1600="128-16.00";
				RequirementsMatrixFactory.Access_WAC_1600="256-16.00";
				RequirementsMatrixFactory.PowerPoint_WAC_1600="512-16.00";
				RequirementsMatrixFactory.Excel_IOS_1600="1024-16.00";
				RequirementsMatrixFactory.SWAY_WAC_1600="2048-16.00";
				RequirementsMatrixFactory.Word_IOS_1600="4096-16.00";
				RequirementsMatrixFactory.Word_IOS_16001="4096-16.00.01";
				RequirementsMatrixFactory.PowerPoint_IOS_1600="8192-16.00";
				RequirementsMatrixFactory.Outlook_IOS_1600="65536-16.00";
				RequirementsMatrixFactory.DefaultSetArrayMatrix={};
				return RequirementsMatrixFactory
			}();
		Requirement.RequirementsMatrixFactory=RequirementsMatrixFactory
	})(Requirement=OfficeExt.Requirement || (OfficeExt.Requirement={}))
})(OfficeExt || (OfficeExt={}));
OfficeExt.Requirement.RequirementsMatrixFactory.initializeOsfDda();
Microsoft.Office.WebExtension.ApplicationMode={
	WebEditor: "webEditor",
	WebViewer: "webViewer",
	Client: "client"
};
Microsoft.Office.WebExtension.DocumentMode={
	ReadOnly: "readOnly",
	ReadWrite: "readWrite"
};
OSF.NamespaceManager=function OSF_NamespaceManager()
{
	var _userOffice;
	var _useShortcut=false;
	return{
			enableShortcut: function OSF_NamespaceManager$enableShortcut()
			{
				if(!_useShortcut)
				{
					if(window.Office)
						_userOffice=window.Office;
					else
						OSF.OUtil.setNamespace("Office",window);
					window.Office=Microsoft.Office.WebExtension;
					_useShortcut=true
				}
			},
			disableShortcut: function OSF_NamespaceManager$disableShortcut()
			{
				if(_useShortcut)
				{
					if(_userOffice)
						window.Office=_userOffice;
					else
						OSF.OUtil.unsetNamespace("Office",window);
					_useShortcut=false
				}
			}
		}
}();
OSF.NamespaceManager.enableShortcut();
Microsoft.Office.WebExtension.useShortNamespace=function Microsoft_Office_WebExtension_useShortNamespace(useShortcut)
{
	if(useShortcut)
		OSF.NamespaceManager.enableShortcut();
	else
		OSF.NamespaceManager.disableShortcut()
};
Microsoft.Office.WebExtension.select=function Microsoft_Office_WebExtension_select(str, errorCallback)
{
	var promise;
	if(str && typeof str=="string")
	{
		var index=str.indexOf("#");
		if(index !=-1)
		{
			var op=str.substring(0,index);
			var target=str.substring(index+1);
			switch(op)
			{
				case"binding":
				case"bindings":
					if(target)
						promise=new OSF.DDA.BindingPromise(target);
					break
			}
		}
	}
	if(!promise)
	{
		if(errorCallback)
		{
			var callbackType=typeof errorCallback;
			if(callbackType=="function")
			{
				var callArgs={};
				callArgs[Microsoft.Office.WebExtension.Parameters.Callback]=errorCallback;
				OSF.DDA.issueAsyncResult(callArgs,OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidApiCallInContext,OSF.DDA.ErrorCodeManager.getErrorArgs(OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidApiCallInContext))
			}
			else
				throw OSF.OUtil.formatString(Strings.OfficeOM.L_CallbackNotAFunction,callbackType);
		}
	}
	else
	{
		promise.onFail=errorCallback;
		return promise
	}
};
OSF.DDA.Context=function OSF_DDA_Context(officeAppContext, document, license, appOM, getOfficeTheme)
{
	OSF.OUtil.defineEnumerableProperties(this,{
		contentLanguage: {value: officeAppContext.get_dataLocale()},
		displayLanguage: {value: officeAppContext.get_appUILocale()},
		touchEnabled: {value: officeAppContext.get_touchEnabled()},
		commerceAllowed: {value: officeAppContext.get_commerceAllowed()}
	});
	if(license)
		OSF.OUtil.defineEnumerableProperty(this,"license",{value: license});
	if(officeAppContext.ui)
		OSF.OUtil.defineEnumerableProperty(this,"ui",{value: officeAppContext.ui});
	if(!officeAppContext.get_isDialog())
	{
		if(document)
			OSF.OUtil.defineEnumerableProperty(this,"document",{value: document});
		if(appOM)
		{
			var displayName=appOM.displayName || "appOM";
			delete appOM.displayName;
			OSF.OUtil.defineEnumerableProperty(this,displayName,{value: appOM})
		}
		if(getOfficeTheme)
			OSF.OUtil.defineEnumerableProperty(this,"officeTheme",{get: function()
				{
					return getOfficeTheme()
				}});
		var requirements=OfficeExt.Requirement.RequirementsMatrixFactory.getDefaultRequirementMatrix(officeAppContext);
		OSF.OUtil.defineEnumerableProperty(this,"requirements",{value: requirements})
	}
};
OSF.DDA.OutlookContext=function OSF_DDA_OutlookContext(appContext, settings, license, appOM, getOfficeTheme)
{
	OSF.DDA.OutlookContext.uber.constructor.call(this,appContext,null,license,appOM,getOfficeTheme);
	if(settings)
		OSF.OUtil.defineEnumerableProperty(this,"roamingSettings",{value: settings})
};
OSF.OUtil.extend(OSF.DDA.OutlookContext,OSF.DDA.Context);
OSF.DDA.OutlookAppOm=function OSF_DDA_OutlookAppOm(appContext, window, appReady){};
OSF.DDA.Document=function OSF_DDA_Document(officeAppContext, settings)
{
	var mode;
	switch(officeAppContext.get_clientMode())
	{
		case OSF.ClientMode.ReadOnly:
			mode=Microsoft.Office.WebExtension.DocumentMode.ReadOnly;
			break;
		case OSF.ClientMode.ReadWrite:
			mode=Microsoft.Office.WebExtension.DocumentMode.ReadWrite;
			break
	}
	if(settings)
		OSF.OUtil.defineEnumerableProperty(this,"settings",{value: settings});
	OSF.OUtil.defineMutableProperties(this,{
		mode: {value: mode},
		url: {value: officeAppContext.get_docUrl()}
	})
};
OSF.DDA.JsomDocument=function OSF_DDA_JsomDocument(officeAppContext, bindingFacade, settings)
{
	OSF.DDA.JsomDocument.uber.constructor.call(this,officeAppContext,settings);
	if(bindingFacade)
		OSF.OUtil.defineEnumerableProperty(this,"bindings",{get: function OSF_DDA_Document$GetBindings()
			{
				return bindingFacade
			}});
	var am=OSF.DDA.AsyncMethodNames;
	OSF.DDA.DispIdHost.addAsyncMethods(this,[am.GetSelectedDataAsync,am.SetSelectedDataAsync]);
	OSF.DDA.DispIdHost.addEventSupport(this,new OSF.EventDispatch([Microsoft.Office.WebExtension.EventType.DocumentSelectionChanged]))
};
OSF.OUtil.extend(OSF.DDA.JsomDocument,OSF.DDA.Document);
OSF.OUtil.defineEnumerableProperty(Microsoft.Office.WebExtension,"context",{get: function Microsoft_Office_WebExtension$GetContext()
	{
		var context;
		if(OSF && OSF._OfficeAppFactory)
			context=OSF._OfficeAppFactory.getContext();
		return context
	}});
OSF.DDA.License=function OSF_DDA_License(eToken)
{
	OSF.OUtil.defineEnumerableProperty(this,"value",{value: eToken})
};
OSF.DDA.ApiMethodCall=function OSF_DDA_ApiMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, checkCallArgs, displayName)
{
	var requiredCount=requiredParameters.length;
	var getInvalidParameterString=OSF.OUtil.delayExecutionAndCache(function()
		{
			return OSF.OUtil.formatString(Strings.OfficeOM.L_InvalidParameters,displayName)
		});
	this.verifyArguments=function OSF_DDA_ApiMethodCall$VerifyArguments(params, args)
	{
		for(var name in params)
		{
			var param=params[name];
			var arg=args[name];
			if(param["enum"])
				switch(typeof arg)
				{
					case"string":
						if(OSF.OUtil.listContainsValue(param["enum"],arg))
							break;
					case"undefined":
						throw OSF.DDA.ErrorCodeManager.errorCodes.ooeUnsupportedEnumeration;
					default:
						throw getInvalidParameterString();
				}
			if(param["types"])
				if(!OSF.OUtil.listContainsValue(param["types"],typeof arg))
					throw getInvalidParameterString();
		}
	};
	this.extractRequiredArguments=function OSF_DDA_ApiMethodCall$ExtractRequiredArguments(userArgs, caller, stateInfo)
	{
		if(userArgs.length < requiredCount)
			throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_MissingRequiredArguments);
		var requiredArgs=[];
		var index;
		for(index=0; index < requiredCount; index++)
			requiredArgs.push(userArgs[index]);
		this.verifyArguments(requiredParameters,requiredArgs);
		var ret={};
		for(index=0; index < requiredCount; index++)
		{
			var param=requiredParameters[index];
			var arg=requiredArgs[index];
			if(param.verify)
			{
				var isValid=param.verify(arg,caller,stateInfo);
				if(!isValid)
					throw getInvalidParameterString();
			}
			ret[param.name]=arg
		}
		return ret
	},this.fillOptions=function OSF_DDA_ApiMethodCall$FillOptions(options, requiredArgs, caller, stateInfo)
	{
		options=options || {};
		for(var optionName in supportedOptions)
			if(!OSF.OUtil.listContainsKey(options,optionName))
			{
				var value=undefined;
				var option=supportedOptions[optionName];
				if(option.calculate && requiredArgs)
					value=option.calculate(requiredArgs,caller,stateInfo);
				if(!value && option.defaultValue !==undefined)
					value=option.defaultValue;
				options[optionName]=value
			}
		return options
	};
	this.constructCallArgs=function OSF_DAA_ApiMethodCall$ConstructCallArgs(required, options, caller, stateInfo)
	{
		var callArgs={};
		for(var r in required)
			callArgs[r]=required[r];
		for(var o in options)
			callArgs[o]=options[o];
		for(var s in privateStateCallbacks)
			callArgs[s]=privateStateCallbacks[s](caller,stateInfo);
		if(checkCallArgs)
			callArgs=checkCallArgs(callArgs,caller,stateInfo);
		return callArgs
	}
};
OSF.OUtil.setNamespace("AsyncResultEnum",OSF.DDA);
OSF.DDA.AsyncResultEnum.Properties={
	Context: "Context",
	Value: "Value",
	Status: "Status",
	Error: "Error"
};
Microsoft.Office.WebExtension.AsyncResultStatus={
	Succeeded: "succeeded",
	Failed: "failed"
};
OSF.DDA.AsyncResultEnum.ErrorCode={
	Success: 0,
	Failed: 1
};
OSF.DDA.AsyncResultEnum.ErrorProperties={
	Name: "Name",
	Message: "Message",
	Code: "Code"
};
OSF.DDA.AsyncMethodNames={};
OSF.DDA.AsyncMethodNames.addNames=function(methodNames)
{
	for(var entry in methodNames)
	{
		var am={};
		OSF.OUtil.defineEnumerableProperties(am,{
			id: {value: entry},
			displayName: {value: methodNames[entry]}
		});
		OSF.DDA.AsyncMethodNames[entry]=am
	}
};
OSF.DDA.AsyncMethodCall=function OSF_DDA_AsyncMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, onSucceeded, onFailed, checkCallArgs, displayName)
{
	var requiredCount=requiredParameters.length;
	var apiMethods=new OSF.DDA.ApiMethodCall(requiredParameters,supportedOptions,privateStateCallbacks,checkCallArgs,displayName);
	function OSF_DAA_AsyncMethodCall$ExtractOptions(userArgs, requiredArgs, caller, stateInfo)
	{
		if(userArgs.length > requiredCount+2)
			throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyArguments);
		var options,
			parameterCallback;
		for(var i=userArgs.length - 1; i >=requiredCount; i--)
		{
			var argument=userArgs[i];
			switch(typeof argument)
			{
				case"object":
					if(options)
						throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyOptionalObjects);
					else
						options=argument;
					break;
				case"function":
					if(parameterCallback)
						throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyOptionalFunction);
					else
						parameterCallback=argument;
					break;
				default:
					throw OsfMsAjaxFactory.msAjaxError.argument(Strings.OfficeOM.L_InValidOptionalArgument);
					break
			}
		}
		options=apiMethods.fillOptions(options,requiredArgs,caller,stateInfo);
		if(parameterCallback)
			if(options[Microsoft.Office.WebExtension.Parameters.Callback])
				throw Strings.OfficeOM.L_RedundantCallbackSpecification;
			else
				options[Microsoft.Office.WebExtension.Parameters.Callback]=parameterCallback;
		apiMethods.verifyArguments(supportedOptions,options);
		return options
	}
	this.verifyAndExtractCall=function OSF_DAA_AsyncMethodCall$VerifyAndExtractCall(userArgs, caller, stateInfo)
	{
		var required=apiMethods.extractRequiredArguments(userArgs,caller,stateInfo);
		var options=OSF_DAA_AsyncMethodCall$ExtractOptions(userArgs,required,caller,stateInfo);
		var callArgs=apiMethods.constructCallArgs(required,options,caller,stateInfo);
		return callArgs
	};
	this.processResponse=function OSF_DAA_AsyncMethodCall$ProcessResponse(status, response, caller, callArgs)
	{
		var payload;
		if(status==OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
			if(onSucceeded)
				payload=onSucceeded(response,caller,callArgs);
			else
				payload=response;
		else if(onFailed)
			payload=onFailed(status,response);
		else
			payload=OSF.DDA.ErrorCodeManager.getErrorArgs(status);
		return payload
	};
	this.getCallArgs=function(suppliedArgs)
	{
		var options,
			parameterCallback;
		for(var i=suppliedArgs.length - 1; i >=requiredCount; i--)
		{
			var argument=suppliedArgs[i];
			switch(typeof argument)
			{
				case"object":
					options=argument;
					break;
				case"function":
					parameterCallback=argument;
					break
			}
		}
		options=options || {};
		if(parameterCallback)
			options[Microsoft.Office.WebExtension.Parameters.Callback]=parameterCallback;
		return options
	}
};
OSF.DDA.AsyncMethodCallFactory=function()
{
	return{manufacture: function(params)
			{
				var supportedOptions=params.supportedOptions ? OSF.OUtil.createObject(params.supportedOptions) : [];
				var privateStateCallbacks=params.privateStateCallbacks ? OSF.OUtil.createObject(params.privateStateCallbacks) : [];
				return new OSF.DDA.AsyncMethodCall(params.requiredArguments || [],supportedOptions,privateStateCallbacks,params.onSucceeded,params.onFailed,params.checkCallArgs,params.method.displayName)
			}}
}();
OSF.DDA.AsyncMethodCalls={};
OSF.DDA.AsyncMethodCalls.define=function(callDefinition)
{
	OSF.DDA.AsyncMethodCalls[callDefinition.method.id]=OSF.DDA.AsyncMethodCallFactory.manufacture(callDefinition)
};
OSF.DDA.Error=function OSF_DDA_Error(name, message, code)
{
	OSF.OUtil.defineEnumerableProperties(this,{
		name: {value: name},
		message: {value: message},
		code: {value: code}
	})
};
OSF.DDA.AsyncResult=function OSF_DDA_AsyncResult(initArgs, errorArgs)
{
	OSF.OUtil.defineEnumerableProperties(this,{
		value: {value: initArgs[OSF.DDA.AsyncResultEnum.Properties.Value]},
		status: {value: errorArgs ? Microsoft.Office.WebExtension.AsyncResultStatus.Failed : Microsoft.Office.WebExtension.AsyncResultStatus.Succeeded}
	});
	if(initArgs[OSF.DDA.AsyncResultEnum.Properties.Context])
		OSF.OUtil.defineEnumerableProperty(this,"asyncContext",{value: initArgs[OSF.DDA.AsyncResultEnum.Properties.Context]});
	if(errorArgs)
		OSF.OUtil.defineEnumerableProperty(this,"error",{value: new OSF.DDA.Error(errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name],errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message],errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code])})
};
OSF.DDA.issueAsyncResult=function OSF_DDA$IssueAsyncResult(callArgs, status, payload)
{
	var callback=callArgs[Microsoft.Office.WebExtension.Parameters.Callback];
	if(callback)
	{
		var asyncInitArgs={};
		asyncInitArgs[OSF.DDA.AsyncResultEnum.Properties.Context]=callArgs[Microsoft.Office.WebExtension.Parameters.AsyncContext];
		var errorArgs;
		if(status==OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
			asyncInitArgs[OSF.DDA.AsyncResultEnum.Properties.Value]=payload;
		else
		{
			errorArgs={};
			payload=payload || OSF.DDA.ErrorCodeManager.getErrorArgs(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
			errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code]=status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
			errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name]=payload.name || payload;
			errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message]=payload.message || payload
		}
		callback(new OSF.DDA.AsyncResult(asyncInitArgs,errorArgs))
	}
};
OSF.DDA.SyncMethodNames={};
OSF.DDA.SyncMethodNames.addNames=function(methodNames)
{
	for(var entry in methodNames)
	{
		var am={};
		OSF.OUtil.defineEnumerableProperties(am,{
			id: {value: entry},
			displayName: {value: methodNames[entry]}
		});
		OSF.DDA.SyncMethodNames[entry]=am
	}
};
OSF.DDA.SyncMethodCall=function OSF_DDA_SyncMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, checkCallArgs, displayName)
{
	var requiredCount=requiredParameters.length;
	var apiMethods=new OSF.DDA.ApiMethodCall(requiredParameters,supportedOptions,privateStateCallbacks,checkCallArgs,displayName);
	function OSF_DAA_SyncMethodCall$ExtractOptions(userArgs, requiredArgs, caller, stateInfo)
	{
		if(userArgs.length > requiredCount+1)
			throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyArguments);
		var options,
			parameterCallback;
		for(var i=userArgs.length - 1; i >=requiredCount; i--)
		{
			var argument=userArgs[i];
			switch(typeof argument)
			{
				case"object":
					if(options)
						throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyOptionalObjects);
					else
						options=argument;
					break;
				default:
					throw OsfMsAjaxFactory.msAjaxError.argument(Strings.OfficeOM.L_InValidOptionalArgument);
					break
			}
		}
		options=apiMethods.fillOptions(options,requiredArgs,caller,stateInfo);
		apiMethods.verifyArguments(supportedOptions,options);
		return options
	}
	this.verifyAndExtractCall=function OSF_DAA_AsyncMethodCall$VerifyAndExtractCall(userArgs, caller, stateInfo)
	{
		var required=apiMethods.extractRequiredArguments(userArgs,caller,stateInfo);
		var options=OSF_DAA_SyncMethodCall$ExtractOptions(userArgs,required,caller,stateInfo);
		var callArgs=apiMethods.constructCallArgs(required,options,caller,stateInfo);
		return callArgs
	}
};
OSF.DDA.SyncMethodCallFactory=function()
{
	return{manufacture: function(params)
			{
				var supportedOptions=params.supportedOptions ? OSF.OUtil.createObject(params.supportedOptions) : [];
				return new OSF.DDA.SyncMethodCall(params.requiredArguments || [],supportedOptions,params.privateStateCallbacks,params.checkCallArgs,params.method.displayName)
			}}
}();
OSF.DDA.SyncMethodCalls={};
OSF.DDA.SyncMethodCalls.define=function(callDefinition)
{
	OSF.DDA.SyncMethodCalls[callDefinition.method.id]=OSF.DDA.SyncMethodCallFactory.manufacture(callDefinition)
};
OSF.DDA.ListType=function()
{
	var listTypes={};
	return{
			setListType: function OSF_DDA_ListType$AddListType(t, prop)
			{
				listTypes[t]=prop
			},
			isListType: function OSF_DDA_ListType$IsListType(t)
			{
				return OSF.OUtil.listContainsKey(listTypes,t)
			},
			getDescriptor: function OSF_DDA_ListType$getDescriptor(t)
			{
				return listTypes[t]
			}
		}
}();
OSF.DDA.HostParameterMap=function(specialProcessor, mappings)
{
	var toHostMap="toHost";
	var fromHostMap="fromHost";
	var self="self";
	var dynamicTypes={};
	dynamicTypes[Microsoft.Office.WebExtension.Parameters.Data]={
		toHost: function(data)
		{
			if(data !=null && data.rows !==undefined)
			{
				var tableData={};
				tableData[OSF.DDA.TableDataProperties.TableRows]=data.rows;
				tableData[OSF.DDA.TableDataProperties.TableHeaders]=data.headers;
				data=tableData
			}
			return data
		},
		fromHost: function(args)
		{
			return args
		}
	};
	dynamicTypes[Microsoft.Office.WebExtension.Parameters.SampleData]=dynamicTypes[Microsoft.Office.WebExtension.Parameters.Data];
	function mapValues(preimageSet, mapping)
	{
		var ret=preimageSet ? {} : undefined;
		for(var entry in preimageSet)
		{
			var preimage=preimageSet[entry];
			var image;
			if(OSF.DDA.ListType.isListType(entry))
			{
				image=[];
				for(var subEntry in preimage)
					image.push(mapValues(preimage[subEntry],mapping))
			}
			else if(OSF.OUtil.listContainsKey(dynamicTypes,entry))
				image=dynamicTypes[entry][mapping](preimage);
			else if(mapping==fromHostMap && specialProcessor.preserveNesting(entry))
				image=mapValues(preimage,mapping);
			else
			{
				var maps=mappings[entry];
				if(maps)
				{
					var map=maps[mapping];
					if(map)
					{
						image=map[preimage];
						if(image===undefined)
							image=preimage
					}
				}
				else
					image=preimage
			}
			ret[entry]=image
		}
		return ret
	}
	function generateArguments(imageSet, parameters)
	{
		var ret;
		for(var param in parameters)
		{
			var arg;
			if(specialProcessor.isComplexType(param))
				arg=generateArguments(imageSet,mappings[param][toHostMap]);
			else
				arg=imageSet[param];
			if(arg !=undefined)
			{
				if(!ret)
					ret={};
				var index=parameters[param];
				if(index==self)
					index=param;
				ret[index]=specialProcessor.pack(param,arg)
			}
		}
		return ret
	}
	function extractArguments(source, parameters, extracted)
	{
		if(!extracted)
			extracted={};
		for(var param in parameters)
		{
			var index=parameters[param];
			var value;
			if(index==self)
				value=source;
			else
				value=source[index];
			if(value===null || value===undefined)
				extracted[param]=undefined;
			else
			{
				value=specialProcessor.unpack(param,value);
				var map;
				if(specialProcessor.isComplexType(param))
				{
					map=mappings[param][fromHostMap];
					if(specialProcessor.preserveNesting(param))
						extracted[param]=extractArguments(value,map);
					else
						extractArguments(value,map,extracted)
				}
				else
				{
					if(OSF.DDA.ListType.isListType(param))
					{
						map={};
						var entryDescriptor=OSF.DDA.ListType.getDescriptor(param);
						map[entryDescriptor]=self;
						for(var item in value)
							value[item]=extractArguments(value[item],map)
					}
					extracted[param]=value
				}
			}
		}
		return extracted
	}
	function applyMap(mapName, preimage, mapping)
	{
		var parameters=mappings[mapName][mapping];
		var image;
		if(mapping=="toHost")
		{
			var imageSet=mapValues(preimage,mapping);
			image=generateArguments(imageSet,parameters)
		}
		else if(mapping=="fromHost")
		{
			var argumentSet=extractArguments(preimage,parameters);
			image=mapValues(argumentSet,mapping)
		}
		return image
	}
	if(!mappings)
		mappings={};
	this.addMapping=function(mapName, description)
	{
		var toHost,
			fromHost;
		if(description.map)
		{
			toHost=description.map;
			fromHost={};
			for(var preimage in toHost)
			{
				var image=toHost[preimage];
				if(image==self)
					image=preimage;
				fromHost[image]=preimage
			}
		}
		else
		{
			toHost=description.toHost;
			fromHost=description.fromHost
		}
		var pair=mappings[mapName];
		if(pair)
		{
			var currMap=pair[toHostMap];
			for(var th in currMap)
				toHost[th]=currMap[th];
			currMap=pair[fromHostMap];
			for(var fh in currMap)
				fromHost[fh]=currMap[fh]
		}
		else
			pair=mappings[mapName]={};
		pair[toHostMap]=toHost;
		pair[fromHostMap]=fromHost
	};
	this.toHost=function(mapName, preimage)
	{
		return applyMap(mapName,preimage,toHostMap)
	};
	this.fromHost=function(mapName, image)
	{
		return applyMap(mapName,image,fromHostMap)
	};
	this.self=self;
	this.addComplexType=function(ct)
	{
		specialProcessor.addComplexType(ct)
	};
	this.getDynamicType=function(dt)
	{
		return specialProcessor.getDynamicType(dt)
	};
	this.setDynamicType=function(dt, handler)
	{
		specialProcessor.setDynamicType(dt,handler)
	};
	this.dynamicTypes=dynamicTypes;
	this.doMapValues=function(preimageSet, mapping)
	{
		return mapValues(preimageSet,mapping)
	}
};
OSF.DDA.SpecialProcessor=function(complexTypes, dynamicTypes)
{
	this.addComplexType=function OSF_DDA_SpecialProcessor$addComplexType(ct)
	{
		complexTypes.push(ct)
	};
	this.getDynamicType=function OSF_DDA_SpecialProcessor$getDynamicType(dt)
	{
		return dynamicTypes[dt]
	};
	this.setDynamicType=function OSF_DDA_SpecialProcessor$setDynamicType(dt, handler)
	{
		dynamicTypes[dt]=handler
	};
	this.isComplexType=function OSF_DDA_SpecialProcessor$isComplexType(t)
	{
		return OSF.OUtil.listContainsValue(complexTypes,t)
	};
	this.isDynamicType=function OSF_DDA_SpecialProcessor$isDynamicType(p)
	{
		return OSF.OUtil.listContainsKey(dynamicTypes,p)
	};
	this.preserveNesting=function OSF_DDA_SpecialProcessor$preserveNesting(p)
	{
		var pn=[];
		if(OSF.DDA.PropertyDescriptors)
			pn.push(OSF.DDA.PropertyDescriptors.Subset);
		if(OSF.DDA.DataNodeEventProperties)
			pn=pn.concat([OSF.DDA.DataNodeEventProperties.OldNode,OSF.DDA.DataNodeEventProperties.NewNode,OSF.DDA.DataNodeEventProperties.NextSiblingNode]);
		return OSF.OUtil.listContainsValue(pn,p)
	};
	this.pack=function OSF_DDA_SpecialProcessor$pack(param, arg)
	{
		var value;
		if(this.isDynamicType(param))
			value=dynamicTypes[param].toHost(arg);
		else
			value=arg;
		return value
	};
	this.unpack=function OSF_DDA_SpecialProcessor$unpack(param, arg)
	{
		var value;
		if(this.isDynamicType(param))
			value=dynamicTypes[param].fromHost(arg);
		else
			value=arg;
		return value
	}
};
OSF.DDA.getDecoratedParameterMap=function(specialProcessor, initialDefs)
{
	var parameterMap=new OSF.DDA.HostParameterMap(specialProcessor);
	var self=parameterMap.self;
	function createObject(properties)
	{
		var obj=null;
		if(properties)
		{
			obj={};
			var len=properties.length;
			for(var i=0; i < len; i++)
				obj[properties[i].name]=properties[i].value
		}
		return obj
	}
	parameterMap.define=function define(definition)
	{
		var args={};
		var toHost=createObject(definition.toHost);
		if(definition.invertible)
			args.map=toHost;
		else if(definition.canonical)
			args.toHost=args.fromHost=toHost;
		else
		{
			args.toHost=toHost;
			args.fromHost=createObject(definition.fromHost)
		}
		parameterMap.addMapping(definition.type,args);
		if(definition.isComplexType)
			parameterMap.addComplexType(definition.type)
	};
	for(var id in initialDefs)
		parameterMap.define(initialDefs[id]);
	return parameterMap
};
OSF.OUtil.setNamespace("DispIdHost",OSF.DDA);
OSF.DDA.DispIdHost.Methods={
	InvokeMethod: "invokeMethod",
	AddEventHandler: "addEventHandler",
	RemoveEventHandler: "removeEventHandler",
	OpenDialog: "openDialog",
	CloseDialog: "closeDialog",
	MessageParent: "messageParent"
};
OSF.DDA.DispIdHost.Delegates={
	ExecuteAsync: "executeAsync",
	RegisterEventAsync: "registerEventAsync",
	UnregisterEventAsync: "unregisterEventAsync",
	ParameterMap: "parameterMap",
	MessageParent: "messageParent"
};
OSF.DDA.DispIdHost.Facade=function OSF_DDA_DispIdHost_Facade(getDelegateMethods, parameterMap)
{
	var dispIdMap={};
	var jsom=OSF.DDA.AsyncMethodNames;
	var did=OSF.DDA.MethodDispId;
	var methodMap={
			GoToByIdAsync: did.dispidNavigateToMethod,
			GetSelectedDataAsync: did.dispidGetSelectedDataMethod,
			SetSelectedDataAsync: did.dispidSetSelectedDataMethod,
			GetDocumentCopyChunkAsync: did.dispidGetDocumentCopyChunkMethod,
			ReleaseDocumentCopyAsync: did.dispidReleaseDocumentCopyMethod,
			GetDocumentCopyAsync: did.dispidGetDocumentCopyMethod,
			AddFromSelectionAsync: did.dispidAddBindingFromSelectionMethod,
			AddFromPromptAsync: did.dispidAddBindingFromPromptMethod,
			AddFromNamedItemAsync: did.dispidAddBindingFromNamedItemMethod,
			GetAllAsync: did.dispidGetAllBindingsMethod,
			GetByIdAsync: did.dispidGetBindingMethod,
			ReleaseByIdAsync: did.dispidReleaseBindingMethod,
			GetDataAsync: did.dispidGetBindingDataMethod,
			SetDataAsync: did.dispidSetBindingDataMethod,
			AddRowsAsync: did.dispidAddRowsMethod,
			AddColumnsAsync: did.dispidAddColumnsMethod,
			DeleteAllDataValuesAsync: did.dispidClearAllRowsMethod,
			RefreshAsync: did.dispidLoadSettingsMethod,
			SaveAsync: did.dispidSaveSettingsMethod,
			GetActiveViewAsync: did.dispidGetActiveViewMethod,
			GetFilePropertiesAsync: did.dispidGetFilePropertiesMethod,
			GetOfficeThemeAsync: did.dispidGetOfficeThemeMethod,
			GetDocumentThemeAsync: did.dispidGetDocumentThemeMethod,
			ClearFormatsAsync: did.dispidClearFormatsMethod,
			SetTableOptionsAsync: did.dispidSetTableOptionsMethod,
			SetFormatsAsync: did.dispidSetFormatsMethod,
			ExecuteRichApiRequestAsync: did.dispidExecuteRichApiRequestMethod,
			AppCommandInvocationCompletedAsync: did.dispidAppCommandInvocationCompletedMethod,
			AddDataPartAsync: did.dispidAddDataPartMethod,
			GetDataPartByIdAsync: did.dispidGetDataPartByIdMethod,
			GetDataPartsByNameSpaceAsync: did.dispidGetDataPartsByNamespaceMethod,
			GetPartXmlAsync: did.dispidGetDataPartXmlMethod,
			GetPartNodesAsync: did.dispidGetDataPartNodesMethod,
			DeleteDataPartAsync: did.dispidDeleteDataPartMethod,
			GetNodeValueAsync: did.dispidGetDataNodeValueMethod,
			GetNodeXmlAsync: did.dispidGetDataNodeXmlMethod,
			GetRelativeNodesAsync: did.dispidGetDataNodesMethod,
			SetNodeValueAsync: did.dispidSetDataNodeValueMethod,
			SetNodeXmlAsync: did.dispidSetDataNodeXmlMethod,
			AddDataPartNamespaceAsync: did.dispidAddDataNamespaceMethod,
			GetDataPartNamespaceAsync: did.dispidGetDataUriByPrefixMethod,
			GetDataPartPrefixAsync: did.dispidGetDataPrefixByUriMethod,
			GetNodeTextAsync: did.dispidGetDataNodeTextMethod,
			SetNodeTextAsync: did.dispidSetDataNodeTextMethod,
			GetSelectedTask: did.dispidGetSelectedTaskMethod,
			GetTask: did.dispidGetTaskMethod,
			GetWSSUrl: did.dispidGetWSSUrlMethod,
			GetTaskField: did.dispidGetTaskFieldMethod,
			GetSelectedResource: did.dispidGetSelectedResourceMethod,
			GetResourceField: did.dispidGetResourceFieldMethod,
			GetProjectField: did.dispidGetProjectFieldMethod,
			GetSelectedView: did.dispidGetSelectedViewMethod,
			GetTaskByIndex: did.dispidGetTaskByIndexMethod,
			GetResourceByIndex: did.dispidGetResourceByIndexMethod,
			SetTaskField: did.dispidSetTaskFieldMethod,
			SetResourceField: did.dispidSetResourceFieldMethod,
			GetMaxTaskIndex: did.dispidGetMaxTaskIndexMethod,
			GetMaxResourceIndex: did.dispidGetMaxResourceIndexMethod
		};
	for(var method in methodMap)
		if(jsom[method])
			dispIdMap[jsom[method].id]=methodMap[method];
	jsom=OSF.DDA.SyncMethodNames;
	did=OSF.DDA.MethodDispId;
	var asyncMethodMap={MessageParent: did.dispidMessageParentMethod};
	for(var method in asyncMethodMap)
		if(jsom[method])
			dispIdMap[jsom[method].id]=methodMap[method];
	jsom=Microsoft.Office.WebExtension.EventType;
	did=OSF.DDA.EventDispId;
	var eventMap={
			SettingsChanged: did.dispidSettingsChangedEvent,
			DocumentSelectionChanged: did.dispidDocumentSelectionChangedEvent,
			BindingSelectionChanged: did.dispidBindingSelectionChangedEvent,
			BindingDataChanged: did.dispidBindingDataChangedEvent,
			ActiveViewChanged: did.dispidActiveViewChangedEvent,
			OfficeThemeChanged: did.dispidOfficeThemeChangedEvent,
			DocumentThemeChanged: did.dispidDocumentThemeChangedEvent,
			AppCommandInvoked: did.dispidAppCommandInvokedEvent,
			DialogMessageReceived: did.dispidDialogMessageReceivedEvent,
			TaskSelectionChanged: did.dispidTaskSelectionChangedEvent,
			ResourceSelectionChanged: did.dispidResourceSelectionChangedEvent,
			ViewSelectionChanged: did.dispidViewSelectionChangedEvent,
			DataNodeInserted: did.dispidDataNodeAddedEvent,
			DataNodeReplaced: did.dispidDataNodeReplacedEvent,
			DataNodeDeleted: did.dispidDataNodeDeletedEvent
		};
	for(var event in eventMap)
		if(jsom[event])
			dispIdMap[jsom[event]]=eventMap[event];
	function onException(ex, asyncMethodCall, suppliedArgs, callArgs)
	{
		if(typeof ex=="number")
		{
			if(!callArgs)
				callArgs=asyncMethodCall.getCallArgs(suppliedArgs);
			OSF.DDA.issueAsyncResult(callArgs,ex,OSF.DDA.ErrorCodeManager.getErrorArgs(ex))
		}
		else
			throw ex;
	}
	this[OSF.DDA.DispIdHost.Methods.InvokeMethod]=function OSF_DDA_DispIdHost_Facade$InvokeMethod(method, suppliedArguments, caller, privateState)
	{
		var callArgs;
		try
		{
			var methodName=method.id;
			var asyncMethodCall=OSF.DDA.AsyncMethodCalls[methodName];
			callArgs=asyncMethodCall.verifyAndExtractCall(suppliedArguments,caller,privateState);
			var dispId=dispIdMap[methodName];
			var delegate=getDelegateMethods(methodName);
			var hostCallArgs;
			if(parameterMap.toHost)
				hostCallArgs=parameterMap.toHost(dispId,callArgs);
			else
				hostCallArgs=callArgs;
			delegate[OSF.DDA.DispIdHost.Delegates.ExecuteAsync]({
				dispId: dispId,
				hostCallArgs: hostCallArgs,
				onCalling: function OSF_DDA_DispIdFacade$Execute_onCalling()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall)
				},
				onReceiving: function OSF_DDA_DispIdFacade$Execute_onReceiving()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse)
				},
				onComplete: function(status, hostResponseArgs)
				{
					var responseArgs;
					if(status==OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
						if(parameterMap.fromHost)
							responseArgs=parameterMap.fromHost(dispId,hostResponseArgs);
						else
							responseArgs=hostResponseArgs;
					else
						responseArgs=hostResponseArgs;
					var payload=asyncMethodCall.processResponse(status,responseArgs,caller,callArgs);
					OSF.DDA.issueAsyncResult(callArgs,status,payload)
				}
			})
		}
		catch(ex)
		{
			onException(ex,asyncMethodCall,suppliedArguments,callArgs)
		}
	};
	this[OSF.DDA.DispIdHost.Methods.AddEventHandler]=function OSF_DDA_DispIdHost_Facade$AddEventHandler(suppliedArguments, eventDispatch, caller)
	{
		var callArgs;
		var eventType,
			handler;
		function onEnsureRegistration(status)
		{
			if(status==OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
			{
				var added=eventDispatch.addEventHandler(eventType,handler);
				if(!added)
					status=OSF.DDA.ErrorCodeManager.errorCodes.ooeEventHandlerAdditionFailed
			}
			var error;
			if(status !=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
				error=OSF.DDA.ErrorCodeManager.getErrorArgs(status);
			OSF.DDA.issueAsyncResult(callArgs,status,error)
		}
		try
		{
			var asyncMethodCall=OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.AddHandlerAsync.id];
			callArgs=asyncMethodCall.verifyAndExtractCall(suppliedArguments,caller,eventDispatch);
			eventType=callArgs[Microsoft.Office.WebExtension.Parameters.EventType];
			handler=callArgs[Microsoft.Office.WebExtension.Parameters.Handler];
			if(eventDispatch.getEventHandlerCount(eventType)==0)
			{
				var dispId=dispIdMap[eventType];
				var invoker=getDelegateMethods(eventType)[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync];
				invoker({
					eventType: eventType,
					dispId: dispId,
					targetId: caller.id || "",
					onCalling: function OSF_DDA_DispIdFacade$Execute_onCalling()
					{
						OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall)
					},
					onReceiving: function OSF_DDA_DispIdFacade$Execute_onReceiving()
					{
						OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse)
					},
					onComplete: onEnsureRegistration,
					onEvent: function handleEvent(hostArgs)
					{
						var args=parameterMap.fromHost(dispId,hostArgs);
						eventDispatch.fireEvent(OSF.DDA.OMFactory.manufactureEventArgs(eventType,caller,args))
					}
				})
			}
			else
				onEnsureRegistration(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
		}
		catch(ex)
		{
			onException(ex,asyncMethodCall,suppliedArguments,callArgs)
		}
	};
	this[OSF.DDA.DispIdHost.Methods.RemoveEventHandler]=function OSF_DDA_DispIdHost_Facade$RemoveEventHandler(suppliedArguments, eventDispatch, caller)
	{
		var callArgs;
		var eventType,
			handler;
		function onEnsureRegistration(status)
		{
			var error;
			if(status !=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
				error=OSF.DDA.ErrorCodeManager.getErrorArgs(status);
			OSF.DDA.issueAsyncResult(callArgs,status,error)
		}
		try
		{
			var asyncMethodCall=OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.RemoveHandlerAsync.id];
			callArgs=asyncMethodCall.verifyAndExtractCall(suppliedArguments,caller,eventDispatch);
			eventType=callArgs[Microsoft.Office.WebExtension.Parameters.EventType];
			handler=callArgs[Microsoft.Office.WebExtension.Parameters.Handler];
			var status,
				removeSuccess;
			if(handler===null)
			{
				removeSuccess=eventDispatch.clearEventHandlers(eventType);
				status=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess
			}
			else
			{
				removeSuccess=eventDispatch.removeEventHandler(eventType,handler);
				status=removeSuccess ? OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess : OSF.DDA.ErrorCodeManager.errorCodes.ooeEventHandlerNotExist
			}
			if(removeSuccess && eventDispatch.getEventHandlerCount(eventType)==0)
			{
				var dispId=dispIdMap[eventType];
				var invoker=getDelegateMethods(eventType)[OSF.DDA.DispIdHost.Delegates.UnregisterEventAsync];
				invoker({
					eventType: eventType,
					dispId: dispId,
					targetId: caller.id || "",
					onCalling: function OSF_DDA_DispIdFacade$Execute_onCalling()
					{
						OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall)
					},
					onReceiving: function OSF_DDA_DispIdFacade$Execute_onReceiving()
					{
						OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse)
					},
					onComplete: onEnsureRegistration
				})
			}
			else
				onEnsureRegistration(status)
		}
		catch(ex)
		{
			onException(ex,asyncMethodCall,suppliedArguments,callArgs)
		}
	};
	this[OSF.DDA.DispIdHost.Methods.OpenDialog]=function OSF_DDA_DispIdHost_Facade$OpenDialog(suppliedArguments, eventDispatch, caller)
	{
		var callArgs;
		var dialogMessageEvent,
			dialogOtherEvent;
		var targetId;
		function onEnsureRegistration(status)
		{
			var payload;
			if(status !=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
				payload=OSF.DDA.ErrorCodeManager.getErrorArgs(status);
			else
			{
				var onSucceedArgs={};
				onSucceedArgs[Microsoft.Office.WebExtension.Parameters.Id]=targetId;
				onSucceedArgs[Microsoft.Office.WebExtension.Parameters.Data]=eventDispatch;
				var payload=asyncMethodCall.processResponse(status,onSucceedArgs,caller,callArgs)
			}
			OSF.DDA.issueAsyncResult(callArgs,status,payload)
		}
		try
		{
			dialogMessageEvent=Microsoft.Office.WebExtension.EventType.DialogMessageReceived;
			dialogOtherEvent=Microsoft.Office.WebExtension.EventType.DialogEventReceived;
			if(dialogMessageEvent==undefined || dialogOtherEvent==undefined)
				onEnsureRegistration(OSF.DDA.ErrorCodeManager.ooeOperationNotSupported);
			if(OSF.DDA.AsyncMethodNames.DisplayDialogAsync==null)
			{
				onEnsureRegistration(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
				return
			}
			var asyncMethodCall=OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.DisplayDialogAsync.id];
			callArgs=asyncMethodCall.verifyAndExtractCall(suppliedArguments,caller,eventDispatch);
			eventDispatch.clearEventHandlers(dialogMessageEvent);
			eventDispatch.clearEventHandlers(dialogOtherEvent);
			var dispId=dispIdMap[dialogMessageEvent];
			var invoker=getDelegateMethods(dialogMessageEvent)[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync];
			targetId=JSON.stringify(callArgs);
			invoker({
				eventType: dialogMessageEvent,
				dispId: dispId,
				targetId: targetId,
				onCalling: function OSF_DDA_DispIdFacade$Execute_onCalling()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall)
				},
				onReceiving: function OSF_DDA_DispIdFacade$Execute_onReceiving()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse)
				},
				onComplete: onEnsureRegistration,
				onEvent: function handleEvent(hostArgs)
				{
					var args=parameterMap.fromHost(dispId,hostArgs);
					var event=OSF.DDA.OMFactory.manufactureEventArgs(dialogMessageEvent,caller,args);
					if(event.type==dialogOtherEvent)
					{
						var payload=OSF.DDA.ErrorCodeManager.getErrorArgs(event.error);
						var errorArgs={};
						errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code]=status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
						errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name]=payload.name || payload;
						errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message]=payload.message || payload;
						event.error=new OSF.DDA.Error(errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name],errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message],errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code])
					}
					eventDispatch.fireOrQueueEvent(event);
					if(args[OSF.DDA.PropertyDescriptors.MessageType]==OSF.DialogMessageType.DialogClosed)
					{
						eventDispatch.clearEventHandlers(dialogMessageEvent);
						eventDispatch.clearEventHandlers(dialogOtherEvent)
					}
				}
			})
		}
		catch(ex)
		{
			onException(ex,asyncMethodCall,suppliedArguments,callArgs)
		}
	};
	this[OSF.DDA.DispIdHost.Methods.CloseDialog]=function OSF_DDA_DispIdHost_Facade$CloseDialog(suppliedArguments, targetId, eventDispatch, caller)
	{
		var callArgs;
		var dialogMessageEvent,
			dialogOtherEvent;
		var closeStatus=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess;
		function closeCallback(status)
		{
			closeStatus=status
		}
		try
		{
			var asyncMethodCall=OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.CloseAsync.id];
			callArgs=asyncMethodCall.verifyAndExtractCall(suppliedArguments,caller,eventDispatch);
			dialogMessageEvent=Microsoft.Office.WebExtension.EventType.DialogMessageReceived;
			dialogOtherEvent=Microsoft.Office.WebExtension.EventType.DialogEventReceived;
			eventDispatch.clearEventHandlers(dialogMessageEvent);
			eventDispatch.clearEventHandlers(dialogOtherEvent);
			var dispId=dispIdMap[dialogMessageEvent];
			var invoker=getDelegateMethods(dialogMessageEvent)[OSF.DDA.DispIdHost.Delegates.UnregisterEventAsync];
			invoker({
				eventType: dialogMessageEvent,
				dispId: dispId,
				targetId: targetId,
				onCalling: function OSF_DDA_DispIdFacade$Execute_onCalling()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall)
				},
				onReceiving: function OSF_DDA_DispIdFacade$Execute_onReceiving()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse)
				},
				onComplete: closeCallback
			})
		}
		catch(ex)
		{
			onException(ex,asyncMethodCall,suppliedArguments,callArgs)
		}
		if(closeStatus !=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
			throw OSF.OUtil.formatString(Strings.OfficeOM.L_FunctionCallFailed,OSF.DDA.AsyncMethodNames.CloseAsync.displayName,closeStatus);
	};
	this[OSF.DDA.DispIdHost.Methods.MessageParent]=function OSF_DDA_DispIdHost_Facade$MessageParent(suppliedArguments, caller)
	{
		var stateInfo={};
		var syncMethodCall=OSF.DDA.SyncMethodCalls[OSF.DDA.SyncMethodNames.MessageParent.id];
		var callArgs=syncMethodCall.verifyAndExtractCall(suppliedArguments,caller,stateInfo);
		var delegate=getDelegateMethods(OSF.DDA.SyncMethodNames.MessageParent.id);
		var invoker=delegate[OSF.DDA.DispIdHost.Delegates.MessageParent];
		var dispId=dispIdMap[syncMethodCall];
		return invoker({
				dispId: dispId,
				hostCallArgs: callArgs[Microsoft.Office.WebExtension.Parameters.MessageToParent],
				onCalling: function OSF_DDA_DispIdFacade$Execute_onCalling()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall)
				},
				onReceiving: function OSF_DDA_DispIdFacade$Execute_onReceiving()
				{
					OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse)
				}
			})
	}
};
OSF.DDA.DispIdHost.addAsyncMethods=function OSF_DDA_DispIdHost$AddAsyncMethods(target, asyncMethodNames, privateState)
{
	for(var entry in asyncMethodNames)
	{
		var method=asyncMethodNames[entry];
		var name=method.displayName;
		if(!target[name])
			OSF.OUtil.defineEnumerableProperty(target,name,{value: function(asyncMethod)
				{
					return function()
						{
							var invokeMethod=OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.InvokeMethod];
							invokeMethod(asyncMethod,arguments,target,privateState)
						}
				}(method)})
	}
};
OSF.DDA.DispIdHost.addEventSupport=function OSF_DDA_DispIdHost$AddEventSupport(target, eventDispatch)
{
	var add=OSF.DDA.AsyncMethodNames.AddHandlerAsync.displayName;
	var remove=OSF.DDA.AsyncMethodNames.RemoveHandlerAsync.displayName;
	if(!target[add])
		OSF.OUtil.defineEnumerableProperty(target,add,{value: function()
			{
				var addEventHandler=OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.AddEventHandler];
				addEventHandler(arguments,eventDispatch,target)
			}});
	if(!target[remove])
		OSF.OUtil.defineEnumerableProperty(target,remove,{value: function()
			{
				var removeEventHandler=OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.RemoveEventHandler];
				removeEventHandler(arguments,eventDispatch,target)
			}})
};
if(!OsfMsAjaxFactory.isMsAjaxLoaded())
	if(!(OSF._OfficeAppFactory && OSF._OfficeAppFactory && OSF._OfficeAppFactory.getLoadScriptHelper && OSF._OfficeAppFactory.getLoadScriptHelper().isScriptLoading(OSF.ConstantNames.MicrosoftAjaxId)))
	{
		var msAjaxCDNPath=(window.location.protocol.toLowerCase()==="https:" ? "https:" : "http:")+"//ajax.aspnetcdn.com/ajax/3.5/MicrosoftAjax.js";
		OsfMsAjaxFactory.loadMsAjaxFull(function OSF$loadMSAjaxCallback()
		{
			if(!OsfMsAjaxFactory.isMsAjaxLoaded())
				throw"Not able to load MicrosoftAjax.js.";
		})
	}
OSF.OUtil.setNamespace("SafeArray",OSF.DDA);
OSF.DDA.SafeArray.Response={
	Status: 0,
	Payload: 1
};
OSF.DDA.SafeArray.UniqueArguments={
	Offset: "offset",
	Run: "run",
	BindingSpecificData: "bindingSpecificData",
	MergedCellGuid: "{66e7831f-81b2-42e2-823c-89e872d541b3}"
};
OSF.OUtil.setNamespace("Delegate",OSF.DDA.SafeArray);
OSF.DDA.SafeArray.Delegate._onException=function OSF_DDA_SafeArray_Delegate$OnException(ex, args)
{
	var status;
	var statusNumber=ex.number;
	if(statusNumber)
		switch(statusNumber)
		{
			case-2146828218:
				status=OSF.DDA.ErrorCodeManager.errorCodes.ooeNoCapability;
				break;
			case-2147467259:
				status=OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened;
				break;
			case-2146828283:
				status=OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidParam;
				break;
			case-2146827850:
			default:
				status=OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
				break
		}
	if(args.onComplete)
		args.onComplete(status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError)
};
OSF.DDA.SafeArray.Delegate._onExceptionSyncMethod=function OSF_DDA_SafeArray_Delegate$OnExceptionSyncMethod(ex, args)
{
	var status;
	var number=ex.number;
	if(number)
		switch(number)
		{
			case-2146828218:
				status=OSF.DDA.ErrorCodeManager.errorCodes.ooeNoCapability;
				break;
			case-2146827850:
			default:
				status=OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
				break
		}
	return status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError
};
OSF.DDA.SafeArray.Delegate.SpecialProcessor=function OSF_DDA_SafeArray_Delegate_SpecialProcessor()
{
	function _2DVBArrayToJaggedArray(vbArr)
	{
		var ret;
		try
		{
			var rows=vbArr.ubound(1);
			var cols=vbArr.ubound(2);
			vbArr=vbArr.toArray();
			if(rows==1 && cols==1)
				ret=[vbArr];
			else
			{
				ret=[];
				for(var row=0; row < rows; row++)
				{
					var rowArr=[];
					for(var col=0; col < cols; col++)
					{
						var datum=vbArr[row * cols+col];
						if(datum !=OSF.DDA.SafeArray.UniqueArguments.MergedCellGuid)
							rowArr.push(datum)
					}
					if(rowArr.length > 0)
						ret.push(rowArr)
				}
			}
		}
		catch(ex){}
		return ret
	}
	var complexTypes=[];
	var dynamicTypes={};
	dynamicTypes[Microsoft.Office.WebExtension.Parameters.Data]=function()
	{
		var tableRows=0;
		var tableHeaders=1;
		return{
				toHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_Data$toHost(data)
				{
					if(typeof data !="string" && data[OSF.DDA.TableDataProperties.TableRows] !==undefined)
					{
						var tableData=[];
						tableData[tableRows]=data[OSF.DDA.TableDataProperties.TableRows];
						tableData[tableHeaders]=data[OSF.DDA.TableDataProperties.TableHeaders];
						data=tableData
					}
					return data
				},
				fromHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_Data$fromHost(hostArgs)
				{
					var ret;
					if(hostArgs.toArray)
					{
						var dimensions=hostArgs.dimensions();
						if(dimensions===2)
							ret=_2DVBArrayToJaggedArray(hostArgs);
						else
						{
							var array=hostArgs.toArray();
							if(array.length===2 && (array[0] !=null && array[0].toArray || array[1] !=null && array[1].toArray))
							{
								ret={};
								ret[OSF.DDA.TableDataProperties.TableRows]=_2DVBArrayToJaggedArray(array[tableRows]);
								ret[OSF.DDA.TableDataProperties.TableHeaders]=_2DVBArrayToJaggedArray(array[tableHeaders])
							}
							else
								ret=array
						}
					}
					else
						ret=hostArgs;
					return ret
				}
			}
	}();
	OSF.DDA.SafeArray.Delegate.SpecialProcessor.uber.constructor.call(this,complexTypes,dynamicTypes);
	this.unpack=function OSF_DDA_SafeArray_Delegate_SpecialProcessor$unpack(param, arg)
	{
		var value;
		if(this.isComplexType(param) || OSF.DDA.ListType.isListType(param))
		{
			var toArraySupported=(arg || typeof arg==="unknown") && arg.toArray;
			value=toArraySupported ? arg.toArray() : arg || {}
		}
		else if(this.isDynamicType(param))
			value=dynamicTypes[param].fromHost(arg);
		else
			value=arg;
		return value
	}
};
OSF.OUtil.extend(OSF.DDA.SafeArray.Delegate.SpecialProcessor,OSF.DDA.SpecialProcessor);
OSF.DDA.SafeArray.Delegate.ParameterMap=OSF.DDA.getDecoratedParameterMap(new OSF.DDA.SafeArray.Delegate.SpecialProcessor,[{
		type: Microsoft.Office.WebExtension.Parameters.ValueFormat,
		toHost: [{
				name: Microsoft.Office.WebExtension.ValueFormat.Unformatted,
				value: 0
			},{
				name: Microsoft.Office.WebExtension.ValueFormat.Formatted,
				value: 1
			}]
	},{
		type: Microsoft.Office.WebExtension.Parameters.FilterType,
		toHost: [{
				name: Microsoft.Office.WebExtension.FilterType.All,
				value: 0
			}]
	}]);
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
	type: OSF.DDA.PropertyDescriptors.AsyncResultStatus,
	fromHost: [{
			name: Microsoft.Office.WebExtension.AsyncResultStatus.Succeeded,
			value: 0
		},{
			name: Microsoft.Office.WebExtension.AsyncResultStatus.Failed,
			value: 1
		}]
});
OSF.DDA.SafeArray.Delegate.executeAsync=function OSF_DDA_SafeArray_Delegate$ExecuteAsync(args)
{
	function toArray(args)
	{
		var arrArgs=args;
		if(OSF.OUtil.isArray(args))
		{
			var len=arrArgs.length;
			for(var i=0; i < len; i++)
				arrArgs[i]=toArray(arrArgs[i])
		}
		else if(OSF.OUtil.isDate(args))
			arrArgs=args.getVarDate();
		else if(typeof args==="object" && !OSF.OUtil.isArray(args))
		{
			arrArgs=[];
			for(var index in args)
				if(!OSF.OUtil.isFunction(args[index]))
					arrArgs[index]=toArray(args[index])
		}
		return arrArgs
	}
	function fromSafeArray(value)
	{
		var ret=value;
		if(value !=null && value.toArray)
		{
			var arrayResult=value.toArray();
			ret=new Array(arrayResult.length);
			for(var i=0; i < arrayResult.length; i++)
				ret[i]=fromSafeArray(arrayResult[i])
		}
		return ret
	}
	try
	{
		if(args.onCalling)
			args.onCalling();
		var startTime=(new Date).getTime();
		OSF.ClientHostController.execute(args.dispId,toArray(args.hostCallArgs),function OSF_DDA_SafeArrayFacade$Execute_OnResponse(hostResponseArgs)
		{
			var result=hostResponseArgs.toArray();
			var status=result[OSF.DDA.SafeArray.Response.Status];
			if(status==OSF.DDA.ErrorCodeManager.errorCodes.ooeChunkResult)
			{
				var payload=result[OSF.DDA.SafeArray.Response.Payload];
				payload=fromSafeArray(payload);
				if(payload !=null)
				{
					if(!args._chunkResultData)
						args._chunkResultData=new Array;
					args._chunkResultData[payload[0]]=payload[1]
				}
				return false
			}
			if(args.onReceiving)
				args.onReceiving();
			if(args.onComplete)
			{
				var payload;
				if(status==OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
				{
					if(result.length > 2)
					{
						payload=[];
						for(var i=1; i < result.length; i++)
							payload[i - 1]=result[i]
					}
					else
						payload=result[OSF.DDA.SafeArray.Response.Payload];
					if(args._chunkResultData)
					{
						payload=fromSafeArray(payload);
						if(payload !=null)
						{
							var expectedChunkCount=payload[payload.length - 1];
							if(args._chunkResultData.length==expectedChunkCount)
								payload[payload.length - 1]=args._chunkResultData;
							else
								status=OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError
						}
					}
				}
				else
					payload=result[OSF.DDA.SafeArray.Response.Payload];
				args.onComplete(status,payload)
			}
			if(OSF.AppTelemetry)
				OSF.AppTelemetry.onMethodDone(args.dispId,args.hostCallArgs,Math.abs((new Date).getTime() - startTime),status);
			return true
		})
	}
	catch(ex)
	{
		OSF.DDA.SafeArray.Delegate._onException(ex,args)
	}
};
OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent=function OSF_DDA_SafeArrayDelegate$GetOnAfterRegisterEvent(register, args)
{
	var startTime=(new Date).getTime();
	return function OSF_DDA_SafeArrayDelegate$OnAfterRegisterEvent(hostResponseArgs)
		{
			if(args.onReceiving)
				args.onReceiving();
			var status=hostResponseArgs.toArray ? hostResponseArgs.toArray()[OSF.DDA.SafeArray.Response.Status] : hostResponseArgs;
			if(args.onComplete)
				args.onComplete(status);
			if(OSF.AppTelemetry)
				OSF.AppTelemetry.onRegisterDone(register,args.dispId,Math.abs((new Date).getTime() - startTime),status)
		}
};
OSF.DDA.SafeArray.Delegate.registerEventAsync=function OSF_DDA_SafeArray_Delegate$RegisterEventAsync(args)
{
	if(args.onCalling)
		args.onCalling();
	var callback=OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(true,args);
	try
	{
		OSF.ClientHostController.registerEvent(args.dispId,args.targetId,function OSF_DDA_SafeArrayDelegate$RegisterEventAsync_OnEvent(eventDispId, payload)
		{
			if(args.onEvent)
				args.onEvent(payload);
			if(OSF.AppTelemetry)
				OSF.AppTelemetry.onEventDone(args.dispId)
		},callback)
	}
	catch(ex)
	{
		OSF.DDA.SafeArray.Delegate._onException(ex,args)
	}
};
OSF.DDA.SafeArray.Delegate.unregisterEventAsync=function OSF_DDA_SafeArray_Delegate$UnregisterEventAsync(args)
{
	if(args.onCalling)
		args.onCalling();
	var callback=OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(false,args);
	try
	{
		OSF.ClientHostController.unregisterEvent(args.dispId,args.targetId,callback)
	}
	catch(ex)
	{
		OSF.DDA.SafeArray.Delegate._onException(ex,args)
	}
};
OSF.ClientMode={
	ReadWrite: 0,
	ReadOnly: 1
};
OSF.DDA.RichInitializationReason={
	1: Microsoft.Office.WebExtension.InitializationReason.Inserted,
	2: Microsoft.Office.WebExtension.InitializationReason.DocumentOpened
};
OSF.InitializationHelper=function OSF_InitializationHelper(hostInfo, webAppState, context, settings, hostFacade)
{
	this._hostInfo=hostInfo;
	this._webAppState=webAppState;
	this._context=context;
	this._settings=settings;
	this._hostFacade=hostFacade;
	this._initializeSettings=this.initializeSettings
};
OSF.InitializationHelper.prototype.deserializeSettings=function OSF_InitializationHelper$deserializeSettings(serializedSettings, refreshSupported)
{
	var settings;
	var osfSessionStorage=OSF.OUtil.getSessionStorage();
	if(osfSessionStorage)
	{
		var storageSettings=osfSessionStorage.getItem(OSF._OfficeAppFactory.getCachedSessionSettingsKey());
		if(storageSettings)
			serializedSettings=typeof JSON !=="undefined" ? JSON.parse(storageSettings) : OsfMsAjaxFactory.msAjaxSerializer.deserialize(storageSettings,true);
		else
		{
			storageSettings=typeof JSON !=="undefined" ? JSON.stringify(serializedSettings) : OsfMsAjaxFactory.msAjaxSerializer.serialize(serializedSettings);
			osfSessionStorage.setItem(OSF._OfficeAppFactory.getCachedSessionSettingsKey(),storageSettings)
		}
	}
	var deserializedSettings=OSF.DDA.SettingsManager.deserializeSettings(serializedSettings);
	if(refreshSupported)
		settings=new OSF.DDA.RefreshableSettings(deserializedSettings);
	else
		settings=new OSF.DDA.Settings(deserializedSettings);
	return settings
};
OSF.InitializationHelper.prototype.setAgaveHostCommunication=function OSF_InitializationHelper$setAgaveHostCommunication(){};
OSF.InitializationHelper.prototype.prepareRightBeforeWebExtensionInitialize=function OSF_InitializationHelper$prepareRightBeforeWebExtensionInitialize(appContext)
{
	this.prepareApiSurface(appContext);
	Microsoft.Office.WebExtension.initialize(this.getInitializationReason(appContext))
};
OSF.InitializationHelper.prototype.prepareApiSurface=function OSF_InitializationHelper$prepareApiSurfaceAndInitialize(appContext)
{
	var license=new OSF.DDA.License(appContext.get_eToken());
	var getOfficeThemeHandler=OSF.DDA.OfficeTheme && OSF.DDA.OfficeTheme.getOfficeTheme ? OSF.DDA.OfficeTheme.getOfficeTheme : null;
	if(appContext.get_isDialog())
	{
		if(OSF.DDA.UI.ChildUI)
			appContext.ui=new OSF.DDA.UI.ChildUI
	}
	else if(OSF.DDA.UI.ParentUI)
		appContext.ui=new OSF.DDA.UI.ParentUI;
	OSF._OfficeAppFactory.setContext(new OSF.DDA.Context(appContext,appContext.doc,license,null,getOfficeThemeHandler));
	var getDelegateMethods,
		parameterMap;
	getDelegateMethods=OSF.DDA.DispIdHost.getClientDelegateMethods;
	parameterMap=OSF.DDA.SafeArray.Delegate.ParameterMap;
	OSF._OfficeAppFactory.setHostFacade(new OSF.DDA.DispIdHost.Facade(getDelegateMethods,parameterMap))
};
OSF.InitializationHelper.prototype.getInitializationReason=function(appContext)
{
	return OSF.DDA.RichInitializationReason[appContext.get_reason()]
};
OSF.DDA.DispIdHost.getClientDelegateMethods=function(actionId)
{
	var delegateMethods={};
	delegateMethods[OSF.DDA.DispIdHost.Delegates.ExecuteAsync]=OSF.DDA.SafeArray.Delegate.executeAsync;
	delegateMethods[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync]=OSF.DDA.SafeArray.Delegate.registerEventAsync;
	delegateMethods[OSF.DDA.DispIdHost.Delegates.UnregisterEventAsync]=OSF.DDA.SafeArray.Delegate.unregisterEventAsync;
	delegateMethods[OSF.DDA.DispIdHost.Delegates.MessageParent]=OSF.DDA.SafeArray.Delegate.messageParent;
	if(OSF.DDA.AsyncMethodNames.RefreshAsync && actionId==OSF.DDA.AsyncMethodNames.RefreshAsync.id)
	{
		var readSerializedSettings=function(hostCallArgs, onCalling, onReceiving)
			{
				return OSF.DDA.ClientSettingsManager.read(onCalling,onReceiving)
			};
		delegateMethods[OSF.DDA.DispIdHost.Delegates.ExecuteAsync]=OSF.DDA.ClientSettingsManager.getSettingsExecuteMethod(readSerializedSettings)
	}
	if(OSF.DDA.AsyncMethodNames.SaveAsync && actionId==OSF.DDA.AsyncMethodNames.SaveAsync.id)
	{
		var writeSerializedSettings=function(hostCallArgs, onCalling, onReceiving)
			{
				return OSF.DDA.ClientSettingsManager.write(hostCallArgs[OSF.DDA.SettingsManager.SerializedSettings],hostCallArgs[Microsoft.Office.WebExtension.Parameters.OverwriteIfStale],onCalling,onReceiving)
			};
		delegateMethods[OSF.DDA.DispIdHost.Delegates.ExecuteAsync]=OSF.DDA.ClientSettingsManager.getSettingsExecuteMethod(writeSerializedSettings)
	}
	return delegateMethods
};
var OSFRichclient;
(function(OSFRichclient)
{
	var RichClientHostController=function()
		{
			function RichClientHostController(){}
			RichClientHostController.prototype.execute=function(id, params, callback)
			{
				window.external.Execute(id,params,callback)
			};
			RichClientHostController.prototype.registerEvent=function(id, targetId, handler, callback)
			{
				window.external.RegisterEvent(id,targetId,handler,callback)
			};
			RichClientHostController.prototype.unregisterEvent=function(id, targetId, callback)
			{
				window.external.UnregisterEvent(id,targetId,callback)
			};
			RichClientHostController.prototype.messageParent=function(message)
			{
				window.external.MessageParent(message)
			};
			return RichClientHostController
		}();
	OSFRichclient.RichClientHostController=RichClientHostController
})(OSFRichclient || (OSFRichclient={}));
OSF.ClientHostController=new OSFRichclient.RichClientHostController;
var OfficeExt;
(function(OfficeExt)
{
	var OfficeTheme;
	(function(OfficeTheme)
	{
		var OfficeThemeManager=function()
			{
				function OfficeThemeManager()
				{
					this._osfOfficeTheme=null;
					this._osfOfficeThemeTimeStamp=null
				}
				OfficeThemeManager.prototype.getOfficeTheme=function()
				{
					if(OSF.DDA._OsfControlContext)
					{
						if(this._osfOfficeTheme && this._osfOfficeThemeTimeStamp && (new Date).getTime() - this._osfOfficeThemeTimeStamp < OfficeThemeManager._osfOfficeThemeCacheValidPeriod)
						{
							if(OSF.AppTelemetry)
								OSF.AppTelemetry.onPropertyDone("GetOfficeThemeInfo",0)
						}
						else
						{
							var startTime=(new Date).getTime();
							var osfOfficeTheme=OSF.DDA._OsfControlContext.GetOfficeThemeInfo();
							var endTime=(new Date).getTime();
							if(OSF.AppTelemetry)
								OSF.AppTelemetry.onPropertyDone("GetOfficeThemeInfo",Math.abs(endTime - startTime));
							this._osfOfficeTheme=JSON.parse(osfOfficeTheme);
							for(var color in this._osfOfficeTheme)
								this._osfOfficeTheme[color]=OSF.OUtil.convertIntToCssHexColor(this._osfOfficeTheme[color]);
							this._osfOfficeThemeTimeStamp=endTime
						}
						return this._osfOfficeTheme
					}
				};
				OfficeThemeManager.instance=function()
				{
					if(OfficeThemeManager._instance==null)
						OfficeThemeManager._instance=new OfficeThemeManager;
					return OfficeThemeManager._instance
				};
				OfficeThemeManager._osfOfficeThemeCacheValidPeriod=5e3;
				OfficeThemeManager._instance=null;
				return OfficeThemeManager
			}();
		OfficeTheme.OfficeThemeManager=OfficeThemeManager;
		OSF.OUtil.setNamespace("OfficeTheme",OSF.DDA);
		OSF.DDA.OfficeTheme.getOfficeTheme=OfficeExt.OfficeTheme.OfficeThemeManager.instance().getOfficeTheme
	})(OfficeTheme=OfficeExt.OfficeTheme || (OfficeExt.OfficeTheme={}))
})(OfficeExt || (OfficeExt={}));
OSF.DDA.ClientSettingsManager={
	getSettingsExecuteMethod: function OSF_DDA_ClientSettingsManager$getSettingsExecuteMethod(hostDelegateMethod)
	{
		return function(args)
			{
				var status,
					response;
				try
				{
					response=hostDelegateMethod(args.hostCallArgs,args.onCalling,args.onReceiving);
					status=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess
				}
				catch(ex)
				{
					status=OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
					response={
						name: Strings.OfficeOM.L_InternalError,
						message: ex
					}
				}
				if(args.onComplete)
					args.onComplete(status,response)
			}
	},
	read: function OSF_DDA_ClientSettingsManager$read(onCalling, onReceiving)
	{
		var keys=[];
		var values=[];
		if(onCalling)
			onCalling();
		OSF.DDA._OsfControlContext.GetSettings().Read(keys,values);
		if(onReceiving)
			onReceiving();
		var serializedSettings={};
		for(var index=0; index < keys.length; index++)
			serializedSettings[keys[index]]=values[index];
		return serializedSettings
	},
	write: function OSF_DDA_ClientSettingsManager$write(serializedSettings, overwriteIfStale, onCalling, onReceiving)
	{
		var keys=[];
		var values=[];
		for(var key in serializedSettings)
		{
			keys.push(key);
			values.push(serializedSettings[key])
		}
		if(onCalling)
			onCalling();
		OSF.DDA._OsfControlContext.GetSettings().Write(keys,values);
		if(onReceiving)
			onReceiving()
	}
};
OSF.InitializationHelper.prototype.initializeSettings=function OSF_InitializationHelper$initializeSettings(refreshSupported)
{
	var serializedSettings=OSF.DDA.ClientSettingsManager.read();
	var settings=this.deserializeSettings(serializedSettings,refreshSupported);
	return settings
};
OSF.InitializationHelper.prototype.getAppContext=function OSF_InitializationHelper$getAppContext(wnd, gotAppContext)
{
	var returnedContext;
	var context=OSF.DDA._OsfControlContext=window.external.GetContext();
	var appType=context.GetAppType();
	var appTypeSupported=false;
	for(var appEntry in OSF.AppName)
		if(OSF.AppName[appEntry]==appType)
		{
			appTypeSupported=true;
			break
		}
	if(!appTypeSupported)
		throw"Unsupported client type "+appType;
	var id=context.GetSolutionRef();
	var version=context.GetAppVersionMajor();
	var minorVersion=context.GetAppVersionMinor();
	var UILocale=context.GetAppUILocale();
	var dataLocale=context.GetAppDataLocale();
	var docUrl=context.GetDocUrl();
	var clientMode=context.GetAppCapabilities();
	var reason=context.GetActivationMode();
	var osfControlType=context.GetControlIntegrationLevel();
	var settings=[];
	var eToken;
	try
	{
		eToken=context.GetSolutionToken()
	}
	catch(ex){}
	var correlationId;
	if(typeof context.GetCorrelationId !=="undefined")
		correlationId=context.GetCorrelationId();
	var appInstanceId;
	if(typeof context.GetInstanceId !=="undefined")
		appInstanceId=context.GetInstanceId();
	var touchEnabled;
	if(typeof context.GetTouchEnabled !=="undefined")
		touchEnabled=context.GetTouchEnabled();
	var commerceAllowed;
	if(typeof context.GetCommerceAllowed !=="undefined")
		commerceAllowed=context.GetCommerceAllowed();
	var requirementMatrix;
	if(typeof context.GetSupportedMatrix !=="undefined")
		requirementMatrix=context.GetSupportedMatrix();
	eToken=eToken ? eToken.toString() : "";
	returnedContext=new OSF.OfficeAppContext(id,appType,version,UILocale,dataLocale,docUrl,clientMode,settings,reason,osfControlType,eToken,correlationId,appInstanceId,touchEnabled,commerceAllowed,minorVersion,requirementMatrix);
	if(OSF.AppTelemetry)
		OSF.AppTelemetry.initialize(returnedContext);
	gotAppContext(returnedContext)
};
(function()
{
	var checkScriptOverride=function OSF$checkScriptOverride()
		{
			var postScriptOverrideCheckAction=function OSF$postScriptOverrideCheckAction(customizedScriptPath)
				{
					if(customizedScriptPath)
						OSF.OUtil.loadScript(customizedScriptPath,function()
						{
							OsfMsAjaxFactory.msAjaxDebug.trace("loaded customized script:"+customizedScriptPath)
						})
				};
			var conversationID,
				webAppUrl,
				items;
			var clientEndPoint=null;
			var xdmInfoValue=OSF.OUtil.parseXdmInfo();
			if(xdmInfoValue)
			{
				items=OSF.OUtil.getInfoItems(xdmInfoValue);
				if(items && items.length >=3)
				{
					conversationID=items[0];
					webAppUrl=items[2];
					clientEndPoint=Microsoft.Office.Common.XdmCommunicationManager.connect(conversationID,window.parent,webAppUrl)
				}
			}
			var customizedScriptPath=null;
			if(!clientEndPoint)
			{
				try
				{
					if(typeof window.external.getCustomizedScriptPath !=="undefined")
						customizedScriptPath=window.external.getCustomizedScriptPath()
				}
				catch(ex)
				{
					OsfMsAjaxFactory.msAjaxDebug.trace("no script override through window.external.")
				}
				postScriptOverrideCheckAction(customizedScriptPath)
			}
			else
				try
				{
					clientEndPoint.invoke("getCustomizedScriptPathAsync",function OSF$getCustomizedScriptPathAsyncCallback(errorCode, scriptPath)
					{
						postScriptOverrideCheckAction(errorCode===0 ? scriptPath : null)
					},{__timeout__: 1e3})
				}
				catch(ex)
				{
					OsfMsAjaxFactory.msAjaxDebug.trace("no script override through cross frame communication.")
				}
		};
	if(OSF._OfficeAppFactory.getLoadScriptHelper)
		OSF._OfficeAppFactory.getLoadScriptHelper().waitForScripts([OSF.ConstantNames.MicrosoftAjaxId],checkScriptOverride)
})();
Microsoft.Office.WebExtension.EventType={};
OSF.EventDispatch=function OSF_EventDispatch(eventTypes)
{
	this._eventHandlers={};
	this._queuedEventsArgs={};
	for(var entry in eventTypes)
	{
		var eventType=eventTypes[entry];
		this._eventHandlers[eventType]=[];
		this._queuedEventsArgs[eventType]=[]
	}
};
OSF.EventDispatch.prototype={
	getSupportedEvents: function OSF_EventDispatch$getSupportedEvents()
	{
		var events=[];
		for(var eventName in this._eventHandlers)
			events.push(eventName);
		return events
	},
	supportsEvent: function OSF_EventDispatch$supportsEvent(event)
	{
		var isSupported=false;
		for(var eventName in this._eventHandlers)
			if(event==eventName)
			{
				isSupported=true;
				break
			}
		return isSupported
	},
	hasEventHandler: function OSF_EventDispatch$hasEventHandler(eventType, handler)
	{
		var handlers=this._eventHandlers[eventType];
		if(handlers && handlers.length > 0)
			for(var h in handlers)
				if(handlers[h]===handler)
					return true;
		return false
	},
	addEventHandler: function OSF_EventDispatch$addEventHandler(eventType, handler)
	{
		if(typeof handler !="function")
			return false;
		var handlers=this._eventHandlers[eventType];
		if(handlers && !this.hasEventHandler(eventType,handler))
		{
			handlers.push(handler);
			return true
		}
		else
			return false
	},
	addEventHandlerAndFireQueuedEvent: function OSF_EventDispatch$addEventHandlerAndFireQueuedEvent(eventType, handler)
	{
		var handlers=this._eventHandlers[eventType];
		var isFirstHandler=handlers.length==0;
		var succeed=this.addEventHandler(eventType,handler);
		if(isFirstHandler && succeed)
			this.fireQueuedEvent(eventType);
		return succeed
	},
	removeEventHandler: function OSF_EventDispatch$removeEventHandler(eventType, handler)
	{
		var handlers=this._eventHandlers[eventType];
		if(handlers && handlers.length > 0)
			for(var index=0; index < handlers.length; index++)
				if(handlers[index]===handler)
				{
					handlers.splice(index,1);
					return true
				}
		return false
	},
	clearEventHandlers: function OSF_EventDispatch$clearEventHandlers(eventType)
	{
		if(typeof this._eventHandlers[eventType] !="undefined" && this._eventHandlers[eventType].length > 0)
		{
			this._eventHandlers[eventType]=[];
			return true
		}
		return false
	},
	getEventHandlerCount: function OSF_EventDispatch$getEventHandlerCount(eventType)
	{
		return this._eventHandlers[eventType] !=undefined ? this._eventHandlers[eventType].length : -1
	},
	fireEvent: function OSF_EventDispatch$fireEvent(eventArgs)
	{
		if(eventArgs.type==undefined)
			return false;
		var eventType=eventArgs.type;
		if(eventType && this._eventHandlers[eventType])
		{
			var eventHandlers=this._eventHandlers[eventType];
			for(var handler in eventHandlers)
				eventHandlers[handler](eventArgs);
			return true
		}
		else
			return false
	},
	fireOrQueueEvent: function OSF_EventDispatch$fireOrQueueEvent(eventArgs)
	{
		var eventType=eventArgs.type;
		if(eventType && this._eventHandlers[eventType])
		{
			var eventHandlers=this._eventHandlers[eventType];
			var queuedEvents=this._queuedEventsArgs[eventType];
			if(eventHandlers.length==0)
				queuedEvents.push(eventArgs);
			else
				this.fireEvent(eventArgs);
			return true
		}
		else
			return false
	},
	fireQueuedEvent: function OSF_EventDispatch$queueEvent(eventType)
	{
		if(eventType && this._eventHandlers[eventType])
		{
			var eventHandlers=this._eventHandlers[eventType];
			var queuedEvents=this._queuedEventsArgs[eventType];
			if(eventHandlers.length > 0)
			{
				var eventHandler=eventHandlers[0];
				while(queuedEvents.length > 0)
				{
					var eventArgs=queuedEvents.shift();
					eventHandler(eventArgs)
				}
				return true
			}
		}
		return false
	}
};
OSF.DDA.OMFactory=OSF.DDA.OMFactory || {};
OSF.DDA.OMFactory.manufactureEventArgs=function OSF_DDA_OMFactory$manufactureEventArgs(eventType, target, eventProperties)
{
	var args;
	switch(eventType)
	{
		case Microsoft.Office.WebExtension.EventType.DocumentSelectionChanged:
			args=new OSF.DDA.DocumentSelectionChangedEventArgs(target);
			break;
		case Microsoft.Office.WebExtension.EventType.BindingSelectionChanged:
			args=new OSF.DDA.BindingSelectionChangedEventArgs(this.manufactureBinding(eventProperties,target.document),eventProperties[OSF.DDA.PropertyDescriptors.Subset]);
			break;
		case Microsoft.Office.WebExtension.EventType.BindingDataChanged:
			args=new OSF.DDA.BindingDataChangedEventArgs(this.manufactureBinding(eventProperties,target.document));
			break;
		case Microsoft.Office.WebExtension.EventType.SettingsChanged:
			args=new OSF.DDA.SettingsChangedEventArgs(target);
			break;
		case Microsoft.Office.WebExtension.EventType.ActiveViewChanged:
			args=new OSF.DDA.ActiveViewChangedEventArgs(eventProperties);
			break;
		case Microsoft.Office.WebExtension.EventType.OfficeThemeChanged:
			args=new OSF.DDA.Theming.OfficeThemeChangedEventArgs(eventProperties);
			break;
		case Microsoft.Office.WebExtension.EventType.DocumentThemeChanged:
			args=new OSF.DDA.Theming.DocumentThemeChangedEventArgs(eventProperties);
			break;
		case Microsoft.Office.WebExtension.EventType.AppCommandInvoked:
			args=OSF.DDA.AppCommand.AppCommandInvokedEventArgs.create(eventProperties);
			break;
		case Microsoft.Office.WebExtension.EventType.DataNodeInserted:
			args=new OSF.DDA.NodeInsertedEventArgs(this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.NewNode]),eventProperties[OSF.DDA.DataNodeEventProperties.InUndoRedo]);
			break;
		case Microsoft.Office.WebExtension.EventType.DataNodeReplaced:
			args=new OSF.DDA.NodeReplacedEventArgs(this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.OldNode]),this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.NewNode]),eventProperties[OSF.DDA.DataNodeEventProperties.InUndoRedo]);
			break;
		case Microsoft.Office.WebExtension.EventType.DataNodeDeleted:
			args=new OSF.DDA.NodeDeletedEventArgs(this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.OldNode]),this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.NextSiblingNode]),eventProperties[OSF.DDA.DataNodeEventProperties.InUndoRedo]);
			break;
		case Microsoft.Office.WebExtension.EventType.TaskSelectionChanged:
			args=new OSF.DDA.TaskSelectionChangedEventArgs(target);
			break;
		case Microsoft.Office.WebExtension.EventType.ResourceSelectionChanged:
			args=new OSF.DDA.ResourceSelectionChangedEventArgs(target);
			break;
		case Microsoft.Office.WebExtension.EventType.ViewSelectionChanged:
			args=new OSF.DDA.ViewSelectionChangedEventArgs(target);
			break;
		case Microsoft.Office.WebExtension.EventType.DialogMessageReceived:
			args=new OSF.DDA.DialogEventArgs(eventProperties);
			break;
		default:
			throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType,OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType,eventType));
	}
	return args
};
OSF.DDA.AsyncMethodNames.addNames({
	AddHandlerAsync: "addHandlerAsync",
	RemoveHandlerAsync: "removeHandlerAsync"
});
OSF.DDA.AsyncMethodCalls.define({
	method: OSF.DDA.AsyncMethodNames.AddHandlerAsync,
	requiredArguments: [{
			name: Microsoft.Office.WebExtension.Parameters.EventType,
			"enum": Microsoft.Office.WebExtension.EventType,
			verify: function(eventType, caller, eventDispatch)
			{
				return eventDispatch.supportsEvent(eventType)
			}
		},{
			name: Microsoft.Office.WebExtension.Parameters.Handler,
			types: ["function"]
		}],
	supportedOptions: [],
	privateStateCallbacks: []
});
OSF.DDA.AsyncMethodCalls.define({
	method: OSF.DDA.AsyncMethodNames.RemoveHandlerAsync,
	requiredArguments: [{
			name: Microsoft.Office.WebExtension.Parameters.EventType,
			"enum": Microsoft.Office.WebExtension.EventType,
			verify: function(eventType, caller, eventDispatch)
			{
				return eventDispatch.supportsEvent(eventType)
			}
		}],
	supportedOptions: [{
			name: Microsoft.Office.WebExtension.Parameters.Handler,
			value: {
				types: ["function","object"],
				defaultValue: null
			}
		}],
	privateStateCallbacks: []
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({type: OSF.DDA.EventDispId.dispidDialogMessageReceivedEvent});
OSF.OUtil.augmentList(OSF.DDA.EventDescriptors,{DialogMessageReceivedEvent: "DialogMessageReceivedEvent"});
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType,{
	DialogMessageReceived: "dialogMessageReceived",
	DialogEventReceived: "dialogEventReceived"
});
OSF.OUtil.augmentList(OSF.DDA.PropertyDescriptors,{
	MessageType: "messageType",
	MessageContent: "messageContent"
});
OSF.DDA.DialogEventType={};
OSF.OUtil.augmentList(OSF.DDA.DialogEventType,{
	DialogClosed: "dialogClosed",
	NavigationFailed: "naviationFailed"
});
OSF.DDA.AsyncMethodNames.addNames({
	DisplayDialogAsync: "displayDialogAsync",
	CloseAsync: "close"
});
OSF.DDA.SyncMethodNames.addNames({
	MessageParent: "messageParent",
	AddMessageHandler: "addEventHandler"
});
OSF.DDA.UI.ParentUI=function OSF_DDA_ParentUI()
{
	var eventDispatch=new OSF.EventDispatch([Microsoft.Office.WebExtension.EventType.DialogMessageReceived,Microsoft.Office.WebExtension.EventType.DialogEventReceived]);
	var openDialogName=OSF.DDA.AsyncMethodNames.DisplayDialogAsync.displayName;
	var target=this;
	if(!target[openDialogName])
		OSF.OUtil.defineEnumerableProperty(target,openDialogName,{value: function()
			{
				var openDialog=OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.OpenDialog];
				openDialog(arguments,eventDispatch,target)
			}});
	OSF.OUtil.finalizeProperties(this)
};
OSF.DDA.UI.ChildUI=function OSF_DDA_ChildUI()
{
	var messageParentName=OSF.DDA.SyncMethodNames.MessageParent.displayName;
	var target=this;
	if(!target[messageParentName])
		OSF.OUtil.defineEnumerableProperty(target,messageParentName,{value: function()
			{
				var messageParent=OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.MessageParent];
				return messageParent(arguments,target)
			}});
	OSF.OUtil.finalizeProperties(this)
};
OSF.DialogHandler=function OSF_DialogHandler(){};
OSF.DDA.DialogEventArgs=function OSF_DDA_DialogEventArgs(message)
{
	if(message[OSF.DDA.PropertyDescriptors.MessageType]==OSF.DialogMessageType.DialogMessageReceived)
		OSF.OUtil.defineEnumerableProperties(this,{
			type: {value: Microsoft.Office.WebExtension.EventType.DialogMessageReceived},
			message: {value: message[OSF.DDA.PropertyDescriptors.MessageContent]}
		});
	else
		OSF.OUtil.defineEnumerableProperties(this,{
			type: {value: Microsoft.Office.WebExtension.EventType.DialogEventReceived},
			error: {value: message[OSF.DDA.PropertyDescriptors.MessageType]}
		})
};
OSF.DDA.AsyncMethodCalls.define({
	method: OSF.DDA.AsyncMethodNames.DisplayDialogAsync,
	requiredArguments: [{
			name: Microsoft.Office.WebExtension.Parameters.Url,
			types: ["string"]
		}],
	supportedOptions: [{
			name: Microsoft.Office.WebExtension.Parameters.Width,
			value: {
				types: ["number"],
				defaultValue: 99
			}
		},{
			name: Microsoft.Office.WebExtension.Parameters.Height,
			value: {
				types: ["number"],
				defaultValue: 99
			}
		},{
			name: Microsoft.Office.WebExtension.Parameters.RequireHTTPs,
			value: {
				types: ["boolean"],
				defaultValue: true
			}
		},{
			name: Microsoft.Office.WebExtension.Parameters.XFrameDenySafe,
			value: {
				types: ["boolean"],
				defaultValue: true
			}
		}],
	privateStateCallbacks: [],
	onSucceeded: function(args, caller, callArgs)
	{
		var targetId=args[Microsoft.Office.WebExtension.Parameters.Id];
		var eventDispatch=args[Microsoft.Office.WebExtension.Parameters.Data];
		var dialog=new OSF.DialogHandler;
		var closeDialog=OSF.DDA.AsyncMethodNames.CloseAsync.displayName;
		OSF.OUtil.defineEnumerableProperty(dialog,closeDialog,{value: function()
			{
				var closeDialogfunction=OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.CloseDialog];
				closeDialogfunction(arguments,targetId,eventDispatch,dialog)
			}});
		var addHandler=OSF.DDA.SyncMethodNames.AddMessageHandler.displayName;
		OSF.OUtil.defineEnumerableProperty(dialog,addHandler,{value: function()
			{
				var syncMethodCall=OSF.DDA.SyncMethodCalls[OSF.DDA.SyncMethodNames.AddMessageHandler.id];
				var callArgs=syncMethodCall.verifyAndExtractCall(arguments,dialog,eventDispatch);
				var eventType=callArgs[Microsoft.Office.WebExtension.Parameters.EventType];
				var handler=callArgs[Microsoft.Office.WebExtension.Parameters.Handler];
				return eventDispatch.addEventHandlerAndFireQueuedEvent(eventType,handler)
			}});
		return dialog
	},
	checkCallArgs: function(callArgs, caller, stateInfo)
	{
		if(callArgs[Microsoft.Office.WebExtension.Parameters.Width] <=0)
			callArgs[Microsoft.Office.WebExtension.Parameters.Width]=1;
		if(callArgs[Microsoft.Office.WebExtension.Parameters.Width] > 100)
			callArgs[Microsoft.Office.WebExtension.Parameters.Width]=99;
		if(callArgs[Microsoft.Office.WebExtension.Parameters.Height] <=0)
			callArgs[Microsoft.Office.WebExtension.Parameters.Height]=1;
		if(callArgs[Microsoft.Office.WebExtension.Parameters.Height] > 100)
			callArgs[Microsoft.Office.WebExtension.Parameters.Height]=99;
		return callArgs
	}
});
OSF.DDA.AsyncMethodCalls.define({
	method: OSF.DDA.AsyncMethodNames.CloseAsync,
	requiredArguments: [],
	supportedOptions: [],
	privateStateCallbacks: []
});
OSF.DDA.SyncMethodCalls.define({
	method: OSF.DDA.SyncMethodNames.MessageParent,
	requiredArguments: [{
			name: Microsoft.Office.WebExtension.Parameters.MessageToParent,
			types: ["string","number","boolean"]
		}],
	supportedOptions: []
});
OSF.DDA.SyncMethodCalls.define({
	method: OSF.DDA.SyncMethodNames.AddMessageHandler,
	requiredArguments: [{
			name: Microsoft.Office.WebExtension.Parameters.EventType,
			"enum": Microsoft.Office.WebExtension.EventType,
			verify: function(eventType, caller, eventDispatch)
			{
				return eventDispatch.supportsEvent(eventType)
			}
		},{
			name: Microsoft.Office.WebExtension.Parameters.Handler,
			types: ["function"]
		}],
	supportedOptions: []
});
OSF.DDA.SafeArray.Delegate.messageParent=function OSF_DDA_SafeArray_Delegate$MessageParent(args)
{
	try
	{
		if(args.onCalling)
			args.onCalling();
		var startTime=(new Date).getTime();
		var result=OSF.ClientHostController.messageParent(args.hostCallArgs);
		if(args.onReceiving)
			args.onReceiving();
		if(OSF.AppTelemetry)
			OSF.AppTelemetry.onMethodDone(args.dispId,args.hostCallArgs,Math.abs((new Date).getTime() - startTime),result);
		return result
	}
	catch(ex)
	{
		return OSF.DDA.SafeArray.Delegate._onExceptionSyncMethod(ex)
	}
};
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
	type: OSF.DDA.EventDispId.dispidDialogMessageReceivedEvent,
	fromHost: [{
			name: OSF.DDA.EventDescriptors.DialogMessageReceivedEvent,
			value: OSF.DDA.SafeArray.Delegate.ParameterMap.self
		}],
	isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
	type: OSF.DDA.EventDescriptors.DialogMessageReceivedEvent,
	fromHost: [{
			name: OSF.DDA.PropertyDescriptors.MessageType,
			value: 0
		},{
			name: OSF.DDA.PropertyDescriptors.MessageContent,
			value: 1
		}],
	isComplexType: true
});
var OSFLog;
(function(OSFLog)
{
	var BaseUsageData=function()
		{
			function BaseUsageData(table)
			{
				this._table=table;
				this._fields={}
			}
			Object.defineProperty(BaseUsageData.prototype,"Fields",{
				get: function()
				{
					return this._fields
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(BaseUsageData.prototype,"Table",{
				get: function()
				{
					return this._table
				},
				enumerable: true,
				configurable: true
			});
			BaseUsageData.prototype.SerializeFields=function(){};
			BaseUsageData.prototype.SetSerializedField=function(key, value)
			{
				if(typeof value !=="undefined" && value !==null)
					this._serializedFields[key]=value.toString()
			};
			BaseUsageData.prototype.SerializeRow=function()
			{
				this._serializedFields={};
				this.SetSerializedField("Table",this._table);
				this.SerializeFields();
				return JSON.stringify(this._serializedFields)
			};
			return BaseUsageData
		}();
	OSFLog.BaseUsageData=BaseUsageData;
	var AppActivatedUsageData=function(_super)
		{
			__extends(AppActivatedUsageData,_super);
			function AppActivatedUsageData()
			{
				_super.call(this,"AppActivated")
			}
			Object.defineProperty(AppActivatedUsageData.prototype,"CorrelationId",{
				get: function()
				{
					return this.Fields["CorrelationId"]
				},
				set: function(value)
				{
					this.Fields["CorrelationId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"SessionId",{
				get: function()
				{
					return this.Fields["SessionId"]
				},
				set: function(value)
				{
					this.Fields["SessionId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"AppId",{
				get: function()
				{
					return this.Fields["AppId"]
				},
				set: function(value)
				{
					this.Fields["AppId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"AppInstanceId",{
				get: function()
				{
					return this.Fields["AppInstanceId"]
				},
				set: function(value)
				{
					this.Fields["AppInstanceId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"AppURL",{
				get: function()
				{
					return this.Fields["AppURL"]
				},
				set: function(value)
				{
					this.Fields["AppURL"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"AssetId",{
				get: function()
				{
					return this.Fields["AssetId"]
				},
				set: function(value)
				{
					this.Fields["AssetId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"Browser",{
				get: function()
				{
					return this.Fields["Browser"]
				},
				set: function(value)
				{
					this.Fields["Browser"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"UserId",{
				get: function()
				{
					return this.Fields["UserId"]
				},
				set: function(value)
				{
					this.Fields["UserId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"Host",{
				get: function()
				{
					return this.Fields["Host"]
				},
				set: function(value)
				{
					this.Fields["Host"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"HostVersion",{
				get: function()
				{
					return this.Fields["HostVersion"]
				},
				set: function(value)
				{
					this.Fields["HostVersion"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"ClientId",{
				get: function()
				{
					return this.Fields["ClientId"]
				},
				set: function(value)
				{
					this.Fields["ClientId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"AppSizeWidth",{
				get: function()
				{
					return this.Fields["AppSizeWidth"]
				},
				set: function(value)
				{
					this.Fields["AppSizeWidth"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppActivatedUsageData.prototype,"AppSizeHeight",{
				get: function()
				{
					return this.Fields["AppSizeHeight"]
				},
				set: function(value)
				{
					this.Fields["AppSizeHeight"]=value
				},
				enumerable: true,
				configurable: true
			});
			AppActivatedUsageData.prototype.SerializeFields=function()
			{
				this.SetSerializedField("CorrelationId",this.CorrelationId);
				this.SetSerializedField("SessionId",this.SessionId);
				this.SetSerializedField("AppId",this.AppId);
				this.SetSerializedField("AppInstanceId",this.AppInstanceId);
				this.SetSerializedField("AppURL",this.AppURL);
				this.SetSerializedField("AssetId",this.AssetId);
				this.SetSerializedField("Browser",this.Browser);
				this.SetSerializedField("UserId",this.UserId);
				this.SetSerializedField("Host",this.Host);
				this.SetSerializedField("HostVersion",this.HostVersion);
				this.SetSerializedField("ClientId",this.ClientId);
				this.SetSerializedField("AppSizeWidth",this.AppSizeWidth);
				this.SetSerializedField("AppSizeHeight",this.AppSizeHeight)
			};
			return AppActivatedUsageData
		}(BaseUsageData);
	OSFLog.AppActivatedUsageData=AppActivatedUsageData;
	var ScriptLoadUsageData=function(_super)
		{
			__extends(ScriptLoadUsageData,_super);
			function ScriptLoadUsageData()
			{
				_super.call(this,"ScriptLoad")
			}
			Object.defineProperty(ScriptLoadUsageData.prototype,"CorrelationId",{
				get: function()
				{
					return this.Fields["CorrelationId"]
				},
				set: function(value)
				{
					this.Fields["CorrelationId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(ScriptLoadUsageData.prototype,"SessionId",{
				get: function()
				{
					return this.Fields["SessionId"]
				},
				set: function(value)
				{
					this.Fields["SessionId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(ScriptLoadUsageData.prototype,"ScriptId",{
				get: function()
				{
					return this.Fields["ScriptId"]
				},
				set: function(value)
				{
					this.Fields["ScriptId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(ScriptLoadUsageData.prototype,"StartTime",{
				get: function()
				{
					return this.Fields["StartTime"]
				},
				set: function(value)
				{
					this.Fields["StartTime"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(ScriptLoadUsageData.prototype,"ResponseTime",{
				get: function()
				{
					return this.Fields["ResponseTime"]
				},
				set: function(value)
				{
					this.Fields["ResponseTime"]=value
				},
				enumerable: true,
				configurable: true
			});
			ScriptLoadUsageData.prototype.SerializeFields=function()
			{
				this.SetSerializedField("CorrelationId",this.CorrelationId);
				this.SetSerializedField("SessionId",this.SessionId);
				this.SetSerializedField("ScriptId",this.ScriptId);
				this.SetSerializedField("StartTime",this.StartTime);
				this.SetSerializedField("ResponseTime",this.ResponseTime)
			};
			return ScriptLoadUsageData
		}(BaseUsageData);
	OSFLog.ScriptLoadUsageData=ScriptLoadUsageData;
	var AppClosedUsageData=function(_super)
		{
			__extends(AppClosedUsageData,_super);
			function AppClosedUsageData()
			{
				_super.call(this,"AppClosed")
			}
			Object.defineProperty(AppClosedUsageData.prototype,"CorrelationId",{
				get: function()
				{
					return this.Fields["CorrelationId"]
				},
				set: function(value)
				{
					this.Fields["CorrelationId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppClosedUsageData.prototype,"SessionId",{
				get: function()
				{
					return this.Fields["SessionId"]
				},
				set: function(value)
				{
					this.Fields["SessionId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppClosedUsageData.prototype,"FocusTime",{
				get: function()
				{
					return this.Fields["FocusTime"]
				},
				set: function(value)
				{
					this.Fields["FocusTime"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppClosedUsageData.prototype,"AppSizeFinalWidth",{
				get: function()
				{
					return this.Fields["AppSizeFinalWidth"]
				},
				set: function(value)
				{
					this.Fields["AppSizeFinalWidth"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppClosedUsageData.prototype,"AppSizeFinalHeight",{
				get: function()
				{
					return this.Fields["AppSizeFinalHeight"]
				},
				set: function(value)
				{
					this.Fields["AppSizeFinalHeight"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppClosedUsageData.prototype,"OpenTime",{
				get: function()
				{
					return this.Fields["OpenTime"]
				},
				set: function(value)
				{
					this.Fields["OpenTime"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppClosedUsageData.prototype,"CloseMethod",{
				get: function()
				{
					return this.Fields["CloseMethod"]
				},
				set: function(value)
				{
					this.Fields["CloseMethod"]=value
				},
				enumerable: true,
				configurable: true
			});
			AppClosedUsageData.prototype.SerializeFields=function()
			{
				this.SetSerializedField("CorrelationId",this.CorrelationId);
				this.SetSerializedField("SessionId",this.SessionId);
				this.SetSerializedField("FocusTime",this.FocusTime);
				this.SetSerializedField("AppSizeFinalWidth",this.AppSizeFinalWidth);
				this.SetSerializedField("AppSizeFinalHeight",this.AppSizeFinalHeight);
				this.SetSerializedField("OpenTime",this.OpenTime);
				this.SetSerializedField("CloseMethod",this.CloseMethod)
			};
			return AppClosedUsageData
		}(BaseUsageData);
	OSFLog.AppClosedUsageData=AppClosedUsageData;
	var APIUsageUsageData=function(_super)
		{
			__extends(APIUsageUsageData,_super);
			function APIUsageUsageData()
			{
				_super.call(this,"APIUsage")
			}
			Object.defineProperty(APIUsageUsageData.prototype,"CorrelationId",{
				get: function()
				{
					return this.Fields["CorrelationId"]
				},
				set: function(value)
				{
					this.Fields["CorrelationId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(APIUsageUsageData.prototype,"SessionId",{
				get: function()
				{
					return this.Fields["SessionId"]
				},
				set: function(value)
				{
					this.Fields["SessionId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(APIUsageUsageData.prototype,"APIType",{
				get: function()
				{
					return this.Fields["APIType"]
				},
				set: function(value)
				{
					this.Fields["APIType"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(APIUsageUsageData.prototype,"APIID",{
				get: function()
				{
					return this.Fields["APIID"]
				},
				set: function(value)
				{
					this.Fields["APIID"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(APIUsageUsageData.prototype,"Parameters",{
				get: function()
				{
					return this.Fields["Parameters"]
				},
				set: function(value)
				{
					this.Fields["Parameters"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(APIUsageUsageData.prototype,"ResponseTime",{
				get: function()
				{
					return this.Fields["ResponseTime"]
				},
				set: function(value)
				{
					this.Fields["ResponseTime"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(APIUsageUsageData.prototype,"ErrorType",{
				get: function()
				{
					return this.Fields["ErrorType"]
				},
				set: function(value)
				{
					this.Fields["ErrorType"]=value
				},
				enumerable: true,
				configurable: true
			});
			APIUsageUsageData.prototype.SerializeFields=function()
			{
				this.SetSerializedField("CorrelationId",this.CorrelationId);
				this.SetSerializedField("SessionId",this.SessionId);
				this.SetSerializedField("APIType",this.APIType);
				this.SetSerializedField("APIID",this.APIID);
				this.SetSerializedField("Parameters",this.Parameters);
				this.SetSerializedField("ResponseTime",this.ResponseTime);
				this.SetSerializedField("ErrorType",this.ErrorType)
			};
			return APIUsageUsageData
		}(BaseUsageData);
	OSFLog.APIUsageUsageData=APIUsageUsageData;
	var AppInitializationUsageData=function(_super)
		{
			__extends(AppInitializationUsageData,_super);
			function AppInitializationUsageData()
			{
				_super.call(this,"AppInitialization")
			}
			Object.defineProperty(AppInitializationUsageData.prototype,"CorrelationId",{
				get: function()
				{
					return this.Fields["CorrelationId"]
				},
				set: function(value)
				{
					this.Fields["CorrelationId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppInitializationUsageData.prototype,"SessionId",{
				get: function()
				{
					return this.Fields["SessionId"]
				},
				set: function(value)
				{
					this.Fields["SessionId"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppInitializationUsageData.prototype,"SuccessCode",{
				get: function()
				{
					return this.Fields["SuccessCode"]
				},
				set: function(value)
				{
					this.Fields["SuccessCode"]=value
				},
				enumerable: true,
				configurable: true
			});
			Object.defineProperty(AppInitializationUsageData.prototype,"Message",{
				get: function()
				{
					return this.Fields["Message"]
				},
				set: function(value)
				{
					this.Fields["Message"]=value
				},
				enumerable: true,
				configurable: true
			});
			AppInitializationUsageData.prototype.SerializeFields=function()
			{
				this.SetSerializedField("CorrelationId",this.CorrelationId);
				this.SetSerializedField("SessionId",this.SessionId);
				this.SetSerializedField("SuccessCode",this.SuccessCode);
				this.SetSerializedField("Message",this.Message)
			};
			return AppInitializationUsageData
		}(BaseUsageData);
	OSFLog.AppInitializationUsageData=AppInitializationUsageData
})(OSFLog || (OSFLog={}));
var Logger;
(function(Logger)
{
	"use strict";
	(function(TraceLevel)
	{
		TraceLevel[TraceLevel["info"]=0]="info";
		TraceLevel[TraceLevel["warning"]=1]="warning";
		TraceLevel[TraceLevel["error"]=2]="error"
	})(Logger.TraceLevel || (Logger.TraceLevel={}));
	var TraceLevel=Logger.TraceLevel;
	(function(SendFlag)
	{
		SendFlag[SendFlag["none"]=0]="none";
		SendFlag[SendFlag["flush"]=1]="flush"
	})(Logger.SendFlag || (Logger.SendFlag={}));
	var SendFlag=Logger.SendFlag;
	function allowUploadingData()
	{
		if(OSF.Logger && OSF.Logger.ulsEndpoint)
			OSF.Logger.ulsEndpoint.loadProxyFrame()
	}
	Logger.allowUploadingData=allowUploadingData;
	function sendLog(traceLevel, message, flag)
	{
		if(OSF.Logger && OSF.Logger.ulsEndpoint)
		{
			var jsonObj={
					traceLevel: traceLevel,
					message: message,
					flag: flag,
					internalLog: true
				};
			var logs=JSON.stringify(jsonObj);
			OSF.Logger.ulsEndpoint.writeLog(logs)
		}
	}
	Logger.sendLog=sendLog;
	function creatULSEndpoint()
	{
		try
		{
			return new ULSEndpointProxy
		}
		catch(e)
		{
			return null
		}
	}
	var ULSEndpointProxy=function()
		{
			function ULSEndpointProxy()
			{
				var _this=this;
				this.proxyFrame=null;
				this.telemetryEndPoint="https://telemetryservice.firstpartyapps.oaspapps.com/telemetryservice/telemetryproxy.html";
				this.buffer=[];
				this.proxyFrameReady=false;
				OSF.OUtil.addEventListener(window,"message",function(e)
				{
					return _this.tellProxyFrameReady(e)
				});
				setTimeout(function()
				{
					_this.loadProxyFrame()
				},3e3)
			}
			ULSEndpointProxy.prototype.writeLog=function(log)
			{
				if(this.proxyFrameReady===true)
					this.proxyFrame.contentWindow.postMessage(log,"*");
				else if(this.buffer.length < 128)
					this.buffer.push(log)
			};
			ULSEndpointProxy.prototype.loadProxyFrame=function()
			{
				if(this.proxyFrame==null)
				{
					this.proxyFrame=document.createElement("iframe");
					this.proxyFrame.setAttribute("style","display:none");
					this.proxyFrame.setAttribute("src",this.telemetryEndPoint);
					document.head.appendChild(this.proxyFrame)
				}
			};
			ULSEndpointProxy.prototype.tellProxyFrameReady=function(e)
			{
				var _this=this;
				if(e.data==="ProxyFrameReadyToLog")
				{
					this.proxyFrameReady=true;
					for(var i=0; i < this.buffer.length; i++)
						this.writeLog(this.buffer[i]);
					this.buffer.length=0;
					OSF.OUtil.removeEventListener(window,"message",function(e)
					{
						return _this.tellProxyFrameReady(e)
					})
				}
				else if(e.data==="ProxyFrameReadyToInit")
				{
					var initJson={
							appName: "Office APPs",
							sessionId: OSF.OUtil.Guid.generateNewGuid()
						};
					var initStr=JSON.stringify(initJson);
					this.proxyFrame.contentWindow.postMessage(initStr,"*")
				}
			};
			return ULSEndpointProxy
		}();
	if(!OSF.Logger)
		OSF.Logger=Logger;
	Logger.ulsEndpoint=creatULSEndpoint()
})(Logger || (Logger={}));
var OSFAppTelemetry;
(function(OSFAppTelemetry)
{
	"use strict";
	var appInfo;
	var sessionId=OSF.OUtil.Guid.generateNewGuid();
	var osfControlAppCorrelationId="";
	var AppInfo=function()
		{
			function AppInfo(){}
			return AppInfo
		}();
	var Event=function()
		{
			function Event(name, handler)
			{
				this.name=name;
				this.handler=handler
			}
			return Event
		}();
	var AppStorage=function()
		{
			function AppStorage()
			{
				this.clientIDKey="Office API client";
				this.logIdSetKey="Office App Log Id Set"
			}
			AppStorage.prototype.getClientId=function()
			{
				var clientId=this.getValue(this.clientIDKey);
				if(!clientId || clientId.length <=0 || clientId.length > 40)
				{
					clientId=OSF.OUtil.Guid.generateNewGuid();
					this.setValue(this.clientIDKey,clientId)
				}
				return clientId
			};
			AppStorage.prototype.saveLog=function(logId, log)
			{
				var logIdSet=this.getValue(this.logIdSetKey);
				logIdSet=(logIdSet && logIdSet.length > 0 ? logIdSet+";" : "")+logId;
				this.setValue(this.logIdSetKey,logIdSet);
				this.setValue(logId,log)
			};
			AppStorage.prototype.enumerateLog=function(callback, clean)
			{
				var logIdSet=this.getValue(this.logIdSetKey);
				if(logIdSet)
				{
					var ids=logIdSet.split(";");
					for(var id in ids)
					{
						var logId=ids[id];
						var log=this.getValue(logId);
						if(log)
						{
							if(callback)
								callback(logId,log);
							if(clean)
								this.remove(logId)
						}
					}
					if(clean)
						this.remove(this.logIdSetKey)
				}
			};
			AppStorage.prototype.getValue=function(key)
			{
				var osfLocalStorage=OSF.OUtil.getLocalStorage();
				var value="";
				if(osfLocalStorage)
					value=osfLocalStorage.getItem(key);
				return value
			};
			AppStorage.prototype.setValue=function(key, value)
			{
				var osfLocalStorage=OSF.OUtil.getLocalStorage();
				if(osfLocalStorage)
					osfLocalStorage.setItem(key,value)
			};
			AppStorage.prototype.remove=function(key)
			{
				var osfLocalStorage=OSF.OUtil.getLocalStorage();
				if(osfLocalStorage)
					try
					{
						osfLocalStorage.removeItem(key)
					}
					catch(ex){}
			};
			return AppStorage
		}();
	var AppLogger=function()
		{
			function AppLogger(){}
			AppLogger.prototype.LogData=function(data)
			{
				if(!OSF.Logger)
					return;
				OSF.Logger.sendLog(OSF.Logger.TraceLevel.info,data.SerializeRow(),OSF.Logger.SendFlag.none)
			};
			AppLogger.prototype.LogRawData=function(log)
			{
				if(!OSF.Logger)
					return;
				OSF.Logger.sendLog(OSF.Logger.TraceLevel.info,log,OSF.Logger.SendFlag.none)
			};
			return AppLogger
		}();
	function initialize(context)
	{
		if(!OSF.Logger)
			return;
		if(appInfo)
			return;
		appInfo=new AppInfo;
		appInfo.hostVersion=context.get_appVersion();
		appInfo.appId=context.get_id();
		appInfo.host=context.get_appName();
		appInfo.browser=window.navigator.userAgent;
		appInfo.correlationId=context.get_correlationId();
		appInfo.clientId=(new AppStorage).getClientId();
		appInfo.appInstanceId=context.get_appInstanceId();
		if(appInfo.appInstanceId)
			appInfo.appInstanceId=appInfo.appInstanceId.replace(/[{}]/g,"").toLowerCase();
		var index=location.href.indexOf("?");
		appInfo.appURL=index==-1 ? location.href : location.href.substring(0,index);
		(function getUserIdAndAssetIdFromToken(token, appInfo)
		{
			var xmlContent;
			var parser;
			var xmlDoc;
			appInfo.assetId="";
			appInfo.userId="";
			try
			{
				xmlContent=decodeURIComponent(token);
				parser=new DOMParser;
				xmlDoc=parser.parseFromString(xmlContent,"text/xml");
				appInfo.userId=xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("cid").nodeValue;
				appInfo.assetId=xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("aid").nodeValue
			}
			catch(e){}
			finally
			{
				xmlContent=null;
				xmlDoc=null;
				parser=null
			}
		})(context.get_eToken(),appInfo);
		(function handleLifecycle()
		{
			var startTime=new Date;
			var lastFocus=null;
			var focusTime=0;
			var finished=false;
			var adjustFocusTime=function()
				{
					if(document.hasFocus())
					{
						if(lastFocus==null)
							lastFocus=new Date
					}
					else if(lastFocus)
					{
						focusTime+=Math.abs((new Date).getTime() - lastFocus.getTime());
						lastFocus=null
					}
				};
			var eventList=[];
			eventList.push(new Event("focus",adjustFocusTime));
			eventList.push(new Event("blur",adjustFocusTime));
			eventList.push(new Event("focusout",adjustFocusTime));
			eventList.push(new Event("focusin",adjustFocusTime));
			var exitFunction=function()
				{
					for(var i=0; i < eventList.length; i++)
						OSF.OUtil.removeEventListener(window,eventList[i].name,eventList[i].handler);
					eventList.length=0;
					if(!finished)
					{
						if(document.hasFocus() && lastFocus)
						{
							focusTime+=Math.abs((new Date).getTime() - lastFocus.getTime());
							lastFocus=null
						}
						OSFAppTelemetry.onAppClosed(Math.abs((new Date).getTime() - startTime.getTime()),focusTime);
						finished=true
					}
				};
			eventList.push(new Event("beforeunload",exitFunction));
			eventList.push(new Event("unload",exitFunction));
			for(var i=0; i < eventList.length; i++)
				OSF.OUtil.addEventListener(window,eventList[i].name,eventList[i].handler);
			adjustFocusTime()
		})();
		OSFAppTelemetry.onAppActivated()
	}
	OSFAppTelemetry.initialize=initialize;
	function onAppActivated()
	{
		if(!appInfo)
			return;
		(new AppStorage).enumerateLog(function(id, log)
		{
			return(new AppLogger).LogRawData(log)
		},true);
		var data=new OSFLog.AppActivatedUsageData;
		data.SessionId=sessionId;
		data.AppId=appInfo.appId;
		data.AssetId=appInfo.assetId;
		data.AppURL=appInfo.appURL;
		data.UserId=appInfo.userId;
		data.ClientId=appInfo.clientId;
		data.Browser=appInfo.browser;
		data.Host=appInfo.host;
		data.HostVersion=appInfo.hostVersion;
		data.CorrelationId=appInfo.correlationId;
		data.AppSizeWidth=window.innerWidth;
		data.AppSizeHeight=window.innerHeight;
		data.AppInstanceId=appInfo.appInstanceId;
		(new AppLogger).LogData(data);
		setTimeout(function()
		{
			if(!OSF.Logger)
				return;
			OSF.Logger.allowUploadingData()
		},100)
	}
	OSFAppTelemetry.onAppActivated=onAppActivated;
	function onScriptDone(scriptId, msStartTime, msResponseTime, appCorrelationId)
	{
		var data=new OSFLog.ScriptLoadUsageData;
		data.CorrelationId=appCorrelationId;
		data.SessionId=sessionId;
		data.ScriptId=scriptId;
		data.StartTime=msStartTime;
		data.ResponseTime=msResponseTime;
		(new AppLogger).LogData(data)
	}
	OSFAppTelemetry.onScriptDone=onScriptDone;
	function onCallDone(apiType, id, parameters, msResponseTime, errorType)
	{
		if(!appInfo)
			return;
		var data=new OSFLog.APIUsageUsageData;
		data.CorrelationId=osfControlAppCorrelationId;
		data.SessionId=sessionId;
		data.APIType=apiType;
		data.APIID=id;
		data.Parameters=parameters;
		data.ResponseTime=msResponseTime;
		data.ErrorType=errorType;
		(new AppLogger).LogData(data)
	}
	OSFAppTelemetry.onCallDone=onCallDone;
	function onMethodDone(id, args, msResponseTime, errorType)
	{
		var parameters=null;
		if(args)
			if(typeof args=="number")
				parameters=String(args);
			else if(typeof args==="object")
				for(var index in args)
				{
					if(parameters !==null)
						parameters+=",";
					else
						parameters="";
					if(typeof args[index]=="number")
						parameters+=String(args[index])
				}
			else
				parameters="";
		OSF.AppTelemetry.onCallDone("method",id,parameters,msResponseTime,errorType)
	}
	OSFAppTelemetry.onMethodDone=onMethodDone;
	function onPropertyDone(propertyName, msResponseTime)
	{
		OSF.AppTelemetry.onCallDone("property",-1,propertyName,msResponseTime)
	}
	OSFAppTelemetry.onPropertyDone=onPropertyDone;
	function onEventDone(id, errorType)
	{
		OSF.AppTelemetry.onCallDone("event",id,null,0,errorType)
	}
	OSFAppTelemetry.onEventDone=onEventDone;
	function onRegisterDone(register, id, msResponseTime, errorType)
	{
		OSF.AppTelemetry.onCallDone(register ? "registerevent" : "unregisterevent",id,null,msResponseTime,errorType)
	}
	OSFAppTelemetry.onRegisterDone=onRegisterDone;
	function onAppClosed(openTime, focusTime)
	{
		if(!appInfo)
			return;
		var data=new OSFLog.AppClosedUsageData;
		data.CorrelationId=osfControlAppCorrelationId;
		data.SessionId=sessionId;
		data.FocusTime=focusTime;
		data.OpenTime=openTime;
		data.AppSizeFinalWidth=window.innerWidth;
		data.AppSizeFinalHeight=window.innerHeight;
		(new AppStorage).saveLog(sessionId,data.SerializeRow())
	}
	OSFAppTelemetry.onAppClosed=onAppClosed;
	function setOsfControlAppCorrelationId(correlationId)
	{
		osfControlAppCorrelationId=correlationId
	}
	OSFAppTelemetry.setOsfControlAppCorrelationId=setOsfControlAppCorrelationId;
	function doAppInitializationLogging(isException, message)
	{
		var data=new OSFLog.AppInitializationUsageData;
		data.CorrelationId=osfControlAppCorrelationId;
		data.SessionId=sessionId;
		data.SuccessCode=isException ? 1 : 0;
		data.Message=message;
		(new AppLogger).LogData(data)
	}
	OSFAppTelemetry.doAppInitializationLogging=doAppInitializationLogging;
	function logAppCommonMessage(message)
	{
		doAppInitializationLogging(false,message)
	}
	OSFAppTelemetry.logAppCommonMessage=logAppCommonMessage;
	function logAppException(errorMessage)
	{
		doAppInitializationLogging(true,errorMessage)
	}
	OSFAppTelemetry.logAppException=logAppException;
	OSF.AppTelemetry=OSFAppTelemetry
})(OSFAppTelemetry || (OSFAppTelemetry={}));
var OfficeExt;
(function(OfficeExt)
{
	var AppCommand;
	(function(AppCommand)
	{
		var AppCommandManager=function()
			{
				function AppCommandManager()
				{
					var _this=this;
					this._pseudoDocument=null;
					this._eventDispatch=null;
					this._processAppCommandInvocation=function(args)
					{
						var verifyResult=_this._verifyManifestCallback(args.callbackName);
						if(verifyResult.errorCode !=OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess)
						{
							_this._invokeAppCommandCompletedMethod(args.appCommandId,verifyResult.errorCode,"");
							return
						}
						var eventObj=_this._constructEventObjectForCallback(args);
						if(eventObj)
							window.setTimeout(function()
							{
								verifyResult.callback(eventObj)
							},0);
						else
							_this._invokeAppCommandCompletedMethod(args.appCommandId,OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError,"")
					}
				}
				AppCommandManager.initializeOsfDda=function()
				{
					OSF.DDA.AsyncMethodNames.addNames({AppCommandInvocationCompletedAsync: "appCommandInvocationCompletedAsync"});
					OSF.DDA.AsyncMethodCalls.define({
						method: OSF.DDA.AsyncMethodNames.AppCommandInvocationCompletedAsync,
						requiredArguments: [{
								name: Microsoft.Office.WebExtension.Parameters.Id,
								types: ["string"]
							},{
								name: Microsoft.Office.WebExtension.Parameters.Status,
								types: ["number"]
							},{
								name: Microsoft.Office.WebExtension.Parameters.Data,
								types: ["string"]
							}]
					});
					OSF.OUtil.augmentList(OSF.DDA.EventDescriptors,{AppCommandInvokedEvent: "AppCommandInvokedEvent"});
					OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType,{AppCommandInvoked: "appCommandInvoked"});
					OSF.OUtil.setNamespace("AppCommand",OSF.DDA);
					OSF.DDA.AppCommand.AppCommandInvokedEventArgs=OfficeExt.AppCommand.AppCommandInvokedEventArgs
				};
				AppCommandManager.prototype.initializeAndChangeOnce=function(callback)
				{
					AppCommand.registerDdaFacade();
					this._pseudoDocument={};
					OSF.DDA.DispIdHost.addAsyncMethods(this._pseudoDocument,[OSF.DDA.AsyncMethodNames.AppCommandInvocationCompletedAsync,]);
					this._eventDispatch=new OSF.EventDispatch([Microsoft.Office.WebExtension.EventType.AppCommandInvoked,]);
					var onRegisterCompleted=function(result)
						{
							if(callback)
								if(result.status=="succeeded")
									callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
								else
									callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError)
						};
					OSF.DDA.DispIdHost.addEventSupport(this._pseudoDocument,this._eventDispatch);
					this._pseudoDocument.addHandlerAsync(Microsoft.Office.WebExtension.EventType.AppCommandInvoked,this._processAppCommandInvocation,onRegisterCompleted)
				};
				AppCommandManager.prototype._verifyManifestCallback=function(callbackName)
				{
					var defaultResult={
							callback: null,
							errorCode: OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidCallback
						};
					callbackName=callbackName.trim();
					try
					{
						var callList=callbackName.split(".");
						var parentObject=window;
						for(var i=0; i < callList.length - 1; i++)
							if(parentObject[callList[i]] && typeof parentObject[callList[i]]=="object")
								parentObject=parentObject[callList[i]];
							else
								return defaultResult;
						var callbackFunc=parentObject[callList[callList.length - 1]];
						if(typeof callbackFunc !="function")
							return defaultResult
					}
					catch(e)
					{
						return defaultResult
					}
					return{
							callback: callbackFunc,
							errorCode: OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess
						}
				};
				AppCommandManager.prototype._invokeAppCommandCompletedMethod=function(appCommandId, resultCode, data)
				{
					this._pseudoDocument.appCommandInvocationCompletedAsync(appCommandId,resultCode,data)
				};
				AppCommandManager.prototype._constructEventObjectForCallback=function(args)
				{
					var _this=this;
					var eventObj=new AppCommandCallbackEventArgs;
					try
					{
						var jsonData=JSON.parse(args.eventObjStr);
						this._translateEventObjectInternal(jsonData,eventObj);
						Object.defineProperty(eventObj,"completed",{
							value: function()
							{
								var jsonString=JSON.stringify(eventObj);
								_this._invokeAppCommandCompletedMethod(args.appCommandId,OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess,jsonString)
							},
							enumerable: true
						})
					}
					catch(e)
					{
						eventObj=null
					}
					return eventObj
				};
				AppCommandManager.prototype._translateEventObjectInternal=function(input, output)
				{
					for(var key in input)
					{
						if(!input.hasOwnProperty(key))
							continue;
						var inputChild=input[key];
						if(typeof inputChild=="object" && inputChild !=null)
						{
							OSF.OUtil.defineEnumerableProperty(output,key,{value: {}});
							this._translateEventObjectInternal(inputChild,output[key])
						}
						else
							Object.defineProperty(output,key,{
								value: inputChild,
								enumerable: true,
								writable: true
							})
					}
				};
				AppCommandManager.prototype._constructObjectByTemplate=function(template, input)
				{
					var output={};
					if(!template || !input)
						return output;
					for(var key in template)
						if(template.hasOwnProperty(key))
						{
							output[key]=null;
							if(input[key] !=null)
							{
								var templateChild=template[key];
								var inputChild=input[key];
								var inputChildType=typeof inputChild;
								if(typeof templateChild=="object" && templateChild !=null)
									output[key]=this._constructObjectByTemplate(templateChild,inputChild);
								else if(inputChildType=="number" || inputChildType=="string" || inputChildType=="boolean")
									output[key]=inputChild
							}
						}
					return output
				};
				AppCommandManager.instance=function()
				{
					if(AppCommandManager._instance==null)
						AppCommandManager._instance=new AppCommandManager;
					return AppCommandManager._instance
				};
				AppCommandManager._instance=null;
				return AppCommandManager
			}();
		AppCommand.AppCommandManager=AppCommandManager;
		var AppCommandInvokedEventArgs=function()
			{
				function AppCommandInvokedEventArgs(appCommandId, callbackName, eventObjStr)
				{
					this.type=Microsoft.Office.WebExtension.EventType.AppCommandInvoked;
					this.appCommandId=appCommandId;
					this.callbackName=callbackName;
					this.eventObjStr=eventObjStr
				}
				AppCommandInvokedEventArgs.create=function(eventProperties)
				{
					return new AppCommandInvokedEventArgs(eventProperties[AppCommand.AppCommandInvokedEventEnums.AppCommandId],eventProperties[AppCommand.AppCommandInvokedEventEnums.CallbackName],eventProperties[AppCommand.AppCommandInvokedEventEnums.EventObjStr])
				};
				return AppCommandInvokedEventArgs
			}();
		AppCommand.AppCommandInvokedEventArgs=AppCommandInvokedEventArgs;
		var AppCommandCallbackEventArgs=function()
			{
				function AppCommandCallbackEventArgs(){}
				return AppCommandCallbackEventArgs
			}();
		AppCommand.AppCommandCallbackEventArgs=AppCommandCallbackEventArgs;
		AppCommand.AppCommandInvokedEventEnums={
			AppCommandId: "appCommandId",
			CallbackName: "callbackName",
			EventObjStr: "eventObjStr"
		}
	})(AppCommand=OfficeExt.AppCommand || (OfficeExt.AppCommand={}))
})(OfficeExt || (OfficeExt={}));
OfficeExt.AppCommand.AppCommandManager.initializeOsfDda();
var OfficeExt;
(function(OfficeExt)
{
	var AppCommand;
	(function(AppCommand)
	{
		function registerDdaFacade()
		{
			if(OSF.DDA.SafeArray)
			{
				var parameterMap=OSF.DDA.SafeArray.Delegate.ParameterMap;
				parameterMap.define({
					type: OSF.DDA.MethodDispId.dispidAppCommandInvocationCompletedMethod,
					toHost: [{
							name: Microsoft.Office.WebExtension.Parameters.Id,
							value: 0
						},{
							name: Microsoft.Office.WebExtension.Parameters.Status,
							value: 1
						},{
							name: Microsoft.Office.WebExtension.Parameters.Data,
							value: 2
						}]
				});
				parameterMap.define({
					type: OSF.DDA.EventDispId.dispidAppCommandInvokedEvent,
					fromHost: [{
							name: OSF.DDA.EventDescriptors.AppCommandInvokedEvent,
							value: parameterMap.self
						}],
					isComplexType: true
				});
				parameterMap.define({
					type: OSF.DDA.EventDescriptors.AppCommandInvokedEvent,
					fromHost: [{
							name: OfficeExt.AppCommand.AppCommandInvokedEventEnums.AppCommandId,
							value: 0
						},{
							name: OfficeExt.AppCommand.AppCommandInvokedEventEnums.CallbackName,
							value: 1
						},{
							name: OfficeExt.AppCommand.AppCommandInvokedEventEnums.EventObjStr,
							value: 2
						},],
					isComplexType: true
				})
			}
		}
		AppCommand.registerDdaFacade=registerDdaFacade
	})(AppCommand=OfficeExt.AppCommand || (OfficeExt.AppCommand={}))
})(OfficeExt || (OfficeExt={}));
var OfficeJsClient_OutlookWin32;
(function(OfficeJsClient_OutlookWin32)
{
	function prepareApiSurface(appContext)
	{
		if(appContext.get_isDialog())
			appContext.ui=new OSF.DDA.UI.ChildUI;
		else
			appContext.ui=new OSF.DDA.UI.ParentUI
	}
	OfficeJsClient_OutlookWin32.prepareApiSurface=prepareApiSurface;
	function prepareRightAfterWebExtensionInitialize()
	{
		var appCommandHandler=OfficeExt.AppCommand.AppCommandManager.instance();
		appCommandHandler.initializeAndChangeOnce()
	}
	OfficeJsClient_OutlookWin32.prepareRightAfterWebExtensionInitialize=prepareRightAfterWebExtensionInitialize
})(OfficeJsClient_OutlookWin32 || (OfficeJsClient_OutlookWin32={}));
OSF.InitializationHelper.prototype.prepareRightAfterWebExtensionInitialize=function OSF_InitializationHelper$prepareRightAfterWebExtensionInitialize()
{
	OfficeJsClient_OutlookWin32.prepareRightAfterWebExtensionInitialize()
};
OSF.InitializationHelper.prototype.prepareApiSurface=function OSF_InitializationHelper$prepareApiSurface(appContext)
{
	var license=new OSF.DDA.License(appContext.get_eToken());
	if(appContext.get_appName()==OSF.AppName.OutlookWebApp)
	{
		OSF.WebApp._UpdateLinksForHostAndXdmInfo();
		OSF._OfficeAppFactory.setContext(new OSF.DDA.OutlookContext(appContext,this._settings,license,appContext.appOM))
	}
	else
	{
		OfficeJsClient_OutlookWin32.prepareApiSurface(appContext);
		OSF._OfficeAppFactory.setContext(new OSF.DDA.OutlookContext(appContext,this._settings,license,appContext.appOM,OSF.DDA.Theming ? OSF.DDA.Theming.getOfficeTheme : null,appContext.ui));
		OSF._OfficeAppFactory.setHostFacade(new OSF.DDA.DispIdHost.Facade(OSF.DDA.DispIdHost.getClientDelegateMethods,OSF.DDA.SafeArray.Delegate.ParameterMap))
	}
};
OSF.DDA.SettingsManager={
	SerializedSettings: "serializedSettings",
	DateJSONPrefix: "Date(",
	DataJSONSuffix: ")",
	serializeSettings: function OSF_DDA_SettingsManager$serializeSettings(settingsCollection)
	{
		var ret={};
		for(var key in settingsCollection)
		{
			var value=settingsCollection[key];
			try
			{
				if(JSON)
					value=JSON.stringify(value,function dateReplacer(k, v)
					{
						return OSF.OUtil.isDate(this[k]) ? OSF.DDA.SettingsManager.DateJSONPrefix+this[k].getTime()+OSF.DDA.SettingsManager.DataJSONSuffix : v
					});
				else
					value=Sys.Serialization.JavaScriptSerializer.serialize(value);
				ret[key]=value
			}
			catch(ex){}
		}
		return ret
	},
	deserializeSettings: function OSF_DDA_SettingsManager$deserializeSettings(serializedSettings)
	{
		var ret={};
		serializedSettings=serializedSettings || {};
		for(var key in serializedSettings)
		{
			var value=serializedSettings[key];
			try
			{
				if(JSON)
					value=JSON.parse(value,function dateReviver(k, v)
					{
						var d;
						if(typeof v==="string" && v && v.length > 6 && v.slice(0,5)===OSF.DDA.SettingsManager.DateJSONPrefix && v.slice(-1)===OSF.DDA.SettingsManager.DataJSONSuffix)
						{
							d=new Date(parseInt(v.slice(5,-1)));
							if(d)
								return d
						}
						return v
					});
				else
					value=Sys.Serialization.JavaScriptSerializer.deserialize(value,true);
				ret[key]=value
			}
			catch(ex){}
		}
		return ret
	}
};
OSF.InitializationHelper.prototype.loadAppSpecificScriptAndCreateOM=function OSF_InitializationHelper$loadAppSpecificScriptAndCreateOM(appContext, appReady, basePath)
{
	Type.registerNamespace("Microsoft.Office.WebExtension.MailboxEnums");
	Microsoft.Office.WebExtension.MailboxEnums.EntityType={
		MeetingSuggestion: "meetingSuggestion",
		TaskSuggestion: "taskSuggestion",
		Address: "address",
		EmailAddress: "emailAddress",
		Url: "url",
		PhoneNumber: "phoneNumber",
		Contact: "contact",
		FlightReservations: "flightReservations",
		ParcelDeliveries: "parcelDeliveries"
	};
	Microsoft.Office.WebExtension.MailboxEnums.ItemType={
		Message: "message",
		Appointment: "appointment"
	};
	Microsoft.Office.WebExtension.MailboxEnums.ResponseType={
		None: "none",
		Organizer: "organizer",
		Tentative: "tentative",
		Accepted: "accepted",
		Declined: "declined"
	};
	Microsoft.Office.WebExtension.MailboxEnums.RecipientType={
		Other: "other",
		DistributionList: "distributionList",
		User: "user",
		ExternalUser: "externalUser"
	};
	Microsoft.Office.WebExtension.MailboxEnums.AttachmentType={
		File: "file",
		Item: "item",
		Cloud: "cloud"
	};
	Microsoft.Office.WebExtension.MailboxEnums.BodyType={
		Text: "text",
		Html: "html"
	};
	Microsoft.Office.WebExtension.MailboxEnums.ItemNotificationMessageType={
		ProgressIndicator: "progressIndicator",
		InformationalMessage: "informationalMessage",
		ErrorMessage: "errorMessage"
	};
	Microsoft.Office.WebExtension.CoercionType={
		Text: "text",
		Html: "html"
	};
	Microsoft.Office.WebExtension.MailboxEnums.UserProfileType={
		Office365: "office365",
		OutlookCom: "outlookCom",
		Enterprise: "enterprise"
	};
	Microsoft.Office.WebExtension.MailboxEnums.RestVersion={
		v1_0: "v1.0",
		v2_0: "v2.0",
		Beta: "beta"
	};
	Type.registerNamespace("OSF.DDA");
	var OSF=window.OSF || {};
	OSF.DDA=OSF.DDA || {};
	window["OSF"]["DDA"]["OutlookAppOm"]=OSF.DDA.OutlookAppOm=function(officeAppContext, targetWindow, appReadyCallback)
	{
		this.$$d_displayContactCardAsync=Function.createDelegate(this,this.displayContactCardAsync);
		this.$$d_displayNewMessageFormApi=Function.createDelegate(this,this.displayNewMessageFormApi);
		this.$$d__displayNewAppointmentFormApi$p$0=Function.createDelegate(this,this._displayNewAppointmentFormApi$p$0);
		this.$$d_windowOpenOverrideHandler=Function.createDelegate(this,this.windowOpenOverrideHandler);
		this.$$d__getEwsUrl$p$0=Function.createDelegate(this,this._getEwsUrl$p$0);
		this.$$d__getDiagnostics$p$0=Function.createDelegate(this,this._getDiagnostics$p$0);
		this.$$d__getUserProfile$p$0=Function.createDelegate(this,this._getUserProfile$p$0);
		this.$$d__getItem$p$0=Function.createDelegate(this,this._getItem$p$0);
		this.$$d__callAppReadyCallback$p$0=Function.createDelegate(this,this._callAppReadyCallback$p$0);
		this.$$d__getInitialDataResponseHandler$p$0=Function.createDelegate(this,this._getInitialDataResponseHandler$p$0);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p=this;
		this._officeAppContext$p$0=officeAppContext;
		this._appReadyCallback$p$0=appReadyCallback;
		var $$t_4=this;
		var stringLoadedCallback=function()
			{
				if(appReadyCallback)
					if(!officeAppContext["get_isDialog"]())
						$$t_4.invokeHostMethod(1,null,$$t_4.$$d__getInitialDataResponseHandler$p$0);
					else
						window.setTimeout($$t_4.$$d__callAppReadyCallback$p$0,0)
			};
		if(this._areStringsLoaded$p$0())
			stringLoadedCallback();
		else
			this._loadLocalizedScript$p$0(stringLoadedCallback)
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i=function(currentPermissionLevel)
	{
		if(!currentPermissionLevel)
			throw Error.create(window["_u"]["ExtensibilityStrings"]["l_ElevatedPermissionNeeded_Text"]);
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i=function(value, minValue, maxValue, argumentName)
	{
		if(value < minValue || value > maxValue)
			throw Error.argumentOutOfRange(argumentName);
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._getHtmlBody$p=function(data)
	{
		var htmlBody="";
		if("htmlBody" in data)
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidHtmlBody$p(data["htmlBody"]);
			htmlBody=data["htmlBody"]
		}
		return htmlBody
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._getAttachments$p=function(data)
	{
		var attachments=[];
		if("attachments" in data)
		{
			attachments=data["attachments"];
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentsArray$p(attachments)
		}
		return attachments
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._getOptionsAndCallback$p=function(data)
	{
		var args=[];
		if("options" in data)
			args[0]=data["options"];
		if("callback" in data)
			args[args["length"]]=data["callback"];
		return args
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._createAttachmentsDataForHost$p=function(attachments)
	{
		var attachmentsData=new Array(0);
		if(Array.isInstanceOfType(attachments))
			for(var i=0; i < attachments["length"]; i++)
				if(Object.isInstanceOfType(attachments[i]))
				{
					var attachment=attachments[i];
					window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachment$p(attachment);
					attachmentsData[i]=window["OSF"]["DDA"]["OutlookAppOm"]._createAttachmentData$p(attachment)
				}
				else
					throw Error.argument("attachments");
		return attachmentsData
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidHtmlBody$p=function(htmlBody)
	{
		if(!String.isInstanceOfType(htmlBody))
			throw Error.argument("htmlBody");
		if($h.ScriptHelpers.isNullOrUndefined(htmlBody))
			throw Error.argument("htmlBody");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(htmlBody["length"],0,window["OSF"]["DDA"]["OutlookAppOm"].maxBodyLength,"htmlBody")
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentsArray$p=function(attachments)
	{
		if(!Array.isInstanceOfType(attachments))
			throw Error.argument("attachments");
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachment$p=function(attachment)
	{
		if(!Object.isInstanceOfType(attachment))
			throw Error.argument("attachments");
		if(!("type" in attachment) || !("name" in attachment))
			throw Error.argument("attachments");
		if(!("url" in attachment || "itemId" in attachment))
			throw Error.argument("attachments");
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._createAttachmentData$p=function(attachment)
	{
		var attachmentData=null;
		if(attachment["type"]==="file")
		{
			var url=attachment["url"];
			var name=attachment["name"];
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentUrlOrName$p(url,name);
			attachmentData=window["OSF"]["DDA"]["OutlookAppOm"]._createFileAttachmentData$p(url,name)
		}
		else if(attachment["type"]==="item")
		{
			var itemId=window["OSF"]["DDA"]["OutlookAppOm"].getItemIdBasedOnHost(attachment["itemId"]);
			var name=attachment["name"];
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentItemIdOrName$p(itemId,name);
			attachmentData=window["OSF"]["DDA"]["OutlookAppOm"]._createItemAttachmentData$p(itemId,name)
		}
		else
			throw Error.argument("attachments");
		return attachmentData
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._createFileAttachmentData$p=function(url, name)
	{
		return["file",name,url]
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._createItemAttachmentData$p=function(itemId, name)
	{
		return["item",name,itemId]
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentUrlOrName$p=function(url, name)
	{
		if(!String.isInstanceOfType(url) || !String.isInstanceOfType(name))
			throw Error.argument("attachments");
		if(url["length"] > 2048)
			throw Error.argumentOutOfRange("attachments",url["length"],window["_u"]["ExtensibilityStrings"]["l_AttachmentUrlTooLong_Text"]);
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentName$p(name)
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentItemIdOrName$p=function(itemId, name)
	{
		if(!String.isInstanceOfType(itemId) || !String.isInstanceOfType(name))
			throw Error.argument("attachments");
		if(itemId["length"] > 200)
			throw Error.argumentOutOfRange("attachments",itemId["length"],window["_u"]["ExtensibilityStrings"]["l_AttachmentItemIdTooLong_Text"]);
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentName$p(name)
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidAttachmentName$p=function(name)
	{
		if(name["length"] > 255)
			throw Error.argumentOutOfRange("attachments",name["length"],window["_u"]["ExtensibilityStrings"]["l_AttachmentNameTooLong_Text"]);
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidRestVersion$p=function(restVersion)
	{
		if(!restVersion)
			throw Error.argumentNull("restVersion");
		if(restVersion !==window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RestVersion"]["v1_0"] && restVersion !==window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RestVersion"]["v2_0"] && restVersion !==window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RestVersion"]["Beta"])
			throw Error.argument("restVersion");
	};
	window["OSF"]["DDA"]["OutlookAppOm"].getItemIdBasedOnHost=function(itemId)
	{
		if(window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._initialData$p$0 && window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._initialData$p$0.get__isRestIdSupported$i$0())
			return window["OSF"]["DDA"]["OutlookAppOm"]._instance$p["convertToRestId"](itemId,window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RestVersion"]["v1_0"]);
		return window["OSF"]["DDA"]["OutlookAppOm"]._instance$p["convertToEwsId"](itemId,window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RestVersion"]["v1_0"])
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._throwOnArgumentType$p=function(value, expectedType, argumentName)
	{
		if(Object["getType"](value) !==expectedType)
			throw Error.argumentType(argumentName);
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._validateOptionalStringParameter$p=function(value, minLength, maxLength, name)
	{
		if($h.ScriptHelpers.isNullOrUndefined(value))
			return;
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnArgumentType$p(value,String,name);
		var stringValue=value;
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(stringValue["length"],minLength,maxLength,name)
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._convertToOutlookParameters$p=function(dispid, data)
	{
		var executeParameters=null;
		switch(dispid)
		{
			case 1:
			case 2:
			case 12:
			case 3:
			case 14:
			case 18:
			case 26:
			case 32:
			case 41:
			case 34:
				break;
			case 4:
				var jsonProperty=window["JSON"]["stringify"](data["customProperties"]);
				executeParameters=[jsonProperty];
				break;
			case 5:
				executeParameters=[data["body"]];
				break;
			case 8:
			case 9:
				executeParameters=[data["itemId"]];
				break;
			case 7:
				executeParameters=[window["OSF"]["DDA"]["OutlookAppOm"]._convertRecipientArrayParameterForOutlookForDisplayApi$p(data["requiredAttendees"]),window["OSF"]["DDA"]["OutlookAppOm"]._convertRecipientArrayParameterForOutlookForDisplayApi$p(data["optionalAttendees"]),data["start"],data["end"],data["location"],window["OSF"]["DDA"]["OutlookAppOm"]._convertRecipientArrayParameterForOutlookForDisplayApi$p(data["resources"]),data["subject"],data["body"]];
				break;
			case 44:
				executeParameters=[window["OSF"]["DDA"]["OutlookAppOm"]._convertRecipientArrayParameterForOutlookForDisplayApi$p(data["toRecipients"]),window["OSF"]["DDA"]["OutlookAppOm"]._convertRecipientArrayParameterForOutlookForDisplayApi$p(data["ccRecipients"]),window["OSF"]["DDA"]["OutlookAppOm"]._convertRecipientArrayParameterForOutlookForDisplayApi$p(data["bccRecipients"]),data["subject"],data["htmlBody"],data["attachments"]];
				break;
			case 43:
				executeParameters=[data["ewsIdOrEmail"]];
				break;
			case 40:
				executeParameters=[data["extensionId"],data["consentState"]];
				break;
			case 11:
			case 10:
				executeParameters=[data["htmlBody"]];
				break;
			case 31:
			case 30:
				executeParameters=[data["htmlBody"],data["attachments"]];
				break;
			case 23:
			case 13:
			case 38:
			case 29:
				executeParameters=[data["data"],data["coercionType"]];
				break;
			case 37:
			case 28:
				executeParameters=[data["coercionType"]];
				break;
			case 17:
				executeParameters=[data["subject"]];
				break;
			case 15:
				executeParameters=[data["recipientField"]];
				break;
			case 22:
			case 21:
				executeParameters=[data["recipientField"],window["OSF"]["DDA"]["OutlookAppOm"]._convertComposeEmailDictionaryParameterForSetApi$p(data["recipientArray"])];
				break;
			case 19:
				executeParameters=[data["itemId"],data["name"]];
				break;
			case 16:
				executeParameters=[data["uri"],data["name"]];
				break;
			case 20:
				executeParameters=[data["attachmentIndex"]];
				break;
			case 25:
				executeParameters=[data["TimeProperty"],data["time"]];
				break;
			case 24:
				executeParameters=[data["TimeProperty"]];
				break;
			case 27:
				executeParameters=[data["location"]];
				break;
			case 33:
			case 35:
				executeParameters=[data["key"],data["type"],data["persistent"],data["message"],data["icon"]];
				break;
			case 36:
				executeParameters=[data["key"]];
				break;
			default:
				Sys.Debug.fail("Unexpected method dispid");
				break
		}
		return executeParameters
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._convertRecipientArrayParameterForOutlookForDisplayApi$p=function(array)
	{
		return array ? array["join"](";") : null
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._convertComposeEmailDictionaryParameterForSetApi$p=function(recipients)
	{
		if(!recipients)
			return null;
		var results=new Array(recipients["length"]);
		for(var i=0; i < recipients["length"]; i++)
			results[i]=[recipients[i]["address"],recipients[i]["name"]];
		return results
	};
	window["OSF"]["DDA"]["OutlookAppOm"]._validateAndNormalizeRecipientEmails$p=function(emailset, name)
	{
		if($h.ScriptHelpers.isNullOrUndefined(emailset))
			return null;
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnArgumentType$p(emailset,Array,name);
		var originalAttendees=emailset;
		var updatedAttendees=null;
		var normalizationNeeded=false;
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(originalAttendees["length"],0,window["OSF"]["DDA"]["OutlookAppOm"]._maxRecipients$p,String.format("{0}.length",name));
		for(var i=0; i < originalAttendees["length"]; i++)
			if($h.EmailAddressDetails.isInstanceOfType(originalAttendees[i]))
			{
				normalizationNeeded=true;
				break
			}
		if(normalizationNeeded)
			updatedAttendees=[];
		for(var i=0; i < originalAttendees["length"]; i++)
			if(normalizationNeeded)
			{
				updatedAttendees[i]=$h.EmailAddressDetails.isInstanceOfType(originalAttendees[i]) ? originalAttendees[i]["emailAddress"] : originalAttendees[i];
				window["OSF"]["DDA"]["OutlookAppOm"]._throwOnArgumentType$p(updatedAttendees[i],String,String.format("{0}[{1}]",name,i))
			}
			else
				window["OSF"]["DDA"]["OutlookAppOm"]._throwOnArgumentType$p(originalAttendees[i],String,String.format("{0}[{1}]",name,i));
		return updatedAttendees
	};
	OSF.DDA.OutlookAppOm.prototype={
		_initialData$p$0: null,
		_item$p$0: null,
		_userProfile$p$0: null,
		_diagnostics$p$0: null,
		_officeAppContext$p$0: null,
		_appReadyCallback$p$0: null,
		_clientEndPoint$p$0: null,
		_hostItemType$p$0: 0,
		get_clientEndPoint: function()
		{
			if(!this._clientEndPoint$p$0)
				this._clientEndPoint$p$0=OSF._OfficeAppFactory["getClientEndPoint"]();
			return this._clientEndPoint$p$0
		},
		set_clientEndPoint: function(value)
		{
			this._clientEndPoint$p$0=value;
			return value
		},
		get_initialData: function()
		{
			return this._initialData$p$0
		},
		get__appName$i$0: function()
		{
			return this._officeAppContext$p$0["get_appName"]()
		},
		initialize: function(initialData)
		{
			var ItemTypeKey="itemType";
			this._initialData$p$0=new $h.InitialData(initialData);
			this._hostItemType$p$0=initialData[ItemTypeKey];
			if(1===initialData[ItemTypeKey])
				this._item$p$0=new $h.Message(this._initialData$p$0);
			else if(3===initialData[ItemTypeKey])
				this._item$p$0=new $h.MeetingRequest(this._initialData$p$0);
			else if(2===initialData[ItemTypeKey])
				this._item$p$0=new $h.Appointment(this._initialData$p$0);
			else if(4===initialData[ItemTypeKey])
				this._item$p$0=new $h.MessageCompose(this._initialData$p$0);
			else if(5===initialData[ItemTypeKey])
				this._item$p$0=new $h.AppointmentCompose(this._initialData$p$0);
			else if(6===initialData[ItemTypeKey]);
			else
				Sys.Debug.trace("Unexpected item type was received from the host.");
			this._userProfile$p$0=new $h.UserProfile(this._initialData$p$0);
			this._diagnostics$p$0=new $h.Diagnostics(this._initialData$p$0,this._officeAppContext$p$0["get_appName"]());
			this._initializeMethods$p$0();
			$h.InitialData._defineReadOnlyProperty$i(this,"item",this.$$d__getItem$p$0);
			$h.InitialData._defineReadOnlyProperty$i(this,"userProfile",this.$$d__getUserProfile$p$0);
			$h.InitialData._defineReadOnlyProperty$i(this,"diagnostics",this.$$d__getDiagnostics$p$0);
			$h.InitialData._defineReadOnlyProperty$i(this,"ewsUrl",this.$$d__getEwsUrl$p$0);
			if(window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.get__appName$i$0()===64)
				if(this._initialData$p$0.get__overrideWindowOpen$i$0())
					window.open=this.$$d_windowOpenOverrideHandler
		},
		windowOpenOverrideHandler: function(url, targetName, features, replace)
		{
			this.invokeHostMethod(403,{launchUrl: url},null)
		},
		createAsyncResult: function(value, errorCode, detailedErrorCode, userContext, errorMessage)
		{
			var initArgs={};
			var errorArgs=null;
			initArgs[OSF.DDA.AsyncResultEnum.Properties["Value"]]=value;
			initArgs[OSF.DDA.AsyncResultEnum.Properties["Context"]]=userContext;
			if(0 !==errorCode)
			{
				errorArgs={};
				var errorProperties=$h.OutlookErrorManager.getErrorArgs(detailedErrorCode);
				errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties["Name"]]=errorProperties["name"];
				errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties["Message"]]=!errorMessage ? errorProperties["message"] : errorMessage;
				errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties["Code"]]=detailedErrorCode
			}
			return new OSF.DDA.AsyncResult(initArgs,errorArgs)
		},
		_throwOnMethodCallForInsufficientPermission$i$0: function(requiredPermissionLevel, methodName)
		{
			if(this._initialData$p$0._permissionLevel$p$0 < requiredPermissionLevel)
				throw Error.create(String.format(window["_u"]["ExtensibilityStrings"]["l_ElevatedPermissionNeededForMethod_Text"],methodName));
		},
		_displayReplyForm$i$0: function(obj)
		{
			this._displayReplyFormHelper$p$0(obj,false)
		},
		_displayReplyAllForm$i$0: function(obj)
		{
			this._displayReplyFormHelper$p$0(obj,true)
		},
		_displayReplyFormHelper$p$0: function(obj, isReplyAll)
		{
			if(String.isInstanceOfType(obj))
				this._doDisplayReplyForm$p$0(obj,isReplyAll);
			else if(Object.isInstanceOfType(obj) && Object.getTypeName(obj)==="Object")
				this._doDisplayReplyFormWithAttachments$p$0(obj,isReplyAll);
			else
				throw Error.argumentType();
		},
		_doDisplayReplyForm$p$0: function(htmlBody, isReplyAll)
		{
			if(!$h.ScriptHelpers.isNullOrUndefined(htmlBody))
				window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(htmlBody["length"],0,window["OSF"]["DDA"]["OutlookAppOm"].maxBodyLength,"htmlBody");
			this.invokeHostMethod(isReplyAll ? 11 : 10,{htmlBody: htmlBody},null)
		},
		_doDisplayReplyFormWithAttachments$p$0: function(data, isReplyAll)
		{
			var htmlBody=window["OSF"]["DDA"]["OutlookAppOm"]._getHtmlBody$p(data);
			var attachments=window["OSF"]["DDA"]["OutlookAppOm"]._getAttachments$p(data);
			var parameters=$h.CommonParameters.parse(window["OSF"]["DDA"]["OutlookAppOm"]._getOptionsAndCallback$p(data),false);
			var $$t_6=this;
			this._standardInvokeHostMethod$i$0(isReplyAll ? 31 : 30,{
				htmlBody: htmlBody,
				attachments: window["OSF"]["DDA"]["OutlookAppOm"]._createAttachmentsDataForHost$p(attachments)
			},function(rawInput)
			{
				return rawInput
			},parameters._asyncContext$p$0,parameters._callback$p$0)
		},
		_standardInvokeHostMethod$i$0: function(dispid, data, format, userContext, callback)
		{
			var $$t_B=this;
			this.invokeHostMethod(dispid,data,function(resultCode, response)
			{
				if(callback)
				{
					var asyncResult=null;
					if(Object.isInstanceOfType(response))
					{
						var responseDictionary=response;
						if("error" in responseDictionary || "data" in responseDictionary || "errorCode" in responseDictionary)
							if(!responseDictionary["error"])
							{
								var formattedData=format ? format(responseDictionary["data"]) : responseDictionary["data"];
								asyncResult=$$t_B.createAsyncResult(formattedData,0,0,userContext,null)
							}
							else
							{
								var errorCode=responseDictionary["errorCode"];
								asyncResult=$$t_B.createAsyncResult(null,1,errorCode,userContext,null)
							}
					}
					if(!asyncResult && resultCode)
						asyncResult=$$t_B.createAsyncResult(null,1,9002,userContext,null);
					callback(asyncResult)
				}
			})
		},
		invokeHostMethod: function(dispid, data, responseCallback)
		{
			if(64===this._officeAppContext$p$0["get_appName"]())
			{
				var args={ApiParams: data};
				args["MethodData"]={
					ControlId: OSF._OfficeAppFactory["getId"](),
					DispatchId: dispid
				};
				if(dispid===1)
					this.get_clientEndPoint()["invoke"]("GetInitialData",responseCallback,args);
				else
					this.get_clientEndPoint()["invoke"]("ExecuteMethod",responseCallback,args)
			}
			else if(!this._isOwaOnlyMethod$p$0(dispid))
			{
				var executeParameters=window["OSF"]["DDA"]["OutlookAppOm"]._convertToOutlookParameters$p(dispid,data);
				var $$t_B=this;
				OSF.ClientHostController["execute"](dispid,executeParameters,function(nativeData, resultCode)
				{
					if(responseCallback)
					{
						var responseData=nativeData.toArray();
						var rawData=window["JSON"]["parse"](responseData[0]);
						if(Object.isInstanceOfType(rawData))
						{
							var deserializedData=rawData;
							if(responseData["length"] > 1 && responseData[1])
							{
								deserializedData["error"]=true;
								deserializedData["errorCode"]=responseData[1]
							}
							else
								deserializedData["error"]=false;
							responseCallback(resultCode,deserializedData)
						}
						else if(Number.isInstanceOfType(rawData))
						{
							var returnDict={};
							returnDict["error"]=true;
							returnDict["errorCode"]=rawData;
							responseCallback(resultCode,returnDict)
						}
						else
							throw Error.notImplemented("Return data type from host must be Dictionary or int");
					}
				})
			}
			else if(responseCallback)
				responseCallback(-2,null)
		},
		_dictionaryToDate$i$0: function(input)
		{
			var retValue=new Date(input["year"],input["month"],input["date"],input["hours"],input["minutes"],input["seconds"],!input["milliseconds"] ? 0 : input["milliseconds"]);
			if(window["isNaN"](retValue["getTime"]()))
				throw Error.format(window["_u"]["ExtensibilityStrings"]["l_InvalidDate_Text"]);
			return retValue
		},
		_dateToDictionary$i$0: function(input)
		{
			var retValue={};
			retValue["month"]=input["getMonth"]();
			retValue["date"]=input["getDate"]();
			retValue["year"]=input["getFullYear"]();
			retValue["hours"]=input["getHours"]();
			retValue["minutes"]=input["getMinutes"]();
			retValue["seconds"]=input["getSeconds"]();
			retValue["milliseconds"]=input["getMilliseconds"]();
			return retValue
		},
		_isOwaOnlyMethod$p$0: function(dispId)
		{
			switch(dispId)
			{
				case 402:
				case 401:
				case 400:
				case 403:
					return true;
				default:
					return false
			}
		},
		_displayNewAppointmentFormApi$p$0: function(parameters)
		{
			var normalizedRequiredAttendees=window["OSF"]["DDA"]["OutlookAppOm"]._validateAndNormalizeRecipientEmails$p(parameters["requiredAttendees"],"requiredAttendees");
			var normalizedOptionalAttendees=window["OSF"]["DDA"]["OutlookAppOm"]._validateAndNormalizeRecipientEmails$p(parameters["optionalAttendees"],"optionalAttendees");
			window["OSF"]["DDA"]["OutlookAppOm"]._validateOptionalStringParameter$p(parameters["location"],0,window["OSF"]["DDA"]["OutlookAppOm"]._maxLocationLength$p,"location");
			window["OSF"]["DDA"]["OutlookAppOm"]._validateOptionalStringParameter$p(parameters["body"],0,window["OSF"]["DDA"]["OutlookAppOm"].maxBodyLength,"body");
			window["OSF"]["DDA"]["OutlookAppOm"]._validateOptionalStringParameter$p(parameters["subject"],0,window["OSF"]["DDA"]["OutlookAppOm"]._maxSubjectLength$p,"subject");
			if(!$h.ScriptHelpers.isNullOrUndefined(parameters["start"]))
			{
				window["OSF"]["DDA"]["OutlookAppOm"]._throwOnArgumentType$p(parameters["start"],Date,"start");
				var startDateTime=parameters["start"];
				parameters["start"]=startDateTime["getTime"]();
				if(!$h.ScriptHelpers.isNullOrUndefined(parameters["end"]))
				{
					window["OSF"]["DDA"]["OutlookAppOm"]._throwOnArgumentType$p(parameters["end"],Date,"end");
					var endDateTime=parameters["end"];
					if(endDateTime < startDateTime)
						throw Error.argumentOutOfRange("end",endDateTime,window["_u"]["ExtensibilityStrings"]["l_InvalidEventDates_Text"]);
					parameters["end"]=endDateTime["getTime"]()
				}
			}
			var updatedParameters=null;
			if(normalizedRequiredAttendees || normalizedOptionalAttendees)
			{
				updatedParameters={};
				var $$dict_7=parameters;
				for(var $$key_8 in $$dict_7)
				{
					var entry={
							key: $$key_8,
							value: $$dict_7[$$key_8]
						};
					updatedParameters[entry["key"]]=entry["value"]
				}
				if(normalizedRequiredAttendees)
					updatedParameters["requiredAttendees"]=normalizedRequiredAttendees;
				if(normalizedOptionalAttendees)
					updatedParameters["optionalAttendees"]=normalizedOptionalAttendees
			}
			this.invokeHostMethod(7,updatedParameters || parameters,null)
		},
		displayNewMessageFormApi: function(parameters)
		{
			var updatedParameters={};
			if(parameters)
			{
				var normalizedToRecipients=window["OSF"]["DDA"]["OutlookAppOm"]._validateAndNormalizeRecipientEmails$p(parameters["toRecipients"],"toRecipients");
				var normalizedCcRecipients=window["OSF"]["DDA"]["OutlookAppOm"]._validateAndNormalizeRecipientEmails$p(parameters["ccRecipients"],"ccRecipients");
				var normalizedBccRecipients=window["OSF"]["DDA"]["OutlookAppOm"]._validateAndNormalizeRecipientEmails$p(parameters["bccRecipients"],"bccRecipients");
				window["OSF"]["DDA"]["OutlookAppOm"]._validateOptionalStringParameter$p(parameters["htmlBody"],0,window["OSF"]["DDA"]["OutlookAppOm"].maxBodyLength,"htmlBody");
				window["OSF"]["DDA"]["OutlookAppOm"]._validateOptionalStringParameter$p(parameters["subject"],0,window["OSF"]["DDA"]["OutlookAppOm"]._maxSubjectLength$p,"subject");
				var attachments=window["OSF"]["DDA"]["OutlookAppOm"]._getAttachments$p(parameters);
				var $$dict_7=parameters;
				for(var $$key_8 in $$dict_7)
				{
					var entry={
							key: $$key_8,
							value: $$dict_7[$$key_8]
						};
					updatedParameters[entry["key"]]=entry["value"]
				}
				if(normalizedToRecipients)
					updatedParameters["toRecipients"]=normalizedToRecipients;
				if(normalizedCcRecipients)
					updatedParameters["ccRecipients"]=normalizedCcRecipients;
				if(normalizedBccRecipients)
					updatedParameters["bccRecipients"]=normalizedBccRecipients;
				if(attachments)
					updatedParameters["attachments"]=window["OSF"]["DDA"]["OutlookAppOm"]._createAttachmentsDataForHost$p(attachments)
			}
			this.invokeHostMethod(44,updatedParameters || parameters,null)
		},
		displayContactCardAsync: function(ewsIdOrEmail, callback)
		{
			if($h.ScriptHelpers.isNullOrUndefined(ewsIdOrEmail))
				throw Error.argumentNull("ewsIdOrEmail");
			var asyncContext=null;
			var asyncFunctionCallback=null;
			if(callback)
			{
				var commonParameters=$h.CommonParameters.parse([callback],false);
				asyncContext=commonParameters._asyncContext$p$0;
				asyncFunctionCallback=commonParameters._callback$p$0
			}
			this._standardInvokeHostMethod$i$0(43,{ewsIdOrEmail: ewsIdOrEmail.trim()},null,asyncContext,asyncFunctionCallback)
		},
		_initializeMethods$p$0: function()
		{
			var currentInstance=this;
			if($h.Item.isInstanceOfType(this._item$p$0) || this._hostItemType$p$0===6)
			{
				currentInstance["displayNewAppointmentForm"]=this.$$d__displayNewAppointmentFormApi$p$0;
				currentInstance["displayNewMessageForm"]=this.$$d_displayNewMessageFormApi;
				currentInstance["displayContactCardAsync"]=this.$$d_displayContactCardAsync
			}
		},
		_getInitialDataResponseHandler$p$0: function(resultCode, data)
		{
			if(resultCode)
				return;
			this.initialize(data);
			this["displayName"]="mailbox";
			window.setTimeout(this.$$d__callAppReadyCallback$p$0,0)
		},
		_callAppReadyCallback$p$0: function()
		{
			this._appReadyCallback$p$0()
		},
		_invokeGetTokenMethodAsync$p$0: function(outlookDispid, methodName, callback, userContext)
		{
			if($h.ScriptHelpers.isNullOrUndefined(callback))
				throw Error.argumentNull("callback");
			var $$t_8=this;
			this.invokeHostMethod(outlookDispid,null,function(resultCode, response)
			{
				var asyncResult;
				if(resultCode)
					asyncResult=$$t_8.createAsyncResult(null,1,9017,userContext,String.format(window["_u"]["ExtensibilityStrings"]["l_InternalProtocolError_Text"],resultCode));
				else
				{
					var responseDictionary=response;
					if(responseDictionary["wasSuccessful"])
						asyncResult=$$t_8.createAsyncResult(responseDictionary["token"],0,0,userContext,null);
					else
						asyncResult=$$t_8.createAsyncResult(null,1,responseDictionary["errorCode"],userContext,responseDictionary["errorMessage"])
				}
				callback(asyncResult)
			})
		},
		_getItem$p$0: function()
		{
			return this._item$p$0
		},
		_getUserProfile$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._initialData$p$0._permissionLevel$p$0);
			return this._userProfile$p$0
		},
		_getDiagnostics$p$0: function()
		{
			return this._diagnostics$p$0
		},
		_getEwsUrl$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._initialData$p$0._permissionLevel$p$0);
			return this._initialData$p$0.get__ewsUrl$i$0()
		},
		_findOffset$p$0: function(value)
		{
			var ranges=this._initialData$p$0.get__timeZoneOffsets$i$0();
			for(var r=0; r < ranges["length"]; r++)
			{
				var range=ranges[r];
				var start=window["parseInt"](range["start"]);
				var end=window["parseInt"](range["end"]);
				if(value["getTime"]() - start >=0 && value["getTime"]() - end < 0)
					return window["parseInt"](range["offset"])
			}
			throw Error.format(window["_u"]["ExtensibilityStrings"]["l_InvalidDate_Text"]);
		},
		_areStringsLoaded$p$0: function()
		{
			var stringsLoaded=false;
			try
			{
				stringsLoaded=!$h.ScriptHelpers.isNullOrUndefined(window["_u"]["ExtensibilityStrings"]["l_EwsRequestOversized_Text"])
			}
			catch($$e_1){}
			return stringsLoaded
		},
		_loadLocalizedScript$p$0: function(stringLoadedCallback)
		{
			var url=null;
			var baseUrl="";
			var scripts=document.getElementsByTagName("script");
			for(var i=scripts.length - 1; i >=0; i--)
			{
				var filename=null;
				var attributes=scripts[i].attributes;
				if(attributes)
				{
					var attribute=attributes.getNamedItem("src");
					if(attribute)
						filename=attribute.value;
					if(filename)
					{
						var debug=false;
						filename=filename["toLowerCase"]();
						var officeIndex=filename["indexOf"]("office_strings.js");
						if(officeIndex < 0)
						{
							officeIndex=filename["indexOf"]("office_strings.debug.js");
							debug=true
						}
						if(officeIndex > 0 && officeIndex < filename["length"])
						{
							url=filename["replace"](debug ? "office_strings.debug.js" : "office_strings.js","outlook_strings.js");
							var languageUrl=filename["substring"](0,officeIndex);
							var lastIndexOfSlash=languageUrl["lastIndexOf"]("/",languageUrl["length"] - 2);
							if(lastIndexOfSlash===-1)
								lastIndexOfSlash=languageUrl["lastIndexOf"]("\\",languageUrl["length"] - 2);
							if(lastIndexOfSlash !==-1 && languageUrl["length"] > lastIndexOfSlash+1)
								baseUrl=languageUrl["substring"](0,lastIndexOfSlash+1);
							break
						}
					}
				}
			}
			if(url)
			{
				var head=document.getElementsByTagName("head")[0];
				var scriptElement=null;
				var $$t_H=this;
				var scriptElementCallback=function()
					{
						if(stringLoadedCallback && (!scriptElement.readyState || scriptElement.readyState && (scriptElement.readyState==="loaded" || scriptElement.readyState==="complete")))
						{
							scriptElement.onload=null;
							scriptElement.onreadystatechange=null;
							stringLoadedCallback()
						}
					};
				var $$t_I=this;
				var failureCallback=function()
					{
						if(!$$t_I._areStringsLoaded$p$0())
						{
							var fallbackUrl=baseUrl+"en-us/"+"outlook_strings.js";
							scriptElement.onload=null;
							scriptElement.onreadystatechange=null;
							scriptElement=$$t_I._createScriptElement$p$0(fallbackUrl);
							scriptElement.onload=scriptElementCallback;
							scriptElement.onreadystatechange=scriptElementCallback;
							head.appendChild(scriptElement)
						}
					};
				scriptElement=this._createScriptElement$p$0(url);
				scriptElement.onload=scriptElementCallback;
				scriptElement.onreadystatechange=scriptElementCallback;
				window.setTimeout(failureCallback,2e3);
				head.appendChild(scriptElement)
			}
		},
		_createScriptElement$p$0: function(url)
		{
			var scriptElement=document.createElement("script");
			scriptElement.type="text/javascript";
			scriptElement.src=url;
			return scriptElement
		}
	};
	OSF.DDA.OutlookAppOm.prototype.makeEwsRequestAsync=function(data)
	{
		var args=[];
		for(var $$pai_5=1; $$pai_5 < arguments["length"];++$$pai_5)
			args[$$pai_5 - 1]=arguments[$$pai_5];
		if($h.ScriptHelpers.isNullOrUndefined(data))
			throw Error.argumentNull("data");
		if(data["length"] > window["OSF"]["DDA"]["OutlookAppOm"]._maxEwsRequestSize$p)
			throw Error.argument("data",window["_u"]["ExtensibilityStrings"]["l_EwsRequestOversized_Text"]);
		this._throwOnMethodCallForInsufficientPermission$i$0(3,"makeEwsRequestAsync");
		var parameters=$h.CommonParameters.parse(args,true,true);
		var ewsRequest=new $h.EwsRequest(parameters._asyncContext$p$0);
		var $$t_4=this;
		ewsRequest.onreadystatechange=function()
		{
			if(4===ewsRequest.get__requestState$i$1())
				parameters._callback$p$0(ewsRequest._asyncResult$p$0)
		};
		ewsRequest.send(data)
	};
	OSF.DDA.OutlookAppOm.prototype.recordDataPoint=function(data)
	{
		if($h.ScriptHelpers.isNullOrUndefined(data))
			throw Error.argumentNull("data");
		this.invokeHostMethod(402,data,null)
	};
	OSF.DDA.OutlookAppOm.prototype.recordTrace=function(data)
	{
		if($h.ScriptHelpers.isNullOrUndefined(data))
			throw Error.argumentNull("data");
		this.invokeHostMethod(401,data,null)
	};
	OSF.DDA.OutlookAppOm.prototype.trackCtq=function(data)
	{
		if($h.ScriptHelpers.isNullOrUndefined(data))
			throw Error.argumentNull("data");
		this.invokeHostMethod(400,data,null)
	};
	OSF.DDA.OutlookAppOm.prototype.convertToLocalClientTime=function(timeValue)
	{
		var date=new Date(timeValue["getTime"]());
		var offset=date["getTimezoneOffset"]() * -1;
		if(this._initialData$p$0 && this._initialData$p$0.get__timeZoneOffsets$i$0())
		{
			date["setUTCMinutes"](date["getUTCMinutes"]() - offset);
			offset=this._findOffset$p$0(date);
			date["setUTCMinutes"](date["getUTCMinutes"]()+offset)
		}
		var retValue=this._dateToDictionary$i$0(date);
		retValue["timezoneOffset"]=offset;
		return retValue
	};
	OSF.DDA.OutlookAppOm.prototype.convertToUtcClientTime=function(input)
	{
		var retValue=this._dictionaryToDate$i$0(input);
		if(this._initialData$p$0 && this._initialData$p$0.get__timeZoneOffsets$i$0())
		{
			var offset=this._findOffset$p$0(retValue);
			retValue["setUTCMinutes"](retValue["getUTCMinutes"]() - offset);
			offset=!input["timezoneOffset"] ? retValue["getTimezoneOffset"]() * -1 : input["timezoneOffset"];
			retValue["setUTCMinutes"](retValue["getUTCMinutes"]()+offset)
		}
		return retValue
	};
	OSF.DDA.OutlookAppOm.prototype.convertToRestId=function(itemId, restVersion)
	{
		if(!itemId)
			throw Error.argumentNull("itemId");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidRestVersion$p(restVersion);
		return itemId["replace"](new RegExp("[/]","g"),"-")["replace"](new RegExp("[+]","g"),"_")
	};
	OSF.DDA.OutlookAppOm.prototype.convertToEwsId=function(itemId, restVersion)
	{
		if(!itemId)
			throw Error.argumentNull("itemId");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnInvalidRestVersion$p(restVersion);
		return itemId["replace"](new RegExp("[-]","g"),"/")["replace"](new RegExp("[_]","g"),"+")
	};
	OSF.DDA.OutlookAppOm.prototype.getUserIdentityTokenAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		this._throwOnMethodCallForInsufficientPermission$i$0(1,"getUserIdentityTokenAsync");
		var parameters=$h.CommonParameters.parse(args,true,true);
		this._invokeGetTokenMethodAsync$p$0(2,"GetUserIdentityToken",parameters._callback$p$0,parameters._asyncContext$p$0)
	};
	OSF.DDA.OutlookAppOm.prototype.getCallbackTokenAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		this._throwOnMethodCallForInsufficientPermission$i$0(1,"getCallbackTokenAsync");
		var parameters=$h.CommonParameters.parse(args,true,true);
		this._invokeGetTokenMethodAsync$p$0(12,"GetCallbackToken",parameters._callback$p$0,parameters._asyncContext$p$0)
	};
	OSF.DDA.OutlookAppOm.prototype.displayMessageForm=function(itemId)
	{
		if($h.ScriptHelpers.isNullOrUndefined(itemId))
			throw Error.argumentNull("itemId");
		this.invokeHostMethod(8,{itemId: window["OSF"]["DDA"]["OutlookAppOm"].getItemIdBasedOnHost(itemId)},null)
	};
	OSF.DDA.OutlookAppOm.prototype.displayAppointmentForm=function(itemId)
	{
		if($h.ScriptHelpers.isNullOrUndefined(itemId))
			throw Error.argumentNull("itemId");
		this.invokeHostMethod(9,{itemId: window["OSF"]["DDA"]["OutlookAppOm"].getItemIdBasedOnHost(itemId)},null)
	};
	OSF.DDA.OutlookAppOm.prototype.RegisterConsentAsync=function(consentState)
	{
		if(consentState !==2 && consentState !==1 && consentState)
			throw Error.argumentOutOfRange("consentState");
		var parameters={};
		parameters["consentState"]=consentState["toString"]();
		parameters["extensionId"]=this["GetExtensionId"]();
		this.invokeHostMethod(40,parameters,null)
	};
	OSF.DDA.OutlookAppOm.prototype.CloseApp=function()
	{
		this.invokeHostMethod(42,null,null)
	};
	OSF.DDA.OutlookAppOm.prototype.GetIsRead=function()
	{
		return this._initialData$p$0.get__isRead$i$0()
	};
	OSF.DDA.OutlookAppOm.prototype.GetEndNodeUrl=function()
	{
		return this._initialData$p$0.get__endNodeUrl$i$0()
	};
	OSF.DDA.OutlookAppOm.prototype.GetConsentMetadata=function()
	{
		return this._initialData$p$0.get__consentMetadata$i$0()
	};
	OSF.DDA.OutlookAppOm.prototype.GetEntryPointUrl=function()
	{
		return this._initialData$p$0.get__entryPointUrl$i$0()
	};
	OSF.DDA.OutlookAppOm.prototype.GetMarketplaceContentMarket=function()
	{
		return this._initialData$p$0.get__marketplaceContentMarket$i$0()
	};
	OSF.DDA.OutlookAppOm.prototype.GetMarketplaceAssetId=function()
	{
		return this._initialData$p$0.get__marketplaceAssetId$i$0()
	};
	OSF.DDA.OutlookAppOm.prototype.GetExtensionId=function()
	{
		return this._initialData$p$0.get__extensionId$i$0()
	};
	window["OSF"]["DDA"]["Settings"]=OSF.DDA.Settings=function(data)
	{
		this._rawData$p$0=data
	};
	window["OSF"]["DDA"]["Settings"]._convertFromRawSettings$p=function(rawSettings)
	{
		if(!rawSettings)
			return{};
		if(window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.get__appName$i$0()===8)
		{
			var outlookSettings=rawSettings["SettingsKey"];
			if(outlookSettings)
				return OSF.DDA.SettingsManager["deserializeSettings"](outlookSettings)
		}
		return rawSettings
	};
	OSF.DDA.Settings.prototype={
		_rawData$p$0: null,
		_settingsData$p$0: null,
		get__data$p$0: function()
		{
			if(!this._settingsData$p$0)
			{
				this._settingsData$p$0=window["OSF"]["DDA"]["Settings"]._convertFromRawSettings$p(this._rawData$p$0);
				this._rawData$p$0=null
			}
			return this._settingsData$p$0
		},
		_saveSettingsForOutlook$p$0: function(callback, userContext)
		{
			var storedException=null;
			try
			{
				var serializedSettings=OSF.DDA.SettingsManager["serializeSettings"](this.get__data$p$0());
				var jsonSettings=window["JSON"]["stringify"](serializedSettings);
				var settingsObjectToSave={SettingsKey: jsonSettings};
				OSF.DDA.ClientSettingsManager["write"](settingsObjectToSave)
			}
			catch(ex)
			{
				storedException=ex
			}
			if(callback)
			{
				var asyncResult;
				if(storedException)
					asyncResult=window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(null,1,9019,userContext,storedException["message"]);
				else
					asyncResult=window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(null,0,0,userContext,null);
				callback(asyncResult)
			}
		},
		_saveSettingsForOwa$p$0: function(callback, userContext)
		{
			var serializedSettings=OSF.DDA.SettingsManager["serializeSettings"](this.get__data$p$0());
			var $$t_7=this;
			window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.invokeHostMethod(404,[serializedSettings],function(resultCode, response)
			{
				if(callback)
				{
					var asyncResult;
					if(resultCode)
						asyncResult=window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(null,1,9017,userContext,String.format(window["_u"]["ExtensibilityStrings"]["l_InternalProtocolError_Text"],resultCode));
					else
					{
						var responseDictionary=response;
						if(!responseDictionary["error"])
							asyncResult=window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(null,0,0,userContext,null);
						else
							asyncResult=window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(null,1,9019,userContext,responseDictionary["errorMessage"])
					}
					callback(asyncResult)
				}
			})
		}
	};
	OSF.DDA.Settings.prototype.get=function(name)
	{
		return this.get__data$p$0()[name]
	};
	OSF.DDA.Settings.prototype.set=function(name, value)
	{
		this.get__data$p$0()[name]=value
	};
	OSF.DDA.Settings.prototype.remove=function(name)
	{
		delete this.get__data$p$0()[name]
	};
	OSF.DDA.Settings.prototype.saveAsync=function()
	{
		var args=[];
		for(var $$pai_4=0; $$pai_4 < arguments["length"];++$$pai_4)
			args[$$pai_4]=arguments[$$pai_4];
		var commonParameters=$h.CommonParameters.parse(args,false);
		if(window["JSON"]["stringify"](OSF.DDA.SettingsManager["serializeSettings"](this.get__data$p$0()))["length"] > 32768)
		{
			var asyncResult=window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(null,1,9019,commonParameters._asyncContext$p$0,"");
			var $$t_3=this;
			window.setTimeout(function()
			{
				commonParameters._callback$p$0(asyncResult)
			},0);
			return
		}
		if(window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.get__appName$i$0()===64)
			this._saveSettingsForOwa$p$0(commonParameters._callback$p$0,commonParameters._asyncContext$p$0);
		else
			this._saveSettingsForOutlook$p$0(commonParameters._callback$p$0,commonParameters._asyncContext$p$0)
	};
	Type.registerNamespace("$h");
	var $h=window.$h || {};
	Type.registerNamespace("Office.cast");
	var Office=window.Office || {};
	Office.cast=Office.cast || {};
	$h.Appointment=function(dataDictionary)
	{
		this.$$d__getOrganizer$p$2=Function.createDelegate(this,this._getOrganizer$p$2);
		this.$$d__getNormalizedSubject$p$2=Function.createDelegate(this,this._getNormalizedSubject$p$2);
		this.$$d__getSubject$p$2=Function.createDelegate(this,this._getSubject$p$2);
		this.$$d__getResources$p$2=Function.createDelegate(this,this._getResources$p$2);
		this.$$d__getRequiredAttendees$p$2=Function.createDelegate(this,this._getRequiredAttendees$p$2);
		this.$$d__getOptionalAttendees$p$2=Function.createDelegate(this,this._getOptionalAttendees$p$2);
		this.$$d__getLocation$p$2=Function.createDelegate(this,this._getLocation$p$2);
		this.$$d__getEnd$p$2=Function.createDelegate(this,this._getEnd$p$2);
		this.$$d__getStart$p$2=Function.createDelegate(this,this._getStart$p$2);
		$h.Appointment.initializeBase(this,[dataDictionary]);
		$h.InitialData._defineReadOnlyProperty$i(this,"start",this.$$d__getStart$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"end",this.$$d__getEnd$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"location",this.$$d__getLocation$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"optionalAttendees",this.$$d__getOptionalAttendees$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"requiredAttendees",this.$$d__getRequiredAttendees$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"resources",this.$$d__getResources$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"subject",this.$$d__getSubject$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"normalizedSubject",this.$$d__getNormalizedSubject$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"organizer",this.$$d__getOrganizer$p$2)
	};
	$h.Appointment.prototype={
		getItemType: function()
		{
			return window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemType"]["Appointment"]
		},
		_getStart$p$2: function()
		{
			return this._data$p$0.get__start$i$0()
		},
		_getEnd$p$2: function()
		{
			return this._data$p$0.get__end$i$0()
		},
		_getLocation$p$2: function()
		{
			return this._data$p$0.get__location$i$0()
		},
		_getOptionalAttendees$p$2: function()
		{
			return this._data$p$0.get__cc$i$0()
		},
		_getRequiredAttendees$p$2: function()
		{
			return this._data$p$0.get__to$i$0()
		},
		_getResources$p$2: function()
		{
			return this._data$p$0.get__resources$i$0()
		},
		_getSubject$p$2: function()
		{
			return this._data$p$0.get__subject$i$0()
		},
		_getNormalizedSubject$p$2: function()
		{
			return this._data$p$0.get__normalizedSubject$i$0()
		},
		_getOrganizer$p$2: function()
		{
			return this._data$p$0.get__organizer$i$0()
		}
	};
	$h.Appointment.prototype.getEntities=function()
	{
		return this._data$p$0._getEntities$i$0()
	};
	$h.Appointment.prototype.getEntitiesByType=function(entityType)
	{
		return this._data$p$0._getEntitiesByType$i$0(entityType)
	};
	$h.Appointment.prototype.getRegExMatches=function()
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"getRegExMatches");
		return this._data$p$0._getRegExMatches$i$0()
	};
	$h.Appointment.prototype.getFilteredEntitiesByName=function(name)
	{
		return this._data$p$0._getFilteredEntitiesByName$i$0(name)
	};
	$h.Appointment.prototype.getRegExMatchesByName=function(name)
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"getRegExMatchesByName");
		return this._data$p$0._getRegExMatchesByName$i$0(name)
	};
	$h.Appointment.prototype.displayReplyForm=function(obj)
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._displayReplyForm$i$0(obj)
	};
	$h.Appointment.prototype.displayReplyAllForm=function(obj)
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._displayReplyAllForm$i$0(obj)
	};
	$h.AppointmentCompose=function(data)
	{
		this.$$d__getLocation$p$2=Function.createDelegate(this,this._getLocation$p$2);
		this.$$d__getEnd$p$2=Function.createDelegate(this,this._getEnd$p$2);
		this.$$d__getStart$p$2=Function.createDelegate(this,this._getStart$p$2);
		this.$$d__getOptionalAttendees$p$2=Function.createDelegate(this,this._getOptionalAttendees$p$2);
		this.$$d__getRequiredAttendees$p$2=Function.createDelegate(this,this._getRequiredAttendees$p$2);
		$h.AppointmentCompose.initializeBase(this,[data]);
		$h.InitialData._defineReadOnlyProperty$i(this,"requiredAttendees",this.$$d__getRequiredAttendees$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"optionalAttendees",this.$$d__getOptionalAttendees$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"start",this.$$d__getStart$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"end",this.$$d__getEnd$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"location",this.$$d__getLocation$p$2)
	};
	$h.AppointmentCompose.prototype={
		_requiredAttendees$p$2: null,
		_optionalAttendees$p$2: null,
		_start$p$2: null,
		_end$p$2: null,
		_location$p$2: null,
		getItemType: function()
		{
			return window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemType"]["Appointment"]
		},
		_getRequiredAttendees$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._requiredAttendees$p$2)
				this._requiredAttendees$p$2=new $h.ComposeRecipient(0,"requiredAttendees");
			return this._requiredAttendees$p$2
		},
		_getOptionalAttendees$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._optionalAttendees$p$2)
				this._optionalAttendees$p$2=new $h.ComposeRecipient(1,"optionalAttendees");
			return this._optionalAttendees$p$2
		},
		_getStart$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._start$p$2)
				this._start$p$2=new $h.ComposeTime(1);
			return this._start$p$2
		},
		_getEnd$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._end$p$2)
				this._end$p$2=new $h.ComposeTime(2);
			return this._end$p$2
		},
		_getLocation$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._location$p$2)
				this._location$p$2=new $h.ComposeLocation;
			return this._location$p$2
		}
	};
	$h.AttachmentConstants=function(){};
	$h.AttachmentDetails=function(data)
	{
		this.$$d__getIsInline$p$0=Function.createDelegate(this,this._getIsInline$p$0);
		this.$$d__getAttachmentType$p$0=Function.createDelegate(this,this._getAttachmentType$p$0);
		this.$$d__getSize$p$0=Function.createDelegate(this,this._getSize$p$0);
		this.$$d__getContentType$p$0=Function.createDelegate(this,this._getContentType$p$0);
		this.$$d__getName$p$0=Function.createDelegate(this,this._getName$p$0);
		this.$$d__getId$p$0=Function.createDelegate(this,this._getId$p$0);
		this._data$p$0=data;
		$h.InitialData._defineReadOnlyProperty$i(this,"id",this.$$d__getId$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"name",this.$$d__getName$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"contentType",this.$$d__getContentType$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"size",this.$$d__getSize$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"attachmentType",this.$$d__getAttachmentType$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"isInline",this.$$d__getIsInline$p$0)
	};
	$h.AttachmentDetails.prototype={
		_data$p$0: null,
		_getId$p$0: function()
		{
			return this._data$p$0["id"]
		},
		_getName$p$0: function()
		{
			return this._data$p$0["name"]
		},
		_getContentType$p$0: function()
		{
			return this._data$p$0["contentType"]
		},
		_getSize$p$0: function()
		{
			return this._data$p$0["size"]
		},
		_getAttachmentType$p$0: function()
		{
			var response=this._data$p$0["attachmentType"];
			return response < $h.AttachmentDetails._attachmentTypeMap$p["length"] ? $h.AttachmentDetails._attachmentTypeMap$p[response] : window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["AttachmentType"]["File"]
		},
		_getIsInline$p$0: function()
		{
			return this._data$p$0["isInline"]
		}
	};
	$h.Body=function(){};
	$h.Body._tryMapToHostCoercionType$i=function(coercionType, hostCoercionType)
	{
		hostCoercionType.val=undefined;
		if(coercionType===window["Microsoft"]["Office"]["WebExtension"]["CoercionType"]["Html"])
			hostCoercionType.val=3;
		else if(coercionType===window["Microsoft"]["Office"]["WebExtension"]["CoercionType"]["Text"])
			hostCoercionType.val=0;
		else
			return false;
		return true
	};
	$h.Body.prototype.getAsync=function(coercionType)
	{
		var args=[];
		for(var $$pai_7=1; $$pai_7 < arguments["length"];++$$pai_7)
			args[$$pai_7 - 1]=arguments[$$pai_7];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"body.getAsync");
		var commonParameters=$h.CommonParameters.parse(args,true);
		var hostCoercionType;
		var $$t_5,
			$$t_6;
		if(!($$t_6=$h.Body._tryMapToHostCoercionType$i(coercionType,$$t_5={val: hostCoercionType}),hostCoercionType=$$t_5["val"],$$t_6))
			throw Error.argument("coercionType");
		var dataToHost={coercionType: hostCoercionType};
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(37,dataToHost,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.ComposeBody=function()
	{
		$h.ComposeBody.initializeBase(this)
	};
	$h.ComposeBody._createParameterDictionaryToHost$i=function(data, parameters)
	{
		var dataToHost={data: data};
		if(parameters._options$p$0 && !$h.ScriptHelpers.isNull(parameters._options$p$0["coercionType"]))
		{
			var hostCoercionType;
			var $$t_4,
				$$t_5;
			if(!($$t_5=$h.Body._tryMapToHostCoercionType$i(parameters._options$p$0["coercionType"],$$t_4={val: hostCoercionType}),hostCoercionType=$$t_4["val"],$$t_5))
			{
				if(parameters._callback$p$0)
					parameters._callback$p$0(window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(null,1,1e3,parameters._asyncContext$p$0,null));
				return null
			}
			dataToHost["coercionType"]=hostCoercionType
		}
		else
			dataToHost["coercionType"]=0;
		return dataToHost
	};
	$h.ComposeBody.prototype.getTypeAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"body.getTypeAsync");
		var parameters=$h.CommonParameters.parse(args,true);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(14,null,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeBody.prototype.setSelectedDataAsync=function(data)
	{
		var args=[];
		for(var $$pai_4=1; $$pai_4 < arguments["length"];++$$pai_4)
			args[$$pai_4 - 1]=arguments[$$pai_4];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"body.setSelectedDataAsync");
		var parameters=$h.CommonParameters.parse(args,false);
		if(!String.isInstanceOfType(data))
			throw Error.argumentType("data",Object["getType"](data),String);
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(data["length"],0,1e6,"data");
		var dataToHost=$h.ComposeBody._createParameterDictionaryToHost$i(data,parameters);
		if(!dataToHost)
			return;
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(13,dataToHost,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeBody.prototype.prependAsync=function(data)
	{
		var args=[];
		for(var $$pai_4=1; $$pai_4 < arguments["length"];++$$pai_4)
			args[$$pai_4 - 1]=arguments[$$pai_4];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"body.prependAsync");
		var parameters=$h.CommonParameters.parse(args,false);
		if(!String.isInstanceOfType(data))
			throw Error.argumentType("data",Object["getType"](data),String);
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(data["length"],0,1e6,"data");
		var dataToHost=$h.ComposeBody._createParameterDictionaryToHost$i(data,parameters);
		if(!dataToHost)
			return;
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(23,dataToHost,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeBody.prototype.setAsync=function(data)
	{
		var args=[];
		for(var $$pai_4=1; $$pai_4 < arguments["length"];++$$pai_4)
			args[$$pai_4 - 1]=arguments[$$pai_4];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"body.setAsync");
		var parameters=$h.CommonParameters.parse(args,false);
		if(!String.isInstanceOfType(data))
			throw Error.argumentType("data",Object["getType"](data),String);
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(data["length"],0,1e6,"data");
		var dataToHost=$h.ComposeBody._createParameterDictionaryToHost$i(data,parameters);
		if(!dataToHost)
			return;
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(38,dataToHost,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeItem=function(data)
	{
		this.$$d__getBody$p$1=Function.createDelegate(this,this._getBody$p$1);
		this.$$d__getSubject$p$1=Function.createDelegate(this,this._getSubject$p$1);
		$h.ComposeItem.initializeBase(this,[data]);
		$h.InitialData._defineReadOnlyProperty$i(this,"subject",this.$$d__getSubject$p$1);
		$h.InitialData._defineReadOnlyProperty$i(this,"body",this.$$d__getBody$p$1)
	};
	$h.ComposeItem.prototype={
		_subject$p$1: null,
		_body$p$1: null,
		_getBody$p$1: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._body$p$1)
				this._body$p$1=new $h.ComposeBody;
			return this._body$p$1
		},
		_getSubject$p$1: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._subject$p$1)
				this._subject$p$1=new $h.ComposeSubject;
			return this._subject$p$1
		}
	};
	$h.ComposeItem.prototype.addFileAttachmentAsync=function(uri, attachmentName)
	{
		var args=[];
		for(var $$pai_5=2; $$pai_5 < arguments["length"];++$$pai_5)
			args[$$pai_5 - 2]=arguments[$$pai_5];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"addFileAttachmentAsync");
		if(!$h.ScriptHelpers.isNonEmptyString(uri))
			throw Error.argument("uri");
		if(!$h.ScriptHelpers.isNonEmptyString(attachmentName))
			throw Error.argument("attachmentName");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(uri["length"],0,2048,"uri");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(attachmentName["length"],0,255,"attachmentName");
		var commonParameters=$h.CommonParameters.parse(args,false);
		var parameters={
				uri: uri,
				name: attachmentName,
				__timeout__: 6e5
			};
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(16,parameters,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.ComposeItem.prototype.addItemAttachmentAsync=function(itemId, attachmentName)
	{
		var args=[];
		for(var $$pai_5=2; $$pai_5 < arguments["length"];++$$pai_5)
			args[$$pai_5 - 2]=arguments[$$pai_5];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"addItemAttachmentAsync");
		if(!$h.ScriptHelpers.isNonEmptyString(itemId))
			throw Error.argument("itemId");
		if(!$h.ScriptHelpers.isNonEmptyString(attachmentName))
			throw Error.argument("attachmentName");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(itemId["length"],0,200,"itemId");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(attachmentName["length"],0,255,"attachmentName");
		var commonParameters=$h.CommonParameters.parse(args,false);
		var parameters={
				itemId: window["OSF"]["DDA"]["OutlookAppOm"].getItemIdBasedOnHost(itemId),
				name: attachmentName,
				__timeout__: 6e5
			};
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(19,parameters,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.ComposeItem.prototype.removeAttachmentAsync=function(attachmentId)
	{
		var args=[];
		for(var $$pai_3=1; $$pai_3 < arguments["length"];++$$pai_3)
			args[$$pai_3 - 1]=arguments[$$pai_3];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"removeAttachmentAsync");
		if(!$h.ScriptHelpers.isNonEmptyString(attachmentId))
			throw Error.argument("attachmentId");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(attachmentId["length"],0,200,"attachmentId");
		var commonParameters=$h.CommonParameters.parse(args,false);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(20,{attachmentIndex: attachmentId},null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.ComposeItem.prototype.getSelectedDataAsync=function(coercionType)
	{
		var args=[];
		for(var $$pai_7=1; $$pai_7 < arguments["length"];++$$pai_7)
			args[$$pai_7 - 1]=arguments[$$pai_7];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"getSelectedDataAsync");
		var commonParameters=$h.CommonParameters.parse(args,true);
		var hostCoercionType;
		var $$t_5,
			$$t_6;
		if(coercionType !==window["Microsoft"]["Office"]["WebExtension"]["CoercionType"]["Html"] && coercionType !==window["Microsoft"]["Office"]["WebExtension"]["CoercionType"]["Text"] || !($$t_6=$h.Body._tryMapToHostCoercionType$i(coercionType,$$t_5={val: hostCoercionType}),hostCoercionType=$$t_5["val"],$$t_6))
			throw Error.argument("coercionType");
		var dataToHost={coercionType: hostCoercionType};
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(28,dataToHost,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.ComposeItem.prototype.setSelectedDataAsync=function(data)
	{
		var args=[];
		for(var $$pai_4=1; $$pai_4 < arguments["length"];++$$pai_4)
			args[$$pai_4 - 1]=arguments[$$pai_4];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"setSelectedDataAsync");
		var parameters=$h.CommonParameters.parse(args,false);
		if(!String.isInstanceOfType(data))
			throw Error.argumentType("data",Object["getType"](data),String);
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(data["length"],0,1e6,"data");
		var dataToHost=$h.ComposeBody._createParameterDictionaryToHost$i(data,parameters);
		if(!dataToHost)
			return;
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(29,dataToHost,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeItem.prototype.close=function()
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(41,null,null,null,null)
	};
	$h.ComposeItem.prototype.saveAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"saveAsync");
		var parameters=$h.CommonParameters.parse(args,false);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(32,null,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeRecipient=function(type, propertyName)
	{
		this._type$p$0=type;
		this._propertyName$p$0=propertyName
	};
	$h.ComposeRecipient._throwOnInvalidDisplayNameOrEmail$p=function(displayName, emailAddress)
	{
		if(!displayName && !emailAddress)
			throw Error.argument("recipients");
		if(displayName && displayName["length"] > 255)
			throw Error.argumentOutOfRange("recipients",displayName["length"],window["_u"]["ExtensibilityStrings"]["l_DisplayNameTooLong_Text"]);
		if(emailAddress && emailAddress["length"] > 571)
			throw Error.argumentOutOfRange("recipients",emailAddress["length"],window["_u"]["ExtensibilityStrings"]["l_EmailAddressTooLong_Text"]);
	};
	$h.ComposeRecipient._getAsyncFormatter$p=function(rawInput)
	{
		var input=rawInput;
		var output=[];
		for(var i=0; i < input["length"]; i++)
		{
			var email=new $h.EmailAddressDetails(input[i]);
			output[i]=email
		}
		return output
	};
	$h.ComposeRecipient._createEmailDictionaryForHost$p=function(address, name)
	{
		return{
				address: address,
				name: name
			}
	};
	$h.ComposeRecipient.prototype={
		_propertyName$p$0: null,
		_type$p$0: 0,
		setAddHelper: function(recipients, args, isSet)
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(recipients["length"],0,100,"recipients");
			var parameters=$h.CommonParameters.parse(args,false);
			var recipientData=[];
			if(Array.isInstanceOfType(recipients))
				for(var i=0; i < recipients["length"]; i++)
					if(String.isInstanceOfType(recipients[i]))
					{
						$h.ComposeRecipient._throwOnInvalidDisplayNameOrEmail$p(recipients[i],recipients[i]);
						recipientData[i]=$h.ComposeRecipient._createEmailDictionaryForHost$p(recipients[i],recipients[i])
					}
					else if($h.EmailAddressDetails.isInstanceOfType(recipients[i]))
					{
						var address=recipients[i];
						$h.ComposeRecipient._throwOnInvalidDisplayNameOrEmail$p(address["displayName"],address["emailAddress"]);
						recipientData[i]=$h.ComposeRecipient._createEmailDictionaryForHost$p(address["emailAddress"],address["displayName"])
					}
					else if(Object.isInstanceOfType(recipients[i]))
					{
						var input=recipients[i];
						var emailAddress=input["emailAddress"];
						var displayName=input["displayName"];
						$h.ComposeRecipient._throwOnInvalidDisplayNameOrEmail$p(displayName,emailAddress);
						recipientData[i]=$h.ComposeRecipient._createEmailDictionaryForHost$p(emailAddress,displayName)
					}
					else
						throw Error.argument("recipients");
			else
				throw Error.argument("recipients");
			var $$t_B=this;
			window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(isSet ? 21 : 22,{
				recipientField: this._type$p$0,
				recipientArray: recipientData
			},function(rawInput)
			{
				return rawInput
			},parameters._asyncContext$p$0,parameters._callback$p$0)
		}
	};
	$h.ComposeRecipient.prototype.getAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		var parameters=$h.CommonParameters.parse(args,true);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,this._propertyName$p$0+".getAsync");
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(15,{recipientField: this._type$p$0},$h.ComposeRecipient._getAsyncFormatter$p,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeRecipient.prototype.setAsync=function(recipients)
	{
		var args=[];
		for(var $$pai_2=1; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2 - 1]=arguments[$$pai_2];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,this._propertyName$p$0+".setAsync");
		this.setAddHelper(recipients,args,true)
	};
	$h.ComposeRecipient.prototype.addAsync=function(recipients)
	{
		var args=[];
		for(var $$pai_2=1; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2 - 1]=arguments[$$pai_2];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,this._propertyName$p$0+".addAsync");
		this.setAddHelper(recipients,args,false)
	};
	$h.ComposeRecipient.RecipientField=function(){};
	$h.ComposeRecipient.RecipientField.prototype={
		to: 0,
		cc: 1,
		bcc: 2,
		requiredAttendees: 0,
		optionalAttendees: 1
	};
	$h.ComposeRecipient.RecipientField.registerEnum("$h.ComposeRecipient.RecipientField",false);
	$h.ComposeLocation=function(){};
	$h.ComposeLocation.prototype.getAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"location.getAsync");
		var parameters=$h.CommonParameters.parse(args,true);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(26,null,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeLocation.prototype.setAsync=function(location)
	{
		var args=[];
		for(var $$pai_3=1; $$pai_3 < arguments["length"];++$$pai_3)
			args[$$pai_3 - 1]=arguments[$$pai_3];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"location.setAsync");
		var parameters=$h.CommonParameters.parse(args,false);
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(location["length"],0,255,"location");
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(27,{location: location},null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeSubject=function(){};
	$h.ComposeSubject.prototype.getAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		var parameters=$h.CommonParameters.parse(args,true);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"subject.getAsync");
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(18,null,null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeSubject.prototype.setAsync=function(data)
	{
		var args=[];
		for(var $$pai_3=1; $$pai_3 < arguments["length"];++$$pai_3)
			args[$$pai_3 - 1]=arguments[$$pai_3];
		var parameters=$h.CommonParameters.parse(args,false);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,"subject.setAsync");
		if(!String.isInstanceOfType(data))
			throw Error.argument("data");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(data["length"],0,255,"data");
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(17,{subject: data},null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeTime=function(type)
	{
		this.$$d__ticksToDateFormatter$p$0=Function.createDelegate(this,this._ticksToDateFormatter$p$0);
		this._timeType$p$0=type
	};
	$h.ComposeTime.prototype={
		_timeType$p$0: 0,
		_ticksToDateFormatter$p$0: function(rawInput)
		{
			var ticks=rawInput;
			return new Date(ticks)
		},
		_getPropertyName$p$0: function()
		{
			return this._timeType$p$0===1 ? "start" : "end"
		}
	};
	$h.ComposeTime.prototype.getAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,this._getPropertyName$p$0()+".getAsync");
		var parameters=$h.CommonParameters.parse(args,true);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(24,{TimeProperty: this._timeType$p$0},this.$$d__ticksToDateFormatter$p$0,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeTime.prototype.setAsync=function(dateTime)
	{
		var args=[];
		for(var $$pai_3=1; $$pai_3 < arguments["length"];++$$pai_3)
			args[$$pai_3 - 1]=arguments[$$pai_3];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(2,this._getPropertyName$p$0()+".setAsync");
		if(!Date.isInstanceOfType(dateTime))
			throw Error.argumentType("dateTime",Object["getType"](dateTime),Date);
		if(window["isNaN"](dateTime["getTime"]()))
			throw Error.argument("dateTime");
		if(dateTime["getTime"]() < -864e13 || dateTime["getTime"]() > 864e13)
			throw Error.argumentOutOfRange("dateTime");
		var parameters=$h.CommonParameters.parse(args,false);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(25,{
			TimeProperty: this._timeType$p$0,
			time: dateTime["getTime"]()
		},null,parameters._asyncContext$p$0,parameters._callback$p$0)
	};
	$h.ComposeTime.TimeType=function(){};
	$h.ComposeTime.TimeType.prototype={
		start: 1,
		end: 2
	};
	$h.ComposeTime.TimeType.registerEnum("$h.ComposeTime.TimeType",false);
	$h.Contact=function(data)
	{
		this.$$d__getContactString$p$0=Function.createDelegate(this,this._getContactString$p$0);
		this.$$d__getAddresses$p$0=Function.createDelegate(this,this._getAddresses$p$0);
		this.$$d__getUrls$p$0=Function.createDelegate(this,this._getUrls$p$0);
		this.$$d__getEmailAddresses$p$0=Function.createDelegate(this,this._getEmailAddresses$p$0);
		this.$$d__getPhoneNumbers$p$0=Function.createDelegate(this,this._getPhoneNumbers$p$0);
		this.$$d__getBusinessName$p$0=Function.createDelegate(this,this._getBusinessName$p$0);
		this.$$d__getPersonName$p$0=Function.createDelegate(this,this._getPersonName$p$0);
		this._data$p$0=data;
		$h.InitialData._defineReadOnlyProperty$i(this,"personName",this.$$d__getPersonName$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"businessName",this.$$d__getBusinessName$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"phoneNumbers",this.$$d__getPhoneNumbers$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"emailAddresses",this.$$d__getEmailAddresses$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"urls",this.$$d__getUrls$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"addresses",this.$$d__getAddresses$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"contactString",this.$$d__getContactString$p$0)
	};
	$h.Contact.prototype={
		_data$p$0: null,
		_phoneNumbers$p$0: null,
		_getPersonName$p$0: function()
		{
			return this._data$p$0["PersonName"]
		},
		_getBusinessName$p$0: function()
		{
			return this._data$p$0["BusinessName"]
		},
		_getAddresses$p$0: function()
		{
			return $h.Entities._getExtractedStringProperty$i(this._data$p$0,"Addresses")
		},
		_getEmailAddresses$p$0: function()
		{
			return $h.Entities._getExtractedStringProperty$i(this._data$p$0,"EmailAddresses")
		},
		_getUrls$p$0: function()
		{
			return $h.Entities._getExtractedStringProperty$i(this._data$p$0,"Urls")
		},
		_getPhoneNumbers$p$0: function()
		{
			if(!this._phoneNumbers$p$0)
			{
				var $$t_1=this;
				this._phoneNumbers$p$0=$h.Entities._getExtractedObjects$i($h.PhoneNumber,this._data$p$0,"PhoneNumbers",function(data)
				{
					return new $h.PhoneNumber(data)
				})
			}
			return this._phoneNumbers$p$0
		},
		_getContactString$p$0: function()
		{
			return this._data$p$0["ContactString"]
		}
	};
	$h.CustomProperties=function(data)
	{
		if($h.ScriptHelpers.isNullOrUndefined(data))
			throw Error.argumentNull("data");
		if(Array.isInstanceOfType(data))
		{
			var customPropertiesArray=data;
			if(customPropertiesArray["length"] > 0)
				this._data$p$0=customPropertiesArray[0];
			else
				throw Error.argument("data");
		}
		else
			this._data$p$0=data
	};
	$h.CustomProperties.prototype={_data$p$0: null};
	$h.CustomProperties.prototype.get=function(name)
	{
		var value=this._data$p$0[name];
		if(typeof value==="string")
		{
			var valueString=value;
			if(valueString["length"] > 6 && valueString.startsWith("Date(") && valueString.endsWith(")"))
			{
				var ticksString=valueString["substring"](5,valueString["length"] - 1);
				var ticks=window["parseInt"](ticksString);
				if(!window["isNaN"](ticks))
				{
					var dateTimeValue=new Date(ticks);
					if(dateTimeValue)
						value=dateTimeValue
				}
			}
		}
		return value
	};
	$h.CustomProperties.prototype.set=function(name, value)
	{
		if(window["OSF"]["OUtil"]["isDate"](value))
			value="Date("+value["getTime"]()+")";
		this._data$p$0[name]=value
	};
	$h.CustomProperties.prototype.remove=function(name)
	{
		delete this._data$p$0[name]
	};
	$h.CustomProperties.prototype.saveAsync=function()
	{
		var args=[];
		for(var $$pai_4=0; $$pai_4 < arguments["length"];++$$pai_4)
			args[$$pai_4]=arguments[$$pai_4];
		var MaxCustomPropertiesLength=2500;
		if(window["JSON"]["stringify"](this._data$p$0)["length"] > MaxCustomPropertiesLength)
			throw Error.argument();
		var parameters=$h.CommonParameters.parse(args,false,true);
		var saveCustomProperties=new $h.SaveDictionaryRequest(parameters._callback$p$0,parameters._asyncContext$p$0);
		saveCustomProperties._sendRequest$i$0(4,"SaveCustomProperties",{customProperties: this._data$p$0})
	};
	$h.Diagnostics=function(data, appName)
	{
		this.$$d__getOwaView$p$0=Function.createDelegate(this,this._getOwaView$p$0);
		this.$$d__getHostVersion$p$0=Function.createDelegate(this,this._getHostVersion$p$0);
		this.$$d__getHostName$p$0=Function.createDelegate(this,this._getHostName$p$0);
		this._data$p$0=data;
		this._appName$p$0=appName;
		$h.InitialData._defineReadOnlyProperty$i(this,"hostName",this.$$d__getHostName$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"hostVersion",this.$$d__getHostVersion$p$0);
		if(64===this._appName$p$0)
			$h.InitialData._defineReadOnlyProperty$i(this,"OWAView",this.$$d__getOwaView$p$0)
	};
	$h.Diagnostics.prototype={
		_data$p$0: null,
		_appName$p$0: 0,
		_getHostName$p$0: function()
		{
			if(8===this._appName$p$0)
				return"Outlook";
			else if(64===this._appName$p$0)
				return"OutlookWebApp";
			return null
		},
		_getHostVersion$p$0: function()
		{
			return this._data$p$0.get__hostVersion$i$0()
		},
		_getOwaView$p$0: function()
		{
			return this._data$p$0.get__owaView$i$0()
		}
	};
	$h.EmailAddressDetails=function(data)
	{
		this.$$d__getRecipientType$p$0=Function.createDelegate(this,this._getRecipientType$p$0);
		this.$$d__getAppointmentResponse$p$0=Function.createDelegate(this,this._getAppointmentResponse$p$0);
		this.$$d__getDisplayName$p$0=Function.createDelegate(this,this._getDisplayName$p$0);
		this.$$d__getEmailAddress$p$0=Function.createDelegate(this,this._getEmailAddress$p$0);
		this._data$p$0=data;
		$h.InitialData._defineReadOnlyProperty$i(this,"emailAddress",this.$$d__getEmailAddress$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"displayName",this.$$d__getDisplayName$p$0);
		if($h.ScriptHelpers.dictionaryContainsKey(data,"appointmentResponse"))
			$h.InitialData._defineReadOnlyProperty$i(this,"appointmentResponse",this.$$d__getAppointmentResponse$p$0);
		if($h.ScriptHelpers.dictionaryContainsKey(data,"recipientType"))
			$h.InitialData._defineReadOnlyProperty$i(this,"recipientType",this.$$d__getRecipientType$p$0)
	};
	$h.EmailAddressDetails._createFromEmailUserDictionary$i=function(data)
	{
		var emailAddressDetailsDictionary={};
		var displayName=data["Name"];
		var emailAddress=data["UserId"];
		emailAddressDetailsDictionary["name"]=displayName || $h.EmailAddressDetails._emptyString$p;
		emailAddressDetailsDictionary["address"]=emailAddress || $h.EmailAddressDetails._emptyString$p;
		return new $h.EmailAddressDetails(emailAddressDetailsDictionary)
	};
	$h.EmailAddressDetails.prototype={
		_data$p$0: null,
		_getEmailAddress$p$0: function()
		{
			return this._data$p$0["address"]
		},
		_getDisplayName$p$0: function()
		{
			return this._data$p$0["name"]
		},
		_getAppointmentResponse$p$0: function()
		{
			var response=this._data$p$0["appointmentResponse"];
			return response < $h.EmailAddressDetails._responseTypeMap$p["length"] ? $h.EmailAddressDetails._responseTypeMap$p[response] : window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ResponseType"]["None"]
		},
		_getRecipientType$p$0: function()
		{
			var response=this._data$p$0["recipientType"];
			return response < $h.EmailAddressDetails._recipientTypeMap$p["length"] ? $h.EmailAddressDetails._recipientTypeMap$p[response] : window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RecipientType"]["Other"]
		}
	};
	$h.EmailAddressDetails.prototype.toJSON=function()
	{
		var result={};
		result["emailAddress"]=this._getEmailAddress$p$0();
		result["displayName"]=this._getDisplayName$p$0();
		if($h.ScriptHelpers.dictionaryContainsKey(this._data$p$0,"appointmentResponse"))
			result["appointmentResponse"]=this._getAppointmentResponse$p$0();
		if($h.ScriptHelpers.dictionaryContainsKey(this._data$p$0,"recipientType"))
			result["recipientType"]=this._getRecipientType$p$0();
		return result
	};
	$h.Entities=function(data, filteredEntitiesData, timeSent, permissionLevel)
	{
		this.$$d__createMeetingSuggestion$p$0=Function.createDelegate(this,this._createMeetingSuggestion$p$0);
		this.$$d__getParcelDeliveries$p$0=Function.createDelegate(this,this._getParcelDeliveries$p$0);
		this.$$d__getFlightReservations$p$0=Function.createDelegate(this,this._getFlightReservations$p$0);
		this.$$d__getContacts$p$0=Function.createDelegate(this,this._getContacts$p$0);
		this.$$d__getPhoneNumbers$p$0=Function.createDelegate(this,this._getPhoneNumbers$p$0);
		this.$$d__getUrls$p$0=Function.createDelegate(this,this._getUrls$p$0);
		this.$$d__getEmailAddresses$p$0=Function.createDelegate(this,this._getEmailAddresses$p$0);
		this.$$d__getMeetingSuggestions$p$0=Function.createDelegate(this,this._getMeetingSuggestions$p$0);
		this.$$d__getTaskSuggestions$p$0=Function.createDelegate(this,this._getTaskSuggestions$p$0);
		this.$$d__getAddresses$p$0=Function.createDelegate(this,this._getAddresses$p$0);
		this._data$p$0=data || {};
		this._filteredData$p$0=filteredEntitiesData || {};
		this._dateTimeSent$p$0=timeSent;
		$h.InitialData._defineReadOnlyProperty$i(this,"addresses",this.$$d__getAddresses$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"taskSuggestions",this.$$d__getTaskSuggestions$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"meetingSuggestions",this.$$d__getMeetingSuggestions$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"emailAddresses",this.$$d__getEmailAddresses$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"urls",this.$$d__getUrls$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"phoneNumbers",this.$$d__getPhoneNumbers$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"contacts",this.$$d__getContacts$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"flightReservations",this.$$d__getFlightReservations$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"parcelDeliveries",this.$$d__getParcelDeliveries$p$0);
		this._permissionLevel$p$0=permissionLevel
	};
	$h.Entities._getExtractedObjects$i=function(T, data, name, creator, removeDuplicates, stringPropertyName)
	{
		var results=null;
		var extractedObjects=data[name];
		if(!extractedObjects)
			return new Array(0);
		if(removeDuplicates)
			extractedObjects=$h.Entities._removeDuplicate$p(Object,extractedObjects,$h.Entities._entityDictionaryEquals$p,stringPropertyName);
		results=new Array(extractedObjects["length"]);
		var count=0;
		for(var $$arr_9=extractedObjects, $$len_A=$$arr_9["length"], $$idx_B=0; $$idx_B < $$len_A;++$$idx_B)
		{
			var extractedObject=$$arr_9[$$idx_B];
			if(creator)
				results[count++]=creator(extractedObject);
			else
				results[count++]=extractedObject
		}
		return results
	};
	$h.Entities._getExtractedStringProperty$i=function(data, name, removeDuplicate)
	{
		var extractedProperties=data[name];
		if(!extractedProperties)
			return new Array(0);
		if(removeDuplicate)
			extractedProperties=$h.Entities._removeDuplicate$p(String,extractedProperties,$h.Entities._stringEquals$p,null);
		return extractedProperties
	};
	$h.Entities._createContact$p=function(data)
	{
		return new $h.Contact(data)
	};
	$h.Entities._createTaskSuggestion$p=function(data)
	{
		return new $h.TaskSuggestion(data)
	};
	$h.Entities._createPhoneNumber$p=function(data)
	{
		return new $h.PhoneNumber(data)
	};
	$h.Entities._entityDictionaryEquals$p=function(dictionary1, dictionary2, entityPropertyIdentifier)
	{
		if(dictionary1===dictionary2)
			return true;
		if(!dictionary1 || !dictionary2)
			return false;
		if(dictionary1[entityPropertyIdentifier]===dictionary2[entityPropertyIdentifier])
			return true;
		return false
	};
	$h.Entities._stringEquals$p=function(string1, string2, entityProperty)
	{
		return string1===string2
	};
	$h.Entities._removeDuplicate$p=function(T, array, entityEquals, entityPropertyIdentifier)
	{
		for(var matchIndex1=array["length"] - 1; matchIndex1 >=0; matchIndex1--)
		{
			var removeMatch=false;
			for(var matchIndex2=matchIndex1 - 1; matchIndex2 >=0; matchIndex2--)
				if(entityEquals(array[matchIndex1],array[matchIndex2],entityPropertyIdentifier))
				{
					removeMatch=true;
					break
				}
			if(removeMatch)
				Array.removeAt(array,matchIndex1)
		}
		return array
	};
	$h.Entities.prototype={
		_dateTimeSent$p$0: null,
		_data$p$0: null,
		_filteredData$p$0: null,
		_filteredEntitiesCache$p$0: null,
		_permissionLevel$p$0: 0,
		_taskSuggestions$p$0: null,
		_meetingSuggestions$p$0: null,
		_phoneNumbers$p$0: null,
		_contacts$p$0: null,
		_addresses$p$0: null,
		_emailAddresses$p$0: null,
		_urls$p$0: null,
		_flightReservations$p$0: null,
		_parcelDeliveries$p$0: null,
		_getByType$i$0: function(entityType)
		{
			if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["MeetingSuggestion"])
				return this._getMeetingSuggestions$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["TaskSuggestion"])
				return this._getTaskSuggestions$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["Address"])
				return this._getAddresses$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["PhoneNumber"])
				return this._getPhoneNumbers$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["EmailAddress"])
				return this._getEmailAddresses$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["Url"])
				return this._getUrls$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["Contact"])
				return this._getContacts$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["FlightReservations"])
				return this._getFlightReservations$p$0();
			else if(entityType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["EntityType"]["ParcelDeliveries"])
				return this._getParcelDeliveries$p$0();
			return null
		},
		_getFilteredEntitiesByName$i$0: function(name)
		{
			if(!this._filteredEntitiesCache$p$0)
				this._filteredEntitiesCache$p$0={};
			if(!$h.ScriptHelpers.dictionaryContainsKey(this._filteredEntitiesCache$p$0,name))
			{
				var found=false;
				for(var i=0; i < $h.Entities._allEntityKeys$p["length"]; i++)
				{
					var entityTypeKey=$h.Entities._allEntityKeys$p[i];
					var perEntityTypeDictionary=this._filteredData$p$0[entityTypeKey];
					if(!perEntityTypeDictionary)
						continue;
					if($h.ScriptHelpers.dictionaryContainsKey(perEntityTypeDictionary,name))
					{
						switch(entityTypeKey)
						{
							case"EmailAddresses":
							case"Urls":
								this._filteredEntitiesCache$p$0[name]=$h.Entities._getExtractedStringProperty$i(perEntityTypeDictionary,name);
								break;
							case"Addresses":
								this._filteredEntitiesCache$p$0[name]=$h.Entities._getExtractedStringProperty$i(perEntityTypeDictionary,name,true);
								break;
							case"PhoneNumbers":
								this._filteredEntitiesCache$p$0[name]=$h.Entities._getExtractedObjects$i($h.PhoneNumber,perEntityTypeDictionary,name,$h.Entities._createPhoneNumber$p,false,null);
								break;
							case"TaskSuggestions":
								this._filteredEntitiesCache$p$0[name]=$h.Entities._getExtractedObjects$i($h.TaskSuggestion,perEntityTypeDictionary,name,$h.Entities._createTaskSuggestion$p,true,"TaskString");
								break;
							case"MeetingSuggestions":
								this._filteredEntitiesCache$p$0[name]=$h.Entities._getExtractedObjects$i($h.MeetingSuggestion,perEntityTypeDictionary,name,this.$$d__createMeetingSuggestion$p$0,true,"MeetingString");
								break;
							case"Contacts":
								this._filteredEntitiesCache$p$0[name]=$h.Entities._getExtractedObjects$i($h.Contact,perEntityTypeDictionary,name,$h.Entities._createContact$p,true,"ContactString");
								break
						}
						found=true;
						break
					}
				}
				if(!found)
					this._filteredEntitiesCache$p$0[name]=null
			}
			return this._filteredEntitiesCache$p$0[name]
		},
		_createMeetingSuggestion$p$0: function(data)
		{
			return new $h.MeetingSuggestion(data,this._dateTimeSent$p$0)
		},
		_getAddresses$p$0: function()
		{
			if(!this._addresses$p$0)
				this._addresses$p$0=$h.Entities._getExtractedStringProperty$i(this._data$p$0,"Addresses",true);
			return this._addresses$p$0
		},
		_getEmailAddresses$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._permissionLevel$p$0);
			if(!this._emailAddresses$p$0)
				this._emailAddresses$p$0=$h.Entities._getExtractedStringProperty$i(this._data$p$0,"EmailAddresses",false);
			return this._emailAddresses$p$0
		},
		_getUrls$p$0: function()
		{
			if(!this._urls$p$0)
				this._urls$p$0=$h.Entities._getExtractedStringProperty$i(this._data$p$0,"Urls",false);
			return this._urls$p$0
		},
		_getPhoneNumbers$p$0: function()
		{
			if(!this._phoneNumbers$p$0)
				this._phoneNumbers$p$0=$h.Entities._getExtractedObjects$i($h.PhoneNumber,this._data$p$0,"PhoneNumbers",$h.Entities._createPhoneNumber$p);
			return this._phoneNumbers$p$0
		},
		_getTaskSuggestions$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._permissionLevel$p$0);
			if(!this._taskSuggestions$p$0)
				this._taskSuggestions$p$0=$h.Entities._getExtractedObjects$i($h.TaskSuggestion,this._data$p$0,"TaskSuggestions",$h.Entities._createTaskSuggestion$p,true,"TaskString");
			return this._taskSuggestions$p$0
		},
		_getMeetingSuggestions$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._permissionLevel$p$0);
			if(!this._meetingSuggestions$p$0)
				this._meetingSuggestions$p$0=$h.Entities._getExtractedObjects$i($h.MeetingSuggestion,this._data$p$0,"MeetingSuggestions",this.$$d__createMeetingSuggestion$p$0,true,"MeetingString");
			return this._meetingSuggestions$p$0
		},
		_getContacts$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._permissionLevel$p$0);
			if(!this._contacts$p$0)
				this._contacts$p$0=$h.Entities._getExtractedObjects$i($h.Contact,this._data$p$0,"Contacts",$h.Entities._createContact$p,true,"ContactString");
			return this._contacts$p$0
		},
		_getParcelDeliveries$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._permissionLevel$p$0);
			if(!this._parcelDeliveries$p$0)
				this._parcelDeliveries$p$0=$h.Entities._getExtractedObjects$i(Object,this._data$p$0,"ParcelDeliveries",null);
			return this._parcelDeliveries$p$0
		},
		_getFlightReservations$p$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._permissionLevel$p$0);
			if(!this._flightReservations$p$0)
				this._flightReservations$p$0=$h.Entities._getExtractedObjects$i(Object,this._data$p$0,"FlightReservations",null);
			return this._flightReservations$p$0
		}
	};
	$h.ReplyConstants=function(){};
	$h.AsyncConstants=function(){};
	window["Office"]["cast"]["item"]=Office.cast.item=function(){};
	window["Office"]["cast"]["item"]["toItemRead"]=function(item)
	{
		if($h.Item.isInstanceOfType(item))
			return item;
		throw Error.argumentType();
	};
	window["Office"]["cast"]["item"]["toItemCompose"]=function(item)
	{
		if($h.ComposeItem.isInstanceOfType(item))
			return item;
		throw Error.argumentType();
	};
	window["Office"]["cast"]["item"]["toMessage"]=function(item)
	{
		return window["Office"]["cast"]["item"]["toMessageRead"](item)
	};
	window["Office"]["cast"]["item"]["toMessageRead"]=function(item)
	{
		if($h.Message.isInstanceOfType(item))
			return item;
		throw Error.argumentType();
	};
	window["Office"]["cast"]["item"]["toMessageCompose"]=function(item)
	{
		if($h.MessageCompose.isInstanceOfType(item))
			return item;
		throw Error.argumentType();
	};
	window["Office"]["cast"]["item"]["toMeetingRequest"]=function(item)
	{
		if($h.MeetingRequest.isInstanceOfType(item))
			return item;
		throw Error.argumentType();
	};
	window["Office"]["cast"]["item"]["toAppointment"]=function(item)
	{
		return window["Office"]["cast"]["item"]["toAppointmentRead"](item)
	};
	window["Office"]["cast"]["item"]["toAppointmentRead"]=function(item)
	{
		if($h.Appointment.isInstanceOfType(item))
			return item;
		throw Error.argumentType();
	};
	window["Office"]["cast"]["item"]["toAppointmentCompose"]=function(item)
	{
		if($h.AppointmentCompose.isInstanceOfType(item))
			return item;
		throw Error.argumentType();
	};
	$h.Item=function(data)
	{
		this.$$d__getBody$p$1=Function.createDelegate(this,this._getBody$p$1);
		this.$$d__getAttachments$p$1=Function.createDelegate(this,this._getAttachments$p$1);
		this.$$d__getItemClass$p$1=Function.createDelegate(this,this._getItemClass$p$1);
		this.$$d__getItemId$p$1=Function.createDelegate(this,this._getItemId$p$1);
		this.$$d__getDateTimeModified$p$1=Function.createDelegate(this,this._getDateTimeModified$p$1);
		this.$$d__getDateTimeCreated$p$1=Function.createDelegate(this,this._getDateTimeCreated$p$1);
		$h.Item.initializeBase(this,[data]);
		$h.InitialData._defineReadOnlyProperty$i(this,"dateTimeCreated",this.$$d__getDateTimeCreated$p$1);
		$h.InitialData._defineReadOnlyProperty$i(this,"dateTimeModified",this.$$d__getDateTimeModified$p$1);
		$h.InitialData._defineReadOnlyProperty$i(this,"itemId",this.$$d__getItemId$p$1);
		$h.InitialData._defineReadOnlyProperty$i(this,"itemClass",this.$$d__getItemClass$p$1);
		$h.InitialData._defineReadOnlyProperty$i(this,"attachments",this.$$d__getAttachments$p$1);
		$h.InitialData._defineReadOnlyProperty$i(this,"body",this.$$d__getBody$p$1)
	};
	$h.Item.prototype={
		_body$p$1: null,
		_getItemId$p$1: function()
		{
			return this._data$p$0.get__itemId$i$0()
		},
		_getItemClass$p$1: function()
		{
			return this._data$p$0.get__itemClass$i$0()
		},
		_getDateTimeCreated$p$1: function()
		{
			return this._data$p$0.get__dateTimeCreated$i$0()
		},
		_getDateTimeModified$p$1: function()
		{
			return this._data$p$0.get__dateTimeModified$i$0()
		},
		_getAttachments$p$1: function()
		{
			return this._data$p$0.get__attachments$i$0()
		},
		_getBody$p$1: function()
		{
			if(!this._body$p$1)
				this._body$p$1=new $h.Body;
			return this._body$p$1
		}
	};
	$h.ItemBase=function(data)
	{
		this.$$d__createCustomProperties$i$0=Function.createDelegate(this,this._createCustomProperties$i$0);
		this.$$d__getNotificationMessages$p$0=Function.createDelegate(this,this._getNotificationMessages$p$0);
		this.$$d_getItemType=Function.createDelegate(this,this.getItemType);
		this._data$p$0=data;
		$h.InitialData._defineReadOnlyProperty$i(this,"itemType",this.$$d_getItemType);
		$h.InitialData._defineReadOnlyProperty$i(this,"notificationMessages",this.$$d__getNotificationMessages$p$0)
	};
	$h.ItemBase.prototype={
		_data$p$0: null,
		_notificationMessages$p$0: null,
		get_data: function()
		{
			return this._data$p$0
		},
		_createCustomProperties$i$0: function(data)
		{
			return new $h.CustomProperties(data)
		},
		_getNotificationMessages$p$0: function()
		{
			if(!this._notificationMessages$p$0)
				this._notificationMessages$p$0=new $h.NotificationMessages;
			return this._notificationMessages$p$0
		}
	};
	$h.ItemBase.prototype.loadCustomPropertiesAsync=function()
	{
		var args=[];
		for(var $$pai_3=0; $$pai_3 < arguments["length"];++$$pai_3)
			args[$$pai_3]=arguments[$$pai_3];
		var parameters=$h.CommonParameters.parse(args,true,true);
		var loadCustomProperties=new $h._loadDictionaryRequest(this.$$d__createCustomProperties$i$0,"customProperties",parameters._callback$p$0,parameters._asyncContext$p$0);
		loadCustomProperties._sendRequest$i$0(3,"LoadCustomProperties",{})
	};
	$h.MeetingRequest=function(data)
	{
		this.$$d__getRequiredAttendees$p$3=Function.createDelegate(this,this._getRequiredAttendees$p$3);
		this.$$d__getOptionalAttendees$p$3=Function.createDelegate(this,this._getOptionalAttendees$p$3);
		this.$$d__getLocation$p$3=Function.createDelegate(this,this._getLocation$p$3);
		this.$$d__getEnd$p$3=Function.createDelegate(this,this._getEnd$p$3);
		this.$$d__getStart$p$3=Function.createDelegate(this,this._getStart$p$3);
		$h.MeetingRequest.initializeBase(this,[data]);
		$h.InitialData._defineReadOnlyProperty$i(this,"start",this.$$d__getStart$p$3);
		$h.InitialData._defineReadOnlyProperty$i(this,"end",this.$$d__getEnd$p$3);
		$h.InitialData._defineReadOnlyProperty$i(this,"location",this.$$d__getLocation$p$3);
		$h.InitialData._defineReadOnlyProperty$i(this,"optionalAttendees",this.$$d__getOptionalAttendees$p$3);
		$h.InitialData._defineReadOnlyProperty$i(this,"requiredAttendees",this.$$d__getRequiredAttendees$p$3)
	};
	$h.MeetingRequest.prototype={
		_getStart$p$3: function()
		{
			return this._data$p$0.get__start$i$0()
		},
		_getEnd$p$3: function()
		{
			return this._data$p$0.get__end$i$0()
		},
		_getLocation$p$3: function()
		{
			return this._data$p$0.get__location$i$0()
		},
		_getOptionalAttendees$p$3: function()
		{
			return this._data$p$0.get__cc$i$0()
		},
		_getRequiredAttendees$p$3: function()
		{
			return this._data$p$0.get__to$i$0()
		}
	};
	$h.MeetingSuggestion=function(data, dateTimeSent)
	{
		this.$$d__getEndTime$p$0=Function.createDelegate(this,this._getEndTime$p$0);
		this.$$d__getStartTime$p$0=Function.createDelegate(this,this._getStartTime$p$0);
		this.$$d__getSubject$p$0=Function.createDelegate(this,this._getSubject$p$0);
		this.$$d__getLocation$p$0=Function.createDelegate(this,this._getLocation$p$0);
		this.$$d__getAttendees$p$0=Function.createDelegate(this,this._getAttendees$p$0);
		this.$$d__getMeetingString$p$0=Function.createDelegate(this,this._getMeetingString$p$0);
		this._data$p$0=data;
		this._dateTimeSent$p$0=dateTimeSent;
		$h.InitialData._defineReadOnlyProperty$i(this,"meetingString",this.$$d__getMeetingString$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"attendees",this.$$d__getAttendees$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"location",this.$$d__getLocation$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"subject",this.$$d__getSubject$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"start",this.$$d__getStartTime$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"end",this.$$d__getEndTime$p$0)
	};
	$h.MeetingSuggestion.prototype={
		_dateTimeSent$p$0: null,
		_data$p$0: null,
		_attendees$p$0: null,
		_getMeetingString$p$0: function()
		{
			return this._data$p$0["MeetingString"]
		},
		_getLocation$p$0: function()
		{
			return this._data$p$0["Location"]
		},
		_getSubject$p$0: function()
		{
			return this._data$p$0["Subject"]
		},
		_getStartTime$p$0: function()
		{
			var time=this._createDateTimeFromParameter$p$0("StartTime");
			var resolvedTime=$h.MeetingSuggestionTimeDecoder.resolve(time,this._dateTimeSent$p$0);
			if(resolvedTime["getTime"]() !==time["getTime"]())
				return window["OSF"]["DDA"]["OutlookAppOm"]._instance$p["convertToUtcClientTime"](window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._dateToDictionary$i$0(resolvedTime));
			return time
		},
		_getEndTime$p$0: function()
		{
			var time=this._createDateTimeFromParameter$p$0("EndTime");
			var resolvedTime=$h.MeetingSuggestionTimeDecoder.resolve(time,this._dateTimeSent$p$0);
			if(resolvedTime["getTime"]() !==time["getTime"]())
				return window["OSF"]["DDA"]["OutlookAppOm"]._instance$p["convertToUtcClientTime"](window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._dateToDictionary$i$0(resolvedTime));
			return time
		},
		_createDateTimeFromParameter$p$0: function(keyName)
		{
			var dateTimeString=this._data$p$0[keyName];
			if(!dateTimeString)
				return null;
			return new Date(dateTimeString)
		},
		_getAttendees$p$0: function()
		{
			if(!this._attendees$p$0)
			{
				var $$t_1=this;
				this._attendees$p$0=$h.Entities._getExtractedObjects$i($h.EmailAddressDetails,this._data$p$0,"Attendees",function(data)
				{
					return $h.EmailAddressDetails._createFromEmailUserDictionary$i(data)
				})
			}
			return this._attendees$p$0
		}
	};
	$h.MeetingSuggestionTimeDecoder=function(){};
	$h.MeetingSuggestionTimeDecoder.resolve=function(inTime, sentTime)
	{
		if(!sentTime)
			return inTime;
		try
		{
			var tod;
			var outDate;
			var extractedDate;
			var sentDate=new Date(sentTime["getFullYear"](),sentTime["getMonth"](),sentTime["getDate"](),0,0,0,0);
			var $$t_7,
				$$t_8,
				$$t_9;
			if(!($$t_9=$h.MeetingSuggestionTimeDecoder._decode$p(inTime,$$t_7={val: extractedDate},$$t_8={val: tod}),extractedDate=$$t_7["val"],tod=$$t_8["val"],$$t_9))
				return inTime;
			else
			{
				if($h._preciseDate.isInstanceOfType(extractedDate))
					outDate=$h.MeetingSuggestionTimeDecoder._resolvePreciseDate$p(sentDate,extractedDate);
				else if($h._relativeDate.isInstanceOfType(extractedDate))
					outDate=$h.MeetingSuggestionTimeDecoder._resolveRelativeDate$p(sentDate,extractedDate);
				else
					outDate=sentDate;
				if(window["isNaN"](outDate["getTime"]()))
					return sentTime;
				outDate["setMilliseconds"](outDate["getMilliseconds"]()+tod);
				return outDate
			}
		}
		catch($$e_6)
		{
			return sentTime
		}
	};
	$h.MeetingSuggestionTimeDecoder._isNullOrUndefined$i=function(value)
	{
		return null===value || value===undefined
	};
	$h.MeetingSuggestionTimeDecoder._resolvePreciseDate$p=function(sentDate, precise)
	{
		var year=precise._year$i$1;
		var month=!precise._month$i$1 ? sentDate["getMonth"]() : precise._month$i$1 - 1;
		var day=precise._day$i$1;
		if(!day)
			return sentDate;
		var candidate;
		if($h.MeetingSuggestionTimeDecoder._isNullOrUndefined$i(year))
		{
			candidate=new Date(sentDate["getFullYear"](),month,day);
			if(candidate["getTime"]() < sentDate["getTime"]())
				candidate=new Date(sentDate["getFullYear"]()+1,month,day)
		}
		else
			candidate=new Date(year < 50 ? 2e3+year : 1900+year,month,day);
		if(candidate["getMonth"]() !==month)
			return sentDate;
		return candidate
	};
	$h.MeetingSuggestionTimeDecoder._resolveRelativeDate$p=function(sentDate, relative)
	{
		var date;
		switch(relative._unit$i$1)
		{
			case 0:
				date=new Date(sentDate["getFullYear"](),sentDate["getMonth"](),sentDate["getDate"]());
				date["setDate"](date["getDate"]()+relative._offset$i$1);
				return date;
			case 5:
				return $h.MeetingSuggestionTimeDecoder._findBestDateForWeekDate$p(sentDate,relative._offset$i$1,relative._tag$i$1);
			case 2:
				var days=1;
				switch(relative._modifier$i$1)
				{
					case 1:
						break;
					case 2:
						days=16;
						break;
					default:
						if(!relative._offset$i$1)
							days=sentDate["getDate"]();
						break
				}
				date=new Date(sentDate["getFullYear"](),sentDate["getMonth"](),days);
				date["setMonth"](date["getMonth"]()+relative._offset$i$1);
				if(date["getTime"]() < sentDate["getTime"]())
					date["setDate"](date["getDate"]()+sentDate["getDate"]() - 1);
				return date;
			case 1:
				date=new Date(sentDate["getFullYear"](),sentDate["getMonth"](),sentDate["getDate"]());
				date["setDate"](sentDate["getDate"]()+7 * relative._offset$i$1);
				if(relative._modifier$i$1===1 || !relative._modifier$i$1)
				{
					date["setDate"](date["getDate"]()+1 - date["getDay"]());
					if(date["getTime"]() < sentDate["getTime"]())
						return sentDate;
					return date
				}
				else if(relative._modifier$i$1===2)
				{
					date["setDate"](date["getDate"]()+5 - date["getDay"]());
					return date
				}
				break;
			case 4:
				return $h.MeetingSuggestionTimeDecoder._findBestDateForWeekOfMonthDate$p(sentDate,relative);
			case 3:
				if(relative._offset$i$1 > 0)
					return new Date(sentDate["getFullYear"]()+relative._offset$i$1,0,1);
				break;
			default:
				break
		}
		return sentDate
	};
	$h.MeetingSuggestionTimeDecoder._findBestDateForWeekDate$p=function(sentDate, offset, tag)
	{
		if(offset > -5 && offset < 5)
		{
			var dayOfWeek;
			var days;
			dayOfWeek=(tag+6) % 7+1;
			days=7 * offset+(dayOfWeek - sentDate["getDay"]());
			sentDate["setDate"](sentDate["getDate"]()+days);
			return sentDate
		}
		else
		{
			var days=(tag - sentDate["getDay"]()) % 7;
			if(days < 0)
				days+=7;
			sentDate["setDate"](sentDate["getDate"]()+days);
			return sentDate
		}
	};
	$h.MeetingSuggestionTimeDecoder._findBestDateForWeekOfMonthDate$p=function(sentDate, relative)
	{
		var date;
		var firstDay;
		var newDate;
		date=sentDate;
		if(relative._tag$i$1 <=0 || relative._tag$i$1 > 12 || relative._offset$i$1 <=0 || relative._offset$i$1 > 5)
			return sentDate;
		var monthOffset=(12+relative._tag$i$1 - date["getMonth"]() - 1) % 12;
		firstDay=new Date(date["getFullYear"](),date["getMonth"]()+monthOffset,1);
		if(relative._modifier$i$1===1)
			if(relative._offset$i$1===1 && firstDay["getDay"]() !==6 && firstDay["getDay"]())
				return firstDay;
			else
			{
				newDate=new Date(firstDay["getFullYear"](),firstDay["getMonth"](),firstDay["getDate"]());
				newDate["setDate"](newDate["getDate"]()+(7+(1 - firstDay["getDay"]())) % 7);
				if(firstDay["getDay"]() !==6 && firstDay["getDay"]() && firstDay["getDay"]() !==1)
					newDate["setDate"](newDate["getDate"]() - 7);
				newDate["setDate"](newDate["getDate"]()+7 * (relative._offset$i$1 - 1));
				if(newDate["getMonth"]()+1 !==relative._tag$i$1)
					return sentDate;
				return newDate
			}
		else
		{
			newDate=new Date(firstDay["getFullYear"](),firstDay["getMonth"](),$h.MeetingSuggestionTimeDecoder._daysInMonth$p(firstDay["getMonth"](),firstDay["getFullYear"]()));
			var offset=1 - newDate["getDay"]();
			if(offset > 0)
				offset=offset - 7;
			newDate["setDate"](newDate["getDate"]()+offset);
			newDate["setDate"](newDate["getDate"]()+7 * (1 - relative._offset$i$1));
			if(newDate["getMonth"]()+1 !==relative._tag$i$1)
				if(firstDay["getDay"]() !==6 && firstDay["getDay"]())
					return firstDay;
				else
					return sentDate;
			else
				return newDate
		}
	};
	$h.MeetingSuggestionTimeDecoder._decode$p=function(inDate, date, time)
	{
		var DateValueMask=32767;
		date.val=null;
		time.val=0;
		if(!inDate)
			return false;
		time.val=$h.MeetingSuggestionTimeDecoder._getTimeOfDayInMillisecondsUTC$p(inDate);
		var inDateAtMidnight=inDate["getTime"]() - time.val;
		var value=(inDateAtMidnight - $h.MeetingSuggestionTimeDecoder._baseDate$p["getTime"]()) / 864e5;
		if(value < 0)
			return false;
		else if(value >=262144)
			return false;
		else
		{
			var type=value >> 15;
			value=value & DateValueMask;
			switch(type)
			{
				case 0:
					return $h.MeetingSuggestionTimeDecoder._decodePreciseDate$p(value,date);
				case 1:
					return $h.MeetingSuggestionTimeDecoder._decodeRelativeDate$p(value,date);
				default:
					return false
			}
		}
	};
	$h.MeetingSuggestionTimeDecoder._decodePreciseDate$p=function(value, date)
	{
		var c_SubTypeMask=7;
		var c_MonthMask=15;
		var c_DayMask=31;
		var c_YearMask=127;
		var year=null;
		var month=0;
		var day=0;
		date.val=null;
		var subType=value >> 12 & c_SubTypeMask;
		if((subType & 4)===4)
		{
			year=value >> 5 & c_YearMask;
			if((subType & 2)===2)
			{
				if((subType & 1)===1)
					return false;
				month=value >> 1 & c_MonthMask
			}
		}
		else
		{
			if((subType & 2)===2)
				month=value >> 8 & c_MonthMask;
			if((subType & 1)===1)
				day=value >> 3 & c_DayMask
		}
		date.val=new $h._preciseDate(day,month,year);
		return true
	};
	$h.MeetingSuggestionTimeDecoder._decodeRelativeDate$p=function(value, date)
	{
		var TagMask=15;
		var OffsetMask=63;
		var UnitMask=7;
		var ModifierMask=3;
		var tag=value & TagMask;
		value >>=4;
		var offset=$h.MeetingSuggestionTimeDecoder._fromComplement$p(value & OffsetMask,6);
		value >>=6;
		var unit=value & UnitMask;
		value >>=3;
		var modifier=value & ModifierMask;
		try
		{
			date.val=new $h._relativeDate(modifier,offset,unit,tag);
			return true
		}
		catch($$e_A)
		{
			date.val=null;
			return false
		}
	};
	$h.MeetingSuggestionTimeDecoder._fromComplement$p=function(value, n)
	{
		var signed=1 << n - 1;
		var mask=(1 << n) - 1;
		if((value & signed)===signed)
			return-((value ^ mask)+1);
		else
			return value
	};
	$h.MeetingSuggestionTimeDecoder._daysInMonth$p=function(month, year)
	{
		return 32 - new Date(year,month,32)["getDate"]()
	};
	$h.MeetingSuggestionTimeDecoder._getTimeOfDayInMillisecondsUTC$p=function(inputTime)
	{
		var timeOfDay=0;
		timeOfDay+=inputTime["getUTCHours"]() * 3600;
		timeOfDay+=inputTime["getUTCMinutes"]() * 60;
		timeOfDay+=inputTime["getUTCSeconds"]();
		timeOfDay *=1e3;
		timeOfDay+=inputTime["getUTCMilliseconds"]();
		return timeOfDay
	};
	$h._extractedDate=function(){};
	$h._preciseDate=function(day, month, year)
	{
		$h._preciseDate.initializeBase(this);
		if(day < 0 || day > 31)
			throw Error.argumentOutOfRange("day");
		if(month < 0 || month > 12)
			throw Error.argumentOutOfRange("month");
		this._day$i$1=day;
		this._month$i$1=month;
		if(!$h.MeetingSuggestionTimeDecoder._isNullOrUndefined$i(year))
		{
			if(!month && day)
				throw Error.argument("Invalid arguments");
			if(year < 0 || year > 2099)
				throw Error.argumentOutOfRange("year");
			this._year$i$1=year % 100
		}
		else if(!this._month$i$1 && !this._day$i$1)
			throw Error.argument("Invalid datetime");
	};
	$h._preciseDate.prototype={
		_day$i$1: 0,
		_month$i$1: 0,
		_year$i$1: null
	};
	$h._relativeDate=function(modifier, offset, unit, tag)
	{
		$h._relativeDate.initializeBase(this);
		if(offset < -32 || offset > 31)
			throw Error.argumentOutOfRange("offset");
		if(tag < 0 || tag > 15)
			throw Error.argumentOutOfRange("tag");
		if(!unit && offset < 0)
			throw Error.argument("unit & offset do not form a valid date");
		this._modifier$i$1=modifier;
		this._offset$i$1=offset;
		this._unit$i$1=unit;
		this._tag$i$1=tag
	};
	$h._relativeDate.prototype={
		_modifier$i$1: 0,
		_offset$i$1: 0,
		_unit$i$1: 0,
		_tag$i$1: 0
	};
	$h.Message=function(dataDictionary)
	{
		this.$$d__getConversationId$p$2=Function.createDelegate(this,this._getConversationId$p$2);
		this.$$d__getInternetMessageId$p$2=Function.createDelegate(this,this._getInternetMessageId$p$2);
		this.$$d__getCc$p$2=Function.createDelegate(this,this._getCc$p$2);
		this.$$d__getTo$p$2=Function.createDelegate(this,this._getTo$p$2);
		this.$$d__getFrom$p$2=Function.createDelegate(this,this._getFrom$p$2);
		this.$$d__getSender$p$2=Function.createDelegate(this,this._getSender$p$2);
		this.$$d__getNormalizedSubject$p$2=Function.createDelegate(this,this._getNormalizedSubject$p$2);
		this.$$d__getSubject$p$2=Function.createDelegate(this,this._getSubject$p$2);
		$h.Message.initializeBase(this,[dataDictionary]);
		$h.InitialData._defineReadOnlyProperty$i(this,"subject",this.$$d__getSubject$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"normalizedSubject",this.$$d__getNormalizedSubject$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"sender",this.$$d__getSender$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"from",this.$$d__getFrom$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"to",this.$$d__getTo$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"cc",this.$$d__getCc$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"internetMessageId",this.$$d__getInternetMessageId$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"conversationId",this.$$d__getConversationId$p$2)
	};
	$h.Message.prototype={
		getItemType: function()
		{
			return window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemType"]["Message"]
		},
		_getSubject$p$2: function()
		{
			return this._data$p$0.get__subject$i$0()
		},
		_getNormalizedSubject$p$2: function()
		{
			return this._data$p$0.get__normalizedSubject$i$0()
		},
		_getSender$p$2: function()
		{
			return this._data$p$0.get__sender$i$0()
		},
		_getFrom$p$2: function()
		{
			return this._data$p$0.get__from$i$0()
		},
		_getTo$p$2: function()
		{
			return this._data$p$0.get__to$i$0()
		},
		_getCc$p$2: function()
		{
			return this._data$p$0.get__cc$i$0()
		},
		_getInternetMessageId$p$2: function()
		{
			return this._data$p$0.get__internetMessageId$i$0()
		},
		_getConversationId$p$2: function()
		{
			return this._data$p$0.get__conversationId$i$0()
		}
	};
	$h.Message.prototype.getEntities=function()
	{
		return this._data$p$0._getEntities$i$0()
	};
	$h.Message.prototype.getEntitiesByType=function(entityType)
	{
		return this._data$p$0._getEntitiesByType$i$0(entityType)
	};
	$h.Message.prototype.getFilteredEntitiesByName=function(name)
	{
		return this._data$p$0._getFilteredEntitiesByName$i$0(name)
	};
	$h.Message.prototype.getRegExMatches=function()
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"getRegExMatches");
		return this._data$p$0._getRegExMatches$i$0()
	};
	$h.Message.prototype.getRegExMatchesByName=function(name)
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(1,"getRegExMatchesByName");
		return this._data$p$0._getRegExMatchesByName$i$0(name)
	};
	$h.Message.prototype.displayReplyForm=function(obj)
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._displayReplyForm$i$0(obj)
	};
	$h.Message.prototype.displayReplyAllForm=function(obj)
	{
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._displayReplyAllForm$i$0(obj)
	};
	$h.MessageCompose=function(data)
	{
		this.$$d__getConversationId$p$2=Function.createDelegate(this,this._getConversationId$p$2);
		this.$$d__getBcc$p$2=Function.createDelegate(this,this._getBcc$p$2);
		this.$$d__getCc$p$2=Function.createDelegate(this,this._getCc$p$2);
		this.$$d__getTo$p$2=Function.createDelegate(this,this._getTo$p$2);
		$h.MessageCompose.initializeBase(this,[data]);
		$h.InitialData._defineReadOnlyProperty$i(this,"to",this.$$d__getTo$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"cc",this.$$d__getCc$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"bcc",this.$$d__getBcc$p$2);
		$h.InitialData._defineReadOnlyProperty$i(this,"conversationId",this.$$d__getConversationId$p$2)
	};
	$h.MessageCompose.prototype={
		_to$p$2: null,
		_cc$p$2: null,
		_bcc$p$2: null,
		getItemType: function()
		{
			return window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemType"]["Message"]
		},
		_getTo$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._to$p$2)
				this._to$p$2=new $h.ComposeRecipient(0,"to");
			return this._to$p$2
		},
		_getCc$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._cc$p$2)
				this._cc$p$2=new $h.ComposeRecipient(1,"cc");
			return this._cc$p$2
		},
		_getBcc$p$2: function()
		{
			this._data$p$0._throwOnRestrictedPermissionLevel$i$0();
			if(!this._bcc$p$2)
				this._bcc$p$2=new $h.ComposeRecipient(2,"bcc");
			return this._bcc$p$2
		},
		_getConversationId$p$2: function()
		{
			return this._data$p$0.get__conversationId$i$0()
		}
	};
	$h.NotificationMessages=function(){};
	$h.NotificationMessages._mapToHostItemNotificationMessageType$p=function(dataToHost)
	{
		var notificationType;
		var hostItemNotificationMessageType;
		notificationType=dataToHost["type"];
		if(notificationType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemNotificationMessageType"]["ProgressIndicator"])
			hostItemNotificationMessageType=1;
		else if(notificationType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemNotificationMessageType"]["InformationalMessage"])
			hostItemNotificationMessageType=0;
		else if(notificationType===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemNotificationMessageType"]["ErrorMessage"])
			hostItemNotificationMessageType=2;
		else
			throw Error.argument("type");
		dataToHost["type"]=hostItemNotificationMessageType
	};
	$h.NotificationMessages._validateKey$p=function(key)
	{
		if(!$h.ScriptHelpers.isNonEmptyString(key))
			throw Error.argument("key");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(key["length"],0,32,"key")
	};
	$h.NotificationMessages._validateDictionary$p=function(dictionary)
	{
		if(!$h.ScriptHelpers.isNonEmptyString(dictionary["type"]))
			throw Error.argument("type");
		if(dictionary["type"]===window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ItemNotificationMessageType"]["InformationalMessage"])
		{
			if(!$h.ScriptHelpers.isNonEmptyString(dictionary["icon"]))
				throw Error.argument("icon");
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(dictionary["icon"]["length"],0,32,"icon");
			if($h.ScriptHelpers.isUndefined(dictionary["persistent"]))
				throw Error.argument("persistent");
			if(!Boolean.isInstanceOfType(dictionary["persistent"]))
				throw Error.argumentType("persistent",Object["getType"](dictionary["persistent"]),Boolean);
		}
		else
		{
			if(!$h.ScriptHelpers.isUndefined(dictionary["icon"]))
				throw Error.argument("icon");
			if(!$h.ScriptHelpers.isUndefined(dictionary["persistent"]))
				throw Error.argument("persistent");
		}
		if(!$h.ScriptHelpers.isNonEmptyString(dictionary["message"]))
			throw Error.argument("message");
		window["OSF"]["DDA"]["OutlookAppOm"]._throwOnOutOfRange$i(dictionary["message"]["length"],0,150,"message")
	};
	$h.NotificationMessages.prototype.addAsync=function(key, dictionary)
	{
		var args=[];
		for(var $$pai_5=2; $$pai_5 < arguments["length"];++$$pai_5)
			args[$$pai_5 - 2]=arguments[$$pai_5];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(0,"NotificationMessages.addAsync");
		var commonParameters=$h.CommonParameters.parse(args,false);
		$h.NotificationMessages._validateKey$p(key);
		$h.NotificationMessages._validateDictionary$p(dictionary);
		var dataToHost={};
		dataToHost=$h.ScriptHelpers.deepClone(dictionary);
		dataToHost["key"]=key;
		$h.NotificationMessages._mapToHostItemNotificationMessageType$p(dataToHost);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(33,dataToHost,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.NotificationMessages.prototype.getAllAsync=function()
	{
		var args=[];
		for(var $$pai_2=0; $$pai_2 < arguments["length"];++$$pai_2)
			args[$$pai_2]=arguments[$$pai_2];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(0,"NotificationMessages.getAllAsync");
		var commonParameters=$h.CommonParameters.parse(args,true);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(34,null,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.NotificationMessages.prototype.replaceAsync=function(key, dictionary)
	{
		var args=[];
		for(var $$pai_5=2; $$pai_5 < arguments["length"];++$$pai_5)
			args[$$pai_5 - 2]=arguments[$$pai_5];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(0,"NotificationMessages.replaceAsync");
		var commonParameters=$h.CommonParameters.parse(args,false);
		$h.NotificationMessages._validateKey$p(key);
		$h.NotificationMessages._validateDictionary$p(dictionary);
		var dataToHost={};
		dataToHost=$h.ScriptHelpers.deepClone(dictionary);
		dataToHost["key"]=key;
		$h.NotificationMessages._mapToHostItemNotificationMessageType$p(dataToHost);
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(35,dataToHost,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.NotificationMessages.prototype.removeAsync=function(key)
	{
		var args=[];
		for(var $$pai_4=1; $$pai_4 < arguments["length"];++$$pai_4)
			args[$$pai_4 - 1]=arguments[$$pai_4];
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._throwOnMethodCallForInsufficientPermission$i$0(0,"NotificationMessages.removeAsync");
		var commonParameters=$h.CommonParameters.parse(args,false);
		$h.NotificationMessages._validateKey$p(key);
		var dataToHost={key: key};
		window["OSF"]["DDA"]["OutlookAppOm"]._instance$p._standardInvokeHostMethod$i$0(36,dataToHost,null,commonParameters._asyncContext$p$0,commonParameters._callback$p$0)
	};
	$h.OutlookErrorManager=function(){};
	$h.OutlookErrorManager.getErrorArgs=function(errorCode)
	{
		if(!$h.OutlookErrorManager._isInitialized$p)
			$h.OutlookErrorManager._initialize$p();
		return OSF.DDA.ErrorCodeManager["getErrorArgs"](errorCode)
	};
	$h.OutlookErrorManager._initialize$p=function()
	{
		$h.OutlookErrorManager._addErrorMessage$p(9e3,"AttachmentSizeExceeded",window["_u"]["ExtensibilityStrings"]["l_AttachmentExceededSize_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9001,"NumberOfAttachmentsExceeded",window["_u"]["ExtensibilityStrings"]["l_ExceededMaxNumberOfAttachments_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9002,"InternalFormatError",window["_u"]["ExtensibilityStrings"]["l_InternalFormatError_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9003,"InvalidAttachmentId",window["_u"]["ExtensibilityStrings"]["l_InvalidAttachmentId_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9004,"InvalidAttachmentPath",window["_u"]["ExtensibilityStrings"]["l_InvalidAttachmentPath_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9005,"CannotAddAttachmentBeforeUpgrade",window["_u"]["ExtensibilityStrings"]["l_CannotAddAttachmentBeforeUpgrade_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9006,"AttachmentDeletedBeforeUploadCompletes",window["_u"]["ExtensibilityStrings"]["l_AttachmentDeletedBeforeUploadCompletes_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9007,"AttachmentUploadGeneralFailure",window["_u"]["ExtensibilityStrings"]["l_AttachmentUploadGeneralFailure_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9008,"AttachmentToDeleteDoesNotExist",window["_u"]["ExtensibilityStrings"]["l_DeleteAttachmentDoesNotExist_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9009,"AttachmentDeleteGeneralFailure",window["_u"]["ExtensibilityStrings"]["l_AttachmentDeleteGeneralFailure_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9010,"InvalidEndTime",window["_u"]["ExtensibilityStrings"]["l_InvalidEndTime_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9011,"HtmlSanitizationFailure",window["_u"]["ExtensibilityStrings"]["l_HtmlSanitizationFailure_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9012,"NumberOfRecipientsExceeded",String.format(window["_u"]["ExtensibilityStrings"]["l_NumberOfRecipientsExceeded_Text"],500));
		$h.OutlookErrorManager._addErrorMessage$p(9013,"NoValidRecipientsProvided",window["_u"]["ExtensibilityStrings"]["l_NoValidRecipientsProvided_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9014,"CursorPositionChanged",window["_u"]["ExtensibilityStrings"]["l_CursorPositionChanged_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9016,"InvalidSelection",window["_u"]["ExtensibilityStrings"]["l_InvalidSelection_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9017,"AccessRestricted","");
		$h.OutlookErrorManager._addErrorMessage$p(9018,"GenericTokenError","");
		$h.OutlookErrorManager._addErrorMessage$p(9019,"GenericSettingsError","");
		$h.OutlookErrorManager._addErrorMessage$p(9020,"GenericResponseError","");
		$h.OutlookErrorManager._addErrorMessage$p(9021,"SaveError",window["_u"]["ExtensibilityStrings"]["l_SaveError_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9022,"MessageInDifferentStoreError",window["_u"]["ExtensibilityStrings"]["l_MessageInDifferentStoreError_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9023,"DuplicateNotificationKey",window["_u"]["ExtensibilityStrings"]["l_DuplicateNotificationKey_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9024,"NotificationKeyNotFound",window["_u"]["ExtensibilityStrings"]["l_NotificationKeyNotFound_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9025,"NumberOfNotificationsExceeded",window["_u"]["ExtensibilityStrings"]["l_NumberOfNotificationsExceeded_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9026,"PersistedNotificationArrayReadError",window["_u"]["ExtensibilityStrings"]["l_PersistedNotificationArrayReadError_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9027,"PersistedNotificationArraySaveError",window["_u"]["ExtensibilityStrings"]["l_PersistedNotificationArraySaveError_Text"]);
		$h.OutlookErrorManager._addErrorMessage$p(9028,"CannotPersistPropertyInUnsavedDraftError",window["_u"]["ExtensibilityStrings"]["l_CannotPersistPropertyInUnsavedDraftError_Text"]);
		$h.OutlookErrorManager._isInitialized$p=true
	};
	$h.OutlookErrorManager._addErrorMessage$p=function(errorCode, errorName, errorMessage)
	{
		OSF.DDA.ErrorCodeManager["addErrorMessage"](errorCode,{
			name: errorName,
			message: errorMessage
		})
	};
	$h.OutlookErrorManager.OutlookErrorCodes=function(){};
	$h.OutlookErrorManager.OsfDdaErrorCodes=function(){};
	$h.PhoneNumber=function(data)
	{
		this.$$d__getPhoneType$p$0=Function.createDelegate(this,this._getPhoneType$p$0);
		this.$$d__getOriginalPhoneString$p$0=Function.createDelegate(this,this._getOriginalPhoneString$p$0);
		this.$$d__getPhoneString$p$0=Function.createDelegate(this,this._getPhoneString$p$0);
		this._data$p$0=data;
		$h.InitialData._defineReadOnlyProperty$i(this,"phoneString",this.$$d__getPhoneString$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"originalPhoneString",this.$$d__getOriginalPhoneString$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"type",this.$$d__getPhoneType$p$0)
	};
	$h.PhoneNumber.prototype={
		_data$p$0: null,
		_getPhoneString$p$0: function()
		{
			return this._data$p$0["PhoneString"]
		},
		_getOriginalPhoneString$p$0: function()
		{
			return this._data$p$0["OriginalPhoneString"]
		},
		_getPhoneType$p$0: function()
		{
			return this._data$p$0["Type"]
		}
	};
	$h.TaskSuggestion=function(data)
	{
		this.$$d__getAssignees$p$0=Function.createDelegate(this,this._getAssignees$p$0);
		this.$$d__getTaskString$p$0=Function.createDelegate(this,this._getTaskString$p$0);
		this._data$p$0=data;
		$h.InitialData._defineReadOnlyProperty$i(this,"taskString",this.$$d__getTaskString$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"assignees",this.$$d__getAssignees$p$0)
	};
	$h.TaskSuggestion.prototype={
		_data$p$0: null,
		_assignees$p$0: null,
		_getTaskString$p$0: function()
		{
			return this._data$p$0["TaskString"]
		},
		_getAssignees$p$0: function()
		{
			if(!this._assignees$p$0)
			{
				var $$t_1=this;
				this._assignees$p$0=$h.Entities._getExtractedObjects$i($h.EmailAddressDetails,this._data$p$0,"Assignees",function(data)
				{
					return $h.EmailAddressDetails._createFromEmailUserDictionary$i(data)
				})
			}
			return this._assignees$p$0
		}
	};
	$h.UserProfile=function(data)
	{
		this.$$d__getUserProfileType$p$0=Function.createDelegate(this,this._getUserProfileType$p$0);
		this.$$d__getTimeZone$p$0=Function.createDelegate(this,this._getTimeZone$p$0);
		this.$$d__getEmailAddress$p$0=Function.createDelegate(this,this._getEmailAddress$p$0);
		this.$$d__getDisplayName$p$0=Function.createDelegate(this,this._getDisplayName$p$0);
		this._data$p$0=data;
		$h.InitialData._defineReadOnlyProperty$i(this,"displayName",this.$$d__getDisplayName$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"emailAddress",this.$$d__getEmailAddress$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"timeZone",this.$$d__getTimeZone$p$0);
		$h.InitialData._defineReadOnlyProperty$i(this,"type",this.$$d__getUserProfileType$p$0)
	};
	$h.UserProfile.prototype={
		_data$p$0: null,
		_getUserProfileType$p$0: function()
		{
			return this._data$p$0.get__userProfileType$i$0()
		},
		_getDisplayName$p$0: function()
		{
			return this._data$p$0.get__userDisplayName$i$0()
		},
		_getEmailAddress$p$0: function()
		{
			return this._data$p$0.get__userEmailAddress$i$0()
		},
		_getTimeZone$p$0: function()
		{
			return this._data$p$0.get__userTimeZone$i$0()
		}
	};
	$h.OutlookDispid=function(){};
	$h.OutlookDispid.prototype={
		owaOnlyMethod: 0,
		getInitialData: 1,
		getUserIdentityToken: 2,
		loadCustomProperties: 3,
		saveCustomProperties: 4,
		ewsRequest: 5,
		displayNewAppointmentForm: 7,
		displayMessageForm: 8,
		displayAppointmentForm: 9,
		displayReplyForm: 10,
		displayReplyAllForm: 11,
		getCallbackToken: 12,
		bodySetSelectedDataAsync: 13,
		getBodyTypeAsync: 14,
		getRecipientsAsync: 15,
		addFileAttachmentAsync: 16,
		setSubjectAsync: 17,
		getSubjectAsync: 18,
		addItemAttachmentAsync: 19,
		removeAttachmentAsync: 20,
		setRecipientsAsync: 21,
		addRecipientsAsync: 22,
		bodyPrependAsync: 23,
		getTimeAsync: 24,
		setTimeAsync: 25,
		getLocationAsync: 26,
		setLocationAsync: 27,
		getSelectedDataAsync: 28,
		setSelectedDataAsync: 29,
		displayReplyFormWithAttachments: 30,
		displayReplyAllFormWithAttachments: 31,
		saveAsync: 32,
		addNotficationMessageAsync: 33,
		getAllNotficationMessagesAsync: 34,
		replaceNotficationMessageAsync: 35,
		removeNotficationMessageAsync: 36,
		getBodyAsync: 37,
		setBodyAsync: 38,
		appCommands1: 39,
		registerConsentAsync: 40,
		close: 41,
		closeApp: 42,
		displayContactCardAsync: 43,
		displayNewMessageForm: 44,
		appCommands2: 94,
		trackCtq: 400,
		recordTrace: 401,
		recordDataPoint: 402,
		windowOpenOverrideHandler: 403,
		saveSettingsRequest: 404
	};
	$h.OutlookDispid.registerEnum("$h.OutlookDispid",false);
	$h.RequestState=function(){};
	$h.RequestState.prototype={
		unsent: 0,
		opened: 1,
		headersReceived: 2,
		loading: 3,
		done: 4
	};
	$h.RequestState.registerEnum("$h.RequestState",false);
	$h.CommonParameters=function(options, callback, asyncContext)
	{
		this._options$p$0=options;
		this._callback$p$0=callback;
		this._asyncContext$p$0=asyncContext
	};
	$h.CommonParameters.parse=function(args, isCallbackRequired, tryLegacy)
	{
		var legacyParameters;
		var $$t_8,
			$$t_9;
		if(tryLegacy && ($$t_9=$h.CommonParameters._tryParseLegacy$p(args,$$t_8={val: legacyParameters}),legacyParameters=$$t_8["val"],$$t_9))
			return legacyParameters;
		var argsLength=args["length"];
		var options=null;
		var callback=null;
		var asyncContext=null;
		if(argsLength===1)
			if(Function.isInstanceOfType(args[0]))
				callback=args[0];
			else if(Object.isInstanceOfType(args[0]))
				options=args[0];
			else
				throw Error.argumentType();
		else if(argsLength===2)
		{
			if(!Object.isInstanceOfType(args[0]))
				throw Error.argument("options");
			if(!Function.isInstanceOfType(args[1]))
				throw Error.argument("callback");
			options=args[0];
			callback=args[1]
		}
		else if(argsLength)
			throw Error.parameterCount(window["_u"]["ExtensibilityStrings"]["l_ParametersNotAsExpected_Text"]);
		if(isCallbackRequired && !callback)
			throw Error.argumentNull("callback");
		if(options && !$h.ScriptHelpers.isNullOrUndefined(options["asyncContext"]))
			asyncContext=options["asyncContext"];
		return new $h.CommonParameters(options,callback,asyncContext)
	};
	$h.CommonParameters._tryParseLegacy$p=function(args, commonParameters)
	{
		commonParameters.val=null;
		var argsLength=args["length"];
		var callback=null;
		var userContext=null;
		if(!argsLength || argsLength > 2)
			return false;
		if(!Function.isInstanceOfType(args[0]))
			return false;
		callback=args[0];
		if(argsLength > 1)
			userContext=args[1];
		commonParameters.val=new $h.CommonParameters(null,callback,userContext);
		return true
	};
	$h.CommonParameters.prototype={
		_options$p$0: null,
		_callback$p$0: null,
		_asyncContext$p$0: null,
		get_options: function()
		{
			return this._options$p$0
		},
		get_callback: function()
		{
			return this._callback$p$0
		},
		get_asyncContext: function()
		{
			return this._asyncContext$p$0
		}
	};
	$h.EwsRequest=function(userContext)
	{
		$h.EwsRequest.initializeBase(this,[userContext])
	};
	$h.EwsRequest.prototype={
		readyState: 1,
		status: 0,
		statusText: null,
		onreadystatechange: null,
		responseText: null,
		get__statusCode$i$1: function()
		{
			return this.status
		},
		set__statusCode$i$1: function(value)
		{
			this.status=value;
			return value
		},
		get__statusDescription$i$1: function()
		{
			return this.statusText
		},
		set__statusDescription$i$1: function(value)
		{
			this.statusText=value;
			return value
		},
		get__requestState$i$1: function()
		{
			return this.readyState
		},
		set__requestState$i$1: function(value)
		{
			this.readyState=value;
			return value
		},
		get_hasOnReadyStateChangeCallback: function()
		{
			return!$h.ScriptHelpers.isNullOrUndefined(this.onreadystatechange)
		},
		get__response$i$1: function()
		{
			return this.responseText
		},
		set__response$i$1: function(value)
		{
			this.responseText=value;
			return value
		},
		send: function(data)
		{
			this._checkSendConditions$i$1();
			if($h.ScriptHelpers.isNullOrUndefined(data))
				this._throwInvalidStateException$i$1();
			this._sendRequest$i$0(5,"EwsRequest",{body: data})
		},
		_callOnReadyStateChangeCallback$i$1: function()
		{
			if(!$h.ScriptHelpers.isNullOrUndefined(this.onreadystatechange))
				this.onreadystatechange()
		},
		_parseExtraResponseData$i$1: function(response){},
		executeExtraFailedResponseSteps: function(){}
	};
	$h.InitialData=function(data)
	{
		this._data$p$0=data;
		this._permissionLevel$p$0=this._calculatePermissionLevel$p$0()
	};
	$h.InitialData._defineReadOnlyProperty$i=function(o, methodName, getter)
	{
		var propertyDescriptor={
				get: getter,
				configurable: false
			};
		Object.defineProperty(o,methodName,propertyDescriptor)
	};
	$h.InitialData.prototype={
		_toRecipients$p$0: null,
		_ccRecipients$p$0: null,
		_attachments$p$0: null,
		_resources$p$0: null,
		_entities$p$0: null,
		_data$p$0: null,
		_permissionLevel$p$0: 0,
		get__isRestIdSupported$i$0: function()
		{
			return this._data$p$0["isRestIdSupported"]
		},
		get__itemId$i$0: function()
		{
			return this._data$p$0["id"]
		},
		get__itemClass$i$0: function()
		{
			return this._data$p$0["itemClass"]
		},
		get__dateTimeCreated$i$0: function()
		{
			return new Date(this._data$p$0["dateTimeCreated"])
		},
		get__dateTimeModified$i$0: function()
		{
			return new Date(this._data$p$0["dateTimeModified"])
		},
		get__dateTimeSent$i$0: function()
		{
			return new Date(this._data$p$0["dateTimeSent"])
		},
		get__subject$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			return this._data$p$0["subject"]
		},
		get__normalizedSubject$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			return this._data$p$0["normalizedSubject"]
		},
		get__internetMessageId$i$0: function()
		{
			return this._data$p$0["internetMessageId"]
		},
		get__conversationId$i$0: function()
		{
			return this._data$p$0["conversationId"]
		},
		get__sender$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			var sender=this._data$p$0["sender"];
			return $h.ScriptHelpers.isNullOrUndefined(sender) ? null : new $h.EmailAddressDetails(sender)
		},
		get__from$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			var from=this._data$p$0["from"];
			return $h.ScriptHelpers.isNullOrUndefined(from) ? null : new $h.EmailAddressDetails(from)
		},
		get__to$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			if(null===this._toRecipients$p$0)
				this._toRecipients$p$0=this._createEmailAddressDetails$p$0("to");
			return this._toRecipients$p$0
		},
		get__cc$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			if(null===this._ccRecipients$p$0)
				this._ccRecipients$p$0=this._createEmailAddressDetails$p$0("cc");
			return this._ccRecipients$p$0
		},
		get__attachments$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			if(null===this._attachments$p$0)
				this._attachments$p$0=this._createAttachmentDetails$p$0();
			return this._attachments$p$0
		},
		get__ewsUrl$i$0: function()
		{
			return this._data$p$0["ewsUrl"]
		},
		get__marketplaceAssetId$i$0: function()
		{
			return this._data$p$0["marketplaceAssetId"]
		},
		get__extensionId$i$0: function()
		{
			return this._data$p$0["extensionId"]
		},
		get__marketplaceContentMarket$i$0: function()
		{
			return this._data$p$0["marketplaceContentMarket"]
		},
		get__consentMetadata$i$0: function()
		{
			return this._data$p$0["consentMetadata"]
		},
		get__isRead$i$0: function()
		{
			return this._data$p$0["isRead"]
		},
		get__endNodeUrl$i$0: function()
		{
			return this._data$p$0["endNodeUrl"]
		},
		get__entryPointUrl$i$0: function()
		{
			return this._data$p$0["entryPointUrl"]
		},
		get__start$i$0: function()
		{
			return new Date(this._data$p$0["start"])
		},
		get__end$i$0: function()
		{
			return new Date(this._data$p$0["end"])
		},
		get__location$i$0: function()
		{
			return this._data$p$0["location"]
		},
		get__userProfileType$i$0: function()
		{
			return this._data$p$0["userProfileType"]
		},
		get__resources$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			if(null===this._resources$p$0)
				this._resources$p$0=this._createEmailAddressDetails$p$0("resources");
			return this._resources$p$0
		},
		get__organizer$i$0: function()
		{
			this._throwOnRestrictedPermissionLevel$i$0();
			var organizer=this._data$p$0["organizer"];
			return $h.ScriptHelpers.isNullOrUndefined(organizer) ? null : new $h.EmailAddressDetails(organizer)
		},
		get__userDisplayName$i$0: function()
		{
			return this._data$p$0["userDisplayName"]
		},
		get__userEmailAddress$i$0: function()
		{
			return this._data$p$0["userEmailAddress"]
		},
		get__userTimeZone$i$0: function()
		{
			return this._data$p$0["userTimeZone"]
		},
		get__timeZoneOffsets$i$0: function()
		{
			return this._data$p$0["timeZoneOffsets"]
		},
		get__hostVersion$i$0: function()
		{
			return this._data$p$0["hostVersion"]
		},
		get__owaView$i$0: function()
		{
			return this._data$p$0["owaView"]
		},
		get__overrideWindowOpen$i$0: function()
		{
			return this._data$p$0["overrideWindowOpen"]
		},
		_getEntities$i$0: function()
		{
			if(!this._entities$p$0)
				this._entities$p$0=new $h.Entities(this._data$p$0["entities"],this._data$p$0["filteredEntities"],this.get__dateTimeSent$i$0(),this._permissionLevel$p$0);
			return this._entities$p$0
		},
		_getEntitiesByType$i$0: function(entityType)
		{
			var entites=this._getEntities$i$0();
			return entites._getByType$i$0(entityType)
		},
		_getFilteredEntitiesByName$i$0: function(name)
		{
			var entities=this._getEntities$i$0();
			return entities._getFilteredEntitiesByName$i$0(name)
		},
		_getRegExMatches$i$0: function()
		{
			if(!this._data$p$0["regExMatches"])
				return null;
			return this._data$p$0["regExMatches"]
		},
		_getRegExMatchesByName$i$0: function(regexName)
		{
			var regexMatches=this._getRegExMatches$i$0();
			if(!regexMatches || !regexMatches[regexName])
				return null;
			return regexMatches[regexName]
		},
		_throwOnRestrictedPermissionLevel$i$0: function()
		{
			window["OSF"]["DDA"]["OutlookAppOm"]._throwOnPropertyAccessForRestrictedPermission$i(this._permissionLevel$p$0)
		},
		_createEmailAddressDetails$p$0: function(key)
		{
			var to=this._data$p$0[key];
			if($h.ScriptHelpers.isNullOrUndefined(to))
				return[];
			var recipients=[];
			for(var i=0; i < to["length"]; i++)
				if(!$h.ScriptHelpers.isNullOrUndefined(to[i]))
					recipients[i]=new $h.EmailAddressDetails(to[i]);
			return recipients
		},
		_createAttachmentDetails$p$0: function()
		{
			var attachments=this._data$p$0["attachments"];
			if($h.ScriptHelpers.isNullOrUndefined(attachments))
				return[];
			var attachmentDetails=[];
			for(var i=0; i < attachments["length"]; i++)
				if(!$h.ScriptHelpers.isNullOrUndefined(attachments[i]))
					attachmentDetails[i]=new $h.AttachmentDetails(attachments[i]);
			return attachmentDetails
		},
		_calculatePermissionLevel$p$0: function()
		{
			var HostReadItem=1;
			var HostReadWriteMailbox=2;
			var HostReadWriteItem=3;
			var permissionLevelFromHost=this._data$p$0["permissionLevel"];
			if($h.ScriptHelpers.isUndefined(this._permissionLevel$p$0))
				return 0;
			switch(permissionLevelFromHost)
			{
				case HostReadItem:
					return 1;
				case HostReadWriteItem:
					return 2;
				case HostReadWriteMailbox:
					return 3;
				default:
					return 0
			}
		}
	};
	$h._loadDictionaryRequest=function(createResultObject, dictionaryName, callback, userContext)
	{
		$h._loadDictionaryRequest.initializeBase(this,[userContext]);
		this._createResultObject$p$1=createResultObject;
		this._dictionaryName$p$1=dictionaryName;
		this._callback$p$1=callback
	};
	$h._loadDictionaryRequest.prototype={
		_dictionaryName$p$1: null,
		_createResultObject$p$1: null,
		_callback$p$1: null,
		handleResponse: function(response)
		{
			if(response["wasSuccessful"])
			{
				var value=response[this._dictionaryName$p$1];
				var responseData=window["JSON"]["parse"](value);
				this.createAsyncResult(this._createResultObject$p$1(responseData),0,0,null)
			}
			else
				this.createAsyncResult(null,1,9020,response["errorMessage"]);
			this._callback$p$1(this._asyncResult$p$0)
		}
	};
	$h.ProxyRequestBase=function(userContext)
	{
		$h.ProxyRequestBase.initializeBase(this,[userContext])
	};
	$h.ProxyRequestBase.prototype={
		handleResponse: function(response)
		{
			if(!response["wasProxySuccessful"])
			{
				this.set__statusCode$i$1(500);
				this.set__statusDescription$i$1("Error");
				var errorMessage=response["errorMessage"];
				this.set__response$i$1(errorMessage);
				this.createAsyncResult(null,1,9020,errorMessage)
			}
			else
			{
				this.set__statusCode$i$1(response["statusCode"]);
				this.set__statusDescription$i$1(response["statusDescription"]);
				this.set__response$i$1(response["body"]);
				this.createAsyncResult(this.get__response$i$1(),0,0,null)
			}
			this._parseExtraResponseData$i$1(response);
			this._cycleReadyStateFromHeadersReceivedToLoadingToDone$i$1()
		},
		_throwInvalidStateException$i$1: function()
		{
			throw Error.create("DOMException",{
				code: 11,
				message: "INVALID_STATE_ERR"
			});
		},
		_cycleReadyStateFromHeadersReceivedToLoadingToDone$i$1: function()
		{
			var $$t_0=this;
			this._changeReadyState$i$1(2,function()
			{
				$$t_0._changeReadyState$i$1(3,function()
				{
					$$t_0._changeReadyState$i$1(4,null)
				})
			})
		},
		_changeReadyState$i$1: function(state, nextStep)
		{
			this.set__requestState$i$1(state);
			var $$t_2=this;
			window.setTimeout(function()
			{
				try
				{
					$$t_2._callOnReadyStateChangeCallback$i$1()
				}
				finally
				{
					if(!$h.ScriptHelpers.isNullOrUndefined(nextStep))
						nextStep()
				}
			},0)
		},
		_checkSendConditions$i$1: function()
		{
			if(this.get__requestState$i$1() !==1)
				this._throwInvalidStateException$i$1();
			if(this._isSent$p$0)
				this._throwInvalidStateException$i$1()
		}
	};
	$h.RequestBase=function(userContext)
	{
		this._userContext$p$0=userContext
	};
	$h.RequestBase.prototype={
		_isSent$p$0: false,
		_asyncResult$p$0: null,
		_userContext$p$0: null,
		get_asyncResult: function()
		{
			return this._asyncResult$p$0
		},
		_sendRequest$i$0: function(dispid, methodName, dataToSend)
		{
			this._isSent$p$0=true;
			var $$t_5=this;
			window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.invokeHostMethod(dispid,dataToSend,function(resultCode, response)
			{
				if(resultCode)
					$$t_5.createAsyncResult(null,1,9017,String.format(window["_u"]["ExtensibilityStrings"]["l_InternalProtocolError_Text"],resultCode));
				else
					$$t_5.handleResponse(response)
			})
		},
		createAsyncResult: function(value, errorCode, detailedErrorCode, errorDescription)
		{
			this._asyncResult$p$0=window["OSF"]["DDA"]["OutlookAppOm"]._instance$p.createAsyncResult(value,errorCode,detailedErrorCode,this._userContext$p$0,errorDescription)
		}
	};
	$h.SaveDictionaryRequest=function(callback, userContext)
	{
		$h.SaveDictionaryRequest.initializeBase(this,[userContext]);
		if(!$h.ScriptHelpers.isNullOrUndefined(callback))
			this._callback$p$1=callback
	};
	$h.SaveDictionaryRequest.prototype={
		_callback$p$1: null,
		handleResponse: function(response)
		{
			if(response["wasSuccessful"])
				this.createAsyncResult(null,0,0,null);
			else
				this.createAsyncResult(null,1,9020,response["errorMessage"]);
			if(!$h.ScriptHelpers.isNullOrUndefined(this._callback$p$1))
				this._callback$p$1(this._asyncResult$p$0)
		}
	};
	$h.ScriptHelpers=function(){};
	$h.ScriptHelpers.isNull=function(value)
	{
		return null===value
	};
	$h.ScriptHelpers.isNullOrUndefined=function(value)
	{
		return $h.ScriptHelpers.isNull(value) || $h.ScriptHelpers.isUndefined(value)
	};
	$h.ScriptHelpers.isUndefined=function(value)
	{
		return value===undefined
	};
	$h.ScriptHelpers.dictionaryContainsKey=function(obj, keyName)
	{
		return Object.isInstanceOfType(obj) ? keyName in obj : false
	};
	$h.ScriptHelpers.isNonEmptyString=function(value)
	{
		if(!value)
			return false;
		return String.isInstanceOfType(value)
	};
	$h.ScriptHelpers.deepClone=function(obj)
	{
		return window["JSON"]["parse"](window["JSON"]["stringify"](obj))
	};
	window["OSF"]["DDA"]["OutlookAppOm"].registerClass("OSF.DDA.OutlookAppOm");
	window["OSF"]["DDA"]["Settings"].registerClass("OSF.DDA.Settings");
	$h.ItemBase.registerClass("$h.ItemBase");
	$h.Item.registerClass("$h.Item",$h.ItemBase);
	$h.Appointment.registerClass("$h.Appointment",$h.Item);
	$h.ComposeItem.registerClass("$h.ComposeItem",$h.ItemBase);
	$h.AppointmentCompose.registerClass("$h.AppointmentCompose",$h.ComposeItem);
	$h.AttachmentConstants.registerClass("$h.AttachmentConstants");
	$h.AttachmentDetails.registerClass("$h.AttachmentDetails");
	$h.Body.registerClass("$h.Body");
	$h.ComposeBody.registerClass("$h.ComposeBody",$h.Body);
	$h.ComposeRecipient.registerClass("$h.ComposeRecipient");
	$h.ComposeLocation.registerClass("$h.ComposeLocation");
	$h.ComposeSubject.registerClass("$h.ComposeSubject");
	$h.ComposeTime.registerClass("$h.ComposeTime");
	$h.Contact.registerClass("$h.Contact");
	$h.CustomProperties.registerClass("$h.CustomProperties");
	$h.Diagnostics.registerClass("$h.Diagnostics");
	$h.EmailAddressDetails.registerClass("$h.EmailAddressDetails");
	$h.Entities.registerClass("$h.Entities");
	$h.ReplyConstants.registerClass("$h.ReplyConstants");
	$h.AsyncConstants.registerClass("$h.AsyncConstants");
	window["Office"]["cast"]["item"].registerClass("Office.cast.item");
	$h.Message.registerClass("$h.Message",$h.Item);
	$h.MeetingRequest.registerClass("$h.MeetingRequest",$h.Message);
	$h.MeetingSuggestion.registerClass("$h.MeetingSuggestion");
	$h.MeetingSuggestionTimeDecoder.registerClass("$h.MeetingSuggestionTimeDecoder");
	$h._extractedDate.registerClass("$h._extractedDate");
	$h._preciseDate.registerClass("$h._preciseDate",$h._extractedDate);
	$h._relativeDate.registerClass("$h._relativeDate",$h._extractedDate);
	$h.MessageCompose.registerClass("$h.MessageCompose",$h.ComposeItem);
	$h.NotificationMessages.registerClass("$h.NotificationMessages");
	$h.OutlookErrorManager.registerClass("$h.OutlookErrorManager");
	$h.OutlookErrorManager.OutlookErrorCodes.registerClass("$h.OutlookErrorManager.OutlookErrorCodes");
	$h.OutlookErrorManager.OsfDdaErrorCodes.registerClass("$h.OutlookErrorManager.OsfDdaErrorCodes");
	$h.PhoneNumber.registerClass("$h.PhoneNumber");
	$h.TaskSuggestion.registerClass("$h.TaskSuggestion");
	$h.UserProfile.registerClass("$h.UserProfile");
	$h.CommonParameters.registerClass("$h.CommonParameters");
	$h.RequestBase.registerClass("$h.RequestBase");
	$h.ProxyRequestBase.registerClass("$h.ProxyRequestBase",$h.RequestBase);
	$h.EwsRequest.registerClass("$h.EwsRequest",$h.ProxyRequestBase);
	$h.InitialData.registerClass("$h.InitialData");
	$h._loadDictionaryRequest.registerClass("$h._loadDictionaryRequest",$h.RequestBase);
	$h.SaveDictionaryRequest.registerClass("$h.SaveDictionaryRequest",$h.RequestBase);
	$h.ScriptHelpers.registerClass("$h.ScriptHelpers");
	window["OSF"]["DDA"]["OutlookAppOm"].asyncMethodTimeoutKeyName="__timeout__";
	window["OSF"]["DDA"]["OutlookAppOm"].ewsIdOrEmailParamName="ewsIdOrEmail";
	window["OSF"]["DDA"]["OutlookAppOm"]._maxRecipients$p=100;
	window["OSF"]["DDA"]["OutlookAppOm"]._maxSubjectLength$p=255;
	window["OSF"]["DDA"]["OutlookAppOm"].maxBodyLength=32768;
	window["OSF"]["DDA"]["OutlookAppOm"]._maxLocationLength$p=255;
	window["OSF"]["DDA"]["OutlookAppOm"]._maxEwsRequestSize$p=1e6;
	window["OSF"]["DDA"]["OutlookAppOm"].executeMethodName="ExecuteMethod";
	window["OSF"]["DDA"]["OutlookAppOm"].getInitialDataMethodName="GetInitialData";
	window["OSF"]["DDA"]["OutlookAppOm"].itemIdParameterName="itemId";
	window["OSF"]["DDA"]["OutlookAppOm"].restVersionParameterName="restVersion";
	window["OSF"]["DDA"]["OutlookAppOm"]._instance$p=null;
	$h.AttachmentConstants.maxAttachmentNameLength=255;
	$h.AttachmentConstants.maxUrlLength=2048;
	$h.AttachmentConstants.maxItemIdLength=200;
	$h.AttachmentConstants.maxRemoveIdLength=200;
	$h.AttachmentConstants.attachmentParameterName="attachments";
	$h.AttachmentConstants.attachmentTypeParameterName="type";
	$h.AttachmentConstants.attachmentUrlParameterName="url";
	$h.AttachmentConstants.attachmentItemIdParameterName="itemId";
	$h.AttachmentConstants.attachmentNameParameterName="name";
	$h.AttachmentConstants.attachmentTypeFileName="file";
	$h.AttachmentConstants.attachmentTypeItemName="item";
	$h.AttachmentDetails._attachmentTypeMap$p=[window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["AttachmentType"]["File"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["AttachmentType"]["Item"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["AttachmentType"]["Cloud"]];
	$h.Body.coercionTypeParameterName="coercionType";
	$h.ComposeRecipient.displayNameLengthLimit=255;
	$h.ComposeRecipient.maxSmtpLength=571;
	$h.ComposeRecipient.recipientsLimit=100;
	$h.ComposeRecipient.totalRecipientsLimit=500;
	$h.ComposeRecipient.addressParameterName="address";
	$h.ComposeRecipient.nameParameterName="name";
	$h.ComposeLocation.locationKey="location";
	$h.ComposeLocation.maximumLocationLength=255;
	$h.ComposeSubject.maximumSubjectLength=255;
	$h.ComposeTime.timeTypeName="TimeProperty";
	$h.ComposeTime.timeDataName="time";
	$h.Diagnostics.outlookAppName="Outlook";
	$h.Diagnostics.outlookWebAppName="OutlookWebApp";
	$h.EmailAddressDetails._emptyString$p="";
	$h.EmailAddressDetails._responseTypeMap$p=[window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ResponseType"]["None"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ResponseType"]["Organizer"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ResponseType"]["Tentative"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ResponseType"]["Accepted"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["ResponseType"]["Declined"]];
	$h.EmailAddressDetails._recipientTypeMap$p=[window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RecipientType"]["Other"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RecipientType"]["DistributionList"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RecipientType"]["User"],window["Microsoft"]["Office"]["WebExtension"]["MailboxEnums"]["RecipientType"]["ExternalUser"]];
	$h.Entities._allEntityKeys$p=["Addresses","EmailAddresses","Urls","PhoneNumbers","TaskSuggestions","MeetingSuggestions","Contacts","FlightReservations","ParcelDeliveries"];
	$h.ReplyConstants.htmlBodyKeyName="htmlBody";
	$h.AsyncConstants.optionsKeyName="options";
	$h.AsyncConstants.callbackKeyName="callback";
	$h.AsyncConstants.asyncResultKeyName="asyncResult";
	$h.MeetingSuggestionTimeDecoder._baseDate$p=new Date("0001-01-01T00:00:00Z");
	$h.NotificationMessages.maximumKeyLength=32;
	$h.NotificationMessages.maximumIconLength=32;
	$h.NotificationMessages.maximumMessageLength=150;
	$h.NotificationMessages.notificationsKeyParameterName="key";
	$h.NotificationMessages.notificationsTypeParameterName="type";
	$h.NotificationMessages.notificationsIconParameterName="icon";
	$h.NotificationMessages.notificationsMessageParameterName="message";
	$h.NotificationMessages.notificationsPersistentParameterName="persistent";
	$h.OutlookErrorManager.errorNameKey="name";
	$h.OutlookErrorManager.errorMessageKey="message";
	$h.OutlookErrorManager._isInitialized$p=false;
	$h.OutlookErrorManager.OutlookErrorCodes.attachmentSizeExceeded=9e3;
	$h.OutlookErrorManager.OutlookErrorCodes.numberOfAttachmentsExceeded=9001;
	$h.OutlookErrorManager.OutlookErrorCodes.internalFormatError=9002;
	$h.OutlookErrorManager.OutlookErrorCodes.invalidAttachmentId=9003;
	$h.OutlookErrorManager.OutlookErrorCodes.invalidAttachmentPath=9004;
	$h.OutlookErrorManager.OutlookErrorCodes.cannotAddAttachmentBeforeUpgrade=9005;
	$h.OutlookErrorManager.OutlookErrorCodes.attachmentDeletedBeforeUploadCompletes=9006;
	$h.OutlookErrorManager.OutlookErrorCodes.attachmentUploadGeneralFailure=9007;
	$h.OutlookErrorManager.OutlookErrorCodes.attachmentToDeleteDoesNotExist=9008;
	$h.OutlookErrorManager.OutlookErrorCodes.attachmentDeleteGeneralFailure=9009;
	$h.OutlookErrorManager.OutlookErrorCodes.invalidEndTime=9010;
	$h.OutlookErrorManager.OutlookErrorCodes.htmlSanitizationFailure=9011;
	$h.OutlookErrorManager.OutlookErrorCodes.numberOfRecipientsExceeded=9012;
	$h.OutlookErrorManager.OutlookErrorCodes.noValidRecipientsProvided=9013;
	$h.OutlookErrorManager.OutlookErrorCodes.cursorPositionChanged=9014;
	$h.OutlookErrorManager.OutlookErrorCodes.invalidSelection=9016;
	$h.OutlookErrorManager.OutlookErrorCodes.accessRestricted=9017;
	$h.OutlookErrorManager.OutlookErrorCodes.genericTokenError=9018;
	$h.OutlookErrorManager.OutlookErrorCodes.genericSettingsError=9019;
	$h.OutlookErrorManager.OutlookErrorCodes.genericResponseError=9020;
	$h.OutlookErrorManager.OutlookErrorCodes.saveError=9021;
	$h.OutlookErrorManager.OutlookErrorCodes.messageInDifferentStoreError=9022;
	$h.OutlookErrorManager.OutlookErrorCodes.duplicateNotificationKey=9023;
	$h.OutlookErrorManager.OutlookErrorCodes.notificationKeyNotFound=9024;
	$h.OutlookErrorManager.OutlookErrorCodes.numberOfNotificationsExceeded=9025;
	$h.OutlookErrorManager.OutlookErrorCodes.persistedNotificationArrayReadError=9026;
	$h.OutlookErrorManager.OutlookErrorCodes.persistedNotificationArraySaveError=9027;
	$h.OutlookErrorManager.OutlookErrorCodes.cannotPersistPropertyInUnsavedDraftError=9028;
	$h.OutlookErrorManager.OutlookErrorCodes.ooeInvalidDataFormat=2006;
	$h.OutlookErrorManager.OsfDdaErrorCodes.ooeCoercionTypeNotSupported=1e3;
	$h.CommonParameters.asyncContextKeyName="asyncContext";
	$h.InitialData.userProfileTypeKey="userProfileType";
	$h.ScriptHelpers.emptyString="";
	OSF.DDA.ErrorCodeManager.initializeErrorMessages(Strings.OfficeOM);
	if(appContext.get_appName()==OSF.AppName.OutlookWebApp || appContext.get_appName()==OSF.AppName.OutlookIOS)
		this._settings=this._initializeSettings(appContext,false);
	else
		this._settings=this._initializeSettings(false);
	appContext.appOM=new OSF.DDA.OutlookAppOm(appContext,this._webAppState.wnd,appReady)
}

