text: /* Excel Mac specific API library (Core APIs only) */
  
  /*
  	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.
  
      This file also contains the following Promise implementation (with a few small modifications):
          * @overview es6-promise - a tiny implementation of Promises/A+.
          * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
          * @license   Licensed under MIT license
          *            See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE
          * @version   2.3.0
  */
  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" &&
                  Sys.Serialization && Sys.Serialization.JavaScriptSerializer && typeof (Sys.Serialization.JavaScriptSerializer.serialize) === "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, "msAjaxString", {
              get: function () {
                  if (this._msAjaxString == null && this.isMsAjaxLoaded()) {
                      this._msAjaxString = 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.XdmFieldName = {
      ConversationUrl: "ConversationUrl",
      AppId: "AppId"
  };
  OSF.WindowNameItemKeys = {
      BaseFrameName: "baseFrameName",
      HostInfo: "hostInfo",
      XdmInfo: "xdmInfo",
      SerializerVersion: "serializerVersion",
      AppContext: "appContext"
  };
  OSF.OUtil = (function () {
      var _uniqueId = -1;
      var _xdmInfoKey = '&_xdm_Info=';
      var _serializerVersionKey = '&_serializer_version=';
      var _xdmSessionKeyPrefix = '_xdm_';
      var _serializerVersionKeyPrefix = '_serializer_version=';
      var _fragmentSeparator = '#';
      var _fragmentInfoDelimiter = '&';
      var _classN = "class";
      var _loadedScripts = {};
      var _defaultScriptLoadingTimeout = 30000;
      var _safeSessionStorage = null;
      var _safeLocalStorage = null;
      var _rndentropy = new Date().getTime();
      function _random() {
          var nextrand = 0x7fffffff * (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;
      }
      ;
      function _reOrderTabbableElements(elements) {
          var bucket0 = [];
          var bucketPositive = [];
          var i;
          var len = elements.length;
          var ele;
          for (i = 0; i < len; i++) {
              ele = elements[i];
              if (ele.tabIndex) {
                  if (ele.tabIndex > 0) {
                      bucketPositive.push(ele);
                  }
                  else if (ele.tabIndex === 0) {
                      bucket0.push(ele);
                  }
              }
              else {
                  bucket0.push(ele);
              }
          }
          bucketPositive = bucketPositive.sort(function (left, right) {
              var diff = left.tabIndex - right.tabIndex;
              if (diff === 0) {
                  diff = bucketPositive.indexOf(left) - bucketPositive.indexOf(right);
              }
              return diff;
          });
          return [].concat(bucketPositive, bucket0);
      }
      ;
      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 ^= 0x7fffffff * Math.random();
              }
              _rndentropy &= 0x7fffffff;
          },
          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];
              }
          },
          serializeSettings: function OSF_OUtil$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_OUtil$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;
          },
          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.setAttribute("crossOrigin", "anonymous");
                      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('_');
          },
          getFrameName: function OSF_OUtil$getFrameName(cacheKey) {
              return _xdmSessionKeyPrefix + cacheKey + this.generateConversationId();
          },
          addXdmInfoAsHash: function OSF_OUtil$addXdmInfoAsHash(url, xdmInfoValue) {
              return OSF.OUtil.addInfoAsHash(url, _xdmInfoKey, xdmInfoValue, false);
          },
          addSerializerVersionAsHash: function OSF_OUtil$addSerializerVersionAsHash(url, serializerVersion) {
              return OSF.OUtil.addInfoAsHash(url, _serializerVersionKey, serializerVersion, true);
          },
          addInfoAsHash: function OSF_OUtil$addInfoAsHash(url, keyName, infoValue, encodeInfo) {
              url = url.trim() || '';
              var urlParts = url.split(_fragmentSeparator);
              var urlWithoutFragment = urlParts.shift();
              var fragment = urlParts.join(_fragmentSeparator);
              var newFragment;
              if (encodeInfo) {
                  newFragment = [keyName, encodeURIComponent(infoValue), fragment].join('');
              }
              else {
                  newFragment = [fragment, keyName, infoValue].join('');
              }
              return [urlWithoutFragment, _fragmentSeparator, newFragment].join('');
          },
          parseHostInfoFromWindowName: function OSF_OUtil$parseHostInfoFromWindowName(skipSessionStorage, windowName) {
              return OSF.OUtil.parseInfoFromWindowName(skipSessionStorage, windowName, OSF.WindowNameItemKeys.HostInfo);
          },
          parseXdmInfo: function OSF_OUtil$parseXdmInfo(skipSessionStorage) {
              var xdmInfoValue = OSF.OUtil.parseXdmInfoWithGivenFragment(skipSessionStorage, window.location.hash);
              if (!xdmInfoValue) {
                  xdmInfoValue = OSF.OUtil.parseXdmInfoFromWindowName(skipSessionStorage, window.name);
              }
              return xdmInfoValue;
          },
          parseXdmInfoFromWindowName: function OSF_OUtil$parseXdmInfoFromWindowName(skipSessionStorage, windowName) {
              return OSF.OUtil.parseInfoFromWindowName(skipSessionStorage, windowName, OSF.WindowNameItemKeys.XdmInfo);
          },
          parseXdmInfoWithGivenFragment: function OSF_OUtil$parseXdmInfoWithGivenFragment(skipSessionStorage, fragment) {
              return OSF.OUtil.parseInfoWithGivenFragment(_xdmInfoKey, _xdmSessionKeyPrefix, false, skipSessionStorage, fragment);
          },
          parseSerializerVersion: function OSF_OUtil$parseSerializerVersion(skipSessionStorage) {
              var serializerVersion = OSF.OUtil.parseSerializerVersionWithGivenFragment(skipSessionStorage, window.location.hash);
              if (isNaN(serializerVersion)) {
                  serializerVersion = OSF.OUtil.parseSerializerVersionFromWindowName(skipSessionStorage, window.name);
              }
              return serializerVersion;
          },
          parseSerializerVersionFromWindowName: function OSF_OUtil$parseSerializerVersionFromWindowName(skipSessionStorage, windowName) {
              return parseInt(OSF.OUtil.parseInfoFromWindowName(skipSessionStorage, windowName, OSF.WindowNameItemKeys.SerializerVersion));
          },
          parseSerializerVersionWithGivenFragment: function OSF_OUtil$parseSerializerVersionWithGivenFragment(skipSessionStorage, fragment) {
              return parseInt(OSF.OUtil.parseInfoWithGivenFragment(_serializerVersionKey, _serializerVersionKeyPrefix, true, skipSessionStorage, fragment));
          },
          parseInfoFromWindowName: function OSF_OUtil$parseInfoFromWindowName(skipSessionStorage, windowName, infoKey) {
              try {
                  var windowNameObj = JSON.parse(windowName);
                  var infoValue = windowNameObj != null ? windowNameObj[infoKey] : null;
                  var osfSessionStorage = _getSessionStorage();
                  if (!skipSessionStorage && osfSessionStorage && windowNameObj != null) {
                      var sessionKey = windowNameObj[OSF.WindowNameItemKeys.BaseFrameName] + infoKey;
                      if (infoValue) {
                          osfSessionStorage.setItem(sessionKey, infoValue);
                      }
                      else {
                          infoValue = osfSessionStorage.getItem(sessionKey);
                      }
                  }
                  return infoValue;
              }
              catch (Exception) {
                  return null;
              }
          },
          parseInfoWithGivenFragment: function OSF_OUtil$parseInfoWithGivenFragment(infoKey, infoKeyPrefix, decodeInfo, skipSessionStorage, fragment) {
              var fragmentParts = fragment.split(infoKey);
              var infoValue = fragmentParts.length > 1 ? fragmentParts[fragmentParts.length - 1] : null;
              if (decodeInfo && infoValue != null) {
                  if (infoValue.indexOf(_fragmentInfoDelimiter) >= 0) {
                      infoValue = infoValue.split(_fragmentInfoDelimiter)[0];
                  }
                  infoValue = decodeURIComponent(infoValue);
              }
              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 (infoValue) {
                          osfSessionStorage.setItem(sessionKey, infoValue);
                      }
                      else {
                          infoValue = osfSessionStorage.getItem(sessionKey);
                      }
                  }
              }
              return infoValue;
          },
          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("|");
              }
              if (typeof items[1] == "undefined") {
                  items = strInfo.split("%7C");
              }
              return items;
          },
          getXdmFieldValue: function OSF_OUtil$getXdmFieldValue(xdmFieldName, skipSessionStorage) {
              var fieldValue = '';
              var xdmInfoValue = OSF.OUtil.parseXdmInfo(skipSessionStorage);
              if (xdmInfoValue) {
                  var items = OSF.OUtil.getInfoItems(xdmInfoValue);
                  if (items != undefined && items.length >= 3) {
                      switch (xdmFieldName) {
                          case OSF.XdmFieldName.ConversationUrl:
                              fieldValue = items[2];
                              break;
                          case OSF.XdmFieldName.AppId:
                              fieldValue = items[1];
                              break;
                      }
                  }
              }
              return fieldValue;
          },
          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 (OsfMsAjaxFactory) !== 'undefined' && OsfMsAjaxFactory.msAjaxDebug && OsfMsAjaxFactory.msAjaxDebug.trace) {
                  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) + 0x1000000).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);
          },
          isChrome: function OSF_Outil$isChrome() {
              return (window.navigator.userAgent.indexOf("Chrome") > 0) && !OSF.OUtil.isEdge();
          },
          isEdge: function OSF_Outil$isEdge() {
              return window.navigator.userAgent.indexOf("Edge") > 0;
          },
          isIE: function OSF_Outil$isIE() {
              return window.navigator.userAgent.indexOf("Trident") > 0;
          },
          isFirefox: function OSF_Outil$isFirefox() {
              return window.navigator.userAgent.indexOf("Firefox") > 0;
          },
          shallowCopy: function OSF_Outil$shallowCopy(sourceObj) {
              if (sourceObj == null) {
                  return null;
              }
              else if (!(sourceObj instanceof Object)) {
                  return sourceObj;
              }
              else if (Array.isArray(sourceObj)) {
                  var copyArr = [];
                  for (var i = 0; i < sourceObj.length; i++) {
                      copyArr.push(sourceObj[i]);
                  }
                  return copyArr;
              }
              else {
                  var copyObj = sourceObj.constructor();
                  for (var property in sourceObj) {
                      if (sourceObj.hasOwnProperty(property)) {
                          copyObj[property] = sourceObj[property];
                      }
                  }
                  return copyObj;
              }
          },
          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;
          },
          addClass: function OSF_OUtil$addClass(elmt, val) {
              if (!OSF.OUtil.hasClass(elmt, val)) {
                  var className = elmt.getAttribute(_classN);
                  if (className) {
                      elmt.setAttribute(_classN, className + " " + val);
                  }
                  else {
                      elmt.setAttribute(_classN, val);
                  }
              }
          },
          removeClass: function OSF_OUtil$removeClass(elmt, val) {
              if (OSF.OUtil.hasClass(elmt, val)) {
                  var className = elmt.getAttribute(_classN);
                  var reg = new RegExp('(\\s|^)' + val + '(\\s|$)');
                  className = className.replace(reg, '');
                  elmt.setAttribute(_classN, className);
              }
          },
          hasClass: function OSF_OUtil$hasClass(elmt, clsName) {
              var className = elmt.getAttribute(_classN);
              return className && className.match(new RegExp('(\\s|^)' + clsName + '(\\s|$)'));
          },
          focusToFirstTabbable: function OSF_OUtil$focusToFirstTabbable(all, backward) {
              var next;
              var focused = false;
              var candidate;
              var setFlag = function (e) {
                  focused = true;
              };
              var findNextPos = function (allLen, currPos, backward) {
                  if (currPos < 0 || currPos > allLen) {
                      return -1;
                  }
                  else if (currPos === 0 && backward) {
                      return -1;
                  }
                  else if (currPos === allLen - 1 && !backward) {
                      return -1;
                  }
                  if (backward) {
                      return currPos - 1;
                  }
                  else {
                      return currPos + 1;
                  }
              };
              all = _reOrderTabbableElements(all);
              next = backward ? all.length - 1 : 0;
              if (all.length === 0) {
                  return null;
              }
              while (!focused && next >= 0 && next < all.length) {
                  candidate = all[next];
                  window.focus();
                  candidate.addEventListener('focus', setFlag);
                  candidate.focus();
                  candidate.removeEventListener('focus', setFlag);
                  next = findNextPos(all.length, next, backward);
                  if (!focused && candidate === document.activeElement) {
                      focused = true;
                  }
              }
              if (focused) {
                  return candidate;
              }
              else {
                  return null;
              }
          },
          focusToNextTabbable: function OSF_OUtil$focusToNextTabbable(all, curr, shift) {
              var currPos;
              var next;
              var focused = false;
              var candidate;
              var setFlag = function (e) {
                  focused = true;
              };
              var findCurrPos = function (all, curr) {
                  var i = 0;
                  for (; i < all.length; i++) {
                      if (all[i] === curr) {
                          return i;
                      }
                  }
                  return -1;
              };
              var findNextPos = function (allLen, currPos, shift) {
                  if (currPos < 0 || currPos > allLen) {
                      return -1;
                  }
                  else if (currPos === 0 && shift) {
                      return -1;
                  }
                  else if (currPos === allLen - 1 && !shift) {
                      return -1;
                  }
                  if (shift) {
                      return currPos - 1;
                  }
                  else {
                      return currPos + 1;
                  }
              };
              all = _reOrderTabbableElements(all);
              currPos = findCurrPos(all, curr);
              next = findNextPos(all.length, currPos, shift);
              if (next < 0) {
                  return null;
              }
              while (!focused && next >= 0 && next < all.length) {
                  candidate = all[next];
                  candidate.addEventListener('focus', setFlag);
                  candidate.focus();
                  candidate.removeEventListener('focus', setFlag);
                  next = findNextPos(all.length, next, shift);
                  if (!focused && candidate === document.activeElement) {
                      focused = true;
                  }
              }
              if (focused) {
                  return candidate;
              }
              else {
                  return null;
              }
          }
      };
  })();
  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.MessageIDs = {
      "FetchBundleUrl": 0,
      "LoadReactBundle": 1,
      "LoadBundleSuccess": 2,
      "LoadBundleError": 3
  };
  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,
      OneNote: 262144,
      ExcelWinRT: 524288,
      WordWinRT: 1048576,
      PowerpointWinRT: 2097152,
      OutlookAndroid: 4194304,
      OneNoteWinRT: 8388608,
      ExcelAndroid: 8388609,
      VisioWebApp: 8388610,
      OneNoteIOS: 8388611,
      WordAndroid: 8388613,
      PowerpointAndroid: 8388614,
      Visio: 8388615,
      OneNoteAndroid: 4194305
  };
  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,
      "PageIsReady": 10,
      "TabIn": 11,
      "TabInShift": 12,
      "TabExit": 13,
      "TabExitShift": 14,
      "EscExit": 15,
      "F2Exit": 16,
      "ExitNoFocusable": 17,
      "ExitNoFocusableShift": 18,
      "MouseEnter": 19,
      "MouseLeave": 20,
      "UpdateTargetUrl": 21,
      "InstallCustomFunctions": 22,
      "SendTelemetryEvent": 23,
      "UninstallCustomFunctions": 24,
      "SendMessage": 25,
      "LaunchExtensionComponent": 26,
      "StopExtensionComponent": 27,
      "RestartExtensionComponent": 28,
      "EnableTaskPaneHeaderButton": 29,
      "DisableTaskPaneHeaderButton": 30,
      "TaskPaneHeaderButtonClicked": 31,
      "RemoveAppCommandsAddin": 32
  };
  OSF.SharedConstants = {
      "NotificationConversationIdSuffix": '_ntf'
  };
  OSF.DialogMessageType = {
      DialogMessageReceived: 0,
      DialogParentMessageReceived: 1,
      DialogClosed: 12006
  };
  OSF.OfficeAppContext = function OSF_OfficeAppContext(id, appName, appVersion, appUILocale, dataLocale, docUrl, clientMode, settings, reason, osfControlType, eToken, correlationId, appInstanceId, touchEnabled, commerceAllowed, appMinorVersion, requirementMatrix, hostCustomMessage, hostFullVersion, clientWindowHeight, clientWindowWidth, addinName, appDomains, dialogRequirementMatrix, featureGates, officeTheme) {
      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._hostCustomMessage = hostCustomMessage;
      this._hostFullVersion = hostFullVersion;
      this._isDialog = false;
      this._clientWindowHeight = clientWindowHeight;
      this._clientWindowWidth = clientWindowWidth;
      this._addinName = addinName;
      this._appDomains = appDomains;
      this._dialogRequirementMatrix = dialogRequirementMatrix;
      this._featureGates = featureGates;
      this._officeTheme = officeTheme;
      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_dialogRequirementMatrix = function get_dialogRequirementMatrix() { return this._dialogRequirementMatrix; };
      this.get_hostCustomMessage = function get_hostCustomMessage() { return this._hostCustomMessage; };
      this.get_hostFullVersion = function get_hostFullVersion() { return this._hostFullVersion; };
      this.get_isDialog = function get_isDialog() { return this._isDialog; };
      this.get_clientWindowHeight = function get_clientWindowHeight() { return this._clientWindowHeight; };
      this.get_clientWindowWidth = function get_clientWindowWidth() { return this._clientWindowWidth; };
      this.get_addinName = function get_addinName() { return this._addinName; };
      this.get_appDomains = function get_appDomains() { return this._appDomains; };
      this.get_featureGates = function get_featureGates() { return this._featureGates; };
      this.get_officeTheme = function get_officeTheme() { return this._officeTheme; };
  };
  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",
      PlatformType: "platformType",
      HostType: "hostType",
      ForceConsent: "forceConsent",
      ForceAddAccount: "forceAddAccount",
      AuthChallenge: "authChallenge",
      AllowConsentPrompt: "allowConsentPrompt",
      ForMSGraphAccess: "forMSGraphAccess",
      AllowSignInPrompt: "allowSignInPrompt",
      Reserved: "reserved",
      Tcid: "tcid",
      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",
      CustomFieldId: "customFieldId",
      Url: "url",
      MessageHandler: "messageHandler",
      Width: "width",
      Height: "height",
      RequireHTTPs: "requireHTTPS",
      MessageToParent: "messageToParent",
      DisplayInIframe: "displayInIframe",
      MessageContent: "messageContent",
      HideTitle: "hideTitle",
      UseDeviceIndependentPixels: "useDeviceIndependentPixels",
      PromptBeforeOpen: "promptBeforeOpen",
      EnforceAppDomain: "enforceAppDomain",
      AppCommandInvocationCompletedData: "appCommandInvocationCompletedData",
      Base64: "base64",
      FormId: "formId"
  };
  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(id, eventType) {
      if (eventType == Microsoft.Office.WebExtension.EventType.BindingSelectionChanged ||
          eventType == Microsoft.Office.WebExtension.EventType.BindingDataChanged ||
          eventType == Microsoft.Office.WebExtension.EventType.DataNodeDeleted ||
          eventType == Microsoft.Office.WebExtension.EventType.DataNodeInserted ||
          eventType == Microsoft.Office.WebExtension.EventType.DataNodeReplaced) {
          return id + "_" + 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,
      dispidCloseContainerMethod: 97,
      dispidGetAccessTokenMethod: 98,
      dispidGetAuthContextMethod: 99,
      dispidOpenBrowserWindow: 102,
      dispidCreateDocumentMethod: 105,
      dispidInsertFormMethod: 106,
      dispidDisplayRibbonCalloutAsyncMethod: 109,
      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,
      dispidCreateTaskMethod: 124,
      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,
      dispidMessageParentMethod: 144,
      dispidSendMessageMethod: 145,
      dispidExecuteFeature: 146,
      dispidQueryFeature: 147,
      dispidMethodMax: 147
  };
  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,
      dispidDialogNotificationShownInAddinEvent: 11,
      dispidDialogParentMessageReceivedEvent: 12,
      dispidObjectDeletedEvent: 13,
      dispidObjectSelectionChangedEvent: 14,
      dispidObjectDataChangedEvent: 15,
      dispidContentControlAddedEvent: 16,
      dispidActivationStatusChangedEvent: 32,
      dispidRichApiMessageEvent: 33,
      dispidAppCommandInvokedEvent: 39,
      dispidOlkItemSelectedChangedEvent: 46,
      dispidOlkRecipientsChangedEvent: 47,
      dispidOlkAppointmentTimeChangedEvent: 48,
      dispidOlkRecurrenceChangedEvent: 49,
      dispidOlkAttachmentsChangedEvent: 50,
      dispidOlkEnhancedLocationsChangedEvent: 51,
      dispidOlkInfobarClickedEvent: 52,
      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];
              }
              else {
                  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: 1000,
              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: 2000,
              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: 3000,
              ooeBindingNotExist: 3002,
              ooeBindingToMultipleSelection: 3003,
              ooeInvalidSelectionForBindingType: 3004,
              ooeOperationNotSupportedOnThisBindingType: 3005,
              ooeNamedItemNotFound: 3006,
              ooeMultipleNamedItemFound: 3007,
              ooeInvalidNamedItemForBindingType: 3008,
              ooeUnknownBindingType: 3009,
              ooeOperationNotSupportedOnMatrixData: 3010,
              ooeInvalidColumnsForBinding: 3011,
              ooeSettingNameNotExist: 4000,
              ooeSettingsCannotSave: 4001,
              ooeSettingsAreStale: 4002,
              ooeOperationNotSupported: 5000,
              ooeInternalError: 5001,
              ooeDocumentReadOnly: 5002,
              ooeEventHandlerNotExist: 5003,
              ooeInvalidApiCallInContext: 5004,
              ooeShuttingDown: 5005,
              ooeUnsupportedEnumeration: 5007,
              ooeIndexOutOfRange: 5008,
              ooeBrowserAPINotSupported: 5009,
              ooeInvalidParam: 5010,
              ooeRequestTimeout: 5011,
              ooeInvalidOrTimedOutSession: 5012,
              ooeInvalidApiArguments: 5013,
              ooeOperationCancelled: 5014,
              ooeWorkbookHidden: 5015,
              ooeTooManyIncompleteRequests: 5100,
              ooeRequestTokenUnavailable: 5101,
              ooeActivityLimitReached: 5102,
              ooeCustomXmlNodeNotFound: 6000,
              ooeCustomXmlError: 6100,
              ooeCustomXmlExceedQuota: 6101,
              ooeCustomXmlOutOfDate: 6102,
              ooeNoCapability: 7000,
              ooeCannotNavTo: 7001,
              ooeSpecifiedIdNotExist: 7002,
              ooeNavOutOfBound: 7004,
              ooeElementMissing: 8000,
              ooeProtectedError: 8001,
              ooeInvalidCellsValue: 8010,
              ooeInvalidTableOptionValue: 8011,
              ooeInvalidFormatValue: 8012,
              ooeRowIndexOutOfRange: 8020,
              ooeColIndexOutOfRange: 8021,
              ooeFormatValueOutOfRange: 8022,
              ooeCellFormatAmountBeyondLimits: 8023,
              ooeMemoryFileLimit: 11000,
              ooeNetworkProblemRetrieveFile: 11001,
              ooeInvalidSliceSize: 11002,
              ooeInvalidCallback: 11101,
              ooeInvalidWidth: 12000,
              ooeInvalidHeight: 12001,
              ooeNavigationError: 12002,
              ooeInvalidScheme: 12003,
              ooeAppDomains: 12004,
              ooeRequireHTTPS: 12005,
              ooeWebDialogClosed: 12006,
              ooeDialogAlreadyOpened: 12007,
              ooeEndUserAllow: 12008,
              ooeEndUserIgnore: 12009,
              ooeNotUILessDialog: 12010,
              ooeCrossZone: 12011,
              ooeNotSSOAgave: 13000,
              ooeSSOUserNotSignedIn: 13001,
              ooeSSOUserAborted: 13002,
              ooeSSOUnsupportedUserIdentity: 13003,
              ooeSSOInvalidResourceUrl: 13004,
              ooeSSOInvalidGrant: 13005,
              ooeSSOClientError: 13006,
              ooeSSOServerError: 13007,
              ooeAddinIsAlreadyRequestingToken: 13008,
              ooeSSOUserConsentNotSupportedByCurrentAddinCategory: 13009,
              ooeSSOConnectionLost: 13010,
              ooeResourceNotAllowed: 13011,
              ooeSSOUnsupportedPlatform: 13012,
              ooeAccessDenied: 13990,
              ooeGeneralException: 13991
          },
          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.ooeInvalidOrTimedOutSession] = { name: stringNS.L_InvalidOrTimedOutSession, message: stringNS.L_InvalidOrTimedOutSessionMessage };
              _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.ooeInvalidApiArguments] = { name: stringNS.L_APICallFailed, message: stringNS.L_InvalidApiArgumentsMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeWorkbookHidden] = { name: stringNS.L_APICallFailed, message: stringNS.L_WorkbookHiddenMessage };
              _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_CustomXmlExceedQuotaName, message: stringNS.L_CustomXmlExceedQuotaMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlOutOfDate] = { name: stringNS.L_CustomXmlOutOfDateName, message: stringNS.L_CustomXmlOutOfDateMessage };
              _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_DialogInvalidScheme };
              _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_DialogRequireHTTPS };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeEndUserIgnore] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_UserClickIgnore };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCrossZone] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_NewWindowCrossZoneErrorString };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNotSSOAgave] = { name: stringNS.L_APINotSupported, message: stringNS.L_InvalidSSOAddinMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUserNotSignedIn] = { name: stringNS.L_UserNotSignedIn, message: stringNS.L_UserNotSignedIn };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUserAborted] = { name: stringNS.L_UserAborted, message: stringNS.L_UserAbortedMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUnsupportedUserIdentity] = { name: stringNS.L_UnsupportedUserIdentity, message: stringNS.L_UnsupportedUserIdentityMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOInvalidResourceUrl] = { name: stringNS.L_InvalidResourceUrl, message: stringNS.L_InvalidResourceUrlMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOInvalidGrant] = { name: stringNS.L_InvalidGrant, message: stringNS.L_InvalidGrantMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOClientError] = { name: stringNS.L_SSOClientError, message: stringNS.L_SSOClientErrorMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOServerError] = { name: stringNS.L_SSOServerError, message: stringNS.L_SSOServerErrorMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeAddinIsAlreadyRequestingToken] = { name: stringNS.L_AddinIsAlreadyRequestingToken, message: stringNS.L_AddinIsAlreadyRequestingTokenMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUserConsentNotSupportedByCurrentAddinCategory] = { name: stringNS.L_SSOUserConsentNotSupportedByCurrentAddinCategory, message: stringNS.L_SSOUserConsentNotSupportedByCurrentAddinCategoryMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOConnectionLost] = { name: stringNS.L_SSOConnectionLostError, message: stringNS.L_SSOConnectionLostErrorMessage };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUnsupportedPlatform] = { name: stringNS.L_APINotSupported, message: stringNS.L_SSOUnsupportedPlatform };
              _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationCancelled] = { name: stringNS.L_OperationCancelledError, message: stringNS.L_OperationCancelledErrorMessage };
          }
      };
  })();
  var OfficeExt;
  (function (OfficeExt) {
      var Requirement;
      (function (Requirement) {
          var RequirementVersion = (function () {
              function RequirementVersion() {
              }
              return RequirementVersion;
          })();
          Requirement.RequirementVersion = RequirementVersion;
          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()];
                          try {
                              var setMaxVersionNum = this._getVersion(setMaxVersion);
                              minVersion = minVersion + "";
                              var minVersionNum = this._getVersion(minVersion);
                              if (setMaxVersionNum.major > 0 && setMaxVersionNum.major > minVersionNum.major) {
                                  return true;
                              }
                              if (setMaxVersionNum.major > 0 &&
                                  setMaxVersionNum.minor >= 0 &&
                                  setMaxVersionNum.major == minVersionNum.major &&
                                  setMaxVersionNum.minor >= minVersionNum.minor) {
                                  return true;
                              }
                          }
                          catch (e) {
                              return false;
                          }
                      }
                      return false;
                  };
                  this._getVersion = function (version) {
                      version = version + "";
                      var temp = version.split(".");
                      var major = 0;
                      var minor = 0;
                      if (temp.length < 2 && isNaN(Number(version))) {
                          throw "version format incorrect";
                      }
                      else {
                          major = Number(temp[0]);
                          if (temp.length >= 2) {
                              minor = Number(temp[1]);
                          }
                          if (isNaN(major) || isNaN(minor)) {
                              throw "version format incorrect";
                          }
                      }
                      var result = { "minor": minor, "major": major };
                      return result;
                  };
                  this._setMap = _setMap;
                  this.isSetSupported = this.isSetSupported.bind(this);
              }
              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 DefaultDialogSetRequirement = (function (_super) {
              __extends(DefaultDialogSetRequirement, _super);
              function DefaultDialogSetRequirement() {
                  _super.call(this, {
                      "dialogapi": 1.1
                  });
              }
              return DefaultDialogSetRequirement;
          })(DefaultSetRequirement);
          Requirement.DefaultDialogSetRequirement = DefaultDialogSetRequirement;
          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, {
                      "compressedfile": 1.1,
                      "documentevents": 1.1,
                      "file": 1.1,
                      "imagecoercion": 1.1,
                      "matrixcoercion": 1.1,
                      "ooxmlcoercion": 1.1,
                      "pdffile": 1.1,
                      "selection": 1.1,
                      "settings": 1.1,
                      "tablecoercion": 1.1,
                      "textcoercion": 1.1,
                      "textfile": 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.getDefaultDialogRequirementMatrix = function (appContext) {
                  var defaultRequirementMatrix = undefined;
                  var clientRequirement = appContext.get_dialogRequirementMatrix();
                  if (clientRequirement != undefined && clientRequirement.length > 0 && typeof (JSON) !== "undefined") {
                      var matrixItem = JSON.parse(appContext.get_requirementMatrix().toLowerCase());
                      defaultRequirementMatrix = new RequirementMatrix(new DefaultSetRequirement(matrixItem));
                  }
                  else {
                      defaultRequirementMatrix = new RequirementMatrix(new DefaultDialogSetRequirement());
                  }
                  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()
          },
          "host": {
              value: OfficeExt.HostName.Host.getInstance().getHost()
          },
          "platform": {
              value: OfficeExt.HostName.Host.getInstance().getPlatform()
          },
          "isDialog": {
              value: OSF._OfficeAppFactory.getHostInfo().isDialog
          },
          "diagnostics": {
              value: OfficeExt.HostName.Host.getInstance().getDiagnostics(officeAppContext.get_hostFullVersion())
          }
      });
      if (license) {
          OSF.OUtil.defineEnumerableProperty(this, "license", {
              value: license
          });
      }
      if (officeAppContext.ui) {
          OSF.OUtil.defineEnumerableProperty(this, "ui", {
              value: officeAppContext.ui
          });
      }
      if (officeAppContext.auth) {
          OSF.OUtil.defineEnumerableProperty(this, "auth", {
              value: officeAppContext.auth
          });
      }
      if (officeAppContext.webAuth) {
          OSF.OUtil.defineEnumerableProperty(this, "webAuth", {
              value: officeAppContext.webAuth
          });
      }
      if (officeAppContext.application) {
          OSF.OUtil.defineEnumerableProperty(this, "application", {
              value: officeAppContext.application
          });
      }
      if (officeAppContext.extensionLifeCycle) {
          OSF.OUtil.defineEnumerableProperty(this, "extensionLifeCycle", {
              value: officeAppContext.extensionLifeCycle
          });
      }
      if (officeAppContext.messaging) {
          OSF.OUtil.defineEnumerableProperty(this, "messaging", {
              value: officeAppContext.messaging
          });
      }
      if (officeAppContext.ui && officeAppContext.ui.taskPaneAction) {
          OSF.OUtil.defineEnumerableProperty(this, "taskPaneAction", {
              value: officeAppContext.ui.taskPaneAction
          });
      }
      if (officeAppContext.get_isDialog()) {
          var requirements = OfficeExt.Requirement.RequirementsMatrixFactory.getDefaultDialogRequirementMatrix(officeAppContext);
          OSF.OUtil.defineEnumerableProperty(this, "requirements", {
              value: requirements
          });
      }
      else {
          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 (officeAppContext.get_officeTheme()) {
              OSF.OUtil.defineEnumerableProperty(this, "officeTheme", {
                  get: function () {
                      return officeAppContext.get_officeTheme();
                  }
              });
          }
          else 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.Application = function OSF_DDA_Application(officeAppContext) {
  };
  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 sourceData = "sourceData";
      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 if (index == sourceData) {
                  extracted[param] = source.toArray();
                  continue;
              }
              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;
                          var extractedValues = new Array(value.length);
                          for (var item in value) {
                              extractedValues[item] = extractArguments(value[item], map);
                          }
                          extracted[param] = extractedValues;
                      }
                      else {
                          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.sourceData = sourceData;
      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",
      SendMessage: "sendMessage"
  };
  OSF.DDA.DispIdHost.Delegates = {
      ExecuteAsync: "executeAsync",
      RegisterEventAsync: "registerEventAsync",
      UnregisterEventAsync: "unregisterEventAsync",
      ParameterMap: "parameterMap",
      OpenDialog: "openDialog",
      CloseDialog: "closeDialog",
      MessageParent: "messageParent",
      SendMessage: "sendMessage"
  };
  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,
          "GetAccessTokenAsync": did.dispidGetAccessTokenMethod,
          "GetAuthContextAsync": did.dispidGetAuthContextMethod,
          "ExecuteRichApiRequestAsync": did.dispidExecuteRichApiRequestMethod,
          "AppCommandInvocationCompletedAsync": did.dispidAppCommandInvocationCompletedMethod,
          "CloseContainerAsync": did.dispidCloseContainerMethod,
          "OpenBrowserWindow": did.dispidOpenBrowserWindow,
          "CreateDocumentAsync": did.dispidCreateDocumentMethod,
          "InsertFormAsync": did.dispidInsertFormMethod,
          "ExecuteFeature": did.dispidExecuteFeature,
          "QueryFeature": did.dispidQueryFeature,
          "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,
          "CreateTask": did.dispidCreateTaskMethod
      };
      for (var method in methodMap) {
          if (jsom[method]) {
              dispIdMap[jsom[method].id] = methodMap[method];
          }
      }
      jsom = OSF.DDA.SyncMethodNames;
      did = OSF.DDA.MethodDispId;
      var syncMethodMap = {
          "MessageParent": did.dispidMessageParentMethod,
          "SendMessage": did.dispidSendMessageMethod
      };
      for (var method in syncMethodMap) {
          if (jsom[method]) {
              dispIdMap[jsom[method].id] = syncMethodMap[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,
          "DialogParentMessageReceived": did.dispidDialogParentMessageReceivedEvent,
          "ObjectDeleted": did.dispidObjectDeletedEvent,
          "ObjectSelectionChanged": did.dispidObjectSelectionChangedEvent,
          "ObjectDataChanged": did.dispidObjectDataChangedEvent,
          "ContentControlAdded": did.dispidContentControlAddedEvent,
          "RichApiMessage": did.dispidRichApiMessageEvent,
          "ItemChanged": did.dispidOlkItemSelectedChangedEvent,
          "RecipientsChanged": did.dispidOlkRecipientsChangedEvent,
          "AppointmentTimeChanged": did.dispidOlkAppointmentTimeChangedEvent,
          "RecurrenceChanged": did.dispidOlkRecurrenceChangedEvent,
          "AttachmentsChanged": did.dispidOlkAttachmentsChangedEvent,
          "EnhancedLocationsChanged": did.dispidOlkEnhancedLocationsChangedEvent,
          "InfobarClicked": did.dispidOlkInfobarClickedEvent,
          "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 IsObjectEvent(dispId) {
          return (dispId == OSF.DDA.EventDispId.dispidObjectDeletedEvent ||
              dispId == OSF.DDA.EventDispId.dispidObjectSelectionChangedEvent ||
              dispId == OSF.DDA.EventDispId.dispidObjectDataChangedEvent ||
              dispId == OSF.DDA.EventDispId.dispidContentControlAddedEvent);
      }
      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 richApiInExcelMethodSubstitution = null;
              if (window.Excel && window.Office.context.requirements.isSetSupported("RedirectV1Api")) {
                  window.Excel._RedirectV1APIs = true;
              }
              if (window.Excel && window.Excel._RedirectV1APIs && (richApiInExcelMethodSubstitution = window.Excel._V1APIMap[methodName])) {
                  var preprocessedCallArgs = OSF.OUtil.shallowCopy(callArgs);
                  delete preprocessedCallArgs[Microsoft.Office.WebExtension.Parameters.AsyncContext];
                  if (richApiInExcelMethodSubstitution.preprocess) {
                      preprocessedCallArgs = richApiInExcelMethodSubstitution.preprocess(preprocessedCallArgs);
                  }
                  var ctx = new window.Excel.RequestContext();
                  var result = richApiInExcelMethodSubstitution.call(ctx, preprocessedCallArgs);
                  ctx.sync()
                      .then(function () {
                      var response = result.value;
                      var status = response.status;
                      delete response["status"];
                      delete response["@odata.type"];
                      if (richApiInExcelMethodSubstitution.postprocess) {
                          response = richApiInExcelMethodSubstitution.postprocess(response, preprocessedCallArgs);
                      }
                      if (status != 0) {
                          response = OSF.DDA.ErrorCodeManager.getErrorArgs(status);
                      }
                      OSF.DDA.issueAsyncResult(callArgs, status, response);
                  })["catch"](function (error) {
                      OSF.DDA.issueAsyncResult(callArgs, OSF.DDA.ErrorCodeManager.errorCodes.ooeFailure, null);
                  });
              }
              else {
                  var hostCallArgs;
                  if (parameterMap.toHost) {
                      hostCallArgs = parameterMap.toHost(dispId, callArgs);
                  }
                  else {
                      hostCallArgs = callArgs;
                  }
                  var startTime = (new Date()).getTime();
                  delegate[OSF.DDA.DispIdHost.Delegates.ExecuteAsync]({
                      "dispId": dispId,
                      "hostCallArgs": hostCallArgs,
                      "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { },
                      "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { },
                      "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);
                          if (OSF.AppTelemetry && !(OSF.ConstantNames && OSF.ConstantNames.IsCustomFunctionsRuntime)) {
                              OSF.AppTelemetry.onMethodDone(dispId, hostCallArgs, Math.abs((new Date()).getTime() - startTime), status);
                          }
                      }
                  });
              }
          }
          catch (ex) {
              onException(ex, asyncMethodCall, suppliedArguments, callArgs);
          }
      };
      this[OSF.DDA.DispIdHost.Methods.AddEventHandler] = function OSF_DDA_DispIdHost_Facade$AddEventHandler(suppliedArguments, eventDispatch, caller, isPopupWindow) {
          var callArgs;
          var eventType, handler;
          var isObjectEvent = false;
          function onEnsureRegistration(status) {
              if (status == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                  var added = !isObjectEvent ? eventDispatch.addEventHandler(eventType, handler) :
                      eventDispatch.addObjectEventHandler(eventType, callArgs[Microsoft.Office.WebExtension.Parameters.Id], 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 (isPopupWindow) {
                  onEnsureRegistration(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
                  return;
              }
              var dispId = dispIdMap[eventType];
              isObjectEvent = IsObjectEvent(dispId);
              var targetId = (isObjectEvent ? callArgs[Microsoft.Office.WebExtension.Parameters.Id] : (caller.id || ""));
              var count = isObjectEvent ? eventDispatch.getObjectEventHandlerCount(eventType, targetId) : eventDispatch.getEventHandlerCount(eventType);
              if (count == 0) {
                  var invoker = getDelegateMethods(eventType)[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync];
                  invoker({
                      "eventType": eventType,
                      "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);
                          if (!isObjectEvent)
                              eventDispatch.fireEvent(OSF.DDA.OMFactory.manufactureEventArgs(eventType, caller, args));
                          else
                              eventDispatch.fireObjectEvent(targetId, OSF.DDA.OMFactory.manufactureEventArgs(eventType, targetId, 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;
          var isObjectEvent = false;
          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 dispId = dispIdMap[eventType];
              isObjectEvent = IsObjectEvent(dispId);
              var targetId = (isObjectEvent ? callArgs[Microsoft.Office.WebExtension.Parameters.Id] : (caller.id || ""));
              var status, removeSuccess;
              if (handler === null) {
                  removeSuccess = isObjectEvent ? eventDispatch.clearObjectEventHandlers(eventType, targetId) : eventDispatch.clearEventHandlers(eventType);
                  status = OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess;
              }
              else {
                  removeSuccess = isObjectEvent ? eventDispatch.removeObjectEventHandler(eventType, targetId, handler) : eventDispatch.removeEventHandler(eventType, handler);
                  status = removeSuccess ? OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess : OSF.DDA.ErrorCodeManager.errorCodes.ooeEventHandlerNotExist;
              }
              var count = isObjectEvent ? eventDispatch.getObjectEventHandlerCount(eventType, targetId) : eventDispatch.getEventHandlerCount(eventType);
              if (removeSuccess && count == 0) {
                  var invoker = getDelegateMethods(eventType)[OSF.DDA.DispIdHost.Delegates.UnregisterEventAsync];
                  invoker({
                      "eventType": eventType,
                      "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
                  });
              }
              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 targetId;
          var dialogMessageEvent = Microsoft.Office.WebExtension.EventType.DialogMessageReceived;
          var dialogOtherEvent = Microsoft.Office.WebExtension.EventType.DialogEventReceived;
          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.DialogShownStatus.hasDialogShown = true;
                  eventDispatch.clearEventHandlers(dialogMessageEvent);
                  eventDispatch.clearEventHandlers(dialogOtherEvent);
              }
              OSF.DDA.issueAsyncResult(callArgs, status, payload);
          }
          try {
              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);
              var dispId = dispIdMap[dialogMessageEvent];
              var delegateMethods = getDelegateMethods(dialogMessageEvent);
              var invoker = delegateMethods[OSF.DDA.DispIdHost.Delegates.OpenDialog] != undefined ?
                  delegateMethods[OSF.DDA.DispIdHost.Delegates.OpenDialog] :
                  delegateMethods[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync];
              targetId = JSON.stringify(callArgs);
              if (!OSF.DialogShownStatus.hasDialogShown) {
                  eventDispatch.clearQueuedEvent(dialogMessageEvent);
                  eventDispatch.clearQueuedEvent(dialogOtherEvent);
                  eventDispatch.clearQueuedEvent(Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived);
              }
              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);
                          eventDispatch.clearEventHandlers(Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived);
                          OSF.DialogShownStatus.hasDialogShown = false;
                      }
                  }
              });
          }
          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;
              OSF.DialogShownStatus.hasDialogShown = false;
          }
          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 delegateMethods = getDelegateMethods(dialogMessageEvent);
              var invoker = delegateMethods[OSF.DDA.DispIdHost.Delegates.CloseDialog] != undefined ?
                  delegateMethods[OSF.DDA.DispIdHost.Delegates.CloseDialog] :
                  delegateMethods[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[OSF.DDA.SyncMethodNames.MessageParent.id];
          return invoker({
              "dispId": dispId,
              "hostCallArgs": callArgs,
              "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); }
          });
      };
      this[OSF.DDA.DispIdHost.Methods.SendMessage] = function OSF_DDA_DispIdHost_Facade$SendMessage(suppliedArguments, eventDispatch, caller) {
          var stateInfo = {};
          var syncMethodCall = OSF.DDA.SyncMethodCalls[OSF.DDA.SyncMethodNames.SendMessage.id];
          var callArgs = syncMethodCall.verifyAndExtractCall(suppliedArguments, caller, stateInfo);
          var delegate = getDelegateMethods(OSF.DDA.SyncMethodNames.SendMessage.id);
          var invoker = delegate[OSF.DDA.DispIdHost.Delegates.SendMessage];
          var dispId = dispIdMap[OSF.DDA.SyncMethodNames.SendMessage.id];
          return invoker({
              "dispId": dispId,
              "hostCallArgs": callArgs,
              "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, isPopupWindow) {
      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, isPopupWindow);
              }
          });
      }
      if (!target[remove]) {
          OSF.OUtil.defineEnumerableProperty(target, remove, {
              value: function () {
                  var removeEventHandler = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.RemoveEventHandler];
                  removeEventHandler(arguments, eventDispatch, target);
              }
          });
      }
  };
  var OfficeExt;
  (function (OfficeExt) {
      var MsAjaxTypeHelper = (function () {
          function MsAjaxTypeHelper() {
          }
          MsAjaxTypeHelper.isInstanceOfType = function (type, instance) {
              if (typeof (instance) === "undefined" || instance === null)
                  return false;
              if (instance instanceof type)
                  return true;
              var instanceType = instance.constructor;
              if (!instanceType || (typeof (instanceType) !== "function") || !instanceType.__typeName || instanceType.__typeName === 'Object') {
                  instanceType = Object;
              }
              return !!(instanceType === type) ||
                  (instanceType.__typeName && type.__typeName && instanceType.__typeName === type.__typeName);
          };
          return MsAjaxTypeHelper;
      })();
      OfficeExt.MsAjaxTypeHelper = MsAjaxTypeHelper;
      var MsAjaxError = (function () {
          function MsAjaxError() {
          }
          MsAjaxError.create = function (message, errorInfo) {
              var err = new Error(message);
              err.message = message;
              if (errorInfo) {
                  for (var v in errorInfo) {
                      err[v] = errorInfo[v];
                  }
              }
              err.popStackFrame();
              return err;
          };
          MsAjaxError.parameterCount = function (message) {
              var displayMessage = "Sys.ParameterCountException: " + (message ? message : "Parameter count mismatch.");
              var err = MsAjaxError.create(displayMessage, { name: 'Sys.ParameterCountException' });
              err.popStackFrame();
              return err;
          };
          MsAjaxError.argument = function (paramName, message) {
              var displayMessage = "Sys.ArgumentException: " + (message ? message : "Value does not fall within the expected range.");
              if (paramName) {
                  displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
              }
              var err = MsAjaxError.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName });
              err.popStackFrame();
              return err;
          };
          MsAjaxError.argumentNull = function (paramName, message) {
              var displayMessage = "Sys.ArgumentNullException: " + (message ? message : "Value cannot be null.");
              if (paramName) {
                  displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
              }
              var err = MsAjaxError.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName });
              err.popStackFrame();
              return err;
          };
          MsAjaxError.argumentOutOfRange = function (paramName, actualValue, message) {
              var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : "Specified argument was out of the range of valid values.");
              if (paramName) {
                  displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
              }
              if (typeof (actualValue) !== "undefined" && actualValue !== null) {
                  displayMessage += "\n" + MsAjaxString.format("Actual value was {0}.", actualValue);
              }
              var err = MsAjaxError.create(displayMessage, {
                  name: "Sys.ArgumentOutOfRangeException",
                  paramName: paramName,
                  actualValue: actualValue
              });
              err.popStackFrame();
              return err;
          };
          MsAjaxError.argumentType = function (paramName, actualType, expectedType, message) {
              var displayMessage = "Sys.ArgumentTypeException: ";
              if (message) {
                  displayMessage += message;
              }
              else if (actualType && expectedType) {
                  displayMessage += MsAjaxString.format("Object of type '{0}' cannot be converted to type '{1}'.", actualType.getName ? actualType.getName() : actualType, expectedType.getName ? expectedType.getName() : expectedType);
              }
              else {
                  displayMessage += "Object cannot be converted to the required type.";
              }
              if (paramName) {
                  displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
              }
              var err = MsAjaxError.create(displayMessage, {
                  name: "Sys.ArgumentTypeException",
                  paramName: paramName,
                  actualType: actualType,
                  expectedType: expectedType
              });
              err.popStackFrame();
              return err;
          };
          MsAjaxError.argumentUndefined = function (paramName, message) {
              var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : "Value cannot be undefined.");
              if (paramName) {
                  displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
              }
              var err = MsAjaxError.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName });
              err.popStackFrame();
              return err;
          };
          MsAjaxError.invalidOperation = function (message) {
              var displayMessage = "Sys.InvalidOperationException: " + (message ? message : "Operation is not valid due to the current state of the object.");
              var err = MsAjaxError.create(displayMessage, { name: 'Sys.InvalidOperationException' });
              err.popStackFrame();
              return err;
          };
          return MsAjaxError;
      })();
      OfficeExt.MsAjaxError = MsAjaxError;
      var MsAjaxString = (function () {
          function MsAjaxString() {
          }
          MsAjaxString.format = function (format) {
              var args = [];
              for (var _i = 1; _i < arguments.length; _i++) {
                  args[_i - 1] = arguments[_i];
              }
              var source = format;
              return source.replace(/{(\d+)}/gm, function (match, number) {
                  var index = parseInt(number, 10);
                  return args[index] === undefined ? '{' + number + '}' : args[index];
              });
          };
          MsAjaxString.startsWith = function (str, prefix) {
              return (str.substr(0, prefix.length) === prefix);
          };
          return MsAjaxString;
      })();
      OfficeExt.MsAjaxString = MsAjaxString;
      var MsAjaxDebug = (function () {
          function MsAjaxDebug() {
          }
          MsAjaxDebug.trace = function (text) {
              if (typeof Debug !== "undefined" && Debug.writeln)
                  Debug.writeln(text);
              if (window.console && window.console.log)
                  window.console.log(text);
              if (window.opera && window.opera.postError)
                  window.opera.postError(text);
              if (window.debugService && window.debugService.trace)
                  window.debugService.trace(text);
              var a = document.getElementById("TraceConsole");
              if (a && a.tagName.toUpperCase() === "TEXTAREA") {
                  a.innerHTML += text + "\n";
              }
          };
          return MsAjaxDebug;
      })();
      OfficeExt.MsAjaxDebug = MsAjaxDebug;
      if (!OsfMsAjaxFactory.isMsAjaxLoaded()) {
          var registerTypeInternal = function registerTypeInternal(type, name, isClass) {
              if (type.__typeName === undefined || type.__typeName === null) {
                  type.__typeName = name;
              }
              if (type.__class === undefined || type.__class === null) {
                  type.__class = isClass;
              }
          };
          registerTypeInternal(Function, "Function", true);
          registerTypeInternal(Error, "Error", true);
          registerTypeInternal(Object, "Object", true);
          registerTypeInternal(String, "String", true);
          registerTypeInternal(Boolean, "Boolean", true);
          registerTypeInternal(Date, "Date", true);
          registerTypeInternal(Number, "Number", true);
          registerTypeInternal(RegExp, "RegExp", true);
          registerTypeInternal(Array, "Array", true);
          if (!Function.createCallback) {
              Function.createCallback = function Function$createCallback(method, context) {
                  var e = Function._validateParams(arguments, [
                      { name: "method", type: Function },
                      { name: "context", mayBeNull: true }
                  ]);
                  if (e)
                      throw e;
                  return function () {
                      var l = arguments.length;
                      if (l > 0) {
                          var args = [];
                          for (var i = 0; i < l; i++) {
                              args[i] = arguments[i];
                          }
                          args[l] = context;
                          return method.apply(this, args);
                      }
                      return method.call(this, context);
                  };
              };
          }
          if (!Function.createDelegate) {
              Function.createDelegate = function Function$createDelegate(instance, method) {
                  var e = Function._validateParams(arguments, [
                      { name: "instance", mayBeNull: true },
                      { name: "method", type: Function }
                  ]);
                  if (e)
                      throw e;
                  return function () {
                      return method.apply(instance, arguments);
                  };
              };
          }
          if (!Function._validateParams) {
              Function._validateParams = function (params, expectedParams, validateParameterCount) {
                  var e, expectedLength = expectedParams.length;
                  validateParameterCount = validateParameterCount || (typeof (validateParameterCount) === "undefined");
                  e = Function._validateParameterCount(params, expectedParams, validateParameterCount);
                  if (e) {
                      e.popStackFrame();
                      return e;
                  }
                  for (var i = 0, l = params.length; i < l; i++) {
                      var expectedParam = expectedParams[Math.min(i, expectedLength - 1)], paramName = expectedParam.name;
                      if (expectedParam.parameterArray) {
                          paramName += "[" + (i - expectedLength + 1) + "]";
                      }
                      else if (!validateParameterCount && (i >= expectedLength)) {
                          break;
                      }
                      e = Function._validateParameter(params[i], expectedParam, paramName);
                      if (e) {
                          e.popStackFrame();
                          return e;
                      }
                  }
                  return null;
              };
          }
          if (!Function._validateParameterCount) {
              Function._validateParameterCount = function (params, expectedParams, validateParameterCount) {
                  var i, error, expectedLen = expectedParams.length, actualLen = params.length;
                  if (actualLen < expectedLen) {
                      var minParams = expectedLen;
                      for (i = 0; i < expectedLen; i++) {
                          var param = expectedParams[i];
                          if (param.optional || param.parameterArray) {
                              minParams--;
                          }
                      }
                      if (actualLen < minParams) {
                          error = true;
                      }
                  }
                  else if (validateParameterCount && (actualLen > expectedLen)) {
                      error = true;
                      for (i = 0; i < expectedLen; i++) {
                          if (expectedParams[i].parameterArray) {
                              error = false;
                              break;
                          }
                      }
                  }
                  if (error) {
                      var e = MsAjaxError.parameterCount();
                      e.popStackFrame();
                      return e;
                  }
                  return null;
              };
          }
          if (!Function._validateParameter) {
              Function._validateParameter = function (param, expectedParam, paramName) {
                  var e, expectedType = expectedParam.type, expectedInteger = !!expectedParam.integer, expectedDomElement = !!expectedParam.domElement, mayBeNull = !!expectedParam.mayBeNull;
                  e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName);
                  if (e) {
                      e.popStackFrame();
                      return e;
                  }
                  var expectedElementType = expectedParam.elementType, elementMayBeNull = !!expectedParam.elementMayBeNull;
                  if (expectedType === Array && typeof (param) !== "undefined" && param !== null &&
                      (expectedElementType || !elementMayBeNull)) {
                      var expectedElementInteger = !!expectedParam.elementInteger, expectedElementDomElement = !!expectedParam.elementDomElement;
                      for (var i = 0; i < param.length; i++) {
                          var elem = param[i];
                          e = Function._validateParameterType(elem, expectedElementType, expectedElementInteger, expectedElementDomElement, elementMayBeNull, paramName + "[" + i + "]");
                          if (e) {
                              e.popStackFrame();
                              return e;
                          }
                      }
                  }
                  return null;
              };
          }
          if (!Function._validateParameterType) {
              Function._validateParameterType = function (param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) {
                  var e, i;
                  if (typeof (param) === "undefined") {
                      if (mayBeNull) {
                          return null;
                      }
                      else {
                          e = OfficeExt.MsAjaxError.argumentUndefined(paramName);
                          e.popStackFrame();
                          return e;
                      }
                  }
                  if (param === null) {
                      if (mayBeNull) {
                          return null;
                      }
                      else {
                          e = OfficeExt.MsAjaxError.argumentNull(paramName);
                          e.popStackFrame();
                          return e;
                      }
                  }
                  if (expectedType && !OfficeExt.MsAjaxTypeHelper.isInstanceOfType(expectedType, param)) {
                      e = OfficeExt.MsAjaxError.argumentType(paramName, typeof (param), expectedType);
                      e.popStackFrame();
                      return e;
                  }
                  return null;
              };
          }
          if (!window.Type) {
              window.Type = Function;
          }
          if (!Type.registerNamespace) {
              Type.registerNamespace = function (ns) {
                  var namespaceParts = ns.split('.');
                  var currentNamespace = window;
                  for (var i = 0; i < namespaceParts.length; i++) {
                      currentNamespace[namespaceParts[i]] = currentNamespace[namespaceParts[i]] || {};
                      currentNamespace = currentNamespace[namespaceParts[i]];
                  }
              };
          }
          if (!Type.prototype.registerClass) {
              Type.prototype.registerClass = function (cls) { cls = {}; };
          }
          if (typeof (Sys) === "undefined") {
              Type.registerNamespace('Sys');
          }
          if (!Error.prototype.popStackFrame) {
              Error.prototype.popStackFrame = function () {
                  if (arguments.length !== 0)
                      throw MsAjaxError.parameterCount();
                  if (typeof (this.stack) === "undefined" || this.stack === null ||
                      typeof (this.fileName) === "undefined" || this.fileName === null ||
                      typeof (this.lineNumber) === "undefined" || this.lineNumber === null) {
                      return;
                  }
                  var stackFrames = this.stack.split("\n");
                  var currentFrame = stackFrames[0];
                  var pattern = this.fileName + ":" + this.lineNumber;
                  while (typeof (currentFrame) !== "undefined" &&
                      currentFrame !== null &&
                      currentFrame.indexOf(pattern) === -1) {
                      stackFrames.shift();
                      currentFrame = stackFrames[0];
                  }
                  var nextFrame = stackFrames[1];
                  if (typeof (nextFrame) === "undefined" || nextFrame === null) {
                      return;
                  }
                  var nextFrameParts = nextFrame.match(/@(.*):(\d+)$/);
                  if (typeof (nextFrameParts) === "undefined" || nextFrameParts === null) {
                      return;
                  }
                  this.fileName = nextFrameParts[1];
                  this.lineNumber = parseInt(nextFrameParts[2]);
                  stackFrames.shift();
                  this.stack = stackFrames.join("\n");
              };
          }
          OsfMsAjaxFactory.msAjaxError = MsAjaxError;
          OsfMsAjaxFactory.msAjaxString = MsAjaxString;
          OsfMsAjaxFactory.msAjaxDebug = MsAjaxDebug;
      }
  })(OfficeExt || (OfficeExt = {}));
  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:
                  if (args.dispId == OSF.DDA.EventDispId.dispidDialogMessageReceivedEvent) {
                      status = OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened;
                  }
                  else {
                      status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                  }
                  break;
              case -2146828283:
                  status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidParam;
                  break;
              case -2147209089:
                  status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidParam;
                  break;
              case -2147208704:
                  status = OSF.DDA.ErrorCodeManager.errorCodes.ooeTooManyIncompleteRequests;
                  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 (OSF.DDA.TableDataProperties && 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();
          }
          OSF.ClientHostController.execute(args.dispId, toArray(args.hostCallArgs), function OSF_DDA_SafeArrayFacade$Execute_OnResponse(hostResponseArgs, resultCode) {
              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);
              }
              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 = JSON.parse(storageSettings);
          }
          else {
              storageSettings = JSON.stringify(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.saveAndSetDialogInfo = function OSF_InitializationHelper$saveAndSetDialogInfo(hostInfoValue) {
  };
  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();
              if (OfficeExt.Container) {
                  OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.CloseContainerAsync]);
              }
          }
      }
      if (OSF.DDA.OpenBrowser) {
          OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.OpenBrowserWindow]);
      }
      if (OSF.DDA.ExecuteFeature) {
          OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.ExecuteFeature]);
      }
      if (OSF.DDA.QueryFeature) {
          OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.QueryFeature]);
      }
      if (OSF.DDA.Auth) {
          appContext.auth = new OSF.DDA.Auth();
          OSF.DDA.DispIdHost.addAsyncMethods(appContext.auth, [OSF.DDA.AsyncMethodNames.GetAccessTokenAsync]);
      }
      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.OpenDialog] = OSF.DDA.SafeArray.Delegate.openDialog;
      delegateMethods[OSF.DDA.DispIdHost.Delegates.CloseDialog] = OSF.DDA.SafeArray.Delegate.closeDialog;
      delegateMethods[OSF.DDA.DispIdHost.Delegates.MessageParent] = OSF.DDA.SafeArray.Delegate.messageParent;
      delegateMethods[OSF.DDA.DispIdHost.Delegates.SendMessage] = OSF.DDA.SafeArray.Delegate.sendMessage;
      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 OfficeExt;
  (function (OfficeExt) {
      var MacRichClientHostController = (function () {
          function MacRichClientHostController() {
          }
          MacRichClientHostController.prototype.execute = function (id, params, callback) {
              setTimeout(function () {
                  window.external.Execute(id, params, callback);
              }, 0);
          };
          MacRichClientHostController.prototype.registerEvent = function (id, targetId, handler, callback) {
              setTimeout(function () {
                  window.external.RegisterEvent(id, targetId, handler, callback);
              }, 0);
          };
          MacRichClientHostController.prototype.unregisterEvent = function (id, targetId, callback) {
              setTimeout(function () {
                  window.external.UnregisterEvent(id, targetId, callback);
              }, 0);
          };
          MacRichClientHostController.prototype.openDialog = function (id, targetId, handler, callback) {
              if (MacRichClientHostController.popup && !MacRichClientHostController.popup.closed) {
                  callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened);
                  return;
              }
              var magicWord = "action=displayDialog";
              window.dialogAPIErrorCode = undefined;
              var fragmentSeparator = '#';
              var callArgs = JSON.parse(targetId);
              var callUrl = callArgs.url;
              if (!callUrl) {
                  callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidScheme);
                  return;
              }
              var urlParts = callUrl.split(fragmentSeparator);
              var seperator = "?";
              if (urlParts[0].indexOf("?") > -1) {
                  seperator = "&";
              }
              var width = screen.width * callArgs.width / 100;
              var height = screen.height * callArgs.height / 100;
              var params = "width=" + width + ", height=" + height;
              urlParts[0] = urlParts[0].concat(seperator).concat(magicWord);
              var openUrl = urlParts.join(fragmentSeparator);
              MacRichClientHostController.popup = window.open(openUrl, "", params);
              function receiveMessage(event) {
                  if (event.source == MacRichClientHostController.popup) {
                      try {
                          var messageObj = JSON.parse(event.data);
                          if (messageObj.dialogMessage) {
                              handler(id, [OSF.DialogMessageType.DialogMessageReceived, messageObj.dialogMessage.messageContent]);
                          }
                      }
                      catch (e) {
                          OsfMsAjaxFactory.msAjaxDebug.trace("messages received cannot be handlered. Message:" + event.data);
                      }
                  }
              }
              MacRichClientHostController.DialogEventListener = receiveMessage;
              function checkWindowClose() {
                  try {
                      if (MacRichClientHostController.popup == null || MacRichClientHostController.popup.closed) {
                          window.clearInterval(MacRichClientHostController.interval);
                          window.removeEventListener("message", MacRichClientHostController.DialogEventListener);
                          MacRichClientHostController.NotifyError = null;
                          handler(id, [OSF.DialogMessageType.DialogClosed]);
                      }
                  }
                  catch (e) {
                      OsfMsAjaxFactory.msAjaxDebug.trace("Error happened when popup window closed.");
                  }
              }
              if (MacRichClientHostController.popup != undefined && window.dialogAPIErrorCode == undefined) {
                  window.addEventListener("message", MacRichClientHostController.DialogEventListener);
                  MacRichClientHostController.interval = window.setInterval(checkWindowClose, 500);
                  function notifyError(errorCode) {
                      handler(id, [errorCode]);
                  }
                  MacRichClientHostController.NotifyError = notifyError;
                  callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
              }
              else {
                  var error = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                  if (window.dialogAPIErrorCode) {
                      error = window.dialogAPIErrorCode;
                  }
                  callback(error);
              }
          };
          MacRichClientHostController.prototype.messageParent = function (params) {
              var message = params[Microsoft.Office.WebExtension.Parameters.MessageToParent];
              var messageObj = { dialogMessage: { messageType: OSF.DialogMessageType.DialogMessageReceived, messageContent: message } };
              window.opener.postMessage(JSON.stringify(messageObj), window.location.origin);
          };
          MacRichClientHostController.prototype.closeDialog = function (id, targetId, callback) {
              if (MacRichClientHostController.popup) {
                  if (MacRichClientHostController.interval) {
                      window.clearInterval(MacRichClientHostController.interval);
                  }
                  MacRichClientHostController.popup.close();
                  MacRichClientHostController.popup = null;
                  window.removeEventListener("message", MacRichClientHostController.DialogEventListener);
                  MacRichClientHostController.NotifyError = null;
                  callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
              }
              else {
                  callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
              }
          };
          MacRichClientHostController.prototype.sendMessage = function (params) {
          };
          return MacRichClientHostController;
      })();
      OfficeExt.MacRichClientHostController = MacRichClientHostController;
  })(OfficeExt || (OfficeExt = {}));
  var OSF = OSF || {};
  var OSFWebkit;
  (function (OSFWebkit) {
      var WebkitSafeArray = (function () {
          function WebkitSafeArray(data) {
              this.data = data;
              this.safeArrayFlag = this.isSafeArray(data);
          }
          WebkitSafeArray.prototype.dimensions = function () {
              var dimensions = 0;
              if (this.safeArrayFlag) {
                  dimensions = this.data[0][0];
              }
              else if (this.isArray()) {
                  dimensions = 2;
              }
              return dimensions;
          };
          WebkitSafeArray.prototype.getItem = function () {
              var array = [];
              var element = null;
              if (this.safeArrayFlag) {
                  array = this.toArray();
              }
              else {
                  array = this.data;
              }
              element = array;
              for (var i = 0; i < arguments.length; i++) {
                  element = element[arguments[i]];
              }
              return element;
          };
          WebkitSafeArray.prototype.lbound = function (dimension) {
              return 0;
          };
          WebkitSafeArray.prototype.ubound = function (dimension) {
              var ubound = 0;
              if (this.safeArrayFlag) {
                  ubound = this.data[0][dimension];
              }
              else if (this.isArray()) {
                  if (dimension == 1) {
                      return this.data.length;
                  }
                  else if (dimension == 2) {
                      if (OSF.OUtil.isArray(this.data[0])) {
                          return this.data[0].length;
                      }
                      else if (this.data[0] != null) {
                          return 1;
                      }
                  }
              }
              return ubound;
          };
          WebkitSafeArray.prototype.toArray = function () {
              if (this.isArray() == false) {
                  return this.data;
              }
              var arr = [];
              var startingIndex = this.safeArrayFlag ? 1 : 0;
              for (var i = startingIndex; i < this.data.length; i++) {
                  var element = this.data[i];
                  if (this.isSafeArray(element)) {
                      arr.push(new WebkitSafeArray(element));
                  }
                  else {
                      arr.push(element);
                  }
              }
              return arr;
          };
          WebkitSafeArray.prototype.isArray = function () {
              return OSF.OUtil.isArray(this.data);
          };
          WebkitSafeArray.prototype.isSafeArray = function (obj) {
              var isSafeArray = false;
              if (OSF.OUtil.isArray(obj) && OSF.OUtil.isArray(obj[0])) {
                  var bounds = obj[0];
                  var dimensions = bounds[0];
                  if (bounds.length != dimensions + 1) {
                      return false;
                  }
                  var expectedArraySize = 1;
                  for (var i = 1; i < bounds.length; i++) {
                      var dimension = bounds[i];
                      if (isFinite(dimension) == false) {
                          return false;
                      }
                      expectedArraySize = expectedArraySize * dimension;
                  }
                  expectedArraySize++;
                  isSafeArray = (expectedArraySize == obj.length);
              }
              return isSafeArray;
          };
          return WebkitSafeArray;
      })();
      OSFWebkit.WebkitSafeArray = WebkitSafeArray;
  })(OSFWebkit || (OSFWebkit = {}));
  var OSFWebkit;
  (function (OSFWebkit) {
      var ScriptMessaging;
      (function (ScriptMessaging) {
          var scriptMessenger = null;
          function agaveHostCallback(callbackId, params) {
              scriptMessenger.agaveHostCallback(callbackId, params);
          }
          ScriptMessaging.agaveHostCallback = agaveHostCallback;
          function agaveHostEventCallback(callbackId, params) {
              scriptMessenger.agaveHostEventCallback(callbackId, params);
          }
          ScriptMessaging.agaveHostEventCallback = agaveHostEventCallback;
          function GetScriptMessenger() {
              if (scriptMessenger == null) {
                  scriptMessenger = new WebkitScriptMessaging("OSF.ScriptMessaging.agaveHostCallback", "OSF.ScriptMessaging.agaveHostEventCallback");
              }
              return scriptMessenger;
          }
          ScriptMessaging.GetScriptMessenger = GetScriptMessenger;
          var EventHandlerCallback = (function () {
              function EventHandlerCallback(id, targetId, handler) {
                  this.id = id;
                  this.targetId = targetId;
                  this.handler = handler;
              }
              return EventHandlerCallback;
          })();
          var WebkitScriptMessaging = (function () {
              function WebkitScriptMessaging(methodCallbackName, eventCallbackName) {
                  this.callingIndex = 0;
                  this.callbackList = {};
                  this.eventHandlerList = {};
                  this.asyncMethodCallbackFunctionName = methodCallbackName;
                  this.eventCallbackFunctionName = eventCallbackName;
                  this.conversationId = WebkitScriptMessaging.getCurrentTimeMS().toString();
              }
              WebkitScriptMessaging.prototype.invokeMethod = function (handlerName, methodId, params, callback) {
                  var messagingArgs = {};
                  this.postWebkitMessage(messagingArgs, handlerName, methodId, params, callback);
              };
              WebkitScriptMessaging.prototype.registerEvent = function (handlerName, methodId, dispId, targetId, handler, callback) {
                  var messagingArgs = {
                      eventCallbackFunction: this.eventCallbackFunctionName
                  };
                  var hostArgs = {
                      id: dispId,
                      targetId: targetId
                  };
                  var correlationId = this.postWebkitMessage(messagingArgs, handlerName, methodId, hostArgs, callback);
                  this.eventHandlerList[correlationId] = new EventHandlerCallback(dispId, targetId, handler);
              };
              WebkitScriptMessaging.prototype.unregisterEvent = function (handlerName, methodId, dispId, targetId, callback) {
                  var hostArgs = {
                      id: dispId,
                      targetId: targetId
                  };
                  for (var key in this.eventHandlerList) {
                      if (this.eventHandlerList.hasOwnProperty(key)) {
                          var eventCallback = this.eventHandlerList[key];
                          if (eventCallback.id == dispId && eventCallback.targetId == targetId) {
                              delete this.eventHandlerList[key];
                          }
                      }
                  }
                  this.invokeMethod(handlerName, methodId, hostArgs, callback);
              };
              WebkitScriptMessaging.prototype.agaveHostCallback = function (callbackId, params) {
                  var callbackFunction = this.callbackList[callbackId];
                  if (callbackFunction) {
                      var callbacksDone = callbackFunction(params);
                      if (callbacksDone === undefined || callbacksDone === true) {
                          delete this.callbackList[callbackId];
                      }
                  }
              };
              WebkitScriptMessaging.prototype.agaveHostEventCallback = function (callbackId, params) {
                  var eventCallback = this.eventHandlerList[callbackId];
                  if (eventCallback) {
                      eventCallback.handler(params);
                  }
              };
              WebkitScriptMessaging.prototype.postWebkitMessage = function (messagingArgs, handlerName, methodId, params, callback) {
                  messagingArgs.methodId = methodId;
                  messagingArgs.params = params;
                  var correlationId = "";
                  if (callback) {
                      correlationId = this.generateCorrelationId();
                      this.callbackList[correlationId] = callback;
                      messagingArgs.callbackId = correlationId;
                      messagingArgs.callbackFunction = this.asyncMethodCallbackFunctionName;
                  }
                  var invokePostMessage = function () {
                      window.webkit.messageHandlers[handlerName].postMessage(JSON.stringify(messagingArgs));
                  };
                  var currentTimestamp = WebkitScriptMessaging.getCurrentTimeMS();
                  if (this.lastMessageTimestamp == null || (currentTimestamp - this.lastMessageTimestamp >= WebkitScriptMessaging.MESSAGE_TIME_DELTA)) {
                      invokePostMessage();
                      this.lastMessageTimestamp = currentTimestamp;
                  }
                  else {
                      this.lastMessageTimestamp += WebkitScriptMessaging.MESSAGE_TIME_DELTA;
                      setTimeout(function () {
                          invokePostMessage();
                      }, this.lastMessageTimestamp - currentTimestamp);
                  }
                  return correlationId;
              };
              WebkitScriptMessaging.prototype.generateCorrelationId = function () {
                  ++this.callingIndex;
                  return this.conversationId + this.callingIndex;
              };
              WebkitScriptMessaging.getCurrentTimeMS = function () {
                  return (new Date).getTime();
              };
              WebkitScriptMessaging.MESSAGE_TIME_DELTA = 10;
              return WebkitScriptMessaging;
          })();
          ScriptMessaging.WebkitScriptMessaging = WebkitScriptMessaging;
      })(ScriptMessaging = OSFWebkit.ScriptMessaging || (OSFWebkit.ScriptMessaging = {}));
  })(OSFWebkit || (OSFWebkit = {}));
  OSF.ScriptMessaging = OSFWebkit.ScriptMessaging;
  var OSFWebkit;
  (function (OSFWebkit) {
      OSFWebkit.MessageHandlerName = "Agave";
      OSFWebkit.PopupMessageHandlerName = "WefPopupHandler";
      (function (AppContextProperties) {
          AppContextProperties[AppContextProperties["Settings"] = 0] = "Settings";
          AppContextProperties[AppContextProperties["SolutionReferenceId"] = 1] = "SolutionReferenceId";
          AppContextProperties[AppContextProperties["AppType"] = 2] = "AppType";
          AppContextProperties[AppContextProperties["MajorVersion"] = 3] = "MajorVersion";
          AppContextProperties[AppContextProperties["MinorVersion"] = 4] = "MinorVersion";
          AppContextProperties[AppContextProperties["RevisionVersion"] = 5] = "RevisionVersion";
          AppContextProperties[AppContextProperties["APIVersionSequence"] = 6] = "APIVersionSequence";
          AppContextProperties[AppContextProperties["AppCapabilities"] = 7] = "AppCapabilities";
          AppContextProperties[AppContextProperties["APPUILocale"] = 8] = "APPUILocale";
          AppContextProperties[AppContextProperties["AppDataLocale"] = 9] = "AppDataLocale";
          AppContextProperties[AppContextProperties["BindingCount"] = 10] = "BindingCount";
          AppContextProperties[AppContextProperties["DocumentUrl"] = 11] = "DocumentUrl";
          AppContextProperties[AppContextProperties["ActivationMode"] = 12] = "ActivationMode";
          AppContextProperties[AppContextProperties["ControlIntegrationLevel"] = 13] = "ControlIntegrationLevel";
          AppContextProperties[AppContextProperties["SolutionToken"] = 14] = "SolutionToken";
          AppContextProperties[AppContextProperties["APISetVersion"] = 15] = "APISetVersion";
          AppContextProperties[AppContextProperties["CorrelationId"] = 16] = "CorrelationId";
          AppContextProperties[AppContextProperties["InstanceId"] = 17] = "InstanceId";
          AppContextProperties[AppContextProperties["TouchEnabled"] = 18] = "TouchEnabled";
          AppContextProperties[AppContextProperties["CommerceAllowed"] = 19] = "CommerceAllowed";
          AppContextProperties[AppContextProperties["RequirementMatrix"] = 20] = "RequirementMatrix";
          AppContextProperties[AppContextProperties["HostCustomMessage"] = 21] = "HostCustomMessage";
          AppContextProperties[AppContextProperties["HostFullVersion"] = 22] = "HostFullVersion";
      })(OSFWebkit.AppContextProperties || (OSFWebkit.AppContextProperties = {}));
      var AppContextProperties = OSFWebkit.AppContextProperties;
      (function (MethodId) {
          MethodId[MethodId["Execute"] = 1] = "Execute";
          MethodId[MethodId["RegisterEvent"] = 2] = "RegisterEvent";
          MethodId[MethodId["UnregisterEvent"] = 3] = "UnregisterEvent";
          MethodId[MethodId["WriteSettings"] = 4] = "WriteSettings";
          MethodId[MethodId["GetContext"] = 5] = "GetContext";
          MethodId[MethodId["SendMessage"] = 6] = "SendMessage";
          MethodId[MethodId["MessageParent"] = 7] = "MessageParent";
      })(OSFWebkit.MethodId || (OSFWebkit.MethodId = {}));
      var MethodId = OSFWebkit.MethodId;
      var WebkitHostController = (function () {
          function WebkitHostController(hostScriptProxy) {
              this.hostScriptProxy = hostScriptProxy;
              this.useFullDialogAPI = !!window._enableFullDialogAPI;
          }
          WebkitHostController.prototype.execute = function (id, params, callback) {
              var hostParams = {
                  id: id,
                  apiArgs: params
              };
              var agaveResponseCallback = function (payload) {
                  if (callback) {
                      var invokeArguments = [];
                      if (OSF.OUtil.isArray(payload)) {
                          for (var i = 0; i < payload.length; i++) {
                              var element = payload[i];
                              if (OSF.OUtil.isArray(element)) {
                                  element = new OSFWebkit.WebkitSafeArray(element);
                              }
                              invokeArguments.unshift(element);
                          }
                      }
                      return callback.apply(null, invokeArguments);
                  }
              };
              this.hostScriptProxy.invokeMethod(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.Execute, hostParams, agaveResponseCallback);
          };
          WebkitHostController.prototype.registerEvent = function (id, targetId, handler, callback) {
              var agaveEventHandlerCallback = function (payload) {
                  var safeArraySource = payload;
                  var eventId = 0;
                  if (OSF.OUtil.isArray(payload) && payload.length >= 2) {
                      safeArraySource = payload[0];
                      eventId = payload[1];
                  }
                  if (handler) {
                      handler(eventId, new OSFWebkit.WebkitSafeArray(safeArraySource));
                  }
              };
              var agaveResponseCallback = function (payload) {
                  if (callback) {
                      return callback(new OSFWebkit.WebkitSafeArray(payload));
                  }
              };
              this.hostScriptProxy.registerEvent(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.RegisterEvent, id, targetId, agaveEventHandlerCallback, agaveResponseCallback);
          };
          WebkitHostController.prototype.unregisterEvent = function (id, targetId, callback) {
              var agaveResponseCallback = function (response) {
                  return callback(new OSFWebkit.WebkitSafeArray(response));
              };
              this.hostScriptProxy.unregisterEvent(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.UnregisterEvent, id, targetId, agaveResponseCallback);
          };
          WebkitHostController.prototype.messageParent = function (params) {
              var message = params[Microsoft.Office.WebExtension.Parameters.MessageToParent];
              if (this.useFullDialogAPI) {
                  this.hostScriptProxy.invokeMethod(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.MessageParent, message, null);
              }
              else {
                  var messageObj = { dialogMessage: { messageType: OSF.DialogMessageType.DialogMessageReceived, messageContent: message } };
                  window.opener.postMessage(JSON.stringify(messageObj), window.location.origin);
              }
          };
          WebkitHostController.prototype.openDialog = function (id, targetId, handler, callback) {
              if (this.useFullDialogAPI) {
                  this.registerEvent(id, targetId, handler, callback);
                  return;
              }
              if (WebkitHostController.popup && !WebkitHostController.popup.closed) {
                  callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened);
                  return;
              }
              var magicWord = "action=displayDialog";
              WebkitHostController.OpenDialogCallback = undefined;
              var fragmentSeparator = '#';
              var callArgs = JSON.parse(targetId);
              var callUrl = callArgs.url;
              if (!callUrl) {
                  callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidScheme);
                  return;
              }
              var urlParts = callUrl.split(fragmentSeparator);
              var seperator = "?";
              if (urlParts[0].indexOf("?") > -1) {
                  seperator = "&";
              }
              var width = screen.width * callArgs.width / 100;
              var height = screen.height * callArgs.height / 100;
              var params = "width=" + width + ", height=" + height;
              urlParts[0] = urlParts[0].concat(seperator).concat(magicWord);
              var openUrl = urlParts.join(fragmentSeparator);
              WebkitHostController.popup = window.open(openUrl, "", params);
              function receiveMessage(event) {
                  if (event.origin == window.location.origin) {
                      try {
                          var messageObj = JSON.parse(event.data);
                          if (messageObj.dialogMessage) {
                              handler(id, [OSF.DialogMessageType.DialogMessageReceived, messageObj.dialogMessage.messageContent]);
                          }
                      }
                      catch (e) {
                          OsfMsAjaxFactory.msAjaxDebug.trace("messages received cannot be handlered. Message:" + event.data);
                      }
                  }
              }
              WebkitHostController.DialogEventListener = receiveMessage;
              function checkWindowClose() {
                  try {
                      if (WebkitHostController.popup == null || WebkitHostController.popup.closed) {
                          window.clearInterval(WebkitHostController.interval);
                          window.removeEventListener("message", WebkitHostController.DialogEventListener);
                          WebkitHostController.NotifyError = null;
                          WebkitHostController.popup = null;
                          handler(id, [OSF.DialogMessageType.DialogClosed]);
                      }
                  }
                  catch (e) {
                      OsfMsAjaxFactory.msAjaxDebug.trace("Error happened when popup window closed.");
                  }
              }
              WebkitHostController.OpenDialogCallback = function (code) {
                  if (code == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                      window.addEventListener("message", WebkitHostController.DialogEventListener);
                      WebkitHostController.interval = window.setInterval(checkWindowClose, 1000);
                      function notifyError(errorCode) {
                          handler(id, [errorCode]);
                      }
                      WebkitHostController.NotifyError = notifyError;
                  }
                  callback(code);
              };
          };
          WebkitHostController.prototype.closeDialog = function (id, targetId, callback) {
              if (this.useFullDialogAPI) {
                  this.unregisterEvent(id, targetId, callback);
              }
              else {
                  if (WebkitHostController.popup) {
                      if (WebkitHostController.interval) {
                          window.clearInterval(WebkitHostController.interval);
                      }
                      WebkitHostController.popup.close();
                      WebkitHostController.popup = null;
                      window.removeEventListener("message", WebkitHostController.DialogEventListener);
                      WebkitHostController.NotifyError = null;
                      callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
                  }
                  else {
                      callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
                  }
              }
          };
          WebkitHostController.prototype.sendMessage = function (params) {
              var message = params[Microsoft.Office.WebExtension.Parameters.MessageContent];
              if (!isNaN(parseFloat(message)) && isFinite(message)) {
                  message = message.toString();
              }
              this.hostScriptProxy.invokeMethod(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.SendMessage, message, null);
          };
          return WebkitHostController;
      })();
      OSFWebkit.WebkitHostController = WebkitHostController;
  })(OSFWebkit || (OSFWebkit = {}));
  OSF.Webkit = OSFWebkit;
  OSF.initializeWebkitCommon = function OSF_initializeWebkitCommon() {
      OSF.DDA.ClientSettingsManager = {
          getSettingsExecuteMethod: function OSF_DDA_ClientSettingsManager$getSettingsExecuteMethod(hostDelegateMethod) {
              return function (args) {
                  var status, response;
                  var onComplete = function onComplete(status, response) {
                      if (args.onReceiving) {
                          args.onReceiving();
                      }
                      if (args.onComplete) {
                          args.onComplete(status, response);
                      }
                  };
                  try {
                      hostDelegateMethod(args.hostCallArgs, args.onCalling, onComplete);
                  }
                  catch (ex) {
                      status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                      response = { name: Strings.OfficeOM.L_InternalError, message: ex };
                      onComplete(status, response);
                  }
              };
          },
          read: function OSF_DDA_ClientSettingsManager$read(onCalling, onComplete) {
              var keys = [];
              var values = [];
              if (onCalling) {
                  onCalling();
              }
              var initializationHelper = OSF._OfficeAppFactory.getInitializationHelper();
              var onReceivedContext = function onReceivedContext(appContext) {
                  if (onComplete) {
                      onComplete(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess, appContext.get_settings());
                  }
              };
              initializationHelper.getAppContext(null, onReceivedContext);
          },
          write: function OSF_DDA_ClientSettingsManager$write(serializedSettings, overwriteIfStale, onCalling, onComplete) {
              var hostParams = {};
              var keys = [];
              var values = [];
              for (var key in serializedSettings) {
                  keys.push(key);
                  values.push(serializedSettings[key]);
              }
              hostParams["keys"] = keys;
              hostParams["values"] = values;
              if (onCalling) {
                  onCalling();
              }
              var onWriteCompleted = function onWriteCompleted(status) {
                  if (onComplete) {
                      onComplete(status[0], null);
                  }
              };
              OSF.ScriptMessaging.GetScriptMessenger().invokeMethod(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.WriteSettings, hostParams, onWriteCompleted);
          }
      };
      OSF.InitializationHelper.prototype.initializeSettings = function OSF_InitializationHelper$initializeSettings(appContext, refreshSupported) {
          var serializedSettings = appContext.get_settings();
          var settings = this.deserializeSettings(serializedSettings, refreshSupported);
          return settings;
      };
      OSF.InitializationHelper.prototype.getAppContext = function OSF_InitializationHelper$getAppContext(wnd, gotAppContext) {
          var getInvocationCallback = function OSF_InitializationHelper_getAppContextAsync$getInvocationCallbackWebApp(appContext) {
              var returnedContext;
              var appContextProperties = OSF.Webkit.AppContextProperties;
              var appType = appContext[appContextProperties.AppType];
              var hostSettings = appContext[appContextProperties.Settings];
              var serializedSettings = {};
              var keys = hostSettings[0];
              var values = hostSettings[1];
              for (var index = 0; index < keys.length; index++) {
                  serializedSettings[keys[index]] = values[index];
              }
              var id = appContext[appContextProperties.SolutionReferenceId];
              var version = appContext[appContextProperties.MajorVersion];
              var minorVersion = appContext[appContextProperties.MinorVersion];
              var clientMode = appContext[appContextProperties.AppCapabilities];
              var UILocale = appContext[appContextProperties.APPUILocale];
              var dataLocale = appContext[appContextProperties.AppDataLocale];
              var docUrl = appContext[appContextProperties.DocumentUrl];
              var reason = appContext[appContextProperties.ActivationMode];
              var osfControlType = appContext[appContextProperties.ControlIntegrationLevel];
              var eToken = appContext[appContextProperties.SolutionToken];
              eToken = eToken ? eToken.toString() : "";
              var correlationId = appContext[appContextProperties.CorrelationId];
              var appInstanceId = appContext[appContextProperties.InstanceId];
              var touchEnabled = appContext[appContextProperties.TouchEnabled];
              var commerceAllowed = appContext[appContextProperties.CommerceAllowed];
              var requirementMatrix = appContext[appContextProperties.RequirementMatrix];
              var hostCustomMessage = appContext[appContextProperties.HostCustomMessage];
              var hostFullVersion = appContext[appContextProperties.HostFullVersion];
              returnedContext = new OSF.OfficeAppContext(id, appType, version, UILocale, dataLocale, docUrl, clientMode, serializedSettings, reason, osfControlType, eToken, correlationId, appInstanceId, touchEnabled, commerceAllowed, minorVersion, requirementMatrix, hostCustomMessage, hostFullVersion);
              if (OSF.AppTelemetry) {
                  OSF.AppTelemetry.initialize(returnedContext);
              }
              gotAppContext(returnedContext);
          };
          var handler;
          if (this._hostInfo.isDialog && window.webkit.messageHandlers[OSF.Webkit.PopupMessageHandlerName]) {
              handler = OSF.Webkit.PopupMessageHandlerName;
          }
          else {
              handler = OSF.Webkit.MessageHandlerName;
          }
          OSF.ScriptMessaging.GetScriptMessenger().invokeMethod(handler, OSF.Webkit.MethodId.GetContext, [], getInvocationCallback);
      };
  };
  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 = 5000;
              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.initializeRichCommon = function OSF_initializeRichCommon() {
      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();
              }
              if (typeof OsfOMToken != 'undefined' && OsfOMToken) {
                  OSF.DDA._OsfControlContext.GetSettings(OsfOMToken).Read(keys, values);
              }
              else {
                  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();
              }
              if (typeof OsfOMToken != 'undefined' && OsfOMToken) {
                  OSF.DDA._OsfControlContext.GetSettings(OsfOMToken).Write(keys, values);
              }
              else {
                  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;
          var warningText = "Warning: Office.js is loaded outside of Office client";
          try {
              if (window.external && typeof window.external.GetContext !== 'undefined') {
                  context = OSF.DDA._OsfControlContext = window.external.GetContext();
              }
              else {
                  OsfMsAjaxFactory.msAjaxDebug.trace(warningText);
                  return;
              }
          }
          catch (e) {
              OsfMsAjaxFactory.msAjaxDebug.trace(warningText);
              return;
          }
          var appType = context.GetAppType();
          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();
          }
          var hostCustomMessage;
          if (typeof context.GetHostCustomMessage !== "undefined") {
              hostCustomMessage = context.GetHostCustomMessage();
          }
          var hostFullVersion;
          if (typeof context.GetHostFullVersion !== "undefined") {
              hostFullVersion = context.GetHostFullVersion();
          }
          var dialogRequirementMatrix;
          if (typeof context.GetDialogRequirementMatrix != "undefined") {
              dialogRequirementMatrix = context.GetDialogRequirementMatrix();
          }
          var sdxFeatureGates;
          if (typeof context.GetFeaturesForSolution != "undefined") {
              try {
                  var sdxFeatureGatesJson = context.GetFeaturesForSolution();
                  if (sdxFeatureGatesJson) {
                      sdxFeatureGates = JSON.parse(sdxFeatureGatesJson);
                  }
              }
              catch (ex) {
                  OsfMsAjaxFactory.msAjaxDebug.trace("Exception while creating the SDX FeatureGates object. Details: " + ex);
              }
          }
          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, hostCustomMessage, hostFullVersion, undefined, undefined, undefined, undefined, dialogRequirementMatrix, sdxFeatureGates);
          if (OSF.AppTelemetry) {
              OSF.AppTelemetry.initialize(returnedContext);
          }
          gotAppContext(returnedContext);
      };
  };
  (function () {
      function isWebkit2Sandbox() {
          return window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.Agave;
      }
      if (isWebkit2Sandbox()) {
          OSF.ClientHostController = new OSFWebkit.WebkitHostController(OSF.ScriptMessaging.GetScriptMessenger());
          OSF.initializeWebkitCommon();
          OSF.InitializationHelper.prototype.initializeMacSettings = function (appContext, refreshSupported) {
              return this._initializeSettings(appContext, refreshSupported);
          };
      }
      else {
          OSF.ClientHostController = new OfficeExt.MacRichClientHostController();
          OSF.initializeRichCommon();
          OSF.InitializationHelper.prototype.initializeMacSettings = function (appContext, refreshSupported) {
              return this._initializeSettings(refreshSupported);
          };
      }
  })();
  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
          });
          Object.defineProperty(AppActivatedUsageData.prototype, "Message", {
              get: function () { return this.Fields["Message"]; },
              set: function (value) { this.Fields["Message"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(AppActivatedUsageData.prototype, "DocUrl", {
              get: function () { return this.Fields["DocUrl"]; },
              set: function (value) { this.Fields["DocUrl"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(AppActivatedUsageData.prototype, "OfficeJSVersion", {
              get: function () { return this.Fields["OfficeJSVersion"]; },
              set: function (value) { this.Fields["OfficeJSVersion"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(AppActivatedUsageData.prototype, "HostJSVersion", {
              get: function () { return this.Fields["HostJSVersion"]; },
              set: function (value) { this.Fields["HostJSVersion"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(AppActivatedUsageData.prototype, "WacHostEnvironment", {
              get: function () { return this.Fields["WacHostEnvironment"]; },
              set: function (value) { this.Fields["WacHostEnvironment"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(AppActivatedUsageData.prototype, "IsFromWacAutomation", {
              get: function () { return this.Fields["IsFromWacAutomation"]; },
              set: function (value) { this.Fields["IsFromWacAutomation"] = 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);
              this.SetSerializedField("Message", this.Message);
              this.SetSerializedField("DocUrl", this.DocUrl);
              this.SetSerializedField("OfficeJSVersion", this.OfficeJSVersion);
              this.SetSerializedField("HostJSVersion", this.HostJSVersion);
              this.SetSerializedField("WacHostEnvironment", this.WacHostEnvironment);
              this.SetSerializedField("IsFromWacAutomation", this.IsFromWacAutomation);
          };
          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;
      var CheckWACHostUsageData = (function (_super) {
          __extends(CheckWACHostUsageData, _super);
          function CheckWACHostUsageData() {
              _super.call(this, "CheckWACHost");
          }
          Object.defineProperty(CheckWACHostUsageData.prototype, "isWacKnownHost", {
              get: function () { return this.Fields["isWacKnownHost"]; },
              set: function (value) { this.Fields["isWacKnownHost"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(CheckWACHostUsageData.prototype, "solutionId", {
              get: function () { return this.Fields["solutionId"]; },
              set: function (value) { this.Fields["solutionId"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(CheckWACHostUsageData.prototype, "hostType", {
              get: function () { return this.Fields["hostType"]; },
              set: function (value) { this.Fields["hostType"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(CheckWACHostUsageData.prototype, "hostPlatform", {
              get: function () { return this.Fields["hostPlatform"]; },
              set: function (value) { this.Fields["hostPlatform"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(CheckWACHostUsageData.prototype, "wacDomain", {
              get: function () { return this.Fields["wacDomain"]; },
              set: function (value) { this.Fields["wacDomain"] = value; },
              enumerable: true,
              configurable: true
          });
          Object.defineProperty(CheckWACHostUsageData.prototype, "correlationId", {
              get: function () { return this.Fields["correlationId"]; },
              set: function (value) { this.Fields["correlationId"] = value; },
              enumerable: true,
              configurable: true
          });
          CheckWACHostUsageData.prototype.SerializeFields = function () {
              this.SetSerializedField("isWacKnownHost", this.isWacKnownHost);
              this.SetSerializedField("solutionId", this.solutionId);
              this.SetSerializedField("hostType", this.hostType);
              this.SetSerializedField("hostPlatform", this.hostPlatform);
              this.SetSerializedField("wacDomain", this.wacDomain);
              this.SetSerializedField("correlationId", this.correlationId);
          };
          return CheckWACHostUsageData;
      })(BaseUsageData);
      OSFLog.CheckWACHostUsageData = CheckWACHostUsageData;
  })(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() {
      }
      Logger.allowUploadingData = allowUploadingData;
      function sendLog(traceLevel, message, flag) {
      }
      Logger.sendLog = sendLog;
      function creatULSEndpoint() {
          try {
              return new ULSEndpointProxy();
          }
          catch (e) {
              return null;
          }
      }
      var ULSEndpointProxy = (function () {
          function ULSEndpointProxy() {
          }
          ULSEndpointProxy.prototype.writeLog = function (log) {
          };
          ULSEndpointProxy.prototype.loadProxyFrame = function () {
          };
          return ULSEndpointProxy;
      })();
      if (!OSF.Logger) {
          OSF.Logger = Logger;
      }
      Logger.ulsEndpoint = creatULSEndpoint();
  })(Logger || (Logger = {}));
  var OSFAriaLogger;
  (function (OSFAriaLogger) {
      var TelemetryEventAppActivated = { name: "AppActivated", enabled: true, basic: true, critical: true, points: [
              { name: "Browser", type: "string" },
              { name: "Message", type: "string" },
              { name: "AppURL", type: "string" },
              { name: "Host", type: "string" },
              { name: "AppSizeWidth", type: "int64" },
              { name: "AppSizeHeight", type: "int64" },
              { name: "IsFromWacAutomation", type: "string" },
          ] };
      var TelemetryEventScriptLoad = { name: "ScriptLoad", enabled: true, basic: false, critical: false, points: [
              { name: "ScriptId", type: "string" },
              { name: "StartTime", type: "double" },
              { name: "ResponseTime", type: "double" },
          ] };
      var TelemetryEventApiUsage = { name: "APIUsage", enabled: false, basic: false, critical: false, points: [
              { name: "APIType", type: "string" },
              { name: "APIID", type: "int64" },
              { name: "Parameters", type: "string" },
              { name: "ResponseTime", type: "int64" },
              { name: "ErrorType", type: "int64" },
          ] };
      var TelemetryEventAppInitialization = { name: "AppInitialization", enabled: true, basic: false, critical: false, points: [
              { name: "SuccessCode", type: "int64" },
              { name: "Message", type: "string" },
          ] };
      var TelemetryEventAppClosed = { name: "AppClosed", enabled: true, basic: false, critical: false, points: [
              { name: "FocusTime", type: "int64" },
              { name: "AppSizeFinalWidth", type: "int64" },
              { name: "AppSizeFinalHeight", type: "int64" },
              { name: "OpenTime", type: "int64" },
          ] };
      var TelemetryEventCheckWACHost = { name: "CheckWACHost", enabled: true, basic: false, critical: false, points: [
              { name: "isWacKnownHost", type: "int64" },
              { name: "solutionId", type: "string" },
              { name: "hostType", type: "string" },
              { name: "hostPlatform", type: "string" },
              { name: "correlationId", type: "string" },
              { name: "wacDomain", type: "string" },
          ] };
      var TelemetryEvents = [
          TelemetryEventAppActivated,
          TelemetryEventScriptLoad,
          TelemetryEventApiUsage,
          TelemetryEventAppInitialization,
          TelemetryEventAppClosed,
          TelemetryEventCheckWACHost,
      ];
      function createDataField(value, point) {
          var key = point.rename === undefined ? point.name : point.rename;
          var type = point.type;
          var field = undefined;
          switch (type) {
              case "string":
                  field = oteljs.makeStringDataField(key, value);
                  break;
              case "double":
                  if (typeof value === "string") {
                      value = parseFloat(value);
                  }
                  field = oteljs.makeDoubleDataField(key, value);
                  break;
              case "int64":
                  if (typeof value === "string") {
                      value = parseInt(value);
                  }
                  field = oteljs.makeInt64DataField(key, value);
                  break;
              case "boolean":
                  if (typeof value === "string") {
                      value = value === "true";
                  }
                  field = oteljs.makeBooleanDataField(key, value);
                  break;
          }
          return field;
      }
      function getEventDefinition(eventName) {
          for (var _i = 0; _i < TelemetryEvents.length; _i++) {
              var event_1 = TelemetryEvents[_i];
              if (event_1.name === eventName) {
                  return event_1;
              }
          }
          return undefined;
      }
      function eventEnabled(eventName) {
          var eventDefinition = getEventDefinition(eventName);
          if (eventDefinition === undefined) {
              return false;
          }
          return eventDefinition.enabled;
      }
      function generateTelemetryEvent(eventName, telemetryData) {
          var eventDefinition = getEventDefinition(eventName);
          if (eventDefinition === undefined) {
              return undefined;
          }
          var dataFields = [];
          for (var _i = 0, _a = eventDefinition.points; _i < _a.length; _i++) {
              var point = _a[_i];
              var key = point.name;
              var value = telemetryData[key];
              if (value === undefined) {
                  continue;
              }
              var field = createDataField(value, point);
              if (field !== undefined) {
                  dataFields.push(field);
              }
          }
          var flags = { dataCategories: oteljs.DataCategories.ProductServiceUsage };
          if (eventDefinition.critical) {
              flags.samplingPolicy = oteljs.SamplingPolicy.CriticalBusinessImpact;
          }
          if (eventDefinition.basic) {
              flags.diagnosticLevel = oteljs.DiagnosticLevel.BasicEvent;
          }
          var eventNameFull = "Office.Extensibility.OfficeJs." + eventName + "X";
          var event = { eventName: eventNameFull, dataFields: dataFields, eventFlags: flags };
          return event;
      }
      function sendOtelTelemetryEvent(eventName, telemetryData) {
          if (eventEnabled(eventName)) {
              if (typeof OTel !== "undefined") {
                  OTel.OTelLogger.onTelemetryLoaded(function () {
                      var event = generateTelemetryEvent(eventName, telemetryData);
                      if (event === undefined) {
                          return;
                      }
                      Microsoft.Office.WebExtension.sendTelemetryEvent(event);
                  });
              }
          }
      }
      var AriaLogger = (function () {
          function AriaLogger() {
          }
          AriaLogger.prototype.getAriaCDNLocation = function () {
              return (OSF._OfficeAppFactory.getLoadScriptHelper().getOfficeJsBasePath() + "ariatelemetry/aria-web-telemetry.js");
          };
          AriaLogger.getInstance = function () {
              if (AriaLogger.AriaLoggerObj === undefined) {
                  AriaLogger.AriaLoggerObj = new AriaLogger();
              }
              return AriaLogger.AriaLoggerObj;
          };
          AriaLogger.prototype.isIUsageData = function (arg) {
              return arg["Fields"] !== undefined;
          };
          AriaLogger.prototype.shouldSendDirectToAria = function (flavor, version) {
              var BASE10 = 10;
              var MAX_VERSION_WIN32 = [16, 0, 11601];
              var MAX_VERSION_MAC = [16, 28];
              var max_version;
              if (!flavor) {
                  return false;
              }
              else if (flavor.toLowerCase() === "win32") {
                  max_version = MAX_VERSION_WIN32;
              }
              else if (flavor.toLowerCase() === "mac") {
                  max_version = MAX_VERSION_MAC;
              }
              else {
                  return true;
              }
              if (!version) {
                  return false;
              }
              var versionTokens = version.split('.');
              for (var i = 0; i < max_version.length && i < versionTokens.length; i++) {
                  var versionToken = parseInt(versionTokens[i], BASE10);
                  if (isNaN(versionToken)) {
                      return false;
                  }
                  if (versionToken < max_version[i]) {
                      return true;
                  }
                  if (versionToken > max_version[i]) {
                      return false;
                  }
              }
              return false;
          };
          AriaLogger.prototype.isDirectToAriaEnabled = function () {
              if (this.EnableDirectToAria === undefined || this.EnableDirectToAria === null) {
                  var flavor;
                  var version;
                  if (OSF._OfficeAppFactory && OSF._OfficeAppFactory.getHostInfo) {
                      flavor = OSF._OfficeAppFactory.getHostInfo()["hostPlatform"];
                  }
                  if (window.external && typeof window.external.GetContext !== "undefined" && typeof window.external.GetContext().GetHostFullVersion !== "undefined") {
                      version = window.external.GetContext().GetHostFullVersion();
                  }
                  this.EnableDirectToAria = this.shouldSendDirectToAria(flavor, version);
              }
              return this.EnableDirectToAria;
          };
          AriaLogger.prototype.sendTelemetry = function (tableName, telemetryData) {
              var startAfterMs = 1000;
              var sendAriaEnabled = AriaLogger.EnableSendingTelemetryWithLegacyAria && this.isDirectToAriaEnabled();
              if (sendAriaEnabled) {
                  OSF.OUtil.loadScript(this.getAriaCDNLocation(), function () {
                      try {
                          if (!this.ALogger) {
                              var OfficeExtensibilityTenantID = "db334b301e7b474db5e0f02f07c51a47-a1b5bc36-1bbe-482f-a64a-c2d9cb606706-7439";
                              this.ALogger = AWTLogManager.initialize(OfficeExtensibilityTenantID);
                          }
                          var eventProperties = new AWTEventProperties();
                          eventProperties.setName("Office.Extensibility.OfficeJS." + tableName);
                          for (var key in telemetryData) {
                              if (key.toLowerCase() !== "table") {
                                  eventProperties.setProperty(key, telemetryData[key]);
                              }
                          }
                          var today = new Date();
                          eventProperties.setProperty("Date", today.toISOString());
                          this.ALogger.logEvent(eventProperties);
                      }
                      catch (e) {
                      }
                  }, startAfterMs);
              }
              if (AriaLogger.EnableSendingTelemetryWithOTel) {
                  sendOtelTelemetryEvent(tableName, telemetryData);
              }
          };
          AriaLogger.prototype.logData = function (data) {
              if (this.isIUsageData(data)) {
                  this.sendTelemetry(data["Table"], data["Fields"]);
              }
              else {
                  this.sendTelemetry(data["Table"], data);
              }
          };
          AriaLogger.EnableSendingTelemetryWithOTel = true;
          AriaLogger.EnableSendingTelemetryWithLegacyAria = false;
          return AriaLogger;
      })();
      OSFAriaLogger.AriaLogger = AriaLogger;
  })(OSFAriaLogger || (OSFAriaLogger = {}));
  var OSFAppTelemetry;
  (function (OSFAppTelemetry) {
      "use strict";
      var appInfo;
      var sessionId = OSF.OUtil.Guid.generateNewGuid();
      var osfControlAppCorrelationId = "";
      var omexDomainRegex = new RegExp("^https?://store\\.office(ppe|-int)?\\.com/", "i");
      OSFAppTelemetry.enableTelemetry = true;
      ;
      var AppInfo = (function () {
          function AppInfo() {
          }
          return AppInfo;
      })();
      OSFAppTelemetry.AppInfo = 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 (!OSFAppTelemetry.enableTelemetry) {
                  return;
              }
              try {
                  OSFAriaLogger.AriaLogger.getInstance().logData(data);
              }
              catch (e) {
              }
          };
          AppLogger.prototype.LogRawData = function (log) {
              if (!OSFAppTelemetry.enableTelemetry) {
                  return;
              }
              try {
                  OSFAriaLogger.AriaLogger.getInstance().logData(JSON.parse(log));
              }
              catch (e) {
              }
          };
          return AppLogger;
      })();
      function trimStringToLowerCase(input) {
          if (input) {
              input = input.replace(/[{}]/g, "").toLowerCase();
          }
          return (input || "");
      }
      var UrlFilter = (function () {
          function UrlFilter() {
          }
          UrlFilter.hashString = function (s) {
              var hash = 0;
              if (s.length === 0) {
                  return hash;
              }
              for (var i = 0; i < s.length; i++) {
                  var c = s.charCodeAt(i);
                  hash = ((hash << 5) - hash) + c;
                  hash |= 0;
              }
              return hash;
          };
          ;
          UrlFilter.stringToHash = function (s) {
              var hash = UrlFilter.hashString(s);
              var stringHash = hash.toString();
              if (hash < 0) {
                  stringHash = "1" + stringHash.substring(1);
              }
              else {
                  stringHash = "0" + stringHash;
              }
              return stringHash;
          };
          UrlFilter.startsWith = function (s, prefix) {
              return s.indexOf(prefix) == -0;
          };
          UrlFilter.isFileUrl = function (url) {
              return UrlFilter.startsWith(url.toLowerCase(), "file:");
          };
          UrlFilter.removeHttpPrefix = function (url) {
              var prefix = "";
              if (UrlFilter.startsWith(url.toLowerCase(), UrlFilter.httpsPrefix)) {
                  prefix = UrlFilter.httpsPrefix;
              }
              else if (UrlFilter.startsWith(url.toLowerCase(), UrlFilter.httpPrefix)) {
                  prefix = UrlFilter.httpPrefix;
              }
              var clean = url.slice(prefix.length);
              return clean;
          };
          UrlFilter.getUrlDomain = function (url) {
              var domain = UrlFilter.removeHttpPrefix(url);
              domain = domain.split("/")[0];
              domain = domain.split(":")[0];
              return domain;
          };
          UrlFilter.isIp4Address = function (domain) {
              var ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
              return ipv4Regex.test(domain);
          };
          UrlFilter.filter = function (url) {
              if (UrlFilter.isFileUrl(url)) {
                  var hash = UrlFilter.stringToHash(url);
                  return "file://" + hash;
              }
              var domain = UrlFilter.getUrlDomain(url);
              if (UrlFilter.isIp4Address(domain)) {
                  var hash = UrlFilter.stringToHash(url);
                  if (UrlFilter.startsWith(domain, "10.")) {
                      return "IP10Range_" + hash;
                  }
                  else if (UrlFilter.startsWith(domain, "192.")) {
                      return "IP192Range_" + hash;
                  }
                  else if (UrlFilter.startsWith(domain, "127.")) {
                      return "IP127Range_" + hash;
                  }
                  return "IPOther_" + hash;
              }
              return domain;
          };
          UrlFilter.httpPrefix = "http://";
          UrlFilter.httpsPrefix = "https://";
          return UrlFilter;
      })();
      function initialize(context) {
          if (!OSFAppTelemetry.enableTelemetry) {
              return;
          }
          if (appInfo) {
              return;
          }
          appInfo = new AppInfo();
          if (context.get_hostFullVersion()) {
              appInfo.hostVersion = context.get_hostFullVersion();
          }
          else {
              appInfo.hostVersion = context.get_appVersion();
          }
          appInfo.appId = context.get_id();
          appInfo.host = context.get_appName();
          appInfo.browser = window.navigator.userAgent;
          appInfo.correlationId = trimStringToLowerCase(context.get_correlationId());
          appInfo.clientId = (new AppStorage()).getClientId();
          appInfo.appInstanceId = context.get_appInstanceId();
          if (appInfo.appInstanceId) {
              appInfo.appInstanceId = appInfo.appInstanceId.replace(/[{}]/g, "").toLowerCase();
          }
          appInfo.message = context.get_hostCustomMessage();
          appInfo.officeJSVersion = OSF.ConstantNames.FileVersion;
          appInfo.hostJSVersion = "0.0.0.0";
          if (context._wacHostEnvironment) {
              appInfo.wacHostEnvironment = context._wacHostEnvironment;
          }
          if (context._isFromWacAutomation !== undefined && context._isFromWacAutomation !== null) {
              appInfo.isFromWacAutomation = context._isFromWacAutomation.toString().toLowerCase();
          }
          var docUrl = context.get_docUrl();
          appInfo.docUrl = omexDomainRegex.test(docUrl) ? docUrl : "";
          var url = location.href;
          if (url) {
              url = url.split("?")[0].split("#")[0];
          }
          appInfo.appURL = UrlFilter.filter(url);
          (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");
                  var cidNode = xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("cid");
                  var oidNode = xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("oid");
                  if (cidNode && cidNode.nodeValue) {
                      appInfo.userId = cidNode.nodeValue;
                  }
                  else if (oidNode && oidNode.nodeValue) {
                      appInfo.userId = oidNode.nodeValue;
                  }
                  appInfo.assetId = xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("aid").nodeValue;
              }
              catch (e) {
              }
              finally {
                  xmlContent = null;
                  xmlDoc = null;
                  parser = null;
              }
          })(context.get_eToken(), appInfo);
          appInfo.sessionId = sessionId;
          appInfo.name = context.get_addinName();
          if (typeof OTel !== "undefined") {
              OTel.OTelLogger.initialize(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 = "";
          data.ClientId = appInfo.clientId;
          data.Browser = appInfo.browser;
          data.Host = appInfo.host;
          data.HostVersion = appInfo.hostVersion;
          data.CorrelationId = trimStringToLowerCase(appInfo.correlationId);
          data.AppSizeWidth = window.innerWidth;
          data.AppSizeHeight = window.innerHeight;
          data.AppInstanceId = appInfo.appInstanceId;
          data.Message = appInfo.message;
          data.DocUrl = appInfo.docUrl;
          data.OfficeJSVersion = appInfo.officeJSVersion;
          data.HostJSVersion = appInfo.hostJSVersion;
          if (appInfo.wacHostEnvironment) {
              data.WacHostEnvironment = appInfo.wacHostEnvironment;
          }
          if (appInfo.isFromWacAutomation !== undefined && appInfo.isFromWacAutomation !== null) {
              data.IsFromWacAutomation = appInfo.isFromWacAutomation;
          }
          (new AppLogger()).LogData(data);
      }
      OSFAppTelemetry.onAppActivated = onAppActivated;
      function onScriptDone(scriptId, msStartTime, msResponseTime, appCorrelationId) {
          var data = new OSFLog.ScriptLoadUsageData();
          data.CorrelationId = trimStringToLowerCase(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 = trimStringToLowerCase(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 onCheckWACHost(isWacKnownHost, solutionId, hostType, hostPlatform, correlationId, wacDomain) {
          var data = new OSFLog.CheckWACHostUsageData();
          data.isWacKnownHost = isWacKnownHost;
          data.solutionId = solutionId;
          data.hostType = hostType;
          data.hostPlatform = hostPlatform;
          data.correlationId = correlationId;
          data.wacDomain = UrlFilter.filter(wacDomain);
          (new AppLogger()).LogData(data);
      }
      OSFAppTelemetry.onCheckWACHost = onCheckWACHost;
      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 = trimStringToLowerCase(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 = trimStringToLowerCase(correlationId);
      }
      OSFAppTelemetry.setOsfControlAppCorrelationId = setOsfControlAppCorrelationId;
      function doAppInitializationLogging(isException, message) {
          var data = new OSFLog.AppInitializationUsageData();
          data.CorrelationId = trimStringToLowerCase(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 = {}));
  OSF.InitializationHelper.prototype.loadAppSpecificScriptAndCreateOM = function OSF_InitializationHelper$loadAppSpecificScriptAndCreateOM(appContext, appReady, basePath) {
      OSF.DDA.ErrorCodeManager.initializeErrorMessages(Strings.OfficeOM);
      OSF.DDA.DispIdHost.addAsyncMethods(OSF.DDA.RichApi, [OSF.DDA.AsyncMethodNames.ExecuteRichApiRequestAsync]);
      OSF.DDA.RichApi.richApiMessageManager = new OfficeExt.RichApiMessageManager();
      appReady();
  };
  OSF.DDA.AsyncMethodNames.addNames({
      ExecuteRichApiRequestAsync: "executeRichApiRequestAsync"
  });
  OSF.DDA.AsyncMethodCalls.define({
      method: OSF.DDA.AsyncMethodNames.ExecuteRichApiRequestAsync,
      requiredArguments: [
          {
              name: Microsoft.Office.WebExtension.Parameters.Data,
              types: ["object"]
          }
      ],
      supportedOptions: []
  });
  OSF.OUtil.setNamespace("RichApi", OSF.DDA);
  OSF.DDA.SafeArray.Delegate.ParameterMap.define({
      type: OSF.DDA.MethodDispId.dispidExecuteRichApiRequestMethod,
      toHost: [
          { name: Microsoft.Office.WebExtension.Parameters.Data, value: 0 }
      ],
      fromHost: [
          { name: Microsoft.Office.WebExtension.Parameters.Data, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
      ]
  });
  Microsoft.Office.WebExtension.EventType = {};
  OSF.EventDispatch = function OSF_EventDispatch(eventTypes) {
      this._eventHandlers = {};
      this._objectEventHandlers = {};
      this._queuedEventsArgs = {};
      if (eventTypes != null) {
          for (var i = 0; i < eventTypes.length; i++) {
              var eventType = eventTypes[i];
              var isObjectEvent = (eventType == "objectDeleted" || eventType == "objectSelectionChanged" || eventType == "objectDataChanged" || eventType == "contentControlAdded");
              if (!isObjectEvent)
                  this._eventHandlers[eventType] = [];
              else
                  this._objectEventHandlers[eventType] = {};
              this._queuedEventsArgs[eventType] = [];
          }
      }
  };
  OSF.EventDispatch.prototype = {
      getSupportedEvents: function OSF_EventDispatch$getSupportedEvents() {
          var events = [];
          for (var eventName in this._eventHandlers)
              events.push(eventName);
          for (var eventName in this._objectEventHandlers)
              events.push(eventName);
          return events;
      },
      supportsEvent: function OSF_EventDispatch$supportsEvent(event) {
          for (var eventName in this._eventHandlers) {
              if (event == eventName)
                  return true;
          }
          for (var eventName in this._objectEventHandlers) {
              if (event == eventName)
                  return true;
          }
          return false;
      },
      hasEventHandler: function OSF_EventDispatch$hasEventHandler(eventType, handler) {
          var handlers = this._eventHandlers[eventType];
          if (handlers && handlers.length > 0) {
              for (var i = 0; i < handlers.length; i++) {
                  if (handlers[i] === handler)
                      return true;
              }
          }
          return false;
      },
      hasObjectEventHandler: function OSF_EventDispatch$hasObjectEventHandler(eventType, objectId, handler) {
          var handlers = this._objectEventHandlers[eventType];
          if (handlers != null) {
              var _handlers = handlers[objectId];
              for (var i = 0; _handlers != null && i < _handlers.length; i++) {
                  if (_handlers[i] === 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;
          }
      },
      addObjectEventHandler: function OSF_EventDispatch$addObjectEventHandler(eventType, objectId, handler) {
          if (typeof handler != "function") {
              return false;
          }
          var handlers = this._objectEventHandlers[eventType];
          if (handlers && !this.hasObjectEventHandler(eventType, objectId, handler)) {
              if (handlers[objectId] == null)
                  handlers[objectId] = [];
              handlers[objectId].push(handler);
              return true;
          }
          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;
      },
      removeObjectEventHandler: function OSF_EventDispatch$removeObjectEventHandler(eventType, objectId, handler) {
          var handlers = this._objectEventHandlers[eventType];
          if (handlers != null) {
              var _handlers = handlers[objectId];
              for (var i = 0; _handlers != null && i < _handlers.length; i++) {
                  if (_handlers[i] === handler) {
                      _handlers.splice(i, 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;
      },
      clearObjectEventHandlers: function OSF_EventDispatch$clearObjectEventHandlers(eventType, objectId) {
          if (this._objectEventHandlers[eventType] != null && this._objectEventHandlers[eventType][objectId] != null) {
              this._objectEventHandlers[eventType][objectId] = [];
              return true;
          }
          return false;
      },
      getEventHandlerCount: function OSF_EventDispatch$getEventHandlerCount(eventType) {
          return this._eventHandlers[eventType] != undefined ? this._eventHandlers[eventType].length : -1;
      },
      getObjectEventHandlerCount: function OSF_EventDispatch$getObjectEventHandlerCount(eventType, objectId) {
          if (this._objectEventHandlers[eventType] == null || this._objectEventHandlers[eventType][objectId] == null)
              return 0;
          return this._objectEventHandlers[eventType][objectId].length;
      },
      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 i = 0; i < eventHandlers.length; i++) {
                  eventHandlers[i](eventArgs);
              }
              return true;
          }
          else {
              return false;
          }
      },
      fireObjectEvent: function OSF_EventDispatch$fireObjectEvent(objectId, eventArgs) {
          if (eventArgs.type == undefined)
              return false;
          var eventType = eventArgs.type;
          if (eventType && this._objectEventHandlers[eventType]) {
              var eventHandlers = this._objectEventHandlers[eventType];
              var _handlers = eventHandlers[objectId];
              if (_handlers != null) {
                  for (var i = 0; i < _handlers.length; i++)
                      _handlers[i](eventArgs);
                  return true;
              }
          }
          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;
      },
      clearQueuedEvent: function OSF_EventDispatch$clearQueuedEvent(eventType) {
          if (eventType && this._eventHandlers[eventType]) {
              var queuedEvents = this._queuedEventsArgs[eventType];
              if (queuedEvents) {
                  this._queuedEventsArgs[eventType] = [];
              }
          }
      }
  };
  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.ObjectDeleted:
          case Microsoft.Office.WebExtension.EventType.ObjectSelectionChanged:
          case Microsoft.Office.WebExtension.EventType.ObjectDataChanged:
          case Microsoft.Office.WebExtension.EventType.ContentControlAdded:
              args = new OSF.DDA.ObjectEventArgs(eventType, eventProperties[Microsoft.Office.WebExtension.Parameters.Id]);
              break;
          case Microsoft.Office.WebExtension.EventType.RichApiMessage:
              args = new OSF.DDA.RichApiMessageEventArgs(eventType, 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;
          case Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived:
              args = new OSF.DDA.DialogParentEventArgs(eventProperties);
              break;
          case Microsoft.Office.WebExtension.EventType.ItemChanged:
              if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                  args = new OSF.DDA.OlkItemSelectedChangedEventArgs(eventProperties);
                  target.initialize(args["initialData"]);
                  if (OSF._OfficeAppFactory.getHostInfo()["hostPlatform"] == "win32" || OSF._OfficeAppFactory.getHostInfo()["hostPlatform"] == "mac") {
                      target.setCurrentItemNumber(args["itemNumber"].itemNumber);
                  }
              }
              else {
                  throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
              }
              break;
          case Microsoft.Office.WebExtension.EventType.RecipientsChanged:
              if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                  args = new OSF.DDA.OlkRecipientsChangedEventArgs(eventProperties);
              }
              else {
                  throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
              }
              break;
          case Microsoft.Office.WebExtension.EventType.AppointmentTimeChanged:
              if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                  args = new OSF.DDA.OlkAppointmentTimeChangedEventArgs(eventProperties);
              }
              else {
                  throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
              }
              break;
          case Microsoft.Office.WebExtension.EventType.RecurrenceChanged:
              if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                  args = new OSF.DDA.OlkRecurrenceChangedEventArgs(eventProperties);
              }
              else {
                  throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
              }
              break;
          case Microsoft.Office.WebExtension.EventType.AttachmentsChanged:
              if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                  args = new OSF.DDA.OlkAttachmentsChangedEventArgs(eventProperties);
              }
              else {
                  throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
              }
              break;
          case Microsoft.Office.WebExtension.EventType.EnhancedLocationsChanged:
              if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                  args = new OSF.DDA.OlkEnhancedLocationsChangedEventArgs(eventProperties);
              }
              else {
                  throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
              }
              break;
          case Microsoft.Office.WebExtension.EventType.InfobarClicked:
              if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                  args = new OSF.DDA.OlkInfobarClickedEventArgs(eventProperties);
              }
              else {
                  throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
              }
              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.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, { RichApiMessage: "richApiMessage" });
  OSF.DDA.RichApiMessageEventArgs = function OSF_DDA_RichApiMessageEventArgs(eventType, eventProperties) {
      var entryArray = eventProperties[Microsoft.Office.WebExtension.Parameters.Data];
      var entries = [];
      if (entryArray) {
          for (var i = 0; i < entryArray.length; i++) {
              var elem = entryArray[i];
              if (elem.toArray) {
                  elem = elem.toArray();
              }
              entries.push({
                  messageCategory: elem[0],
                  messageType: elem[1],
                  targetId: elem[2],
                  message: elem[3],
                  id: elem[4],
                  isRemoteOverride: elem[5]
              });
          }
      }
      OSF.OUtil.defineEnumerableProperties(this, {
          "type": { value: Microsoft.Office.WebExtension.EventType.RichApiMessage },
          "entries": { value: entries }
      });
  };
  var OfficeExt;
  (function (OfficeExt) {
      var RichApiMessageManager = (function () {
          function RichApiMessageManager() {
              this._eventDispatch = null;
              this._eventDispatch = new OSF.EventDispatch([
                  Microsoft.Office.WebExtension.EventType.RichApiMessage,
              ]);
              OSF.DDA.DispIdHost.addEventSupport(this, this._eventDispatch);
          }
          return RichApiMessageManager;
      })();
      OfficeExt.RichApiMessageManager = RichApiMessageManager;
  })(OfficeExt || (OfficeExt = {}));
  OSF.DDA.SafeArray.Delegate.ParameterMap.define({
      type: OSF.DDA.EventDispId.dispidRichApiMessageEvent,
      toHost: [
          { name: Microsoft.Office.WebExtension.Parameters.Data, value: 0 }
      ],
      fromHost: [
          { name: Microsoft.Office.WebExtension.Parameters.Data, value: OSF.DDA.SafeArray.Delegate.ParameterMap.sourceData }
      ]
  });
  OSF.DialogShownStatus = { hasDialogShown: false, isWindowDialog: false };
  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",
      SendMessage: "sendMessage"
  });
  OSF.DDA.UI.ParentUI = function OSF_DDA_ParentUI() {
      var eventDispatch;
      if (Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived != null) {
          eventDispatch = new OSF.EventDispatch([
              Microsoft.Office.WebExtension.EventType.DialogMessageReceived,
              Microsoft.Office.WebExtension.EventType.DialogEventReceived,
              Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived
          ]);
      }
      else {
          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(isPopupWindow) {
      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);
              }
          });
      }
      var addEventHandler = OSF.DDA.SyncMethodNames.AddMessageHandler.displayName;
      if (!target[addEventHandler] && typeof OSF.DialogParentMessageEventDispatch != "undefined") {
          OSF.DDA.DispIdHost.addEventSupport(target, OSF.DialogParentMessageEventDispatch, isPopupWindow);
      }
      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.DialogParentEventArgs = function OSF_DDA_DialogParentEventArgs(message) {
      OSF.OUtil.defineEnumerableProperties(this, {
          "type": {
              value: Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived
          },
          "message": {
              value: message[OSF.DDA.PropertyDescriptors.MessageContent]
          }
      });
  };
  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.DisplayInIframe,
              value: {
                  "types": ["boolean"],
                  "defaultValue": false
              }
          },
          {
              name: Microsoft.Office.WebExtension.Parameters.HideTitle,
              value: {
                  "types": ["boolean"],
                  "defaultValue": false
              }
          },
          {
              name: Microsoft.Office.WebExtension.Parameters.UseDeviceIndependentPixels,
              value: {
                  "types": ["boolean"],
                  "defaultValue": false
              }
          },
          {
              name: Microsoft.Office.WebExtension.Parameters.PromptBeforeOpen,
              value: {
                  "types": ["boolean"],
                  "defaultValue": true
              }
          },
          {
              name: Microsoft.Office.WebExtension.Parameters.EnforceAppDomain,
              value: {
                  "types": ["boolean"],
                  "defaultValue": false
              }
          }
      ],
      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);
              }
          });
          var sendMessage = OSF.DDA.SyncMethodNames.SendMessage.displayName;
          OSF.OUtil.defineEnumerableProperty(dialog, sendMessage, {
              value: function () {
                  var execute = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.SendMessage];
                  return execute(arguments, eventDispatch, dialog);
              }
          });
          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.UseDeviceIndependentPixels] && 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.UseDeviceIndependentPixels] && callArgs[Microsoft.Office.WebExtension.Parameters.Height] > 100) {
              callArgs[Microsoft.Office.WebExtension.Parameters.Height] = 99;
          }
          if (!callArgs[Microsoft.Office.WebExtension.Parameters.RequireHTTPs]) {
              callArgs[Microsoft.Office.WebExtension.Parameters.RequireHTTPs] = true;
          }
          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.SyncMethodCalls.define({
      method: OSF.DDA.SyncMethodNames.SendMessage,
      requiredArguments: [
          {
              "name": Microsoft.Office.WebExtension.Parameters.MessageContent,
              "types": ["string"]
          }
      ],
      supportedOptions: [],
      privateStateCallbacks: []
  });
  OSF.DDA.SafeArray.Delegate.openDialog = function OSF_DDA_SafeArray_Delegate$OpenDialog(args) {
      try {
          if (args.onCalling) {
              args.onCalling();
          }
          var callback = OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(true, args);
          OSF.ClientHostController.openDialog(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.closeDialog = function OSF_DDA_SafeArray_Delegate$CloseDialog(args) {
      if (args.onCalling) {
          args.onCalling();
      }
      var callback = OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(false, args);
      try {
          OSF.ClientHostController.closeDialog(args.dispId, args.targetId, callback);
      }
      catch (ex) {
          OSF.DDA.SafeArray.Delegate._onException(ex, args);
      }
  };
  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
  });
  OSF.DDA.SafeArray.Delegate.sendMessage = function OSF_DDA_SafeArray_Delegate$SendMessage(args) {
      try {
          if (args.onCalling) {
              args.onCalling();
          }
          var startTime = (new Date()).getTime();
          var result = OSF.ClientHostController.sendMessage(args.hostCallArgs);
          if (args.onReceiving) {
              args.onReceiving();
          }
          return result;
      }
      catch (ex) {
          return OSF.DDA.SafeArray.Delegate._onExceptionSyncMethod(ex);
      }
  };
  
  
  
  !function(modules) {
      var installedModules = {};
      function __webpack_require__(moduleId) {
          if (installedModules[moduleId]) return installedModules[moduleId].exports;
          var module = installedModules[moduleId] = {
              i: moduleId,
              l: !1,
              exports: {}
          };
          return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), 
          module.l = !0, module.exports;
      }
      __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) {
          __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {
              enumerable: !0,
              get: getter
          });
      }, __webpack_require__.r = function(exports) {
          "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {
              value: "Module"
          }), Object.defineProperty(exports, "__esModule", {
              value: !0
          });
      }, __webpack_require__.t = function(value, mode) {
          if (1 & mode && (value = __webpack_require__(value)), 8 & mode) return value;
          if (4 & mode && "object" == typeof value && value && value.__esModule) return value;
          var ns = Object.create(null);
          if (__webpack_require__.r(ns), Object.defineProperty(ns, "default", {
              enumerable: !0,
              value: value
          }), 2 & mode && "string" != typeof value) for (var key in value) __webpack_require__.d(ns, key, function(key) {
              return value[key];
          }.bind(null, key));
          return ns;
      }, __webpack_require__.n = function(module) {
          var getter = module && module.__esModule ? function() {
              return module.default;
          } : function() {
              return module;
          };
          return __webpack_require__.d(getter, "a", getter), getter;
      }, __webpack_require__.o = function(object, property) {
          return Object.prototype.hasOwnProperty.call(object, property);
      }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 1);
  }([ function(module, exports) {
      module.exports = OfficeExtensionBatch;
  }, function(module, exports, __webpack_require__) {
      "use strict";
      var __assign = this && this.__assign || function() {
          return (__assign = Object.assign || function(t) {
              for (var s, i = 1, n = arguments.length; i < n; i++) for (var p in s = arguments[i]) Object.prototype.hasOwnProperty.call(s, p) && (t[p] = s[p]);
              return t;
          }).apply(this, arguments);
      };
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var ApiInformationWeb = __webpack_require__(2), ApiInformationNative = __webpack_require__(3), AsyncStorageWeb = __webpack_require__(5), DialogApiWeb = __webpack_require__(6), StorageApiNative = __webpack_require__(7), officeruntime_storage_web_1 = __webpack_require__(8), Experimentation = __webpack_require__(9), officeruntime_message_1 = __webpack_require__(10), DynamicRibbon = __webpack_require__(13), officeruntime_auth_1 = __webpack_require__(14);
      window._useSDXSandbox ? window._OfficeRuntimeNative = __assign({}, window.OfficeRuntime, {
          displayWebDialog: DialogApiWeb.displayWebDialog,
          AsyncStorage: StorageApiNative.AsyncStorage,
          storage: StorageApiNative.storage,
          experimentation: Experimentation.experimentation,
          apiInformation: ApiInformationNative.apiInformation,
          message: officeruntime_message_1.Message.instance,
          ui: DynamicRibbon.ui,
          auth: officeruntime_auth_1.Auth.instance
      }) : window._OfficeRuntimeNative = __assign({}, window.OfficeRuntime, {
          displayWebDialog: DialogApiWeb.displayWebDialog,
          AsyncStorage: AsyncStorageWeb,
          storage: officeruntime_storage_web_1.storage,
          experimentation: Experimentation.experimentation,
          apiInformation: ApiInformationWeb.apiInformation,
          message: officeruntime_message_1.Message.instance,
          ui: DynamicRibbon.ui,
          auth: officeruntime_auth_1.Auth.instance
      }), Object.freeze(window._OfficeRuntimeNative);
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      }), exports.apiInformation = {
          isSetSupported: function(capability, version) {
              try {
                  return !!(Office && Office.context && Office.context.requirements) && Office.context.requirements.isSetSupported(capability, Number(version));
              } catch (e) {
                  return !1;
              }
          }
      };
  }, function(module, exports, __webpack_require__) {
      "use strict";
      (function(global) {
          function getVersion(version) {
              var temp = version.split("."), major = 0, minor = 0, patch = 0;
              if (temp.length < 2 && isNaN(Number(version))) throw "version format incorrect";
              if (major = Number(temp[0]), temp.length >= 2 && (minor = Number(temp[1])), temp.length >= 3 && (patch = Number(temp[2])), 
              isNaN(major) || isNaN(minor) || isNaN(patch)) throw "version format incorrect";
              return {
                  major: major,
                  minor: minor,
                  patch: patch
              };
          }
          Object.defineProperty(exports, "__esModule", {
              value: !0
          }), exports.apiInformation = {
              isSetSupported: function(capability, version) {
                  if ("string" != typeof capability) return !1;
                  if (void 0 == version && (version = "0.0.0"), void 0 === global.__apiSets) return !1;
                  var sets = global.__apiSets, index = Object.keys(sets).map(function(key) {
                      return key.toLowerCase();
                  }).indexOf(capability.toLowerCase());
                  if (index > -1) {
                      var setMaxVersion = sets[Object.keys(sets)[index]];
                      try {
                          var minVersionNum = getVersion(version), setMaxVersionNum = void 0;
                          if ((setMaxVersionNum = Array.isArray(setMaxVersion) ? function(versions, majorVersion) {
                              for (var i = 0; i < versions.length; i++) {
                                  var v = getVersion(versions[i]);
                                  if (v.major == majorVersion) return v;
                              }
                              return {
                                  major: 0,
                                  minor: 0,
                                  patch: 0
                              };
                          }(setMaxVersion, minVersionNum.major) : getVersion(setMaxVersion)).major > 0) {
                              if (setMaxVersionNum.major > minVersionNum.major) return !0;
                              if (setMaxVersionNum.major == minVersionNum.major && setMaxVersionNum.minor > minVersionNum.minor) return !0;
                              if (setMaxVersionNum.major == minVersionNum.major && setMaxVersionNum.minor == minVersionNum.minor && setMaxVersionNum.patch >= minVersionNum.patch) return !0;
                          }
                      } catch (e) {
                          return !1;
                      }
                  }
                  return !1;
              }
          };
      }).call(this, __webpack_require__(4));
  }, function(module, exports) {
      var g;
      g = function() {
          return this;
      }();
      try {
          g = g || new Function("return this")();
      } catch (e) {
          "object" == typeof window && (g = window);
      }
      module.exports = g;
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var prefix = "_Office_AsyncStorage_", dummyUnusedKey = prefix + "|_unusedKey_";
      function ensureFreshLocalStorage() {
          window.localStorage.setItem(dummyUnusedKey, null), window.localStorage.removeItem(dummyUnusedKey);
      }
      function performAction(action, callback) {
          return void 0 === callback && (callback = function() {}), new Promise(function(resolve, reject) {
              try {
                  ensureFreshLocalStorage(), action(), callback(null), resolve();
              } catch (e) {
                  callback(e), reject(e);
              }
          });
      }
      function performActionAndReturnResult(action, callback) {
          return void 0 === callback && (callback = function() {}), new Promise(function(resolve, reject) {
              try {
                  ensureFreshLocalStorage();
                  var result = action();
                  callback(null, result), resolve(result);
              } catch (e) {
                  callback(e, null), reject(e);
              }
          });
      }
      function performMultiAction(collection, action, callback) {
          return void 0 === callback && (callback = function() {}), new Promise(function(resolve, reject) {
              var errors = [];
              try {
                  ensureFreshLocalStorage();
              } catch (e) {
                  errors.push(e);
              }
              collection.forEach(function(item) {
                  try {
                      action(item);
                  } catch (e) {
                      errors.push(e);
                  }
              }), callback(errors), errors.length > 0 ? reject(errors) : resolve();
          });
      }
      exports.getItem = function(key, callback) {
          return performActionAndReturnResult(function() {
              return window.localStorage.getItem(prefix + key);
          }, callback);
      }, exports.setItem = function(key, value, callback) {
          return performAction(function() {
              return window.localStorage.setItem(prefix + key, value);
          }, callback);
      }, exports.removeItem = function(key, callback) {
          return performAction(function() {
              return window.localStorage.removeItem(prefix + key);
          }, callback);
      }, exports.clear = function(callback) {
          return performAction(function() {
              Object.keys(window.localStorage).filter(function(fullKey) {
                  return 0 === fullKey.indexOf(prefix);
              }).forEach(function(fullKey) {
                  return window.localStorage.removeItem(fullKey);
              });
          }, callback);
      }, exports.getAllKeys = function(callback) {
          return performActionAndReturnResult(function() {
              return Object.keys(window.localStorage).filter(function(fullKey) {
                  return 0 === fullKey.indexOf(prefix);
              }).map(function(fullKey) {
                  return fullKey.substr(prefix.length);
              });
          }, callback);
      }, exports.multiSet = function(keyValuePairs, callback) {
          return performMultiAction(keyValuePairs, function(_a) {
              var key = _a[0], value = _a[1];
              return window.localStorage.setItem(prefix + key, value);
          }, callback);
      }, exports.multiRemove = function(keys, callback) {
          return performMultiAction(keys, function(key) {
              return window.localStorage.removeItem(prefix + key);
          }, callback);
      }, exports.multiGet = function(keys, callback) {
          return new Promise(function(resolve, reject) {
              callback || (callback = function() {});
              var errors = [], results = keys.map(function(key) {
                  try {
                      return [ key, window.localStorage.getItem(prefix + key) ];
                  } catch (e) {
                      errors.push(e);
                  }
              }).filter(function(pair) {
                  return pair;
              });
              errors.length > 0 ? (callback(errors, results), reject(errors)) : (callback(null, results), 
              resolve(results));
          });
      };
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var OfficeExtension = __webpack_require__(0), Dialog = function() {
          function Dialog(_dialog) {
              this._dialog = _dialog;
          }
          return Dialog.prototype.close = function() {
              return this._dialog.close(), OfficeExtension.CoreUtility.Promise.resolve();
          }, Dialog;
      }();
      exports.Dialog = Dialog, exports.displayWebDialog = function(url, options) {
          return new OfficeExtension.CoreUtility.Promise(function(resolve, reject) {
              if (options.width && options.height && (!isInt(options.width) || !isInt(options.height))) throw new OfficeExtension.Error({
                  code: "InvalidArgument",
                  message: 'Dimensions must be "number%" or number.'
              });
              var dialog, dialogOptions = {
                  width: options.width ? parseInt(options.width, 10) : 50,
                  height: options.height ? parseInt(options.height, 10) : 50,
                  displayInIframe: options.displayInIFrame || !1
              };
              function messageHandler(args) {
                  options.onMessage && options.onMessage(args.message, dialog);
              }
              function eventHandler(args) {
                  12006 === args.error ? options.onClose && options.onClose() : options.onRuntimeError && options.onRuntimeError(new OfficeExtension.Error(lookupErrorCodeAndMessage(args.error)), dialog);
              }
              function isInt(value) {
                  return /^(\-|\+)?([0-9]+)%?$/.test(value);
              }
              function lookupErrorCodeAndMessage(internalCode) {
                  var _a, table = ((_a = {})[12002] = {
                      code: "InvalidUrl",
                      message: "Cannot load URL, no such page or bad URL syntax."
                  }, _a[12003] = {
                      code: "InvalidUrl",
                      message: "HTTPS is required."
                  }, _a[12004] = {
                      code: "Untrusted",
                      message: "Domain is not trusted."
                  }, _a[12005] = {
                      code: "InvalidUrl",
                      message: "HTTPS is required."
                  }, _a[12007] = {
                      code: "FailedToOpen",
                      message: "Another dialog is already opened."
                  }, _a);
                  return table[internalCode] ? table[internalCode] : {
                      code: "Unknown",
                      message: "An unknown error has occured"
                  };
              }
              Office.context.ui.displayDialogAsync(url, dialogOptions, function(asyncResult) {
                  "failed" === asyncResult.status ? reject(new OfficeExtension.Error(lookupErrorCodeAndMessage(asyncResult.error.code))) : ((dialog = asyncResult.value).addEventHandler(Office.EventType.DialogMessageReceived, messageHandler), 
                  dialog.addEventHandler(Office.EventType.DialogEventReceived, eventHandler), resolve(new Dialog(dialog)));
              });
          });
      };
  }, function(module, exports, __webpack_require__) {
      "use strict";
      var __extends = this && this.__extends || function() {
          var extendStatics = function(d, b) {
              return (extendStatics = Object.setPrototypeOf || {
                  __proto__: []
              } instanceof Array && function(d, b) {
                  d.__proto__ = b;
              } || function(d, b) {
                  for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);
              })(d, b);
          };
          return function(d, b) {
              function __() {
                  this.constructor = d;
              }
              extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, 
              new __());
          };
      }();
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var OfficeExtension = __webpack_require__(0), _createTopLevelServiceObject = (OfficeExtension.BatchApiHelper.createPropertyObject, 
      OfficeExtension.BatchApiHelper.createMethodObject, OfficeExtension.BatchApiHelper.createIndexerObject, 
      OfficeExtension.BatchApiHelper.createRootServiceObject, OfficeExtension.BatchApiHelper.createTopLevelServiceObject), _invokeMethod = (OfficeExtension.BatchApiHelper.createChildItemObject, 
      OfficeExtension.BatchApiHelper.invokeMethod), _isNullOrUndefined = (OfficeExtension.BatchApiHelper.invokeEnsureUnchanged, 
      OfficeExtension.BatchApiHelper.invokeSetProperty, OfficeExtension.Utility.isNullOrUndefined), _toJson = (OfficeExtension.Utility.isUndefined, 
      OfficeExtension.Utility.throwIfNotLoaded, OfficeExtension.Utility.throwIfApiNotSupported, 
      OfficeExtension.Utility.load, OfficeExtension.Utility.retrieve, OfficeExtension.Utility.toJson), _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary, _processRetrieveResult = (OfficeExtension.Utility._handleNavigationPropertyResults, 
      OfficeExtension.Utility.adjustToDateTime, OfficeExtension.Utility.processRetrieveResult);
      OfficeExtension.Utility.setMockData;
      function callPersistentKvStorageManager(nativeCall, getValueOnSuccess) {
          return new OfficeExtension.CoreUtility.Promise(function(resolve, reject) {
              var storageManager = PersistentKvStorageManager.getInstance(), invokeId = storageManager.setCallBack(function(result, error) {
                  if (error) reject(error); else {
                      var value = getValueOnSuccess(result);
                      resolve(value);
                  }
              });
              storageManager.ctx.sync().then(function() {
                  var storageService = storageManager.getPersistentKvStorageService();
                  return nativeCall(storageService, invokeId), storageManager.ctx.sync();
              }).catch(function(e) {
                  reject(e);
              });
          });
      }
      function callStorageManager(nativeCall, getValueOnSuccess, callback) {
          return new OfficeExtension.CoreUtility.Promise(function(resolve, reject) {
              var storageManager = PersistentKvStorageManager.getInstance(), invokeId = storageManager.setCallBack(function(result, error) {
                  if (error) return callback && callback(error), void reject(error);
                  var value = getValueOnSuccess(result);
                  callback && callback(null, value), resolve(value);
              });
              storageManager.ctx.sync().then(function() {
                  var storageService = storageManager.getPersistentKvStorageService();
                  return nativeCall(storageService, invokeId), storageManager.ctx.sync();
              }).catch(function(e) {
                  reject(e);
              });
          });
      }
      exports.AsyncStorage = {
          getItem: function(key, callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.multiGet(invokeId, JSON.stringify([ key ]));
              }, function(result) {
                  var parsedResult = JSON.parse(result);
                  return parsedResult && parsedResult[0] && parsedResult[0][1] ? parsedResult[0][1] : null;
              }, callback);
          },
          setItem: function(key, value, callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.multiSet(invokeId, JSON.stringify([ [ key, value ] ]));
              }, function() {
                  return null;
              }, callback);
          },
          removeItem: function(key, callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.multiRemove(invokeId, JSON.stringify([ key ]));
              }, function() {
                  return null;
              }, callback);
          },
          multiGet: function(keys, callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.multiGet(invokeId, JSON.stringify(keys));
              }, function(result) {
                  var keyValues = JSON.parse(result), map = {};
                  return keyValues && keyValues.forEach(function(_a) {
                      var key = _a[0], value = _a[1];
                      return map[key] = value, value;
                  }), keys.map(function(key) {
                      return [ key, map[key] ? map[key] : null ];
                  });
              }, callback);
          },
          multiSet: function(keyValuePairs, callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.multiSet(invokeId, JSON.stringify(keyValuePairs));
              }, function() {
                  return null;
              }, callback);
          },
          multiRemove: function(keys, callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.multiRemove(invokeId, JSON.stringify(keys));
              }, function() {
                  return null;
              }, callback);
          },
          getAllKeys: function(callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.getAllKeys(invokeId);
              }, function(result) {
                  return JSON.parse(result);
              }, callback);
          },
          clear: function(callback) {
              return callStorageManager(function(storage, invokeId) {
                  return storage.clear(invokeId);
              }, function() {
                  return null;
              }, callback);
          }
      }, exports.storage = {
          getItem: function(key) {
              return callPersistentKvStorageManager(function(perStorage, invokeId) {
                  return perStorage.multiGet(invokeId, JSON.stringify([ key ]));
              }, function(result) {
                  var parsedResult = JSON.parse(result);
                  return parsedResult && parsedResult[0] && parsedResult[0][1] ? parsedResult[0][1] : null;
              });
          },
          setItem: function(key, value) {
              return callPersistentKvStorageManager(function(perStorage, invokeId) {
                  return perStorage.multiSet(invokeId, JSON.stringify([ [ key, value ] ]));
              }, function() {
                  return null;
              });
          },
          removeItem: function(key) {
              return callPersistentKvStorageManager(function(perStorage, invokeId) {
                  return perStorage.multiRemove(invokeId, JSON.stringify([ key ]));
              }, function() {
                  return null;
              });
          },
          getItems: function(keys) {
              return callPersistentKvStorageManager(function(perStorage, invokeId) {
                  return perStorage.multiGet(invokeId, JSON.stringify(keys));
              }, function(result) {
                  var keyValues = JSON.parse(result), map = {};
                  return keyValues && keyValues.forEach(function(_a) {
                      var key = _a[0], value = _a[1];
                      return map[key] = value, value;
                  }), keys && keys.forEach(function(key) {
                      map[key] && map[key];
                  }), map;
              });
          },
          setItems: function(keyValues) {
              var keyValuePairs = [];
              for (var key in keyValues) keyValues.hasOwnProperty(key) && keyValuePairs.push([ key, keyValues[key] ]);
              return callPersistentKvStorageManager(function(storage, invokeId) {
                  return storage.multiSet(invokeId, JSON.stringify(keyValuePairs));
              }, function() {
                  return null;
              });
          },
          removeItems: function(keys) {
              return callPersistentKvStorageManager(function(perStorage, invokeId) {
                  return perStorage.multiRemove(invokeId, JSON.stringify(keys));
              }, function() {
                  return null;
              });
          },
          getKeys: function() {
              return callPersistentKvStorageManager(function(perStorage, invokeId) {
                  return perStorage.getAllKeys(invokeId);
              }, function(result) {
                  return JSON.parse(result);
              });
          }
      };
      var PersistentKvStorageManager = function() {
          function PersistentKvStorageManager() {
              var _this = this;
              this._invokeId = 0, this._callDict = {}, this.ctx = new OfficeExtension.ClientRequestContext(), 
              this._perkvstorService = PersistentKvStorageService.newObject(this.ctx), this._eventResult = this._perkvstorService.onPersistentStorageMessage.add(function(args) {
                  OfficeExtension.Utility.log("persistentKvStoragegMessageHandler:" + JSON.stringify(args));
                  var callback = _this._callDict[args.invokeId];
                  callback && (callback(args.message, args.error), delete _this._callDict[args.invokeId]);
              });
          }
          return PersistentKvStorageManager.getInstance = function() {
              return void 0 === PersistentKvStorageManager.instance ? PersistentKvStorageManager.instance = new PersistentKvStorageManager() : PersistentKvStorageManager.instance._perkvstorService = PersistentKvStorageService.newObject(PersistentKvStorageManager.instance.ctx), 
              PersistentKvStorageManager.instance;
          }, PersistentKvStorageManager.prototype.getPersistentKvStorageService = function() {
              return this._perkvstorService;
          }, PersistentKvStorageManager.prototype.getCallBack = function(callId) {
              return this._callDict[callId];
          }, PersistentKvStorageManager.prototype.setCallBack = function(callback) {
              var id = this._invokeId;
              return this._callDict[this._invokeId++] = callback, id;
          }, PersistentKvStorageManager;
      }(), PersistentKvStorageService = function(_super) {
          function PersistentKvStorageService() {
              return null !== _super && _super.apply(this, arguments) || this;
          }
          return __extends(PersistentKvStorageService, _super), Object.defineProperty(PersistentKvStorageService.prototype, "_className", {
              get: function() {
                  return "PersistentKvStorageService";
              },
              enumerable: !0,
              configurable: !0
          }), PersistentKvStorageService.prototype.clear = function(id) {
              _invokeMethod(this, "Clear", 1, [ id ], 4, 0);
          }, PersistentKvStorageService.prototype.getAllKeys = function(id) {
              _invokeMethod(this, "GetAllKeys", 1, [ id ], 4, 0);
          }, PersistentKvStorageService.prototype.multiGet = function(id, jsonKeys) {
              _invokeMethod(this, "MultiGet", 1, [ id, jsonKeys ], 4, 0);
          }, PersistentKvStorageService.prototype.multiRemove = function(id, jsonKeys) {
              _invokeMethod(this, "MultiRemove", 1, [ id, jsonKeys ], 4, 0);
          }, PersistentKvStorageService.prototype.multiSet = function(id, jsonKeyValue) {
              _invokeMethod(this, "MultiSet", 1, [ id, jsonKeyValue ], 4, 0);
          }, PersistentKvStorageService.prototype._handleResult = function(value) {
              (_super.prototype._handleResult.call(this, value), _isNullOrUndefined(value)) || _fixObjectPathIfNecessary(this, value);
          }, PersistentKvStorageService.prototype._handleRetrieveResult = function(value, result) {
              _super.prototype._handleRetrieveResult.call(this, value, result), _processRetrieveResult(this, value, result);
          }, PersistentKvStorageService.newObject = function(context) {
              return _createTopLevelServiceObject(PersistentKvStorageService, context, "Microsoft.PersistentKvStorage.PersistentKvStorageService", !1, 4);
          }, Object.defineProperty(PersistentKvStorageService.prototype, "onPersistentStorageMessage", {
              get: function() {
                  return this.m_persistentStorageMessage || (this.m_persistentStorageMessage = new OfficeExtension.GenericEventHandlers(this.context, this, "PersistentStorageMessage", {
                      eventType: 65537,
                      registerFunc: function() {},
                      unregisterFunc: function() {},
                      getTargetIdFunc: function() {
                          return null;
                      },
                      eventArgsTransformFunc: function(args) {
                          var perkvstorArgs;
                          try {
                              var parsedMessage = JSON.parse(args.message), hr = parseInt(parsedMessage.errorCode), error = 0 != hr ? new OfficeExtension.Error(function(internalCode) {
                                  var _a, table = ((_a = {})[16389] = {
                                      code: "GenericException",
                                      message: "Unknown error."
                                  }, _a[65535] = {
                                      code: "Unexcepted",
                                      message: "Catastrophic failure."
                                  }, _a[14] = {
                                      code: "OutOfMemory",
                                      message: "Ran out of memory."
                                  }, _a[87] = {
                                      code: "InvalidArg",
                                      message: "One or more arguments are invalid."
                                  }, _a[16385] = {
                                      code: "NotImplemented",
                                      message: "Not implemented."
                                  }, _a[6] = {
                                      code: "BadHandle",
                                      message: "File Handle is not Set."
                                  }, _a[5] = {
                                      code: "AccessDenied",
                                      message: "Can't read the Storage File."
                                  }, _a);
                                  return table[internalCode] ? table[internalCode] : {
                                      code: "Unknown",
                                      message: "An unknown error has occured"
                                  };
                              }(hr)) : null;
                              perkvstorArgs = {
                                  invokeId: parsedMessage.invokeId,
                                  message: parsedMessage.message,
                                  error: error
                              };
                          } catch (e) {
                              perkvstorArgs = {
                                  invokeId: -1,
                                  message: e.message,
                                  error: new OfficeExtension.Error({
                                      code: "GenericException",
                                      message: "Unknown error"
                                  })
                              };
                          }
                          return OfficeExtension.Utility._createPromiseFromResult(perkvstorArgs);
                      }
                  })), this.m_persistentStorageMessage;
              },
              enumerable: !0,
              configurable: !0
          }), PersistentKvStorageService.prototype.toJSON = function() {
              return _toJson(this, {}, {});
          }, PersistentKvStorageService;
      }(OfficeExtension.ClientObject);
      exports.PersistentKvStorageService = PersistentKvStorageService, function(ErrorCodes) {
          ErrorCodes.generalException = "GeneralException";
      }(exports.ErrorCodes || (exports.ErrorCodes = {}));
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var prefix = "_OfficeRuntime_Storage_", dummyUnusedKey = prefix + "|_unusedKey_";
      function ensureFreshLocalStorage() {
          window.localStorage.setItem(dummyUnusedKey, null), window.localStorage.removeItem(dummyUnusedKey);
      }
      function performAction(action) {
          return new Promise(function(resolve, reject) {
              try {
                  ensureFreshLocalStorage(), action(), resolve();
              } catch (e) {
                  reject(e);
              }
          });
      }
      function performActionAndReturnResult(action) {
          return new Promise(function(resolve, reject) {
              try {
                  ensureFreshLocalStorage(), resolve(action());
              } catch (e) {
                  reject(e);
              }
          });
      }
      function performMultiAction(collection, action) {
          return new Promise(function(resolve, reject) {
              var errors = [];
              try {
                  ensureFreshLocalStorage();
              } catch (e) {
                  errors.push(e);
              }
              for (var key in collection) if (collection.hasOwnProperty(key) || Array.isArray(collection)) try {
                  Array.isArray(collection) ? action(collection[key]) : action(key);
              } catch (e) {
                  errors.push(e);
              }
              errors.length > 0 ? reject(new Error("Unknown error.")) : resolve();
          });
      }
      exports.storage = {
          getItem: function(key) {
              return performActionAndReturnResult(function() {
                  return window.localStorage.getItem(prefix + key);
              });
          },
          setItem: function(key, value) {
              return performAction(function() {
                  return window.localStorage.setItem(prefix + key, value);
              });
          },
          removeItem: function(key) {
              return performAction(function() {
                  return window.localStorage.removeItem(prefix + key);
              });
          },
          getItems: function(keys) {
              return new Promise(function(resolve, reject) {
                  var result = {}, errors = [];
                  try {
                      ensureFreshLocalStorage();
                  } catch (e) {
                      reject(e);
                  }
                  keys.forEach(function(key) {
                      try {
                          var value = window.localStorage.getItem(prefix + key);
                          result[key] = value || null;
                      } catch (e) {
                          errors.push(e);
                      }
                  }), errors.length > 0 ? reject(new Error("Unknown error.")) : resolve(result);
              });
          },
          setItems: function(keyValues) {
              return performMultiAction(keyValues, function(key) {
                  return window.localStorage.setItem(prefix + key, keyValues[key]);
              });
          },
          removeItems: function(keys) {
              return performMultiAction(keys, function(key) {
                  window.localStorage.removeItem(prefix + key);
              });
          },
          getKeys: function() {
              return performActionAndReturnResult(function() {
                  return Object.keys(window.localStorage).filter(function(fullKey) {
                      return 0 === fullKey.indexOf(prefix);
                  }).map(function(fullKey) {
                      return fullKey.substr(prefix.length);
                  });
              });
          }
      };
  }, function(module, exports, __webpack_require__) {
      "use strict";
      var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
          return new (P || (P = Promise))(function(resolve, reject) {
              function fulfilled(value) {
                  try {
                      step(generator.next(value));
                  } catch (e) {
                      reject(e);
                  }
              }
              function rejected(value) {
                  try {
                      step(generator.throw(value));
                  } catch (e) {
                      reject(e);
                  }
              }
              function step(result) {
                  result.done ? resolve(result.value) : new P(function(resolve) {
                      resolve(result.value);
                  }).then(fulfilled, rejected);
              }
              step((generator = generator.apply(thisArg, _arguments || [])).next());
          });
      }, __generator = this && this.__generator || function(thisArg, body) {
          var f, y, t, g, _ = {
              label: 0,
              sent: function() {
                  if (1 & t[0]) throw t[1];
                  return t[1];
              },
              trys: [],
              ops: []
          };
          return g = {
              next: verb(0),
              throw: verb(1),
              return: verb(2)
          }, "function" == typeof Symbol && (g[Symbol.iterator] = function() {
              return this;
          }), g;
          function verb(n) {
              return function(v) {
                  return function(op) {
                      if (f) throw new TypeError("Generator is already executing.");
                      for (;_; ) try {
                          if (f = 1, y && (t = 2 & op[0] ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 
                          0) : y.next) && !(t = t.call(y, op[1])).done) return t;
                          switch (y = 0, t && (op = [ 2 & op[0], t.value ]), op[0]) {
                            case 0:
                            case 1:
                              t = op;
                              break;
  
                            case 4:
                              return _.label++, {
                                  value: op[1],
                                  done: !1
                              };
  
                            case 5:
                              _.label++, y = op[1], op = [ 0 ];
                              continue;
  
                            case 7:
                              op = _.ops.pop(), _.trys.pop();
                              continue;
  
                            default:
                              if (!(t = (t = _.trys).length > 0 && t[t.length - 1]) && (6 === op[0] || 2 === op[0])) {
                                  _ = 0;
                                  continue;
                              }
                              if (3 === op[0] && (!t || op[1] > t[0] && op[1] < t[3])) {
                                  _.label = op[1];
                                  break;
                              }
                              if (6 === op[0] && _.label < t[1]) {
                                  _.label = t[1], t = op;
                                  break;
                              }
                              if (t && _.label < t[2]) {
                                  _.label = t[2], _.ops.push(op);
                                  break;
                              }
                              t[2] && _.ops.pop(), _.trys.pop();
                              continue;
                          }
                          op = body.call(thisArg, _);
                      } catch (e) {
                          op = [ 6, e ], y = 0;
                      } finally {
                          f = t = 0;
                      }
                      if (5 & op[0]) throw op[1];
                      return {
                          value: op[0] ? op[1] : void 0,
                          done: !0
                      };
                  }([ n, v ]);
              };
          }
      };
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var ExperimentationNative = function() {
          function ExperimentationNative() {}
          return ExperimentationNative.prototype.getBooleanFeatureGate = function(featureName, defaultValue) {
              try {
                  var featureGateValue = Microsoft.Office.WebExtension.FeatureGates[featureName];
                  return "true" === featureGateValue.toString().toLowerCase() || !0 === featureGateValue;
              } catch (error) {
                  return defaultValue;
              }
          }, ExperimentationNative.prototype.getIntFeatureGate = function(featureName, defaultValue) {
              try {
                  var featureGateValue = parseInt(Microsoft.Office.WebExtension.FeatureGates[featureName]);
                  return isNaN(featureGateValue) ? defaultValue : featureGateValue;
              } catch (error) {
                  return defaultValue;
              }
          }, ExperimentationNative.prototype.getStringFeatureGate = function(featureName, defaultValue) {
              try {
                  var featureGateValue = Microsoft.Office.WebExtension.FeatureGates[featureName];
                  return void 0 === featureGateValue || null === featureGateValue ? defaultValue : featureGateValue;
              } catch (error) {
                  return defaultValue;
              }
          }, ExperimentationNative.prototype.getBooleanFeatureGateAsync = function(featureName, defaultValue) {
              return __awaiter(this, void 0, void 0, function() {
                  var context, feature;
                  return __generator(this, function(_b) {
                      switch (_b.label) {
                        case 0:
                          return _b.trys.push([ 0, 2, , 3 ]), context = this.getRequestContext(), feature = context.flighting.getFeature(featureName, "Boolean", defaultValue), 
                          context.load(feature), [ 4, context.sync() ];
  
                        case 1:
                          return _b.sent(), [ 2, feature.value ];
  
                        case 2:
                          return _b.sent(), [ 2, Promise.resolve(defaultValue) ];
  
                        case 3:
                          return [ 2 ];
                      }
                  });
              });
          }, ExperimentationNative.prototype.getStringFeatureGateAsync = function(featureName, defaultValue) {
              return __awaiter(this, void 0, void 0, function() {
                  var context, feature;
                  return __generator(this, function(_b) {
                      switch (_b.label) {
                        case 0:
                          return _b.trys.push([ 0, 2, , 3 ]), context = this.getRequestContext(), feature = context.flighting.getFeature(featureName, "String", defaultValue), 
                          context.load(feature), [ 4, context.sync() ];
  
                        case 1:
                          return _b.sent(), [ 2, feature.value ];
  
                        case 2:
                          return _b.sent(), [ 2, Promise.resolve(defaultValue) ];
  
                        case 3:
                          return [ 2 ];
                      }
                  });
              });
          }, ExperimentationNative.prototype.getIntFeatureGateAsync = function(featureName, defaultValue) {
              return __awaiter(this, void 0, void 0, function() {
                  var context, feature;
                  return __generator(this, function(_b) {
                      switch (_b.label) {
                        case 0:
                          return _b.trys.push([ 0, 2, , 3 ]), context = this.getRequestContext(), feature = context.flighting.getFeature(featureName, "Integer", defaultValue), 
                          context.load(feature), [ 4, context.sync() ];
  
                        case 1:
                          return _b.sent(), [ 2, feature.value ];
  
                        case 2:
                          return _b.sent(), [ 2, Promise.resolve(defaultValue) ];
  
                        case 3:
                          return [ 2 ];
                      }
                  });
              });
          }, ExperimentationNative.prototype.getRequestContext = function() {
              var ctx;
              if (Office.context.platform !== Office.PlatformType.OfficeOnline) {
                  switch (Office.context.host) {
                    case Office.HostType.Excel:
                      ctx = new Excel.RequestContext();
                      break;
  
                    case Office.HostType.OneNote:
                      ctx = new OneNote.RequestContext();
                      break;
  
                    case Office.HostType.PowerPoint:
                      ctx = new PowerPoint.RequestContext();
                      break;
  
                    case Office.HostType.Word:
                      ctx = new Word.RequestContext();
                      break;
  
                    default:
                      throw new Error("Unknown Application " + Office.context.host);
                  }
                  return ctx;
              }
          }, ExperimentationNative;
      }();
      exports.experimentation = new ExperimentationNative();
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var Message_1 = __webpack_require__(11);
      exports.Message = Message_1.Message;
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var ListenerManager_1 = __webpack_require__(12), Message = function() {
          function Message() {
              this.listeners = {};
          }
          return Message.prototype.on = function(eventName, listener) {
              return this.add(eventName, listener), new Promise(function(resolve) {
                  resolve();
              });
          }, Message.prototype.off = function(eventName, listener) {
              return this.remove(eventName, listener), new Promise(function(resolve) {
                  resolve();
              });
          }, Message.prototype.emit = function(eventName, message) {
              return this.send(eventName, message), new Promise(function(resolve) {
                  resolve();
              });
          }, Object.defineProperty(Message, "instance", {
              get: function() {
                  return Message.singleton || (Message.singleton = new Message()), this.singleton;
              },
              enumerable: !0,
              configurable: !0
          }), Message.prototype.setupReceive = function() {
              Office && Office.context && Office.context.messaging && !Office.context.messaging.onMessage && (Office.context.messaging.onMessage = this.receiveMessage.bind(this));
          }, Message.prototype.add = function(eventName, listener) {
              this.listeners.hasOwnProperty(eventName) || (this.listeners[eventName] = new ListenerManager_1.ListenerManager(), 
              this.setupReceive()), this.listeners[eventName].add(listener);
          }, Message.prototype.remove = function(eventName, listener) {
              this.listeners.hasOwnProperty(eventName) && (listener ? this.listeners[eventName].remove(listener) : delete this.listeners[eventName]);
          }, Message.prototype.send = function(eventName, message) {
              var wrapped = {
                  eventName: eventName,
                  message: message
              };
              Office && Office.context && Office.context.messaging && Office.context.messaging.sendMessage && Office.context.messaging.sendMessage(wrapped);
          }, Message.prototype.receiveMessage = function(wrapped) {
              var eventName = wrapped.eventName, message = wrapped.message;
              this.listeners.hasOwnProperty(eventName) && this.listeners[eventName].call(message);
          }, Message;
      }();
      exports.Message = Message;
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var ListenerManager = function() {
          function ListenerManager() {
              this.listeners = [];
          }
          return ListenerManager.prototype.add = function(listener) {
              this.listeners.push(listener);
          }, ListenerManager.prototype.remove = function(listener) {
              var index = this.listeners.lastIndexOf(listener);
              -1 !== index && this.listeners.splice(index, 1);
          }, ListenerManager.prototype.call = function(message) {
              this.listeners.forEach(function(listener) {
                  return listener(message);
              });
          }, ListenerManager;
      }();
      exports.ListenerManager = ListenerManager;
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      }), exports.ui = {
          getRibbon: function() {
              return new Promise(function(resolve, reject) {
                  resolve(new Ribbon());
              });
          }
      };
      var Ribbon = function() {
          function Ribbon() {
              this.requestContext = new OfficeCore.RequestContext(), OSF.WebAuth && "web" == OSF._OfficeAppFactory.getHostInfo().hostPlatform && (this.requestContext._customData = "WacPartition");
          }
          return Ribbon.prototype.requestUpdate = function(input) {
              var ribbon = this.requestContext.ribbon;
              return input.tabs.filter(function(tab) {
                  return !!tab.id;
              }).forEach(function(tab) {
                  ribbon.getTab(tab.id).setVisibility(tab.visible), tab.controls.filter(function(control) {
                      return !!control.id;
                  }).forEach(function(control) {
                      ribbon.getButton(control.id).enabled = control.enabled;
                  });
              }), this.requestContext.sync();
          }, Ribbon;
      }();
      exports.Ribbon = Ribbon;
  }, function(module, exports, __webpack_require__) {
      "use strict";
      Object.defineProperty(exports, "__esModule", {
          value: !0
      });
      var Auth = function() {
          function Auth() {}
          return Auth.prototype.getAccessToken = function(params) {
              return new Promise(function(resolve, reject) {
                  try {
                      Office.context.auth.getAccessTokenAsync(params || {}, function(result) {
                          "succeeded" === result.status ? resolve(result.value) : reject(result.error);
                      });
                  } catch (error) {
                      error && error.message ? reject(error.message) : reject(error);
                  }
              });
          }, Object.defineProperty(Auth, "instance", {
              get: function() {
                  return Auth.singleton || (Auth.singleton = new Auth()), Auth.singleton;
              },
              enumerable: !0,
              configurable: !0
          }), Auth;
      }();
      exports.Auth = Auth;
  } ]);