UNPKG

fs-tpp-api

Version:

FirstSpirit Third-Party-Preview API

1 lines 330 kB
{"version":3,"sources":["webpack://TPP_API/webpack/universalModuleDefinition","webpack://TPP_API/webpack/bootstrap","webpack://TPP_API/./node_modules/core-js/library/modules/_core.js","webpack://TPP_API/./node_modules/core-js/library/modules/_global.js","webpack://TPP_API/./node_modules/core-js/library/modules/_export.js","webpack://TPP_API/./node_modules/core-js/library/modules/_wks.js","webpack://TPP_API/./node_modules/core-js/library/modules/_an-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_hide.js","webpack://TPP_API/./node_modules/core-js/library/modules/_ctx.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-dp.js","webpack://TPP_API/./node_modules/core-js/library/modules/_is-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_descriptors.js","webpack://TPP_API/./node_modules/core-js/library/modules/_fails.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iterators.js","webpack://TPP_API/./node_modules/core-js/library/modules/_a-function.js","webpack://TPP_API/./node_modules/core-js/library/modules/_has.js","webpack://TPP_API/./node_modules/core-js/library/modules/_defined.js","webpack://TPP_API/./node_modules/core-js/library/modules/_cof.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_dom-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_property-desc.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-integer.js","webpack://TPP_API/./node_modules/core-js/library/modules/_library.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-iobject.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-length.js","webpack://TPP_API/./node_modules/core-js/library/modules/_shared-key.js","webpack://TPP_API/./node_modules/core-js/library/modules/_set-to-string-tag.js","webpack://TPP_API/./node_modules/core-js/library/modules/_new-promise-capability.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-ws.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.string.iterator.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-define.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iobject.js","webpack://TPP_API/./node_modules/core-js/library/modules/_shared.js","webpack://TPP_API/./node_modules/core-js/library/modules/_uid.js","webpack://TPP_API/./node_modules/core-js/library/modules/_enum-bug-keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_html.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-call.js","webpack://TPP_API/./node_modules/core-js/library/modules/_is-array-iter.js","webpack://TPP_API/./node_modules/core-js/library/modules/core.get-iterator-method.js","webpack://TPP_API/./node_modules/core-js/library/modules/_classof.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-detect.js","webpack://TPP_API/./node_modules/core-js/library/modules/_species-constructor.js","webpack://TPP_API/./node_modules/core-js/library/modules/_task.js","webpack://TPP_API/./node_modules/core-js/library/modules/_perform.js","webpack://TPP_API/./node_modules/core-js/library/modules/_promise-resolve.js","webpack://TPP_API/./lib/fs-tpp-api-module-wrapper.js","webpack://TPP_API/./lib/fs-tpp-api.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/number/is-nan.js","webpack://TPP_API/./node_modules/core-js/library/fn/number/is-nan.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.number.is-nan.js","webpack://TPP_API/./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-primitive.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/number/parse-int.js","webpack://TPP_API/./node_modules/core-js/library/fn/number/parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.number.parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/_parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-trim.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/array/from.js","webpack://TPP_API/./node_modules/core-js/library/fn/array/from.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-at.js","webpack://TPP_API/./node_modules/core-js/library/modules/_redefine.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-dps.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-keys-internal.js","webpack://TPP_API/./node_modules/core-js/library/modules/_array-includes.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-absolute-index.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-gpo.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.array.from.js","webpack://TPP_API/./node_modules/core-js/library/modules/_create-property.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/keys.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-sap.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/json/stringify.js","webpack://TPP_API/./node_modules/core-js/library/fn/json/stringify.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/promise.js","webpack://TPP_API/./node_modules/core-js/library/fn/promise.js","webpack://TPP_API/./node_modules/core-js/library/modules/web.dom.iterable.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.array.iterator.js","webpack://TPP_API/./node_modules/core-js/library/modules/_add-to-unscopables.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-step.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.promise.js","webpack://TPP_API/./node_modules/core-js/library/modules/_an-instance.js","webpack://TPP_API/./node_modules/core-js/library/modules/_for-of.js","webpack://TPP_API/./node_modules/core-js/library/modules/_invoke.js","webpack://TPP_API/./node_modules/core-js/library/modules/_microtask.js","webpack://TPP_API/./node_modules/core-js/library/modules/_user-agent.js","webpack://TPP_API/./node_modules/core-js/library/modules/_redefine-all.js","webpack://TPP_API/./node_modules/core-js/library/modules/_set-species.js","webpack://TPP_API/./node_modules/core-js/library/modules/es7.promise.finally.js","webpack://TPP_API/./node_modules/core-js/library/modules/es7.promise.try.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/assign.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-gops.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-pie.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/create.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/create.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.create.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","core","version","__e","global","Math","self","Function","__g","ctx","hide","has","$export","type","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","target","undefined","C","a","b","this","arguments","length","apply","virtual","R","U","store","uid","USE_SYMBOL","isObject","it","TypeError","dP","createDesc","f","aFunction","fn","that","anObject","IE8_DOM_DEFINE","toPrimitive","O","Attributes","e","exec","toString","slice","defined","document","is","createElement","bitmap","configurable","writable","ceil","floor","isNaN","$keys","enumBugKeys","keys","IObject","toInteger","min","shared","def","TAG","tag","stat","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","$at","String","iterated","_t","_i","point","index","done","LIBRARY","redefine","Iterators","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","returnThis","Base","NAME","Constructor","next","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","Properties","result","cof","propertyIsEnumerable","split","push","copyright","id","px","random","concat","documentElement","iterator","ret","ArrayProto","Array","classof","getIteratorMethod","ARG","T","tryGet","callee","SAFE_CLOSING","riter","from","skipClosing","safe","arr","iter","SPECIES","D","constructor","defer","channel","port","invoke","html","cel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","data","args","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","removeChild","setTimeout","set","clear","v","newPromiseCapability","x","promiseCapability","require","ui","hasClass","addClass","removeClass","actionSpecToBuilder","_cache","getInfo","_enabledFallback","_isEnabled","_log","messageReceiverOverride","DEFAULT_CONFIG","origin","autoScanDelay","alwaysDebug","autoReload","deleteSectionEnabled","deletePageWorkflow","workflowMode","config","util","$root","querySelectorAll","filter","byId","previewId","$el","dataset","byNonEmpty","matchAffectedInfo","affected","statusMap","forEach","status","fsIdInfo","previewIdCache","$target","isFunction","val","isString","messageService","ms","MESSAGE_TYPE","storage","serialize","callback","tryParseResult","match","JSON","parse","ignore","handleCallback","tppMessage","response","_response","callbackId","permanent","deserialize","_callbackId","EVENT_HANDLER","setInternalEventHandler","eventHandler","receiveMessage","tpp","log","_messageType","_eventId","payload","_payload","handleOuterEvent","send","message","top","sendMessageInternal","updateReceiverOverride","registerOnMessage","connectApi","console","isEnabled","localStorage","getItem","setEnabled","enabled","setItem","emit","eventName","detail","CustomEvent","bubbles","body","dispatchEvent","fsIdObject","previewIdObjectString","atob","previewIdObject","parsePreviewId","getValue","path","pathSpec","Types","createActionBuilder","builderWith","template","_template","createBuilder","builder","_name","label","_label","context","_context","contextUpdate","element","_element","url","_icon","_previewId","execute","_execute","getOptions","_getOptions","options","build","action","_status","conf","_typeMarker","getStatus","setStatus","getName","getLabel","getIcon","getPreviewId","getElement","getContext","supportsOptions","actionHelper","actionSpec","actionBuilder","createActionFromBuilder","pathString","elements","raw","isFolder","normalized","join","parent","className","classList","contains","RegExp","test","add","remove","replace","renderFrame","tppFrameDecorator","$borders","$buttonContainer","$activeElement","drawBorders","rect","getBoundingClientRect","setAttribute","map","prop","max","enter","leave","removeAttribute","getButtonContainer","disposeBorders","tppBorders","parentElement","renderButtons","$container","$buttons","_buttons","_dropdownButtons","buttonBuilder","_updateButton","button","$element","appendActionIcon","iconUrl","updateButtons","$flyout","innerHTML","$grouptitle","$list","option","$option","_updateDropdownButton","clearButtons","addButton","buttonSpec","$button","actionName","left","width","_addDropdownButton","_addSimpleButton","ActionStore","Common","api","_previewRequestHandlers","_navigationChangeHandlers","_workflowProcessedHandlers","fireDOMEvents","previewElements","error","Event","ELEMENT_REQUESTED","handler","NAVIGATION_CHANGED","workflowInfo","isDeleted","deleted","ELEMENT_DELETED","workflowId","transitionId","WORKFLOW_PROCESSED","Operation","getAffectedWorkflowElements","then","affectedElements","affectedInfo","STATUS_CHANGED","identifier","params","setPreviewElement","addPreviewRequestHandler","addNavigationChangeHandler","addWorkflowProcessedHandler","ping","_project","languages","previewUrl","location","href","Action","createDetail","detailName","executeOperation","language","master","unshift","lang","showEditDialog","CONTENT_CHANGED","showMetaDataDialog","getElementStatus","renderElement","renderStartNode","deleteSection","deletePage","deleteWorkflowUID","startWorkflow","workflow","processWorkflow","transition","createPage","selectedTemplate","ELEMENT_CREATED","createSectionParams","sectionName","position","positionIndex","createChildSection","CHILD_SECTION_CREATED","createSiblingSection","SIBLING_SECTION_CREATED","createDataset","cropImage","resolution","IMAGE_CHANGED","toggleBookmark","getLanguages","getPreviewUrl","showTranslationDialog","Decorate","decorate","initialized","CUSTOM","CREATE_PAGE","icon","Icon","CREATE_CHILD_SECTION","CREATE_SECTION","CREATE_SIBLING_SECTION","DEBUG_STATUS","DEBUG","EDIT_ELEMENT","EDIT","EDIT_META_DATA","DELETE_SECTION","DELETE","elementType","DELETE_PAGE","workflows","deleteWorkflow","current","getDeleteWorkflowUID","START_WORKFLOW","WORKFLOW","allowed","_workflows","storeType","displayName","PROCESS_WORKFLOW","transitions","CROP_IMAGE","resolutions","ADD_BOOKMARK","indexOf","DELETE_BOOKMARK","TRANSLATE","ln","j","defaultDecorationActions","setDefaultButtons","buttons","scan","head","initPreviewId","contextFromAttributes","startsWith","reduce","substr","toLowerCase","initContext","_customActions","frameDecorator","MutationObserver","mutations","mutation","nodes","removedNodes","directMatch","parentMatch","some","observe","subtree","childList","_updateDecoration","customActions","updateContext","updateDecoration","decorator","updatePreviewId","Debug","debug","currentConfig","defaultConfig","enableDebugLog","rawProp","apiInitialized","gitHash","checkVersions","timeout","backendVersion","frontendVersion","TPP_API","INIT","WORKFLOW_STARTED","FIRST","LAST","BEFORE","AFTER","INDEX","PAGE_DRIVE","PAGE_REF_DRIVEN","GROUPACTION","_internal","CommonConstructor","OperationConstructor","DecorateConstructor","DebugConstructor","setMessageReceiver","receiver","enable","initCalled","init","tppConfig","Button","parseInt","reload","common","inIFrame","pingResult","checkForReceiver","receiverFound","connectHandler","$script","getTppCamelCase","str","toUpperCase","setBoolean","strValue","setString","setNumber","querySelector","Number","number","valueOf","$parseInt","$trim","trim","ws","hex","radix","string","fails","spaces","space","ltrim","rtrim","exporter","KEY","ALIAS","exp","FORCE","TYPE","TO_STRING","pos","charCodeAt","charAt","descriptor","getKeys","defineProperties","toIObject","arrayIndexOf","names","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","toObject","ObjectProto","isArrayIter","createProperty","getIterFn","arrayLike","step","aLen","mapfn","mapping","iterFn","$defineProperty","$JSON","stringify","Promise","TO_STRING_TAG","DOMIterables","Collection","addToUnscopables","_k","Arguments","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","anInstance","forOf","speciesConstructor","task","microtask","newPromiseCapabilityModule","perform","userAgent","promiseResolve","versions","v8","$Promise","isNode","empty","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","notify","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","fail","domain","_h","onHandleUnhandled","exit","onUnhandled","unhandled","isUnhandled","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","wrapper","executor","err","onFulfilled","onRejected","capability","all","iterable","remaining","$index","alreadyCalled","race","forbiddenField","BREAK","RETURN","un","macrotask","Observer","WebKitMutationObserver","last","flush","navigator","standalone","toggle","node","createTextNode","characterData","DESCRIPTORS","onFinally","callbackfn","assign","gOPS","pIE","$assign","A","K","k","getSymbols","isEnum","getOwnPropertySymbols","$Object"],"mappings":"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","file":"fs-tpp-api.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TPP_API\"] = factory();\n\telse\n\t\troot[\"TPP_API\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","module.exports = {};\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","module.exports = true;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","// noinspection JSAnnotator\nexport default require(\"./fs-tpp-api.js\");\n// wrapper so the api could be transpiled with babel, but kept in the old form for compatibility","(function (root, factory) {\n  /*global module, define, define*/\n  if (typeof exports === 'object') {\n    // COMMON-JS\n    module.exports = factory();\n  } else if (typeof define === 'function' && define['amd']) {\n    // Asynchronous Module Definition AMD\n    define([], factory);\n  } else {\n    //GLOBAL (e.g. browser)\n    root['TPP_API'] = factory();\n  }\n}(this, function () {\n  'use strict';\n  /* globals Promise */\n\n\n  var FRONTEND_VERSION = \"1.2.23\";\n  var GIT_HASH = \"eab1dfe7f89e17b8be3a27d397351176b83ae007\";\n\n  var messageReceiverOverride = null; // for debugging and tests\n\n  var DEFAULT_CONFIG = {\n    origin: \"*\",          // every origin allowed\n    autoScanDelay: null,  // disabled,\n    alwaysDebug: false,   // debug will be enabled by default, \"false\" means debug has to be toggled manually\n    autoReload: false,     // disabled\n    deleteSectionEnabled: false,\n    deletePageWorkflow: null,\n    workflowMode: 'PAGE_DRIVEN'\n  };\n\n  var config = {};\n\n  var util = {};\n\n  /**\n   * @private\n   * @param {HTMLElement} [$root] - The root to search from, document if not set.\n   * @return {[]}\n   */\n  util.previewElements = function ($root) {\n    return [].slice.call(($root || document).querySelectorAll('[data-preview-id]'));\n  };\n\n  util.filter = {};\n\n  /*\n   * Filter predicate\n   */\n  util.filter.byId = function (previewId) {\n    return function ($el) {\n      return $el.dataset.previewId === previewId;\n    };\n  };\n\n  util.filter.byNonEmpty = function (result) {\n    return (!!result);\n  };\n\n\n  /**\n   * This generates a mapper that is initialized by a list of status elements.\n   * The generated mapper matches a given element with a previewId against the list\n   * of status elements.\n   *  If there is no match it maps to null.\n   *  If there is a match it maps to an info object like this:\n   *  {\n   *    target,    //The HTMLElement that was given.\n   *    previewId, //The involved previewId as string\n   *    status     //The status object of the store element\n   *  }\n   * @private\n   * @param affected\n   *  A WorkflowResult holding a \"statusList\"\n   * @return {Function}\n   *  A mapper from {HTMLElement}->{target,previewId,status}\n   */\n  util.filter.matchAffectedInfo = function (affected) {\n\n    var statusMap = {};\n    if (affected && affected['statusList']) {\n      affected['statusList'].forEach(function (status) {\n        statusMap[status['id']] = status;\n      });\n    }\n\n    return function ($el) {\n      var previewId = $el.dataset.previewId;\n      var fsIdInfo = util.previewIdCache(previewId);\n      if (fsIdInfo) {\n        var id = fsIdInfo['id'].toString();\n        var status = statusMap[id];\n        if (status && status['storeType'] === fsIdInfo['store']) {\n          return {\n            previewId: previewId,\n            status: status,\n            $target: $el\n          };\n        }\n      }\n      return null;\n    }\n  };\n\n\n  /**\n   * Poor-developers isFunction. Not full lodash version.\n   */\n  util.isFunction = function (val) {\n    return typeof (val) === 'function';\n  };\n\n  /**\n   * Object means arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`\n   * Compare with lodash.\n   * @param val\n   * @return {boolean} true, if val is an 'Object'\n   */\n  util.isObject = function (val) {\n    var type = typeof val\n    return val != null && (type == 'object' || type == 'function')\n  };\n\n  /**\n   * Poor-developers isString. Not full lodash version.\n   */\n  util.isString = function (val) {\n    return typeof (val) === 'string';\n  };\n\n\n  /**\n   * Message Service doing all the communication with the\n   * fs-tpp-receiver.js located in the ContentCreator parent window.\n   *\n   * Utilizes Window.postMessage.\n   * The Service stores the callbacks, calls them when the matching response-message is received\n   * and then remove the callback from storage.\n   * @name TppMessageService\n   * @private\n   * @see {Window}\n   * @type {{init, send, serialize, setInternalEventHandler, updateReceiver}}\n   */\n  // Serialize a callback to an id for postMessage usage\n  util.messageService = (function () {\n\n\n    var ms = {};\n\n    /**\n     * Message type of incoming messages from the fs-tpp-receiver in the outer frame.\n     * @name TppMessageService.MessageType\n     * @private\n     */\n    var MESSAGE_TYPE = {\n      /**\n       * @name TppMessageService.MessageType.CALLBACK\n       */\n      CALLBACK: \"CALLBACK\",\n      /**\n       * @name TppMessageService.MessageType.EVENT\n       */\n      EVENT: \"EVENT\"\n    };\n\n    /// ====== Callback storage ======\n    var storage = [null];\n\n    /**\n     * Stores a callback under a given id.\n     * @param {function} callback - The function to be stored.\n     * @return {number} - The callback id.\n     *        Might be null if no function is given.\n     */\n    ms.serialize = function (callback) {\n      if (typeof (callback) === 'function') {\n        return storage.push(callback) - 1;\n      }\n      return null;\n    };\n\n    /**\n     * Invokes a callback for the given callbackId with data as first parameter\n     * @param {number} callbackId - A callback id\n     * @param {string|Object}data\n     * @private\n     */\n    var deserialize = function (callbackId, data, permanent) {\n      if (callbackId && storage[callbackId]) {\n        storage[callbackId].call(null, data);\n        if (!permanent) {\n          delete storage[callbackId];\n        }\n      }\n    };\n\n    var tryParseResult = function (result) {\n      if (typeof (result) === 'string' && result.match(/^\\s*[\\[{\"]/) !== null) {\n        try {\n          return JSON.parse(result);\n        } catch (ignore) {\n          // not a json\n        }\n      }\n      return result;\n    };\n\n    var handleCallback = function (tppMessage) {\n      /** @type {string|Object} */\n      var response = tppMessage._response;\n      var callbackId = tppMessage._callbackId;\n      deserialize(callbackId, tryParseResult(response));\n    };\n\n\n    // ======= Event Handler ====== //\n    /**\n     * List of possible event handlers. The handlers translates the internal _messageId\n     * These are internal markers of events.\n     */\n    var EVENT_HANDLER = {};\n    var handleOuterEvent = function (tppMessage) {\n      var eventHandler = EVENT_HANDLER[tppMessage._eventId];\n      if (typeof eventHandler === 'function') {\n        var payload = tppMessage._payload;\n        eventHandler(tryParseResult(payload));\n      }\n    };\n\n    ms.setInternalEventHandler = function (name, eventHandler) {\n      EVENT_HANDLER[name] = eventHandler;\n    };\n\n    /**\n     * Handles incomming messages from the fs-tpp-receiver in the outer frame.\n     * It dispatches the diferent types of messages.\n     * @param e\n     */\n    var receiveMessage = function (e) {\n      if (typeof (e.data) === 'object' && typeof (e.data.tpp) === 'object') {\n        util.log(\"Message Received \", e.data);\n        if (e.data.tpp._messageType === MESSAGE_TYPE.CALLBACK) {\n          handleCallback(e.data.tpp);\n        } else if (e.data.tpp._messageType === MESSAGE_TYPE.EVENT) {\n          handleOuterEvent(e.data.tpp);\n        }\n      }\n    };\n\n    /**\n     * Internal send message to the fs-tpp-receiver.\n     * The messageReceiverOverride gives the opportunity to mock the outer frame during testing or write\n     * your own connection glue code.\n     * @param message\n     * @param origin\n     */\n    var sendMessageInternal = function (message, origin) {\n      if (messageReceiverOverride && typeof messageReceiverOverride.postMessage === 'function') {\n        // Testing and mocking override\n        messageReceiverOverride.postMessage(message, origin);\n      } else if (typeof window !== 'undefined' && window['top'] !== window) {\n        // Default case\n        window.top.postMessage(message, origin);\n      }\n    };\n\n    /**\n     * Send a message to the fs-tpp-receiver running in the outer frame.\n     * Expect to get a message back of {@link TppMessageService.MessageType.CALLBACK}\n     * @private\n     * @param {Object} message\n     * @param {Function} [callback]\n     * @param {string} origin\n     */\n    ms.send = function (message, origin, callback) {\n      if (typeof callback === 'function') {\n        message.tpp = message.tpp || {};\n        message.tpp._callbackId = ms.serialize(callback);\n      }\n      sendMessageInternal(message, origin);\n      util.log(\"Message send \", message, origin);\n    };\n\n    /**\n     * (Re-)initialize message receiving for unit test mode\n     */\n    ms.updateReceiverOverride = function () {\n      if (messageReceiverOverride && typeof messageReceiverOverride.registerOnMessage === 'function') {\n        // testing and mocking\n        messageReceiverOverride.registerOnMessage(receiveMessage);\n      } // no else (handling here is not exclusive)\n    };\n\n    /**\n     * Send message to receiver so the receiver can send back {@link TppMessageService.MessageType.EVENT} messages.\n     */\n    ms.connectApi = function (origin, callback) {\n      var message = {\n        tpp: {connectApi: true}\n      };\n      ms.send(message, origin, callback);\n    };\n\n    //init message handler\n    if (typeof window !== 'undefined') {\n      // Default case\n      window.addEventListener('message', receiveMessage);\n    }\n    return ms;\n  })();\n\n\n  /**\n   * Internal logging util. Stores enabled state within localStorage.\n   * It can be enabled without code changes in the browsers dev console:\n   * TPP_API.enableDebugLog().\n   *\n   * @private\n   * @type {Function}\n   */\n  util.log = (function () {\n    var LOCAL_STORAGE_DEBUG_LOG_ENABLED = 'tpp_debug_log_enabled';\n    var _enabledFallback = false;\n    var _isEnabled = function () {\n      if (typeof localStorage !== 'undefined') {\n        try {\n          return localStorage.getItem(LOCAL_STORAGE_DEBUG_LOG_ENABLED) === 'true';\n        } catch (e) {\n          // localStorage not available\n        }\n      }\n      return _enabledFallback;\n    };\n\n    var _setEnabled = function (enabled) {\n      if (typeof localStorage !== 'undefined') {\n        try {\n          localStorage.setItem(LOCAL_STORAGE_DEBUG_LOG_ENABLED, enabled);\n        } catch (e) {\n          // localStorage not available\n        }\n      }\n      _enabledFallback = enabled;\n    };\n\n    var _log = function debugLogger() {\n      if (_isEnabled()) {\n        var args = ['%cTPP:%c', 'font-style:italic', ''].concat([].slice.call(arguments));\n        // noinspection JSUnresolvedFunction\n        console.log.apply(console, args);\n      }\n    };\n\n    _log.isEnabled = _isEnabled;\n    _log.setEnabled = _setEnabled;\n\n    return _log;\n  })();\n\n  // EventEmitter\n  util.emit = function (eventName, detail, $target) {\n    // noinspection JSCheckFunctionSignatures\n    var event = new CustomEvent(eventName, {detail: detail, bubbles: true});\n    $target = $target || document.body;\n    $target.dispatchEvent(event);\n    util.log(\"Event emitted\", event);\n  };\n\n\n  //list the parsed results from previewId-Strings\n  util.previewIdCache = function () {\n    var _cache = {};\n\n    var parsePreviewId = function (previewId) {\n      // OCM-390 we do not support uuid.lang format in old frontend api, only for SNAP\n      try {\n        var previewIdObjectString = atob(previewId);\n        var previewIdObject = JSON.parse(previewIdObjectString);\n        return JSON.parse(atob(previewIdObject['data-fs-id']));\n      } catch (e) {\n        util.log(\"Error in previewIdMatchesStatus for\", previewId, e);\n        return null;\n      }\n    };\n\n    var getInfo = function (previewId) {\n      if (!_cache[previewId]) {\n        var fsIdObject = parsePreviewId(previewId);\n        if (fsIdObject) {\n          _cache[previewId] = fsIdObject;\n        }\n      }\n      return _cache[previewId];\n    };\n\n    getInfo.clear = function () { _cache = {};};\n    return getInfo;\n  }();\n\n  /**\n   *\n   * A light variant of underscore/lodash _.get().\n   * Can read path expressions like\n   *  * 'a'\n   *  * 'a.b.c'\n   *  * ['a','b','c']\n   * But not:\n   *  * 'a[1].b'\n   *\n   * Results:\n   * * If object is null, undefined, or otherwise 'falsey'\n   * * If path is null, undefined, an empty string, or not a string nor an array of String: undefined.\n   * * Given a path 'a': object['a']\n   * * Give a path 'a.b.c': getPath(['b','c'],object['a']);\n   * * If path is []: undefined\n   * * Given a path ['a']: object['a']\n   * * Given a path ['a','b','c']: getPath(['b','c'],object['a']);\n   * @protected\n   * @param {string|[]} path\n   * @param {Object} object\n   * @return {*}\n   */\n  util.getValue = function (path, object) {\n    if (!object || !path) {\n      return undefined;\n    }\n    var pathSpec = [];\n    if (typeof path === 'string') {\n      pathSpec = path.split('.');\n    } else if (path.constructor !== 'Array') {\n      pathSpec = path;\n    }\n    if (pathSpec.length === 0) {\n      return undefined;\n    } else if (pathSpec.length === 1) {\n      return object[pathSpec[0]];\n    }\n    return util.getValue(pathSpec.slice(1), object[pathSpec[0]]);\n  };\n\n\n  /**\n   * The basic status object of a FirstSpirit element.\n   * The documented properties are a subset and describe a fixed API.\n   * Properties not documented here may change at any time.\n   *\n   * @example\n   * {\n   *  \"storeType\": \"PAGESTORE\",\n   *  \"elementType\": \"Page\",\n   *  \"displayName\": \"_banner_xml\",\n   *  \"uid\": \"_banner_xml\",\n   *  \"released\": true,\n   *  \"releaseSupported\": true,\n   *  \"workflows\" : {... }\n   *  \"permissions\": { ... }\n   * }\n   *\n   * @public\n   * @since 1.0.0\n   * @name TppElementStatus\n   * @property {string} uid - the uid of the element\n   * @property {string} displayName - the display name of the element\n   * @property {string} elementType - the type of the element\n   * @property {string} storeType - the type of the elements store\n   * @property {boolean} releaseSupported - 'true' if the given element supports release\n   * @property {boolean} release - the current release status of the element (value must be ignored if 'releaseSupported' is false)\n   * @property {TppWorkflowStatus} workflows\n   * @property {TppPermissionStatus} permissions\n   **/\n\n\n  /**\n   * The descriptor of a FirstSpirit workflow.\n   * @example\n   *   {\n   *      \"uid\": \"Freigabe Anfordern\",\n   *      \"displayName\": \"Release request\",\n   *      \"storeType\": \"TEMPLATESTORE\",\n   *      \"elementType\": \"Workflow\",\n   *      \"permissions\": {...}\n   *      ...\n   *   }\n   *  @public\n   *  @since 1.0.0\n   *  @name TppWorkflowDescriptor\n   *  @property {string} uid - the uid of the workflow\n   *  @property {string} displayName - the display name of the workflow\n   *  @property {string} storeType - the type of the elements store - in this case always \"TEMPLATESTORE\"\n   *  @property {string} elementType - the type of the workflow - in this case always \"Workflow\"\n   *  @property {TppPermissionStatus} permission - the current permissions on the workflow element itself\n   */\n\n  /**\n   * The descriptor of a workflows transition.\n   *\n   *\n   *\n   * @example\n   * {\n   *    \"id\": \"8\",\n   *    \"displayName\": \"Check\",\n   *    \"uid\": \"Prüfen\"\n   * }\n   * @public\n   * @since 1.0.0\n   * @name TppTransitionDescriptor\n   * @property {string} id - the id of the transition\n   * @property {string} displayName - the display name of the transition\n   * @property {string} uid - the uid of the element\n   */\n\n  /**\n   * The current workflow status of the element. Containing running and possible workflows and their status.\n   *\n   * Called on a Page, the workflow status of the current page will be given.\n   * Called on a Section, the workflow status of the page will be given, which contains the section.\n   *\n   * @example\n   * {\n   *    \"allowed\": [...],\n   *    \"current\": {...},\n   *    \"transitions\": [...],\n   *    \"deleteWorkflow\": null\n   * }\n   * @public\n   * @since 1.0.0\n   * @name TppWorkflowStatus\n   * @property {[TppWorkflowDescriptor]} allowed - list of all allowed workflows in the current element\n   * @property {TppWorkflowDescriptor} current - gives the current running workflow of this element (can be null)\n   * @property {[TppTransitionDescriptor]} transitions - gives a list a possible transitions in the running workflow (can be null)\n   * @property {TppWorkflowDescriptor} deleteWorkflow - gives a dedicated deleteWorkflow for this element, if one is configured in the FirstSpirit project (can be null)\n   **/\n\n\n  /**\n   * The permission of the current user on the given element.\n   * @example\n   *  {\n   *    \"see\": true,\n   *    \"read\": true,\n   *    \"change\": true,\n   *    \"delete\": true,\n   *    \"appendLeaf\": true,\n   *    \"deleteLeaf\": true,\n   *    \"release\": true,\n   *    \"seeMeta\": true,\n   *    \"changeMeta\": true,\n   *    \"changePermission\": true\n   *  }\n   * @public\n   * @since 1.0.0\n   * @name TppPermissionStatus\n   * @property {boolean} see\n   * @property {boolean} read\n   * @property {boolean} change\n   * @property {boolean} delete\n   * @property {boolean} appendLeaf\n   * @property {boolean} deleteLeaf\n   * @property {boolean} release\n   * @property {boolean} seeMeta\n   * @property {boolean} changeMeta\n   * @property {boolean} changePermission\n   **/\n\n\n  /**\n   * Fluent builders to create typed objects.\n   * Ensures the \"interface\" the object and should provide a stable API.\n   *\n   * @private Could be made part of the official api.\n   */\n  util.Types = (function () {\n\n    /**\n     * Internal representation if a concrete button action in the decorate API.\n     *\n     * Instances of action will be produced by the API.\n     *\n     * @public\n     * @since 1.0.0\n     * @name TppAction\n     * @class\n     */\n    /**\n     * @protected\n     * @name TppActionBuilder\n     * @example\n     * var action = createActionBuilder().name('sendMail').execute(...).build();\n     *\n     * @return {TppActionBuilder}\n     */\n    var createActionBuilder = function () {\n\n      var build = function (template) {\n\n        var action = {};\n\n        var _status = {};\n\n        var conf = Object.create(template);\n\n        action._typeMarker = 'TppAction';\n\n        /**\n         * The current status of the FirstSpirit element connected with this action.\n         *\n         * This object might be empty, if there is no current element given by a previewId or the\n         * information is not fetched yet by using {@link TPP_API.Operation.getElementStatus}.\n         *\n         * To avoid null- and undefined-checks, the method provides an optional argument path to query a\n         * nested object property.\n         *\n         * @example\n         * action.getStatus()       // Give the object set with action.setStatus\n         * action.getStatus(\"a.b\")  // Gives action.getStatus().a.b, if value exists. Otherwise: undefined\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getStatus\n         * @method\n         * @param {string} [path] - Optional property path to query on status\n         * @return {TppElementStatus|*} - the status of the current element. Might be an empty object.\n         */\n        action.getStatus = function (path) {\n          if (path) {\n            return util.getValue(path, _status);\n          }\n          return _status;\n        };\n\n        /**\n         * Set the current status of the action.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#setStatus\n         * @method\n         * @param status\n         */\n        action.setStatus = function (status) {\n          _status = status;\n        };\n\n\n        /**\n         * The current name of the action.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getName\n         * @method\n         * @return {string}\n         */\n        action.getName = function () {\n          return conf._name;\n        };\n\n        /**\n         * The label of the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getLabel\n         * @method\n         * @return {string}\n         */\n        action.getLabel = function () {\n          return conf._label;\n        };\n\n        /**\n         * The icon url of the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getIcon\n         * @method\n         * @return {string}\n         */\n        action.getIcon = function () {\n          return conf._icon;\n        };\n\n        /**\n         * The preview id of the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getPreviewId\n         * @method\n         * @return {string} - can be null.\n         */\n        action.getPreviewId = function () {\n          return conf._previewId;\n        };\n\n        /**\n         * The current DOM element the action is attached to\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getElement\n         * @method\n         * @return {HTMLElement} - can be null\n         */\n        action.getElement = function () {\n          return conf._element;\n        };\n\n        /**\n         * The context of the action.\n         * To avoid null- and undefined-checks, the method provides an optional argument path to query a\n         * nested object property.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getContext\n         * @method\n         * @param {string} [path] - Optional property path to query on context\n         * @return {Object}\n         */\n        action.getContext = function (path) {\n          if (path) {\n            return util.getValue(path, conf._context);\n          }\n          return conf._context;\n        };\n\n        /**\n         * Check if the action is enabled\n         * @public\n         * @since 1.0.0\n         * @name TppAction#isEnabled\n         * @method\n         * @return {boolean}\n         */\n        action.isEnabled = function () {\n          if (typeof conf._isEnabled === 'function') {\n            return !!(conf._isEnabled(action, Array.prototype.slice.call(arguments)));\n          }\n          return true;\n        };\n\n        /**\n         * Execute the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#execute\n         * @method\n         */\n        action.execute = function () {\n          if (typeof conf._execute === 'function') {\n            return conf._execute(action, Array.prototype.slice.call(arguments));\n          }\n        };\n\n        /**\n         * Check if the action is configured with options.\n         * Compare to {@link TppActionBuilder#options}.\n         * @public\n         * @since 1.0.0\n         * @name TppAction#supportsOptions\n         * @return {boolean}\n         */\n        action.supportsOptions = function () {\n          return (!!conf._getOptions);\n        };\n\n        /**\n         * Returns the action's possible options\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getOptions\n         * @return {[TppActionOptions]}\n         */\n        action.getOptions = function () {\n          if (typeof conf._getOptions === 'function') {\n            return conf._getOptions(action, Array.prototype.slice.call(arguments));\n          } else {\n            return conf._getOptions; //fixme: freeze the array\n          }\n        };\n\n        return action;\n\n      };\n\n      /**\n       *\n       * Creates a copy and sets the values.\n       * This is used to make the builder immutable,\n       * in the way that every chain-able function\n       * gives a new instance of a builder keeping.\n       *\n       * Object.freeze is not used as an optimization,\n       * because the we handle the template here as\n       * \"private\" variable\n       * @protected\n       * @param {Object} template\n       * @param {Object} values\n       *\n       */\n      var builderWith = function (template, values) {\n        var _template = Object.create(template);\n        if (values) {\n          _template = Object.assign(_template, values);\n        }\n        return createBuilder(_template);\n      };\n\n\n      /**\n       * Fluent and immutable API to configure custom buttons.\n       * Methods can be chained and they produce a new immutable\n       * instance of an action builder.\n       *\n       * See {@link TPP_API.Button.CUSTOM} for more configuration examples.\n       *\n       * See {@link TppDecorator} and {@link TPP_API.Decorate.element} for\n       *  normal use case in decorate Api.\n       *\n       * @example\n       * // Basic API\n       *\n       * // 1. Configuration of a custom action\n       * var actionBuilder = TPP_API.createActionBuilder()\n       *        .name('sendMail')\n       *        .execute(...)\n       *        .options();\n\n       * // 2. Immutable usage\n       * var basic = TPP_API.createActionBuilder().\n       *        .isEnable(elementIsWritable)\n       *        .context({conf : \"some common settings\"});\n       *\n       * // The two following examples share the same basic properties.\n       * // 2.1\n       * var rotateActionBuilder = basic\n       *       .options([{id:'left', label:'left'}, {id : right}])\n       *       .execute(rotate);\n       *\n       * // 2.2\n       * // basic action builder can be used here as well.\n       * var flipActionBuilder = basic.execute(flip);\n       *\n       * @class\n       * @public\n       * @since 1.0.0\n       * @name TppActionBuilder\n       * @type {TppActionBuilder}\n       */\n      /**\n       * @protected\n       * @param {Object} template\n       */\n      var createBuilder = function (template) {\n\n        var builder = {};\n        builder._typeMarker = 'TppActionBuilder';\n\n        /**\n         * Internal button name, should be unique.\n         * Will also be used for css classes.\n         *\n         * Defines the result of {@link TppAction#getName}\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#name\n         * @method\n         * @param {string} name The unique name of the button.\n         * @return {TppActionBuilder}\n         */\n        builder.name = function (name) {\n          return builderWith(template, {_name: name});\n        };\n\n        /**\n         * Button label (Currently only used to title dropdown buttons).\n         *\n         * Defines the result of {@link TppAction#getLabel}.\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#label\n         * @method\n         * @param {string} label - The readable and translated label of the button.\n         * @return {TppActionBuilder}\n         */\n        builder.label = function (label) {\n          return builderWith(template, {_label: label});\n        };\n\n        /**\n         * Provide context, available to action.\n         *\n         * This is intended to hold fixed configuration for the resulted actions.\n         *\n         * Variable data will be stored in {@link TppAction#getStatus}.\n         * For this reason there is no method to set the status in the action builder but in the current\n         * action itself {@link TppAction#setStatus}. And vice versa there is no method to set the context\n         * in the {@link TppAction}.\n         *\n         * Defines the result of {@link TppAction#getContext}.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#context\n         * @method\n         * @param {Object} context - An arbitrary object of user data.\n         * @return {TppActionBuilder}\n         */\n        builder.context = function (context) {\n          return builderWith(template, {_context: context});\n        };\n\n\n        /**\n         * Update the provided context.\n         *\n         * This can be used, if the context has to be build up step by step.\n         *\n         * @name TppActionBuilder#updateContext\n         * @public\n         * @since 1.1.0\n         * @param {Object} contextUpdate - The current object of user data will be updated by Object assign\n         * @return {TppActionBuilder}\n         * @example\n         * builder\n         *      .context({a:'foo', b:1});      // Set.      Context is now: {a: 'foo', b: 1}\n         *      .updateContext({b: 2});        // Update.   Context is now: {a: 'foo', b: 2}\n         *      .updateContext({c: 'bar'});    // Update.   Context is now: {a: 'foo', b: 2, c: 'bar'}\n         *      .context({b: 3});              // Override. Context is now: {b: 3}\n         *\n         */\n        builder.updateContext = function (contextUpdate) {\n          var context = Object.assign({}, template._context, contextUpdate);\n          return builderWith(template, {_context: context});\n        };\n\n\n        /**\n         * This will be called internally when used in decorated elements.\n         *\n         * Defines the result of {@link TppAction#getElement}.\n         *\n         * It is not necessary to call this manually in the decorate use case.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#element\n         * @method\n         * @param element\n         * @return {TppActionBuilder}\n         */\n        builder.element = function (element) {\n          return builderWith(template, {_element: element});\n        };\n\n        /**\n         * Icon, dimension should be 24x24 pixels.\n         *\n         * Defines the result of {@link TppAction#getIcon}\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#icon\n         * @param {string} url - The url of the buttons icon.\n         * @return {TppActionBuilder}\n         */\n        builder.icon = function (url) {\n          return builderWith(template, {_icon: url});\n        };\n\n        /**\n         * This will be called internally when used in decorated elements.\n         *\n         * It is not necessary to call this manually in the decorate use case.\n         *\n         * Use {@link TppDecorator.updatePreviewId} instead to update the preview id for all actions\n         * of one element.\n         *\n         * Defines the result of {@link TppAction#getPreviewId}\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#previewId\n         * @method\n         * @param {string} previewId - The preview id connected with the current action.\n         * @return {TppActionBuilder}\n         */\n        builder.previewId = function (previewId) {\n          return builderWith(template, {_previewId: previewId});\n        };\n\n        /**\n         * Callback will get the current {@link TppAction} as first parameter.\n         * The action is given to use the read only properties in this callback.\n         * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n         * {@link TppAction#getOptions}, {@link TppAction#getName}.\n         *\n         * @public\n         * @since 1.0.0\n         * @callback TppAction~IsEnabledCallback\n         * @param {TppAction} self - The action itself\n         * @return {boolean} - true if the button should be enabled and visible.\n         */\n        /**\n         * The call to {@link TppAction#isEnabled} will be delegated to\n         * the given callback.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#isEnabled\n         * @method\n         * @param {TppAction~IsEnabledCallback} isEnabled - An isEnabled callback\n         * @return {TppActionBuilder}\n         */\n        builder.isEnabled = function (isEnabled) {\n          return builderWith(template, {_isEnabled: isEnabled});\n        };\n\n\n        /**\n         * Callback will get the current {@link TppAction} as first parameter.\n         * The action is given to use the read only properties in this callback.\n         * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n         * {@link TppAction#getOptions}, {@link TppAction#getName}.\n         *\n         * The arguments array of the {@link TppAction#execute} call will be given as second parameter.\n         * Used in the decorate API: If the {@link TppAction} has options, the selected option will given\n         * as first two parameters of this array.\n         * @public\n         * @since 1.0.0\n         * @callback TppAction~ExecuteCallback\n         * @param {TppAction} self - The action itself\n         * @param {Array} args - An array of arguments given to the {@link TppAction#execute}.\n         *      args[0] will be the selected Options id\n         *      args[1] will be the selected Options label\n         */\n        /**\n         * The call to {@link TppAction#execute} will be delegated to\n         * the given callback. The decorate api binds this execute to its buttons or options.\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#execute\n         * @method\n         * @param {TppAction~ExecuteCallback} execute - An executeCallback\n         * @return {TppActionBuilder}\n         */\n        builder.execute = function (execute) {\n          return builderWith(template, {_execute: execute});\n        };\n\n        /**\n         * A possible option of a drop down action.\n         * The options contains a unique id and a redable and translated label.\n         * @public\n         * @since 1.0.0\n         * @typedef {{id,label}} TppActionOptions\n         */\n        /**\n         * Callback will get the current {@link TppAction} as first parameter.\n         * The action is given to use the read only properties in this callback.\n         * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n         * {@link TppAction#getOptions}, {@link TppAction#getName}.\n         *\n         *\n         * The arguments array of the {@link TppAction#getOptions} call will be given as second parameter.\n         *\n         * @public\n         * @since 1.0.0\n         * @callback TppAction~GetOptionsCallback\n         * @param {TppAction} self - The action itself\n         * @param {Array} args - An array of arguments given to the TppAction#getOptions.\n         * @return {[TppActionOptions]}\n         */\n        /**\n         * The call to {@link TppAction#getOptions} will be delegated to\n         * the given callback or will return the given array.\n         * The callback can be used to calculate dynamic options.\n         *\n         * If the callback or array is given {@link TppAction#supportsOptions} returns true,\n         * and a drop down button will be rendered with all given options, instead of a simple button.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#options\n         * @param {TppAction~GetOptionsCallback|[TppActionOptions]} getOptions - Either a callback or a static list of TppActionOptions\n         * @return {TppActionBuilder}\n         */\n        builder.options = function (getOptions) {\n          return builderWith(template, {_getOptions: getOptions});\n        };\n\n        /**\n         * Alias for {@link TppActionBuilder#options}.\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#getOptions\n         * @param {TppAction~GetOptionsCallback|[TppActionOptions]} getOptions - Either a callback or a static list of TppActionOptions\n         * @return {TppActionBuilder}\n         */\n        builder.getOptions = builder.options;\n\n        /**\n         * Gives a new instance of {@link TppAction}.\n         *\n         * It is not necessary to call this manually in the decorate use case.\n         *\n         * @protected\n         * @name TppActionBuilder#build\n         * @method\n         * @return {TppAction}\n         */\n        builder.build = function () {\n          return build(template);\n        };\n\n        return builder;\n      };\n\n      var defaultIcon = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAF1JREFUOE/t00sKACAIRVH3v2n7UNFIb4qzgmZ6kIeKqkrFL0HHoB8+CdAoemzz0Xqc8YYxTie4YYRHYRfPwCaegc3eKOz2uQVrxcq3gg6C9xiD+4ieG+j1ffgk0AB67wNERdYKGwAAAABJRU5ErkJggg==\";\n\n      var initialTemplate = {\n        _name: null,\n        _label: null,\n        _previewId: null,\n        _element: null,\n        _context: {},\n        _isEnabled: null,\n        _execute: null,\n        _getOptions: null,\n        _icon: defaultIcon\n      };\n\n      return builderWith({}, initialTemplate);\n    };\n\n\n    var actionHelper = (/**\n     *\n     * Convenience functions to create actions from builder\n     * @protected\n     * @return {{create}}\n     */\n    function () {\n      var createActionFromBuilder = function (builder, context) {\n        if (typeof context === 'object') {\n          return builder.context(context).build();\n        } else {\n          return builder.build();\n        }\n      };\n\n      var actionSpecToBuilder = function (actionSpec) {\n        if (actionSpec['_typeMarker'] === 'TppActionBuilder') {\n          return actionSpec;\n        }\n        if (typeof actionSpec === 'function') {\n          var builder = actionSpec(util.Types.createActionBuilder());\n          if (typeof builder === 'undefined') {\n            util.log(\"TppActionBuilderCallback has to return the buttonBuilder!\");\n            return null;\n          }\n          return builder;\n        }\n      };\n\n      /**\n       * @return {TppAction}\n       */\n      var create = function (actionSpec, context) {\n        var action = null;\n        var actionBuilder = actionSpecToBuilder(actionSpec);\n        if (actionBuilder) {\n          action = createActionFromBuilder(actionBuilder, context);\n        }\n        if (actionSpec['_typeMarker'] === 'TppAction') {\n          if (!context) {\n            action = actionSpec;\n          } else {\n            util.log(\"Illegal arguments context not allowed with given action\");\n          }\n        }\n        return action\n      };\n\n      return {\n        create: create,\n        actionSpecToBuilder: actionSpecToBuilder\n      };\n\n    })();\n\n    return {\n      createActionBuilder: createActionBuilder,\n      actionHelper: actionHelper\n    };\n  })();\n\n\n  util.path = function (pathString) {\n    if (typeof pathString !== 'string') {\n      return null;\n    }\n    var elements = pathString\n      .split('/')\n      .filter(function (element) {return (element.length > 0); });\n\n    if (elements.length === 0) {\n      return null;\n    }\n\n    var isFolder = (pathString[pathString.length - 1] === '/');\n    return {\n      raw: pathString,\n      isFolder: isFolder,\n      normalized: elements.join('/'),\n      parent: elements.slice(0, -1).join('/'),\n      name: elements[elements.length - 1]\n    };\n  };\n\n\n  /**\n   * DOM manipulations to create the user interface.\n   *\n   * @private\n   * @type {{renderFrame, renderButtons}}\n   */\n  util.ui = (function () {\n\n    var ui = {};\n\n    var hasClass = function (element, className) {\n      if (element.classList) {\n        return element.classList.contains(className);\n      } else {\n        return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n      }\n    };\n\n    var addClass = function (element, className) {\n      if (element.classList) {\n        element.classList.add(className);\n      } else {\n        element.className += ' ' + className;\n      }\n    };\n\n    var removeClass = function (element, className) {\n      if (element.classList) {\n        element.classList.remove(className);\n      } else {\n        element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n      }\n    };\n\n\n    /**\n     * Adds an interactive/mouseover frame to a given element of the external app.\n     * @private\n     * @function\n     */\n    ui.renderFrame = function ($el) {\n\n      var tppFrameDecorator = {};\n\n      var $borders = document.body.appendChild(document.createElement('div'));\n      $borders.className = 'tpp-borders';\n\n      var $buttonContainer = $borders.appendChild(document.createElement('div'));\n      $buttonContainer.className = 'tpp-buttons-container';\n\n      var $activeElement = null;\n\n      var drawBorders = function () {\n        if ($activeElement !== null) {\n          var rect = $activeElement.getBoundingClientRect();\n          $borders.setAttribute('style', 'opacity: 1; ' + ['top', 'left', 'width', 'height'].map(function (prop) {\n            return prop + ': ' + (prop === 'height' ? Math.max(rect[prop], 27) : rect[prop]) + 'px;'\n          }).join(' '));\n          $buttonContainer.setAttribute('style', 'display: block; ' + ['top', 'left', 'width'].map(function (prop) {\n            return prop + ': ' + rect[prop] + 'px;'\n          }).join(' '));\n        }\n      };\n\n      var hideBorders = function () {\n        $borders.setAttribute('style', 'transition: all 0s;');\n        $buttonContainer.removeAttribute('style');\n      };\n\n      // we expect a window here\n      window.addEventListener('scroll', drawBorders);\n\n      var enter = function () {\n        $activeElement = $el;\n        drawBorders();\n      };\n\n      var leave = function () {\n        $activeElement = null;\n        setTimeout(function () {\n          if ($activeElement === null) {\n            hideBorders();\n          }\n        }, 0);\n      };\n\n      $el.addEventListener('mouseenter', enter);\n      $buttonContainer.addEventListener('mouseenter', enter);\n\n      $el.addEventListener('mouseleave', leave);\n      $buttonContainer.addEventListener('mouseleave', leave);\n\n      tppFrameDecorator.getButtonContainer = function () {\n        return $buttonContainer;\n      };\n      tppFrameDecorator.disposeBorders = function () {\n        var tppBorders = $buttonContainer.parentElement;\n        if (tppBorders.parentElement) {\n          tppBorders.parentElement.removeChild(tppBorders);\n        }\n      };\n\n      return tppFrameDecorator;\n    };\n\n\n    /**\n     * @typedef {{addButton, clearButtons, updateButtons}} TppButtonDecorator\n     */\n    /**\n     * Add buttons panel to the given container element.\n     * @private\n     * @param $container\n     * @returns {TppButtonDecorator}\n     */\n    ui.renderButtons = function ($container) {\n\n      var $buttons = $container.appendChild(document.createElement('span'));\n      $buttons.className = 'tpp-buttons';\n\n      /** @type {[]} */\n      var _buttons = [];\n      /** @type {[]} */\n      var _dropdownButtons = [];\n\n      /** @type TppButtonDecorator */\n      var buttonBuilder = {};\n\n      var _updateButton = function (status, button) {\n        button.action.setStatus(status);\n        button.$element.dataset.enabled = button.action.isEnabled();\n        if (button.action.isEnabled()) {\n          if (hasClass(button.$element, 'tpp-disabled')) {\n            removeClass(button.$element, 'tpp-disabled');\n          }\n        } else {\n          if (!hasClass(button.$element, 'tpp-disabled')) {\n            addClass(button.$element, 'tpp-disabled');\n          }\n        }\n      };\n\n      var _updateDropdownButton = function (status, button) {\n        _updateButton(status, button);\n        var action = button.action;\n        var options = action.getOptions();\n        var $flyout = button.$flyout;\n        $flyout.innerHTML = '';\n\n        var $grouptitle = $flyout.appendChild(document.createElement(\"div\"));\n        addClass($grouptitle, \"tpp-workflow-grouptitle\");\n        $grouptitle.innerHTML = action.getLabel();\n\n        var $list = $flyout.appendChild(document.createElement(\"ul\"));\n        options.map(function (option) {\n          var $option = document.createElement(\"li\");\n          $option.innerHTML = option.label;\n          $option.addEventListener('click', function () {\n            action.execute(option.id, option.label);\n          });\n          $list.appendChild($option)\n        });\n      };\n\n\n      /**\n       * Creates a button in the given button bar\n       * @private\n       * @param {TppAction} action\n       * @return {void}\n       */\n      var _addSimpleButton = function (action) {\n        var $button = $buttons.appendChild(document.createElement('span'));\n        addClass($button, 'tpp-button');\n        addClass($button, 'tpp-disabled');\n        addClass($button, \"tpp-\" + action.getName());\n        $button.dataset.actionName = action.getName();\n        $button.dataset.enabled = 'false';\n\n        $button.addEventListener('click', function () {\n          action.execute();\n        });\n\n        _buttons.push({\n                        $element: $button, action: action\n                      });\n        appendActionIcon($button, action.getIcon());\n      };\n\n\n      /**\n       * Creates a drop down button in the given button bar\n       * @private\n       * @param {TppAction} action\n       * @return {void}\n       */\n      var _addDropdownButton = function (action) {\n        var $flyout = $container.appendChild(document.createElement(\"div\"));\n        addClass($flyout, 'tpp-workflow-flyout');\n        $flyout.addEventListener('mouseover', function () {\n          addClass($flyout, 'selected');\n        });\n        $flyout.addEventListener('mouseout', function () {\n          removeClass($flyout, 'selected');\n        });\n\n\n        var $button = $buttons.appendChild(document.createElement('span'));\n        addClass($button, 'tpp-button');\n        addClass($button, 'tpp-disabled');\n        addClass($button, 'tpp-' + action.getName());\n        $button.dataset.actionName = action.getName();\n        $button.dataset.enabled = 'false';\n\n        $button.addEventListener('mouseover', function () {\n          addClass($flyout, 'selected');\n          $flyout.style.left = ($button.getBoundingClientRect().left - $container.getBoundingClientRect().left - $flyout.getBoundingClientRect().width + $button.getBoundingClientRect().width) + \"px\";\n        });\n\n        $button.addEventListener('mouseout', function () {\n          removeClass($flyout, 'selected');\n        });\n\n        _dropdownButtons.push({\n                                $element: $button, $flyout: $flyout, action: action\n                              });\n        appendActionIcon($button, action.getIcon());\n      };\n\n\n      var appendActionIcon = function (element, iconUrl) {\n        var $image = element.appendChild(document.createElement(\"img\"));\n        $image.src = iconUrl;\n      };\n\n      /**\n       * @name TppButtonDecorator.updateButtons\n       * @type TppButtonDecorator.updateButtons\n       * @private\n       */\n      buttonBuilder.updateButtons = function (status) {\n        _buttons.forEach(function (button) {\n          _updateButton(status, button);\n        });\n        _dropdownButtons.forEach(function (button) {\n          _updateDropdownButton(status, button);\n        });\n\n      };\n\n      /**\n       * @name TppButtonDecorator.clearButtons\n       * @private\n       */\n      buttonBuilder.clearButtons = function () {\n        _buttons = [];\n        _dropdownButtons = [];\n        $buttons.innerHTML = '';\n      };\n\n\n      /**\n       * @public\n       * @since 1.0.0\n       * @callback TppActionBuilderCallback\n       * @param {TppActionBuilder} _\n       * @return {undefined|TppActionBuilder}\n       */\n      /**\n       * @name TppButtonDecorator.addButton\n       * @private\n       * @param {TppAction|TppActionBuilder|TppActionBuilderCallback} buttonSpec\n       * @param {Object} [context]\n       * @return {Object} the created action (can be null)\n       */\n      buttonBuilder.addButton = function (buttonSpec, context) {\n\n        var action = util.Types.actionHelper.create(buttonSpec, context);\n        if (action) {\n          if (action.supportsOptions()) {\n            _addDropdownButton(action);\n          } else {\n            _addSimpleButton(action);\n          }\n        } else {\n          util.log(\"Could not create action from buttonSpec\", buttonSpec);\n        }\n        return buttonBuilder;\n      };\n\n\n      return buttonBuilder;\n    };\n\n    return ui;\n\n  })();\n\n  //Internal collection of action creators\n  var ActionStore = {};\n\n\n  // noinspection JSUnusedLocalSymbols to provide same signature for each API component\n  /**\n   * Basic TPP functions\n   *\n   * @name TPP_API.Common\n   * @public\n   * @since 1.0.0\n   */\n  function Common(api, util, config) {\n    //This constructor takes api, util and config for better testability\n\n    var common = this;\n\n    var _previewRequestHandlers = [];\n    var _navigationChangeHandlers = [];\n    var _workflowProcessedHandlers = [];\n\n    var _language = null;\n\n\n    var fireDOMEvents = function (previewId, event, detail) {\n      if (!!previewId) {\n        util.previewElements()\n          .filter(util.filter.byId(previewId))\n          .forEach(function ($target) {\n            util.emit(event, detail, $target);\n          });\n      }\n\n      if (typeof document !== 'undefined' && typeof document.body !== 'undefined') {\n        util.emit(event, detail, document.body);\n      }\n    };\n\n    var fireStatusUpdates = function (response) {\n\n      util.previewElements()\n        .map(util.filter.matchAffectedInfo(response))\n        .filter(util.filter.byNonEmpty)\n        .forEach(function (affectedInfo) {\n          var detail = {previewId: affectedInfo.previewId, status: affectedInfo.status, context: null};\n          util.emit(api.Event.STATUS_CHANGED, detail, affectedInfo.$target);\n        });\n    };\n\n    /**\n     * @name TppInternalEventHandler.TPP_PREVIEW_REQUEST\n     * @private\n     */\n    util.messageService.setInternalEventHandler('TPP_PREVIEW_REQUEST', function (payload) {\n      if (!payload.error) {\n        var previewId = payload.object;\n        var detail = {previewId: previewId};\n        fireDOMEvents(previewId, api.Event.ELEMENT_REQUESTED, detail);\n        _previewRequestHandlers.forEach(function (handler) {handler(previewId);});\n      }\n    });\n\n    /**\n     * @name TppInternalEventHandler.TPP_NAVIGATION_CHANGED\n     * @private\n     */\n    util.messageService.setInternalEventHandler('TPP_NAVIGATION_CHANGED', function (payload) {\n      if (!payload.error) {\n        var previewId = payload.object;\n        var detail = {previewId: previewId};\n        fireDOMEvents(previewId, api.Event.NAVIGATION_CHANGED, detail);\n        _navigationChangeHandlers.forEach(function (handler) {handler(previewId);})\n      }\n    });\n\n    /**\n     * @name TppInternalEventHandler.TPP_WORKFLOW_ACTION\n     * @private\n     */\n    util.messageService.setInternalEventHandler('TPP_WORKFLOW_ACTION', function (payload) {\n      if (!payload.error) {\n        var workflowInfo = payload.object;\n        var previewId = workflowInfo.previewId;\n        if (workflowInfo.isDeleted) {\n          var detail = {\n            previewId: workflowInfo.previewId,\n            context: null,\n            deleted: true\n          };\n          fireDOMEvents(previewId, api.Event.ELEMENT_DELETED, detail);\n        } else {\n          var detail = {\n            previewId: workflowInfo.previewId,\n            workflowId: workflowInfo.workflowId,\n            transitionId: workflowInfo.transitionId\n          };\n          fireDOMEvents(previewId, api.Event.WORKFLOW_PROCESSED, detail);\n          _workflowProcessedHandlers.forEach(function (handler) {handler(detail);});\n          // Status Update for all affected elements\n          api.Operation.getAffectedWorkflowElements(previewId)\n            .then(function (affectedElements) {\n              fireStatusUpdates(affectedElements);\n            });\n        }\n      }\n    });\n\n\n    /**\n     * Provides access to the WE_API's execute method.\n     *\n     * The result can be fetched by giving a callback function.\n     * If this callback is not set, the function returns a Promise.\n     * These are exclusive options.\n     *\n     * @name TPP_API.Common.execute\n     * @public\n     * @since 1.0.0\n     * @param {string} identifier\n     * @param {Object} params\n     * @param {Function} [callback] if callback is set, this will be called.\n     * @return {Promise|undefined} if callback is not set, this returns a promise\n     */\n    common.execute = function (identifier, params, callback) {\n      var message = {\n        tpp: {\n          execute: identifier,\n          params: params || {}\n        }\n      };\n      if (util.isFunction(callback)) {\n        util.messageService.send(message, config.origin, callback);\n      } else {\n        return new Promise(function (resolve) {\n          util.messageService.send(message, config.origin, resolve);\n        });\n      }\n    };\n\n    /**\n     * Sets Element the ContentCreator should handle as preview element.\n     * The PreviewElement of the ContentCreator is given by a PageRef.\n     *\n     * This has to be controlled by the third party app because a \"page\" in the third party app can possibly contain\n     * several first spirit page refs.\n     *\n     * This delegates to WE_API.Common.setPreviewElement\n     *\n     * @name TPP_API.Common.setPreviewElement\n     * @public\n     * @since 1.1.0\n     * @param {string} previewId\n     * @param {Function} [callback] if callback is set, this will be called when preview element is set\n     * @return {Promise|undefined} if callback is not set, this return a promise\n     */\n    common.setPreviewElement = function (previewId, callback) {\n      var message = {\n        tpp: {\n          setPreviewElement: true,\n          previewId: previewId\n        }\n      };\n      if (typeof callback === 'function') {\n        util.messageService.send(message, config.origin, callback);\n      } else {\n        return new Promise(function (resolve) {\n          util.messageService.send(message, config.origin, resolve);\n        });\n      }\n    };\n\n    /**\n     * A callback equivalent to the {@link TPP_API.Event.NAVIGATION_CHANGED}.\n     * @public\n     * @since 1.1.0\n     * @callback TPP_API.Common~PreviewRequestHandler\n     * @param {string} previewId\n     **/\n    /**\n     * This can be used to register a handler in case in the ContentCreator a new PreviewElement is requested.\n     * This will be triggered for example if an element in a report or search will be triggered via click.\n     *\n     * How to handle this situation depends on the setup of the third party app. It could be ignored completely, a page\n     * reload could be triggered, or an internal re-route without a full page refresh could be triggered.\n     *\n     * Compare TPP to standard ContentCreator behavior.\n     *\n     * If TPP is not enabled:\n     * * The page change will be triggered by navigating in the preview page or by a click in a report.\n     * * The URL of the preview iframe will be changed.\n     * * The Page reloads.\n     * * The listener of {@link https://docs.e-spirit.com/odfs/template-develo/javascript-apis/contentcreator/common-function/index.html#auf_seitenwechsel_reagieren|WE_API.Common.addPreviewElementListener}\n     * * will be called with an FSID as parameter.\n     *\n     * If TPP is enabled:\n     * * The page change will be requested by the a click in a reporter.\n     * * The handler of {@link TPP_API.Common.addPreviewRequestHandler|this} very method will be called with a previewId.\n     * * The third party app can decide, how to react.\n     * * It could ignore the previewId, make a full page refresh, or change the route.\n     * * It could notify the ContentCreator that the preview element has changed by calling {@link TPP_API.Common.setPreviewElement}.\n     * * This would trigger the listener of {@link https://docs.e-spirit.com/odfs/template-develo/javascript-apis/contentcreator/common-function/index.html#auf_seitenwechsel_reagieren|WE_API.Common.addPreviewElementListener}.\n     *\n     * @name TPP_API.Common.addPreviewRequestHandler\n     * @public\n     * @since 1.1.0\n     * @param {TPP_API.Common~PreviewRequestHandler} callback\n     */\n    common.addPreviewRequestHandler = function (callback) {\n      if (util.isFunction(callback)) {\n        _previewRequestHandlers.push(callback);\n        util.log('Registered a new Preview Request Handler');\n      }\n    };\n\n\n    /**\n     * A callback equivalent to the {@link TPP_API.Event.NAVIGATION_CHANGED}.\n     * @public\n     * @since 1.1.0\n     * @callback TPP_API.Common~NavigationChangeCallback\n     * @param {string} [previewId] - if a new page ref is created the previewId of this PageRef will be send here.\n     **/\n    /**\n     * Callback is called when there are changes in the SiteStore triggered in the outer ContentCreator.\n     *\n     * @name TPP_API.Common.addNavigationChangeHandler\n     * @public\n     * @since 1.1.0\n     * @param {TPP_API.Common~NavigationChangeCallback} callback\n     */\n    common.addNavigationChangeHandler = function (callback) {\n      if (util.isFunction(callback)) {\n        _navigationChangeHandlers.push(callback);\n        util.log('Registered a new Navigation Request Handler');\n      }\n    };\n\n\n    /**\n     * A callback equivalent to the {@link TPP_API.Event.WORKFLOW_PROCESSED}.\n     * @public\n     * @callback TPP_API.Common~WorkflowProcessedCallback\n     * @param {{previewId, transitionId}} [info] - event info about transition, and the element it is processed on\n     **/\n    /**\n     * Callback is called every time a workflow step was triggered.\n     *\n     * @name TPP_API.Common.addWorkflowProcessedHandler\n     * @public\n     * @param {TPP_API.Common~WorkflowProcessedCallback} callback\n     */\n    common.addWorkflowProcessedHandler = function (callback) {\n      if (util.isFunction(callback)) {\n        _workflowProcessedHandlers.push(callback);\n        util.log('Registered a new Workflow Processed Handler');\n      }\n    };\n\n\n    /**\n     * @private internal test method; can be used to check backend and frontend API version\n     */\n    common.ping = function (callback) {\n\n      util.log('Sending PING from fs-tpp-api.js. Version: ' + FRONTEND_VERSION);\n\n      var callbackWrapper = function (result) {\n        util.log('Receiving PONG from fs-tpp-api-Module. Version: ' + (result.version || 'UNKNOWN'));\n        if (typeof callback === 'function') {\n          callback(result);\n        }\n      };\n\n      var message = {\n        tpp: {ping: true, version: FRONTEND_VERSION}\n      };\n\n      util.messageService.send(message, config.origin, callbackWrapper);\n    }\n  }\n\n\n  // noinspection JSUnusedLocalSymbols\n  /**\n   * Provides operations on store elements represented by previewIds.\n   * This contains operations to Create, Read, Edit, Delete, and to do workflow stuff on store elements.\n   * @name TPP_API.Operation\n   * @public\n   * @since 1.0.0\n   */\n  function Operation(api, util, config) {\n    //This constructor takes api, util and config for better testability\n\n    var operation = this;\n    var _project = { languages: [], previewUrl: location.href };\n\n    var EXECUTABLE = 'class:TppApi';\n\n    // All actions provided by class:TppApi\n    var Action = {\n      EDIT: 'EDIT',\n      EDIT_META_DATA: 'EDIT_META_DATA',\n      STATUS: 'STATUS',\n      DELETE: 'DELETE',\n      DELETE_WORKFLOW: 'DELETE_WORKFLOW',\n      RENDER: 'RENDER',\n      CREATE_PAGE: 'CREATE_PAGE',\n      CREATE_SIBLING_SECTION: 'CREATE_SIBLING_SECTION',\n      CREATE_CHILD_SECTION: 'CREATE_CHILD_SECTION',\n      CREATE_DATASET: 'CREATE_DATASET',\n      WORKFLOW_START: 'WORKFLOW_START',\n      WORKFLOW_PROCESS: 'WORKFLOW_PROCESS',\n      CROP_IMAGE: 'CROP_IMAGE',\n      TOGGLE_BOOKMARK: 'TOGGLE_BOOKMARK',\n      PROJECT_INFO: 'PROJECT_INFO',\n      TRANSLATION: 'TRANSLATION'\n    };\n\n\n    var createDetail = function (previewId, context, detailName, response) {\n      var detail = {\n        previewId: previewId || null,\n        context: context || null\n      };\n      detail[detailName] = response;\n      return detail;\n    };\n\n\n    var executeOperation = function (params) {\n      return api.Common.execute(EXECUTABLE, params).then(function (response) {\n        if (response.error) {\n          return Promise.reject(response.object);\n        } else {\n          return Promise.resolve(response.object);\n        }\n      });\n    };\n\n    executeOperation({ action: Action.PROJECT_INFO }).then(function(response) {\n      if(response){\n        _project.previewUrl = response.previewUrl;\n        response.languages.forEach(function(language) {\n          if (language.master) {\n            _project.languages.unshift(language.lang);\n          } else {\n            _project.languages.push(language.lang);\n          }\n        });\n      }\n    });\n\n    /**\n     * @name TPP_API.Operation.getAffectedWorkflowElements\n     * @protected\n     */\n    operation.getAffectedWorkflowElements = function (previewId) {\n      var params = {\n        action: 'GET_AFFECTED_WORKFLOW_ELEMENTS',\n        previewId: previewId,\n        workflowMode: config.workflowMode\n      };\n      return executeOperation(params);\n    };\n\n    /**\n     * Shows a ContentCreator EditDialog for the store element specified by the previewId.\n     * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n     * Returns the changed content of the given store element as Promise result.\n     *\n     * @name TPP_API.Operation.showEditDialog\n     * @public\n     * @since 1.0.0\n     * @example\n     *\n     *  //Example 1: Edit and update DOM manually\n     *  var previewId = ...;\n     *  TPP_API.Operation\n     *    .showEditDialog(previewId)\n     *    .then(content => $(`[data-fs-preview-id=${previewId}]`).innerHTML( App.render(content) ));\n     *\n     *  //Example 2: Edit and Update via Event\n     *  $(document).on(TPP_API.Event.CONTENT_CHANGED, (e)=>{\n     *    //Merge content with external data\n     *    var productInfo = App.getProductInfo(e.context.productId);\n     *    App.render(e.target, e.detail.content, productInfo);\n     *  });\n     *\n     *  TPP_API.Operation\n     *    .showEditDialog(previewId, {productId: 23});\n     *\n     *\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - The previewId of the store element\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} The rendered content.\n     */\n    operation.showEditDialog = function (previewId, context) {\n\n      var params = {\n        action: Action.EDIT,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response !== null) {\n            // force refresh of preview element to reflect changed state\n            api.Common.setPreviewElement();\n\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'content', response);\n                util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n              });\n          }\n          return response;\n        });\n\n    };\n\n    /**\n     * Shows a ContentCreator EditDialog for the MetaData of the store element specified by the previewId.\n     * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n     * Returns the changed content of the given store element as Promise result.\n     *\n     * MetaData providing elements have to be configured. For the necessary steps in ContentCreator see https://docs.e-spirit.com/odfs/edocs/admi/firstspirit-ser/project-propert/contentcreator/index.html#text_bild_14.\n     *\n     * @name TPP_API.Operation.showMetaDialog\n     * @public\n     * @since 1.2.1\n     *\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - The previewId of the store element\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} The rendered content.\n     */\n    operation.showMetaDataDialog = function (previewId, context) {\n\n      var params = {\n        action: Action.EDIT_META_DATA,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response !== null) {\n            // force refresh of preview element to reflect changed state\n            api.Common.setPreviewElement();\n\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'content', response);\n                util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n              });\n          }\n          return response;\n        });\n\n    };\n\n\n    /**\n     * Request the status of the store element specified by the previewId.\n     * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n     * Returns a status object as Promise result.\n     *\n     * @name TPP_API.Operation.getElementStatus\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.STATUS_CHANGED\n     * @param {string} previewId - The previewId of the store element.\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} A status object (Currently unstable API)\n     */\n    operation.getElementStatus = function (previewId, context) {\n\n      var params = {\n        action: Action.STATUS,\n        previewId: previewId,\n        workflowMode: config.workflowMode\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, context, 'status', response);\n              util.emit(api.Event.STATUS_CHANGED, detail, $target);\n            });\n          return response;\n        });\n\n    };\n\n    /**\n     * Request the content of the store element specified by the previewId.\n     * Produces a {@link TPP_API.Event.CONTENT_CHANGED} event on all elements with the given previewId.\n     * Gives the rendered Content as Promise-result.\n     *\n     * @name TPP_API.Operation.renderElement\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - The previewId of the store element.\n     * @param {any} [context] - A custom context that will be passed to every event fired.\n     * @return {Promise|*} The rendered content of the element as Promise result.\n     */\n    operation.renderElement = function (previewId, context) {\n\n      var params = {\n        action: Action.RENDER,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, context, 'content', response);\n              util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n            });\n          return response;\n        });\n\n    };\n\n    /**\n     * Renders the start node of the project without knowing its previewId -\n     * as one possibility to fetch bootstrap information.\n     *\n     * This is a best practise approach but nothing more.\n     * The bootstrap process highly depends on your overall project architecture.\n     *\n     * Fires no event.\n     *\n     * @param {string} language - The language for the rendering.\n     * @return {Promise} The rendered content of the start node (root of site store) as Promise result.\n     * @name TPP_API.Operation.renderStartNode\n     */\n    operation.renderStartNode = function (language) {\n      return executeOperation({action: 'RENDER_START_NODE', language: language});\n    };\n\n    /**\n     * Deletes a store element specified by its previewId.\n     * Produces a {@link TPP_API.Event.ELEMENT_DELETED} event on all elements annotated with the given previewId.\n     * Returns a boolean to indicate success or failure as Promise result.\n     *\n     * @name TPP_API.Operation.deleteSection\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_DELETED\n     * @param {string} previewId - The previewId of the store element\n     * @param {any} [context} - A custom context that will be passed to every fired event.\n     * @return {Promise} A boolean; true if delete was successful.\n     */\n    operation.deleteSection = function (previewId, context) {\n      var params = {\n        action: Action.DELETE,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response === true) {\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'deleted', response);\n                util.emit(api.Event.ELEMENT_DELETED, detail, $target);\n              });\n          }\n          return response;\n        });\n    };\n\n    /**\n     * Starts a delete workflow for a page.\n     *\n     * @name TPP_API.Operation.deletePage\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.WORKFLOW_PROCESSED\n     * @param {string} previewId - The previewId of the store element\n     * @param {string} deleteWorkflowUID - Uid of the delete workflow.\n     * @param {any} [context} - A custom context that will be passed to every event fired.\n     * @return {Promise} A boolean; true if delete was successful.\n     */\n    operation.deletePage = function (previewId, deleteWorkflowUID, context) {\n      var params = {\n        action: Action.DELETE_WORKFLOW,\n        previewId: previewId,\n        workflowMode: config.workflowMode\n      };\n      if (config.deletePageWorkflow !== null) {\n        params[\"workflowUID\"] = config.deletePageWorkflow;\n      }\n\n\n      return executeOperation(params);\n\n    };\n\n    /**\n     * Shows a ContentCreator WorkflowDialog that can be used to start a certain workflow specified by\n     * its workflow id and based on the given previewId.\n     *\n     * If previewId addresses a page element, the workflow is started on that page element.\n     * If the previewId addresses a section element, the workflow is started on the page element that\n     * contains the section.\n     *\n     * Produces a {@link TPP_API.Event.WORKFLOW_PROCESSED} event on all elements annotated with the given previewId.\n     *\n     * Produces a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with a previewId that are affected by the\n     * workflow. Affected by the workflow are the page and all sections contained in it (this includes the\n     * element addressed by the given previewId).\n     *\n     * Returns an array of status objects for all affected elements as Promise result.\n     *\n     * @name TPP_API.Operation.startWorkflow\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.WORKFLOW_PROCESSED\n     * @param {string} previewId - The previewId of the store element\n     * @param {string} workflow - The uid or id of the workflow to start\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} A WorkflowChanged object which holds a list of status elements -\n     *                      one for every element affected by the process.\n     */\n    operation.startWorkflow = function (previewId, workflow, context) {\n      var params = {\n        action: Action.WORKFLOW_START,\n        previewId: previewId,\n        workflow: workflow,\n        workflowMode: config.workflowMode\n      };\n      return executeOperation(params);\n      /**\n       *  Event Handling will be triggered by external event\n       *  See event Handler for TPP_WORKFLOW_ACTION {@link TppInternalEventHandler.TPP_WORKFLOW_ACTION}\n       */\n    };\n\n\n    /**\n     * Processes a running workflow specified by a transition and a store element's previewId.\n     *\n     * If previewId addresses a page element, then the workflow is continued on that page element.\n     * The previewId addresses a section element, then the workflow is continued on the page element that\n     * contains the section.\n     *\n     *\n     * Produces a {@link TPP_API.Event.WORKFLOW_PROCESSED} event on all element annotated with the given previewId.\n     *\n     * Produces a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all element annotated with a previewId that is affected by the\n     * workflow. Affected by the workflow are the page and all contained sections (which includes the\n     * element addressed by the given previewId).\n     *\n     * Returns a object holding a list of status elements for all affected elements as Promise result.\n     *\n     *\n     * @name TPP_API.Operation.processWorkflow\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.WORKFLOW_PROCESSED\n     * @param {string} previewId - The previewId of the store element\n     * @param {string} transition - The uid or id of the transition to process as workflow step\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} A WorkflowChanged object which holds a list of status elements\n     *                      for every element that was affected by the process.\n     */\n    operation.processWorkflow = function (previewId, transition, context) {\n\n      var params = {\n        action: Action.WORKFLOW_PROCESS,\n        previewId: previewId,\n        transition: transition,\n        workflowMode: config.workflowMode\n      };\n\n      return executeOperation(params);\n      /**\n       *  Event Handling will be triggered by external event\n       *  See event Handler for TPP_WORKFLOW_ACTION {@link TppInternalEventHandler.TPP_WORKFLOW_ACTION}\n       */\n    };\n\n    /**\n     * @protected\n     * @typedef {Object} TppCreatePageConfig\n     * @property {string} path\n     * @property {string} template\n     * @property {string} language\n     */\n    /**\n     * Default way to create a new page.\n     *\n     * The signature is a little different from the other operations because we do not have\n     * a previewId for the element yet.\n     *\n     * The operation starts a page creation with the following behavior:\n     *  * An editor for the newly created page will be opened\n     *  * The language to edit, can be set optionally with config.language.\n     *  * A Page is created with the specified path, and the last path element is used as uid for the page\n     *    (for the page template see below).\n     *  * A PageRef referencing this Page is created with the same path as the page.\n     * The Template for the Page will be given by config.template, but can be overridden by the selectedTemplate\n     * parameter. The template is specified by its uid.\n     *\n     * @name TPP_API.Operation.createPage\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_CREATED\n     * @param {HTMLElement} [$element] - The related element to fire the event on.\n     * @param {TppCreatePageConfig} config - Configures the creation of the page\n     * @param {string} [selectedTemplate] - Overrides the template given in config\n     * @return {Promise}\n     */\n    operation.createPage = function ($element, config, selectedTemplate) {\n      var path = util.path(config.path);\n      if (path === null) {\n        return Promise.reject('Path is not specified correctly in config ' + JSON.stringify(config));\n      }\n\n      var template = selectedTemplate || config.template;\n      var params = {\n        action: Action.CREATE_PAGE,\n        path: path.parent,\n        uid: path.name,\n        template: template,\n        language: config.language\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if ($element) {\n            var detail = createDetail(null, config, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n          return response;\n        });\n    };\n\n\n    var createSectionParams = function (action, previewId, config, template) {\n      var params = {\n        action: action,\n        previewId: previewId,\n        template: template || config.template,\n        sectionName: config.sectionName,\n        position: config.position,\n        body: config.body || null\n      };\n      if (typeof(config.positionIndex) !== 'undefined') {\n        params.positionIndex = ''+config.positionIndex;\n        params.position = 'INDEX';\n      }\n      return params;\n    };\n\n\n    /**\n     * @public\n     * @since 1.0.0\n     * @typedef {Object} TppCreateChildSectionConfig\n     * @property {string} body - Name of the body to create the section in.\n     * @property {string} [sectionName] - Name the created section should get. Default value is the uid of the used template.\n     * @property {string} [template] - Uid of the section template to be used. If not given the CC template chooser dialog will be shown.\n     * @property {TPP_API.SectionPosition} [position] - The position of the new child section.\n     * @property {Number} [positionIndex] - If SectionPosition.INDEX was chosen, this gives the index of the newly created Section.\n     */\n    /**\n     * Creates a child section for the page specified by the provided previewId.\n     *\n     * @name TPP_API.Operation.createChildSection\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_CREATED on the $element.\n     * @fires TPP_API.Event.CHILD_SECTION_CREATED on all elements specified by config.previewId.\n     * @param {string} previewId - Referencing the page to create a child for.\n     * @param {HTMLElement} [$element] - The related html element to fire the ELEMENT_CREATED event on.\n     *      This can be a placeholder for the section to create.\n     * @param {TppCreateChildSectionConfig} config - Config parameters for the creation of the section.\n     * @param {string} [template] - When provided this overrides the template specified in the config\n     * (this parameter can be used if the operation is used in a TppAction context).\n     * @return {Promise}\n     */\n    operation.createChildSection = function (previewId, $element, config, template) {\n      var params = createSectionParams(Action.CREATE_CHILD_SECTION, previewId, config, template);\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, params, 'content', response);\n              util.emit(api.Event.CHILD_SECTION_CREATED, detail, $target);\n            });\n\n          if ($element) {\n            var detail = createDetail(null, config, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n        });\n    };\n\n    /**\n     * @public\n     * @since 1.0.0\n     * @typedef {Object} TppCreateSiblingSectionConfig\n     * @property {string} [sectionName] - Name the created section should get. Default value is the uid of the used template.\n     * @property {string} [template] - Uid of the section template to be used. If not given the CC template chooser dialog will be shown.\n     * @property {TPP_API.SectionPosition} [position] - The position of the new child section.\n     * @property {Number} [positionIndex] - If SectionPosition.INDEX was chosen, this gives the index of the newly created Section.\n     */\n    /**\n     * Creates a section relative to another section specified by its previewId.\n     *\n     * @name TPP_API.Operation.createSiblingSection\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_CREATED on the $element.\n     * @fires TPP_API.Event.SIBLING_SECTION_CREATED on elements matching the previewId.\n     * @param {string} previewId - Referencing the section to create a sibling for.\n     * @param {HTMLElement} [$element] - The related html element to fire the ELEMENT_CREATED event on.\n     *    This can be a placeholder for the section to create.\n     * @param {TppCreateSiblingSectionConfig} config - Configures the creation of the section.\n     * @param {string} [template] - Override the template specified in the config.\n     * @return {Promise}\n     */\n    operation.createSiblingSection = function (previewId, $element, config, template) {\n      var params = createSectionParams(Action.CREATE_SIBLING_SECTION, previewId, config, template);\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, params, 'content', response);\n              util.emit(api.Event.SIBLING_SECTION_CREATED, detail, $target);\n            });\n\n          if ($element) {\n            var detail = createDetail(null, params, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n        });\n    };\n\n\n    /**\n     * @protected\n     * @typedef {Object} TppCreateDatasetConfig\n     * @property {string} template\n     * @property {string} language\n     */\n    /**\n     * Create a new Dataset.\n     *\n     * @name TPP_API.Operation.createDataset\n     * @public\n     * @since 1.2.0\n     * @fires TPP_API.Event.ELEMENT_CREATED\n     * @param {HTMLElement} [$element] - The related element to fire the event on\n     * @param {TppCreateDatasetConfig} config - Configures the creation of the dataset\n     * @return {Promise}\n     */\n    operation.createDataset = function ($element, config) {\n      var params = {\n        action: Action.CREATE_DATASET,\n        template: config.template,\n        language: config.language\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if ($element) {\n            var detail = createDetail(null, config, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n          return response;\n        });\n    };\n\n\n    /**\n     * @name TPP_API.Operation.cropImage\n     * @public\n     * @since 1.1.0\n     * @param {string} previewId - PreviewId of a media element\n     * @param {string | Array.<string>} resolution - a single ResolutionUID or a an array of ResolutionUIDs\n     */\n    operation.cropImage = function (previewId, resolution) {\n      var params = {\n        action: Action.CROP_IMAGE,\n        previewId: previewId,\n        resolution: resolution\n      };\n      return executeOperation(params)\n        .then(function (response) {\n          if (response) {\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, params, 'reference', response);\n                util.emit(api.Event.IMAGE_CHANGED, detail, $target);\n              });\n          }\n        })\n    }\n\n\n    /**\n     * Toggles an element to be a bookmark (flagged as master) or not. Bookmarked elements will appear\n     * in creation dialogs, like {@link TPP_API.Operation.createChildSection} or {@link TPP_API.Operation.createPage}.\n     *\n     * @name TPP_API.Operation.toggleBookmark\n     * @public\n     * @since 1.1.6\n     * @param {string} previewId - The previewId of the store element.\n     * @return {Promise} Boolean which indicates if the element is now bookmarked or not.\n     */\n    operation.toggleBookmark = function (previewId) {\n      var params = {\n        action: Action.TOGGLE_BOOKMARK,\n        previewId: previewId\n      };\n\n      return executeOperation(params).then(function(response) {\n      \t// fires a StatusUpdate on registered DOM nodes via Operation.getElementStatus\n      \tapi.Operation.getElementStatus(previewId);\n      \treturn response;\n      });\n    };\n\n\n    /**\n     * Returns all project languages (abbreviations). The first language is always the master language.\n     *\n     * @name TPP_API.Operation.getLanguages\n     * @public\n     * @since 1.2.4\n     * @return {Array.<string>} - list of languages\n     */\n    operation.getLanguages = function () {\n      return _project.languages;\n    };\n\n\n    /**\n     * Returns the \"External Preview URL\" as set in FirstSpirit.\n     *\n     * @name TPP_API.Operation.getPreviewUrl\n     * @public\n     * @since 1.2.4\n     * @return {<string>} - the \"External Preview URL\"\n     */\n    operation.getPreviewUrl = function () {\n      return _project.previewUrl;\n    };\n\n\n    /**\n     * Shows the translation help dialogue.\n     *\n     * Returns the rendered content only if the current language is the same\n     * as the given `target` language.\n     *\n     * @name TPP_API.Operation.showTranslationDialog\n     * @public\n     * @since 1.2.4\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - a PreviewId of DataProvider\n     * @param {string} source - the source language\n     * @param {string} target - the target language\n     * @return {Promise} The rendered content.\n     */\n    operation.showTranslationDialog = function (previewId, source, target) {\n\n      var params = {\n        action: Action.TRANSLATION,\n        previewId: previewId,\n        source: source,\n        target: target\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response !== null) {\n            // force refresh of preview element to reflect changed state\n            api.Common.setPreviewElement();\n\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'content', response);\n                util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n              });\n          }\n          return response;\n        });\n\n    };\n\n\n  }\n\n  // noinspection JSUnusedLocalSymbols to provide same signature for each API component\n  /**\n   * This provides a UI to enrich html elements of the third party applications with a basic FirstSpirit style\n   * interface. It draws an interactive border around elements and provides a UI element to work with the\n   * {@link TPP_API.Operation}.\n   *\n   * @name TPP_API.Decorate\n   * @public\n   * @since 1.0.0\n   */\n  function Decorate(api, util, config) {\n    var decorate = this;\n\n    var initialized = false;\n\n    var ensureInit = function () {\n\n      if (!initialized) {\n        initialized = true;\n        // noinspection JSUndefinedPropertyAssignment\n        document.head.appendChild(document.createElement('style')).innerHTML = [\n          '.tpp-borders { position: fixed; z-index: 9999999999; opacity: 0; pointer-events: none; box-shadow: 0 0 3px rgba(0,0,0,.5), 0 0 3px rgba(0,0,0,.5) inset; border: 1px solid rgb(181,30,104); transition: opacity 300ms ease-in-out; }',\n          '.tpp-buttons-container { position: fixed; display: none; pointer-events: all;}',\n          '.tpp-buttons { position: absolute; top: 1px; right: 1px; background: linear-gradient(#626161, #424141); border: 1px solid #B5B5B5; display: inline-block; line-height: 23px; }',\n          '.tpp-button { display: block; width: 23px; height: 23px; line-height: 23px; cursor: pointer; position: relative; float:left; text-align: center; }',\n          '.tpp-button img {opacity: 0.7;}',\n          '.tpp-button:hover img { opacity: 1; }',\n          '.tpp-button.tpp-disabled { display : none; }',\n          '.tpp-button.tpp-edit { background: linear-gradient(#A9356B, #79053B); }',\n          '.tpp-workflow-flyout {font-family: Arial, Helvetica, sans-serif; font-size: 11px; overflow: hidden; cursor: pointer; color: lightgray; background: linear-gradient(#626161, #424141); position: absolute; top: 25px; width: 150px; height: 0px; transition: height .5s ease-out}',\n          '.tpp-workflow-flyout li:hover {color:white;}',\n          '.tpp-workflow-flyout.selected {height: auto;}',\n          '.tpp-workflow-flyout.selected ul {max-height: 300px;}',\n          '.tpp-workflow-flyout.selected ul:hover{ overflow-y: auto}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar{ width: 6px; background-color: transparent;}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-track{ background-color: transparent;}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-thumb{ background-color: #B4B4B4;}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-thumb:hover{ background-color: lightgray;}',\n          '.tpp-workflow-flyout ul {padding-left: 10px; transition: max-height .5s; max-height: 0; overflow-y: hidden}',\n          '.tpp-workflow-flyout li {padding: 5px; display: block;}',\n          '.tpp-workflow-flyout li:before {content: \"\\\\00BB\";}',\n          '.tpp-workflow-grouptitle {font-weight: bold; padding: 5px; color: black; background-color: lightgray; margin-bottom: 8px;}'\n\n        ].join('');\n      }\n    };\n\n\n    var createActionBuilder = util.Types.createActionBuilder;\n\n\n    /**\n     * @protected\n     * @name ActionStore.CUSTOM\n     * @type {TppActionBuilder}\n     */\n    ActionStore.CUSTOM = createActionBuilder();\n\n    /**\n     * @protected\n     * @name ActionStore.CREATE_PAGE\n     * @type {TppActionBuilder}\n     */\n    ActionStore.CREATE_PAGE = createActionBuilder()\n      .name('create')\n      .label('Create a Page')\n      .icon(api.Icon.CREATE_PAGE)\n      .isEnabled(function (action) {\n        return !action.getStatus().id;\n      })\n      .execute(function (action, args) {\n        var selectedTemplate = (args.length > 0) ? args[0] : null;\n        return api.Operation.createPage(action.getElement(), action.getContext(), selectedTemplate);\n      });\n\n\n    //This should be used to create a section to given page.\n    //This can be attaches\n    ActionStore.CREATE_CHILD_SECTION = createActionBuilder()\n      .name('create_child_section')\n      .label('Create a Section')\n      .icon(api.Icon.CREATE_SECTION)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") === \"Page\" || action.getStatus(\"elementType\") === \"Body\";\n      })\n      .execute(function (action, args) {\n        var selectedTemplate = (args.length > 0) ? args[0] : null;\n        var context = Object.assign({}, action.getContext(), {previewId: action.getPreviewId()});\n        return api.Operation.createChildSection(action.getPreviewId(), action.getElement(), context, selectedTemplate);\n      });\n\n    //This should be used to create a section as a sibling\n    //The can be attached as a button to every section of a listing\n    ActionStore.CREATE_SIBLING_SECTION = createActionBuilder()\n      .name('create_sibling_section')\n      .label('Create a Sibling-Section')\n      .icon(api.Icon.CREATE_SECTION)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") === \"Section\";\n      })\n      .execute(function (action, args) {\n        var selectedTemplate = (args.length > 0) ? args[0] : null;\n        var context = Object.assign({}, action.getContext(), {previewId: action.getPreviewId()});\n        return api.Operation.createSiblingSection(action.getPreviewId(), action.getElement(), context, selectedTemplate);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.DEBUG_STATUS\n     * @type {TppActionBuilder}\n     */\n    ActionStore.DEBUG_STATUS = createActionBuilder()\n      .name('debugStatus')\n      .label('Turn on Debug-Mode')\n      .icon(api.Icon.DEBUG)\n      .isEnabled(util.log.isEnabled)\n      .execute(function (action) {\n        var previewId = action.getPreviewId();\n        api.Operation.getElementStatus(previewId).then(function (status) {\n          util.log(\"Status received\", previewId, status);\n        });\n      });\n\n\n    /**\n     * @protected\n     * @name ActionStore.DEBUG_STATUS\n     * @type {TppActionBuilder}\n     */\n    ActionStore.EDIT_ELEMENT = createActionBuilder()\n      .name('edit')\n      .label('Edit this Element')\n      .icon(api.Icon.EDIT)\n      .isEnabled(function (action) {\n        return action.getStatus(\"permissions.change\") &&\n          action.getStatus(\"elementType\") !== \"Body\" &&\n          action.getStatus(\"elementType\") !== \"Media\";\n      })\n      .execute(function (action) {\n        return api.Operation.showEditDialog(action.getPreviewId());\n      });\n\n\n    /**\n     * @protected\n     * @name ActionStore.DEBUG_STATUS\n     * @type {TppActionBuilder}\n     */\n    ActionStore.EDIT_META_DATA = createActionBuilder()\n      .name('editMetaData')\n      .label('Edit Meta Data')\n      .icon(api.Icon.EDIT_META_DATA)\n      .isEnabled(function (action) {\n        return action.getStatus(\"permissions.changeMeta\");\n      })\n      .execute(function (action) {\n        return api.Operation.showMetaDataDialog(action.getPreviewId());\n      });\n\n\n    /**\n     * @protected\n     * @name ActionStore.DELETE_SECTION\n     * @type {TppActionBuilder}\n     */\n    ActionStore.DELETE_SECTION = createActionBuilder()\n      .name('deleteSection')\n      .label('Delete this Section')\n      .icon(api.Icon.DELETE)\n      .isEnabled(function (action) {\n        return action.getStatus().elementType === \"Section\"\n          && action.getStatus(\"permissions.delete\");\n      })\n      .execute(function (action) {\n        return api.Operation.deleteSection(action.getPreviewId());\n      });\n\n    ActionStore.DELETE_PAGE = createActionBuilder()\n      .name('deletePage')\n      .label('Delete this Page')\n      .icon(api.Icon.DELETE)\n      .isEnabled(function (action) {\n        return action.getStatus().elementType === \"Page\"\n          && (action.getStatus().workflows.deleteWorkflow !== null || config.deletePageWorkflow !== null) && action.getStatus().workflows.current === null\n      })\n      .execute(function (action) {\n        return api.Operation.deletePage(action.getPreviewId(), getDeleteWorkflowUID(action.getStatus()), action.getContext())\n      });\n\n    var getDeleteWorkflowUID = function (status) {\n      if (config.deletePageWorkflow !== null) {\n        return config.deletePageWorkflow;\n      } else if (status.workflows.deleteWorkflow !== null) {\n        return status.workflows.deleteWorkflow.uid;\n      }\n      return null;\n    };\n\n    /**\n     * @protected\n     * @name ActionStore.START_WORKFLOW\n     * @type {TppActionBuilder}\n     */\n    ActionStore.START_WORKFLOW = createActionBuilder()\n      .name('startWorkflow')\n      .label('Start a Workflow:')\n      .icon(api.Icon.WORKFLOW)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") !== \"Body\"\n          && action.getStatus(\"elementType\") !== \"Media\"\n          && action.getStatus().workflows\n          && action.getStatus().workflows.allowed\n          && action.getStatus().workflows.allowed.length > 0;\n      })\n      .getOptions(function (action) {\n        var _status = action.getStatus(), _workflows = _status.workflows;\n        if (_workflows && _workflows.allowed) {\n          var workflows = _workflows.allowed;\n\n          if (_status.storeType === 'PAGESTORE' || _status.storeType === 'SITESTORE') {\n            if (config.deletePageWorkflow !== null) {\n              workflows = workflows.filter(function(workflow) {\n                return workflow.uid !== config.deletePageWorkflow;\n              });\n            } else if (_workflows.deleteWorkflow !== null) {\n              workflows = workflows.filter(function(workflow) {\n                return workflow.id !== _workflows.deleteWorkflow.id;\n              });\n            }\n          }\n\n          return workflows.map(function(workflow) {\n            return { id: workflow.id, label: workflow.displayName };\n          });\n        } else {\n          return [];\n        }\n      })\n      .execute(function (action, args) {\n        var id = args[0];\n        return api.Operation.startWorkflow(action.getPreviewId(), id);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.PROCESS_WORKFLOW\n     * @type {TppActionBuilder}\n     */\n    ActionStore.PROCESS_WORKFLOW = createActionBuilder()\n      .name('processWorkflow')\n      .label('Process Workflow:')\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") !== \"Body\"\n          && action.getStatus(\"elementType\") !== \"Media\"\n          && action.getStatus().workflows && action.getStatus().workflows.current;\n      })\n      .getOptions(function (action) {\n        if (action.getStatus().workflows && action.getStatus().workflows.transitions) {\n          return action.getStatus().workflows.transitions.map(function (transition) {\n            var displayName = transition.displayName;\n            if (transition.target && transition.target.displayName) {\n              displayName = transition.target.displayName;\n            }\n            return {id: transition.id, label: displayName};\n          });\n        } else {\n          return [];\n        }\n      })\n      .execute(function (action, args) {\n        var id = args[0];\n        return api.Operation.processWorkflow(action.getPreviewId(), id);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.CROP_IMAGE\n     * @type {TppActionBuilder}\n     */\n    ActionStore.CROP_IMAGE = createActionBuilder()\n      .name('cropImage')\n      .label('Crop image')\n      .icon(api.Icon.CROP_IMAGE)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") === 'Media'\n          && action.getStatus(\"permissions.change\");\n      })\n      .execute(function (action) {\n        var resolution = action.getContext('imageResolution') || action.getContext('imageResolutions') || 'ORIGINAL';\n        var resolutions = typeof(resolution) === 'string' ? resolution.split(/\\s*,\\s*/) : resolution;\n        var previewId = action.getPreviewId();\n        return api.Operation.cropImage(previewId, resolutions);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.ADD_BOOKMARK\n     * @type {TppActionBuilder}\n     */\n    ActionStore.ADD_BOOKMARK = createActionBuilder()\n      .name('addBookmark')\n      .label('Add bookmark')\n      .icon(api.Icon.ADD_BOOKMARK)\n      .isEnabled(function (action) {\n        return ['Section', 'Page', 'PageRef'].indexOf(action.getStatus('elementType')) !== -1 && !action.getStatus('bookmark');\n      })\n      .execute(function (action) {\n        var previewId = action.getPreviewId();\n        return api.Operation.toggleBookmark(previewId);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.DELETE_BOOKMARK\n     * @type {TppActionBuilder}\n     */\n    ActionStore.DELETE_BOOKMARK = createActionBuilder()\n      .name('deleteBookmark')\n      .label('Delete bookmark')\n      .icon(api.Icon.DELETE_BOOKMARK)\n      .isEnabled(function (action) {\n        return ['Section', 'Page', 'PageRef'].indexOf(action.getStatus('elementType')) !== -1 && action.getStatus('bookmark');\n      })\n      .execute(function (action) {\n        var previewId = action.getPreviewId();\n        return api.Operation.toggleBookmark(previewId);\n      });\n\n\n      /**\n       * @protected\n       * @name ActionStore.TRANSLATE\n       * @type {TppActionBuilder}\n       */\n      ActionStore.TRANSLATE = createActionBuilder()\n        .name('translate')\n        .label('Translate')\n        .icon(api.Icon.TRANSLATE)\n        .isEnabled(function (action) {\n          return ['Section', 'Page'].indexOf(action.getStatus('elementType')) !== -1 && api.Operation.getLanguages().length > 1;\n        })\n        .getOptions(function (action) {\n          var languages = api.Operation.getLanguages();\n          var options = [];\n\n          for (var i=0, ln=languages.length; i<ln; i++) {\n            for (var j=0; j<ln; j++) {\n              if (i !== j) {\n                options.push({ id: [languages[i], languages[j]], label: languages[i] + ' → ' + languages[j] });\n              }\n            }\n          }\n\n          return options;\n        })\n        .execute(function (action, args) {\n          return api.Operation.showTranslationDialog(action.getPreviewId(), args[0][0], args[0][1]);\n        });\n\n\n    /** @type {[TppActionBuilder]}*/\n    var INITIAL_DEFAULT_DECORATION_ACTIONS = [\n      ActionStore.DEBUG_STATUS,\n      ActionStore.EDIT_ELEMENT,\n      ActionStore.CREATE_CHILD_SECTION,\n      ActionStore.DELETE_SECTION,\n      ActionStore.DELETE_PAGE,\n      ActionStore.START_WORKFLOW,\n      ActionStore.PROCESS_WORKFLOW\n    ];\n\n\n    var defaultDecorationActions = INITIAL_DEFAULT_DECORATION_ACTIONS;\n\n\n    /**\n     * Set the list of default buttons added to every decorated element.\n     *\n     * This does not mean that each of this buttons will be enabled.\n     * Each button handle its visibility on its own. ({@link TppActionBuilder#isEnabled})\n     *\n     * This configuration is global, and should be set only once before decorating all elements.\n     *\n     * The initial list of default buttons is:\n     *     TPP_API.Button.DEBUG_STATUS,\n     *     TPP_API.Button.EDIT_ELEMENT,\n     *     TPP_API.Button.DELETE_SECTION,\n     *     TPP_API.Button.DELETE_PAGE,\n     *     TPP_API.Button.START_WORKFLOW,\n     *     TPP_API.Button.PROCESS_WORKFLOW\n     *\n\n     * @name TPP_API.Decorate.setDefaultButtons\n     * @public\n     * @since 1.1.2\n     * @param {[TppActionBuilder]} buttons.\n     * @example\n     *  // Example 1\n     *  // Workflows only accessible via ContentCreator menu bar,\n     *  // and every decorated Image has an additional crop button.\n     *  TPP_API.Decorate.setDefaultButtons([\n     *         TPP_API.Button.DEBUG_STATUS,\n     *         TPP_API.Button.EDIT_ELEMENT,\n     *         TPP_API.Button.DELETE_SECTION,\n     *         TPP_API.Button.DELETE_PAGE,\n     *         TPP_API.Button.CROP_IMAGE\n     *     ])\n     *\n     *  // Example 2\n     *  // No default buttons set.\n     *  // Add buttons on each element individually\n     *  TPP_API.Decorate.setDefaultButtons([]);\n     *  TPP_API.Decorate.element($el).addButton(TPP_API.Button.EDIT_ELEMENT);\n     *  TPP_API.Decorate.element($img).addButton(TPP_API.Button.CROP_IMAGE);\n     *  ...\n     */\n    decorate.setDefaultButtons = function (buttons) {\n      defaultDecorationActions = buttons || [];\n    };\n\n\n    /**\n     * Scans the entire document (or from a given $root) for elements with a data-preview-id attribute.\n     *\n     * It activates a UI for each of these elements with a mouse-over border and buttons in a\n     * ContentCreator like manner.\n     *\n     * @name TPP_API.Decorate.scan\n     * @public\n     * @since 1.0.0\n     * @param {HTMLElement} [$root=document] - An optional root to perform the search from.\n     */\n    decorate.scan = function ($root) {\n      util.previewElements($root)\n        .forEach(function ($el) {\n          util.log('[scan] found', $el);\n          decorate.element($el, $el.dataset.previewId);\n        });\n    };\n\n\n    /**\n     * @protected\n     * @param {HTMLElement} $el\n     * @param {string} previewId\n     * @return {string}\n     */\n    var initPreviewId = function ($el, previewId) {\n      previewId = previewId || $el.dataset.previewId;\n      if (previewId) {\n        $el.dataset.previewId = previewId;\n      }\n      return previewId;\n    };\n\n    /**\n     * Initialize context values that could be given\n     * via data-tpp-context-* fields on the given element.\n     * @protected\n     * @param $el\n     * @param context {object}\n     * @return {object}\n     */\n    var initContext = function ($el, context) {\n      var contextFromAttributes = Object.keys($el.dataset)\n        .filter(function (key) { return key.startsWith('tppContext'); })\n        .reduce(function (object, key) {\n          var name = key.substr('tppContext'.length);\n          name = name[0].toLowerCase() + name.slice(1);\n          object[name] = $el.dataset[key];\n          return object;\n        }, {});\n      return Object.assign({}, contextFromAttributes, context);\n    };\n\n    /**\n     * @protected\n     * @param {TppButtonDecorator} buttons\n     * @param {HTMLElement} $el\n     * @param {string} previewId\n     * @param {[TppActionBuilder]} customActions\n     * @param {object} context\n     * @return {void}\n     */\n    var updateDecoration = function (buttons, $el, previewId, customActions, context) {\n      buttons.clearButtons();\n      if (previewId) {\n        defaultDecorationActions.forEach(function (builder) {\n          buttons.addButton(builder\n                              .previewId(previewId)\n                              .element($el)\n                              .updateContext(context));\n        });\n        customActions.forEach(function (builder) {\n          buttons.addButton(builder\n                              .previewId(previewId)\n                              .element($el)\n                              .updateContext(context));\n          buttons.updateButtons({})\n        });\n        //initial status\n        // noinspection JSIgnoredPromiseFromCall\n        api.Operation.getElementStatus(previewId);\n      } else {\n        customActions.forEach(function (builder) {\n          buttons.addButton(builder\n                              .element($el)\n                              .updateContext(context));\n          buttons.updateButtons({})\n        });\n      }\n    };\n\n    /**\n     * Creates a blank TppActionBuilder.\n     *\n     * @name TPP_API.Decorate.createActionBuilder\n     * @return {TppActionBuilder}\n     */\n    decorate.createActionBuilder = util.Types.createActionBuilder;\n\n    /**\n     * Decorates a single element with a ContentCreator like UI.\n     *\n     * The UI provides an interactive border and a set of standard buttons.\n     *\n     * The previewId has either been annotated as a data-preview-id at this element, or can be given\n     * as a second parameter. In the latter case the attribute will be set by this function. The parameter\n     * takes precedence over the annotated 'data-preview-id' element.\n     *\n     * The context value can be uses to add context values to button. The context values will be merged using\n     * {@link TppActionBuilder#updateContext}. The context values can also be given as data-tpp-* attributes.\n     * Currently supported attributes are\n     *\n     * If no previewId is given, a decoration will be created with less functionality.\n     * To give a previewId later on use {@link TppDecorator.updatePreviewId}.\n     *\n     *\n     * @name TPP_API.Decorate.element\n     * @public\n     * @since 1.0.0\n     * @param {HTMLElement} $el -  The element to decorate.\n     * @param {string} [previewId] - The previewId assigned for the given element.\n     * @param {object} [context] - Context value that are assigned to every button.\n     * @return {TppDecorator} For adding custom functions.\n     */\n    decorate.element = function ($el, previewId, context) {\n\n      ensureInit();\n\n      /** @type {string} */\n      var _previewId = initPreviewId($el, previewId);\n\n      /** @type {object} */\n      var _context = initContext($el);\n\n      /** @type {[TppActionBuilder]} */\n      var _customActions = [];\n\n      var frameDecorator = util.ui.renderFrame($el);\n\n      /** @type {TppButtonDecorator} */\n      var buttons = util.ui.renderButtons(frameDecorator.getButtonContainer());\n\n      // Listen for element deletion to remove also the borders\n      var observer = new MutationObserver(function (mutations) {\n        mutations.forEach(function (mutation) {\n          var nodes = Array.from(mutation.removedNodes);\n          var directMatch = nodes.indexOf($el) > -1;\n          var parentMatch = nodes.some(function (parent) {return parent.contains($el);});\n          if (directMatch || parentMatch) {\n            frameDecorator.disposeBorders();\n          }\n        });\n      });\n      observer.observe(document.body, {\n        subtree: true,\n        childList: true\n      });\n\n      $el.addEventListener(api.Event.STATUS_CHANGED, function (event) {\n        if (_previewId && _previewId === event.detail.previewId) {\n          buttons.updateButtons(event.detail.status);\n        }\n      });\n\n      var _updateDecoration = function () {\n        updateDecoration(buttons, $el, _previewId, _customActions, _context);\n      };\n\n      _updateDecoration();\n\n      /**\n       * Fluent API to interact with the created decoration.\n       * It can be used to create user defined actions and give and update the corresponding previewId.\n       *\n       * @class\n       * @public\n       * @since 1.0.0\n       * @name TppDecorator\n       * @typedef {TppDecorator}\n       */\n      /**\n       * @type {TppDecorator}\n       */\n      var decorator = {\n        /**\n         * Adds a user defined button as an action builder to the elements UI.\n         *\n         * The action builder ({@link TppActionBuilder}) is used to create action instances ({@link TppAction})\n         * and render the buttons accordingly.\n         *\n         * The visibility of the button depends on the {@link TppActionBuilder#isEnabled} callback.\n         *\n         * Note that the methods {@link TppActionBuilder#previewId} and {@link TppActionBuilder#element}\n         * will be called internally by the decorator. So the resulting action has access to this information\n         * if available. You can access {@link TppAction#getPreviewId} and {@link TppAction#getElement} in\n         * the callbacks given to the action builder. This can be seen in the following example.\n         * Therefore the configured action is neither node- nor previewId-specific and\n         * can be reused for more than one element decoration.\n         *\n         * If the element is connected to FirstSpirit content by previewId, the {@link TppAction#getStatus} gives\n         * access to the current status of the content.\n         *\n         * The button can either be configured completely from scratch by using an empty action builder\n         * as in the following example -\n         * Or by configuring one of the predefined buttons under {@link TPP_API.Button}. See more examples there.\n         *\n         * @example\n         * const $el_A = ... ,$el_B = ... // Some divs containing an image\n         * const cropImage = TPP_API.Decorate.createActionBuilder();\n         *\n         * // 1. configure an crop image button\n         * cropImage\n         *    .name('cropImage')\n         *    .label('Crop image')\n         *    .context({\n         *      minWidth: 200,\n         *      imageSelector : 'div>img.avatar'\n         *     })\n         *    .isEnabled((action)=>{\n         *        return action.getStatus('permissions.change')\n         *    })\n         *    .execute((action)=>{\n         *\n         *        const params = {\n         *          previewId: action.getPreviewId(),\n         *          context: action.getContext()\n         *        }\n         *\n         *        TPP_API.Common\n         *          .execute('class:CropImage', params)\n         *          .then((result)=>{\n         *              MyApp.refreshElement(action.getElement(), result);\n         *          });\n         *    });\n         *\n         *\n         * TPP_API.Decorate.element($el_A)   // 2. Decorate the element\n         *       // 3a. Add the element\n         *       .addButton( cropImage )\n         *\n         *       // 3b. Alternative way to start with a blank action builder\n         *       .addButton(TPP_API.Button.CUSTOM.name('blurImage'). ... )\n         *\n         *       // 3c. It's also possible to give a callback\n         *       // that takes a blank action builder as parameter\n         *       // and returns a configured action builder\n         *       .addButton( builder => { return builder.name('rotateImage'). ... } );\n         *\n         *\n         * // 4. Reuse the action builder to decorate another element\n         * TPP_API.Decorate.element($el_B).addButton( cropImage );\n         *\n         *\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppDecorator.addButton\n         * @param {TppActionBuilder|TppActionBuilderCallback} actionSpec\n         * @return {TppDecorator}\n         */\n        addButton: function (actionSpec) {\n          var actionBuilder = util.Types.actionHelper.actionSpecToBuilder(actionSpec);\n          if (actionBuilder) {\n            _customActions.push(actionBuilder);\n            _updateDecoration();\n          } else {\n            util.log('actionSpec has to be of type TppActionBuilder');\n          }\n          return decorator;\n        },\n\n\n        /**\n         * Enrich the given decoration by a new previewId.\n         *\n         * This will trigger a refresh of all attached actions and fetch a new status for the given previewId.\n         * See {@link TppAction#getStatus} and {@link TPP_API.Operation.getElementStatus} for more information\n         *\n         *\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppDecorator.updatePreviewId\n         * @param {string} previewId\n         * @return {TppDecorator}\n         */\n        updatePreviewId: function (previewId) {\n          _previewId = previewId;\n          $el.dataset.previewId = previewId;\n          _updateDecoration();\n          return decorator;\n        }\n      };\n      return decorator;\n    };\n  }\n\n  /**\n   * Utilities for debugging, testing and support.\n   * This not a stable API!!\n   *\n   * @protected\n   * @param api\n   * @param util\n   * @param config\n   * @constructor\n   */\n  function Debug(api, util, config) {\n    var debug = this;\n\n    debug.currentConfig = Object.assign({}, config);\n    debug.defaultConfig = Object.assign({}, DEFAULT_CONFIG);\n\n    debug.enableDebugLog = api.enableDebugLog;\n\n    debug.parsePreviewId = function (previewId) {\n      if (typeof previewId === 'string') {\n        try {\n          var raw = JSON.parse(atob(previewId));\n          var result = {};\n          ['data-fs-id', 'data-fs-attrs'].forEach(function (prop) {\n            var rawProp = raw[prop];\n            try {\n              result[prop] = JSON.parse(atob(rawProp));\n            } catch (e) {\n              //ignore\n            }\n          });\n\n          return result;\n        } catch (e) {\n          // console.error(previewId,e);\n          return null;\n        }\n      }\n      return null;\n    };\n\n    debug.apiInitialized = false;\n\n    debug.version = FRONTEND_VERSION;\n    debug.gitHash = GIT_HASH;\n\n    debug.getInfo = function () {\n      return {\n        version: debug.version,\n        gitHash: debug.gitHash,\n        config: debug.currentConfig\n      }\n    };\n\n    /**\n     * Check version of backend and frontend.\n     * Can be used to check communication with backend.\n     * It will log information to the console.\n     *\n     * @name TPP_API.Debug.checkVersions\n     * @param {Number} [timeout=5000] - Timeout to wait for the backend.\n     * @return {Promise} - Promise resolves to an object with version info.\n     *  Will be rejected if no connection to backend could be established.\n     */\n    debug.checkVersions = function (timeout) {\n      if (typeof timeout === 'undefined') {\n        timeout = 5000;\n      }\n\n      var pingBackend = function () {\n        return new Promise(function (resolve, reject) {\n          util.messageService.send({tpp: {ping: true, version: FRONTEND_VERSION}}, config.origin, resolve);\n          setTimeout(function () {\n            var message = \"No Response from Backend. Timeout [\" + timeout + \"ms]\";\n            reject(message)\n          }, timeout);\n        });\n      };\n\n      var mapResult = function (result) {\n        return {\n          backendVersion: result.version,\n          frontendVersion: FRONTEND_VERSION\n        };\n      };\n\n      var checkMissmatch = function (result) {\n        result['missmatch'] = (result.backendVersion !== result.frontendVersion);\n        return result;\n      };\n\n      return pingBackend()\n        .then(mapResult)\n        .then(checkMissmatch);\n    }\n\n  }\n\n\n  /**\n   * The global object or initial entry point to access the TPP_API.\n   * You need to initialize the API using {@link TPP_API.init}.\n   *\n   * @name TPP_API\n   * @public\n   * @since 1.0.0\n   *\n   * @example\n   * // Include the script\n   * <script src=\"$PATH_TO_MODULE$/lib/fs-tpp-api.js\" data-tpp-init></script>\n   *\n   * // Alternatively you can use e.g. [jsdelivr.net](https://cdn.jsdelivr.net/npm) with an appropriate version or tag specifier:\n   * <script src=\"https://cdn.jsdelivr.net/npm/fs-tpp-api@1.2.21/fs-tpp-api.js\" data-tpp-init></script>\n   *\n   * // ES6 import\n   * import TPP_API from 'fs-tpp-api';\n   *\n   * // Node\n   * const TPP_API = require('fs-tpp-api');\n   */\n  var TPP_API = function () {\n    var api = {};\n\n    api.Event = {\n\n      /**\n       * @private\n       * @event TPP_API.Event.INIT\n       */\n      INIT: 'tpp-init',\n\n      /**\n       * @event TPP_API.Event.CONTENT_CHANGED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} content\n       */\n      CONTENT_CHANGED: 'tpp-content-changed',\n\n\n      /**\n       * @event TPP_API.Event.IMAGE_CHANGED\n       * @public\n       * @since 1.1.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} reference\n       */\n      IMAGE_CHANGED: 'tpp-image-changed',\n\n      /**\n       * Fired when the status of the store element has changed.\n       *\n       * @event TPP_API.Event.STATUS_CHANGED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {Object} status\n       */\n      STATUS_CHANGED: 'tpp-status-changed',\n\n      /**\n       * Fired when a workflow was started.\n       *\n       * This event is no longer used and is superseded by {@link TPP_API.Event.WORKFLOW_PROCESSED}.\n       *\n       * @event TPP_API.Event.WORKFLOW_STARTED\n       * @public\n       * @since 1.0.0\n       * @deprecated since version 1.1.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} workflowId\n       */\n      WORKFLOW_STARTED: 'tpp-wf-start',\n\n      /**\n       * Fired on every workflow step.\n       *\n       * @event TPP_API.Event.WORKFLOW_PROCESSED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} workflowId\n       * @property {string} transitionId\n       */\n      WORKFLOW_PROCESSED: 'tpp-wf-process',\n\n      /**\n       * Fired when an element was deleted.\n       *\n       * @event TPP_API.Event.ELEMENT_DELETED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {boolean} deleted\n       */\n      ELEMENT_DELETED: 'tpp-element-deleted',\n\n\n      /**\n       * @event TPP_API.Event.CHILD_SECTION_CREATED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId - the previewId of the parent page\n       * @property {TppCreateChildSectionConfig} context - creation context\n       * @property {any} content - the rendered content of the new section\n       */\n      CHILD_SECTION_CREATED: 'tpp-child-section-created',\n\n      /**\n       * @event TPP_API.Event.SIBLING_SECTION_CREATED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId - the previewId of the sibling page\n       * @property {TppCreateSiblingSectionConfig} context - creation context\n       * @property {string} content - the rendered content of the new section\n       */\n      SIBLING_SECTION_CREATED: 'tpp-sibling-section-created',\n\n      /**\n       * Fired when a FirstSpirit element was created.\n       *\n       * This event is different from the other events, as it does not contain a previewId.\n       * It is intended to be fired on a placeholder HTMLElement that stands for the newly created element.\n       *\n       * @event TPP_API.Event.ELEMENT_CREATED\n       * @public\n       * @since 1.0.0\n       * @property {TppCreateChildSectionConfig|TppCreateSiblingSectionConfig} context - creation context\n       * @property {any} content - the rendered content of the newly created element\n       */\n      ELEMENT_CREATED: 'tpp-element-created',\n\n\n      /**\n       * Fired when the outer content creator requests to show a certain element for example by clicking it in a report.\n       *\n       * @event TPP_API.Event.ELEMENT_REQUESTED\n       * @public\n       * @since 1.1.0\n       * @property {string} previewId - the preview\n       */\n      ELEMENT_REQUESTED: 'tpp-element-requested',\n\n\n      /**\n       * Fired when there are changes in the SiteStore triggered in the outer ContentCreator.\n       * Will be fired on document.body and on all elements annotated with the previewId (if one is set in the event).\n       *\n       * There are two cases in which this event is fired:\n       *  * 1. A new PageRef was created, then the previewId parameter is not null and provides the\n       *    previewId of this PageRef.\n       *  * 2. The order of sitestore element has changed, then the previewId parameter is null.\n       *\n       *  In both cases the navigation has to be rebuild and newly interpreted in the third party app.\n       *\n       * @event TPP_API.Event.NAVIGATION_CHANGED\n       * @public\n       * @since 1.1.0\n       * @property {string} [previewId] - If a new page ref is created the previewId of this PageRef will be send here.\n       *                                   Otherwise this is null.\n       */\n      NAVIGATION_CHANGED: 'tpp-navigation-changed'\n\n    };\n\n\n    /**\n     * String constants to define a child position.\n     * Used in {@link TPP_API.Operation.createChildSection}.\n     * @public\n     * @since 1.0.0\n     * @name TPP_API.SectionPosition\n     * @enum {string}\n     */\n    api.SectionPosition = {\n      /**\n       * Insert at first position.\n       * @name TPP_API.SectionPosition.FIRST\n       * @public\n       * @since 1.0.0\n       * */\n      FIRST: 'FIRST',\n      /**\n       * Insert at last position.\n       * @name TPP_API.SectionPosition.LAST\n       * @public\n       * @since 1.0.0\n       * */\n      LAST: 'LAST',\n      /**\n       * Insert before specified sibling.\n       * @name TPP_API.SectionPosition.BEFORE\n       * @public\n       * @since 1.0.0\n       */\n      BEFORE: 'BEFORE',\n      /**\n       * Insert after specified sibling.\n       * @name TPP_API.SectionPosition.AFTER\n       * @public\n       * @since 1.0.0\n       */\n      AFTER: 'AFTER',\n      /**\n       * Insert at a specified index.\n       * @name TPP_API.SectionPosition.INDEX\n       * @public\n       * @since 1.0.0\n       */\n      INDEX: 'INDEX'\n    };\n\n\n    /**\n     * The WorkflowMode is used to set the main store object the workflow is executed on.\n     *\n     * This is needed to harmonise the behaviour of the tpp workflow buttons and\n     * the buttons from the ContentEditor frame who triggers workflow actions.\n     *\n     * The mode is a global setting that will be given via {@link TPP_API.init}. The setting determines,\n     * how the internal buttons behave. So you need to know, how the ContentCreator is configured in your project, to\n     * configure the TPP_API accordingly.\n     *\n     * @public\n     * @since 1.1.0\n     * @name TPP_API.WorkflowMode\n     * @enum {string}\n     */\n    api.WorkflowMode = {\n      /**\n       * @name TPP_API.WorkflowMode.PAGE_DRIVEN\n       * @public\n       * @since 1.1.0\n       * The Workflow will be started on the current page object.\n       */\n      PAGE_DRIVE: 'PAGE_DRIVE',\n\n      /**\n       * The workflow will be started on the current pageref object.\n       * @name TPP_API.WorkflowMode.PAGE_REF_DRIVEN\n       * @public\n       * @since 1.1.0\n       */\n      PAGE_REF_DRIVEN: 'PAGE_REF_DRIVE'\n    }\n\n\n    api.Icon = {\n      /**\n       * @name TPP_API.Icon.EDIT\n       * @public\n       * @since 1.0.0\n       */\n      EDIT: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAyElEQVQ4T9WU4QqDMBCDRRBBhiAiyBiMgY/pu9dEWnFSe7mfFkJRz880XltVjx8hhNUSFtlCtWuxFpTPAZwi3MWmG774KcgPhiN5uCKRqSj0RqJEkWLSI7Ecw+XAGsw91MndIYCnVAPoSwbHH1LqigMcnWtwwXF/rZGcC+A/x55YrK7Igs1YSluaHcFOyK0K93/QCDXZfW6A9749g3G9QF9otrIuRXGAAXmfgOxp88TjccgiNv9V6WXOjEUCZqO5ucmPM8vbM3kDZGPFNvxi+34AAAAASUVORK5CYII=\",\n\n      /**\n       * @name TPP_API.Icon.EDIT_META_DATA\n       * @public\n       * @since 1.1.2\n       */\n      EDIT_META_DATA: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpBOUQxQjhFMDAxNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzgyNTE4RjYxMUMxMUUxQThBRUE5MTJEMzMyRDY1OCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzgyNTE4RTYxMUMxMUUxQThBRUE5MTJEMzMyRDY1OCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNzdCMUY2OUUwNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBOUQxQjhFMDAxNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlzLg4kAAADDSURBVHjaYvz//z8DDDAxIAEUDkAAMRKnDCCAkJXBGIwgggVJURaSAkaAAEIxGAZY0IwAG8OEZB4juspMJJX/0c0EWwQQQFgtwgVY0PjYdDLiUpyFxp8GcwJGQGIBKF5mIeBMRmQOQACR5EEmBhIAC7EhQZHJjKQozkSTm44cxsQ64z+xQYczKTNQNTQAAoykGCQ3mAkla4JeItt71HAx2S4lZHAWCemFkdqR9x+fL3C5OJOAodMJ+YBaLmakVuQRjEAA4Ow5e6ANBqwAAAAASUVORK5CYII=\",\n\n      /**\n       * @name TPP_API.Icon.DELETE\n       * @public\n       * @since 1.0.0\n       */\n      DELETE: \"data:image/png;base64,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\",\n      /**\n       * @name TPP_API.Icon.GROUPACTION\n       * @public\n       * @since 1.0.0\n       */\n      GROUPACTION: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAAGXljaGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVFQkNGMTk4RTlCMjExRTBCQTc4Q0QxRkI0ODk1RjA0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVFQkNGMTk5RTlCMjExRTBCQTc4Q0QxRkI0ODk1RjA0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUVCQ0YxOTZFOUIyMTFFMEJBNzhDRDFGQjQ4OTVGMDQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NUVCQ0YxOTdFOUIyMTFFMEJBNzhDRDFGQjQ4OTVGMDQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4j+SC7AAAApklEQVR42mL8//8/AwgwMUABQAAxAEX+Mz1+/JgBIIAYQXKfP38GKwAIIEYUhSBRuAhAAMEZv3//BjNYWVkZ4ea9f/8ejEEAIIBgKkEEI9wwoDa4VhYQ8ePHDwYo/R+s4vv372DMy8sLMfjnz58MYmJiYDMAAgxuPQj8+/cPzmFiYmKEsVkYkABINxIAa+Dk5GREUQSyDx0AFaGaBHMpCEhJScGtAwDOn1MNwUTjlwAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.DEBUG\n       * @public\n       * @since 1.0.0\n       */\n      DEBUG: \"data:image/png;base64,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/GMzLdsAADr7aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzEzOCA3OS4xNTk4MjQsIDIwMTYvMDkvMTQtMDE6MDk6MDEgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDEyLTAxLTEwVDA4OjI1OjU2KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTctMTEtMTNUMTE6NTE6MzcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE3LTExLTEzVDExOjUxOjM3KzAxOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICAgICA8cmRmOkJhZz4KICAgICAgICAgICAgICAgPHJkZjpsaT54bXAuZGlkOjlFNjJBRUYyQTNDQjExRTE4MzU2ODM4NDZBOTVCODcyPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6OTIwOThiYTctNzExMi00MDc1LTkwMmItOTlhNzg2NWIyNjMxPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MmQ2YjI0MTQtMDVjNy0xMTdiLTg0ZjUtOTUyOTYzZWVhN2Y0PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NTE1MDE2ZTYtNTZmZi00NmYyLWE3ZDMtYzJmYjRhMjMyZWZjPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjUxNTAxNmU2LTU2ZmYtNDZmMi1hN2QzLWMyZmI0YTIzMmVmYzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxMi0wMS0xMFQwODoyNTo1NiswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjkyMDk4YmE3LTcxMTItNDA3NS05MDJiLTk5YTc4NjViMjYzMTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNy0xMS0xM1QxMTo1MTozNyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj45NjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTk8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PqsKpiEAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAJxJREFUeNpi+P//PwMtMMNAGcwKpf/TysXIBnPRyuDN1DBY6D8CnIeKvUGS5yTWYEY0L9+AGvoPKnbk////n9D09BLr4hv/MQEDFjEXfJGKLsCMI2yxGf4AajjZkUfI5SQZvPk/bsCAFO44LSAlueFyOUXp2IXYICDGYA40F7v8////BTUMZoLSq3GkFBZKszQjnuw9+IrNwWcwYADDQCIMDFepgwAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.WORKFLOW\n       * @public\n       * @since 1.0.0\n       */\n      WORKFLOW: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAFoTx1HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE1MUVCNzBCMDE0NDExRTE4MTIwREU0NEQzOTMzM0Y4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE1MUVCNzBDMDE0NDExRTE4MTIwREU0NEQzOTMzM0Y4Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTUxRUI3MDkwMTQ0MTFFMTgxMjBERTQ0RDM5MzMzRjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTUxRUI3MEEwMTQ0MTFFMTgxMjBERTQ0RDM5MzMzRjgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz65ABaxAAAAl0lEQVR42mL8//8/AwgwMUABQAAxYogABBBcBAhADEa4DIgDIgACCFkFWN9/ZA5cLxNMPYgGCCAUPcimI2v7j2YTmM+CLoAMAAIIm7EM2FyDbjyGJF6djLgk/+PS+R+JxggeRiQabjRAgOH1CnJooQMWfO5BE2fEpZEBi+nINqLYjjfscDkTXSMjthAiNkKItp2FFOchAwBEcygkEeR08gAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.CREATE_PAGE\n       * @public\n       * @since 1.0.0\n       */\n      CREATE_PAGE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjdFMDhBMzA2NzI3ODExRTE5M0EzQTc5MUI3RjlEQzc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjdFMDhBMzA3NzI3ODExRTE5M0EzQTc5MUI3RjlEQzc2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N0UwOEEzMDQ3Mjc4MTFFMTkzQTNBNzkxQjdGOURDNzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6N0UwOEEzMDU3Mjc4MTFFMTkzQTNBNzkxQjdGOURDNzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67EEkXAAAAv0lEQVR42mL8//8/AwwwQen/yBxGkABAADESpYwBIICQlf1HlmBiQAWMMAUAAYRiMDYL/qMLYlWJAliQbYYBgADCahEuwILG/4/F+fjdQKzJjHhsYmQhYBiKZoAAIsmDZLv5PwH34zX5P0XOoJpiRnSnsBARIf9xJWVsocFIrJtRbAMIMJJikJJEhzM+8EUsKQYTCkiCFrCQ4DtGIn1EeiKiRhgTG+44g4WFRIOQU/h/fBawkBnzjJS4mNQIRQEAAoouSwxwE+wAAAAASUVORK5CYII=\",\n      /**\n       * @name TPP_API.Icon.CREATE_SECTION\n       * @public\n       * @since 1.0.0\n       */\n      CREATE_SECTION: \"data:image/png;base64,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\",\n      /**\n       * @name TPP_API.Icon.CROP_IMAGE\n       * @public\n       * @since 1.1.0\n       */\n      CROP_IMAGE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAgUlEQVQ4T2P4//8/Ay0wTQwFOXTQGRwJdNVMfEFIrosHr8FA3xINUHxPKChApk7BgncCxa6giZNlMLoDKA5jmItHqMGg8INhUFCAIgpZDMYmOYOANMAwyGBQ7COLIbNxpipikxshdRjyhDTgShWE9BEs3WhmMEGX4SrhyNZIqNYBAOWOEXeO7QWpAAAAAElFTkSuQmCC\",\n      /**\n       * @name TPP_API.Icon.ADD_BOOKMARK\n       * @public\n       * @since 1.1.6\n       */\n      ADD_BOOKMARK: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI3N0ZBOUU5NjEzRTExRTJCNkRDODFGNjk4NDJCRDY3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI3N0ZBOUVBNjEzRTExRTJCNkRDODFGNjk4NDJCRDY3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjc3RkE5RTc2MTNFMTFFMkI2REM4MUY2OTg0MkJENjciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjc3RkE5RTg2MTNFMTFFMkI2REM4MUY2OTg0MkJENjciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7EpoHcAAABGElEQVR42mL4//8/AxBLgGhGEAEDTAxIACCAcMugcAACiAFqmtl/CIiB8uGqTgFxLLIGgABCMRjdTJDMXyCOQTabE4h1YeayQFUGQ+nLOM0ECCB0QSEgfgsSZ8AC0BXDOIuAeDeS+BIQwYKmORaLgUvw+hcXYGIgAQAEELrJbED8i1iTXwGxGU6jYaENxB/+I8A05BhGj2kQ8EFiH4PSMcgGIwfdU1yRgcuDMfjCmVDQLSGYCKkSKSQpBggwQs6oAGJdII5mIBFgM7gOiL2B2ATNlY+B+A4QLwPiH9gCC1fKQMZ+/zFBHQ61WDELDvv4gfgzEG8H4k9QH5jhSAtYXY4vjGOIDM4l5EQe2YASFy+hJLnRxMUUAQDIWuXpcvA6lwAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.DELETE_BOOKMARK\n       * @public\n       * @since 1.1.6\n       */\n      DELETE_BOOKMARK: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM3RDgzMUQ2NjEzRTExRTJBRTUzQTE0Qzg2NDBGMjZGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM3RDgzMUQ3NjEzRTExRTJBRTUzQTE0Qzg2NDBGMjZGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzdEODMxRDQ2MTNFMTFFMkFFNTNBMTRDODY0MEYyNkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzdEODMxRDU2MTNFMTFFMkFFNTNBMTRDODY0MEYyNkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6VnafPAAABG0lEQVR42mL4//8/AxBLgGhGEAEDTAxIACCAcMugcAACiAFqmtl/CIiB8hlgEgxIgiDAABBAKAajmwmS+QvEMchmcwKxLsw4FqjKYCh9CeRWrGYCBBC6oBAQvwWJM2AB6IphnEVAvBtJfAmIYEHTHIvFwCW4TMYLmBhIAAABhG4yGxD/ItbkV0BshtNopMj78B8BpiHHMAwjm+yDxD4GpWOQDUYOuqe4IgOXB2PwhTO+oFsMxf9pHykkKQYIMELOqABiXSCOZiARYDO4Doi9gdgEzZWPgfgOEC8D4h/ooYovZSBjv/+YoA6HWqyYBYd9/ED8GYi3A/EnqA/McKQFrC7HF8YxRAbnEnIij2xAjouXIKduZLMG3MUUAQB/1/qqz56eugAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.TRANSLATE\n       * @public\n       * @since 1.2.4\n       */\n       TRANSLATE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAINJREFUOE+1kAEKgEAIBHtfnwr6uCXhsbetSWQLA96od9FiZr8gZQdSdiBlB1J2wGIHuJchd3DA4YEq2d7jr8DgWfVusMCXOei4Lr9YXbydRB/riNflxQjGz+tVTrUHdwYs+OUq2V568TREROIsd0bxAo/yE1J2IGUHUnYgZQdSfseWA4mZHgMwLO3eAAAAAElFTkSuQmCC\"\n    };\n\n    return api;\n  }();\n\n\n  function initButtonConstants(api) {\n    api.Button = {\n\n      /**\n       * A collection of predefined buttons.\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button\n       */\n      /**\n       * Custom button.\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CUSTOM\n       * @type {TppActionBuilder}\n       * @example\n       *\n       * TPP_API.Decorate.element($el).addButton(\n       *   TPP_API.Button.CUSTOM\n       *      .context({content_spot: \"banner\"})\n       *      .name(\"promote-banner\")\n       *      .label(\"Promote Banner\")\n       *      .context({\n       *            type: \"promote\",\n       *            content_spot: \"banner\"\n       *        })\n       *      .icon(\"/icons/promote.png\")\n       *      .isEnabled((action) =>\n       *           !isBannerPromoted( action.getPreviewId(), action.getContext().content_spot )\n       *      .execute((action) =>\n       *          promoteBanner( action.getPreviewId(), action.getContext().content_spot )\n       *        );\n       *\n       * TPP_API.Decorate.element($el).addButton(\n       *   TPP_API.Button.CUSTOM\n       *      .context({content_spot: \"carousel\"})\n       *      .name(\"theme-switch\")\n       *      .options(\n       *           (action) => {\n       *              var options = [{id:\"default\", label:\"Set default theme\"}];\n       *              if (contentSpotsSupportsTheme(action.getPreviewId(), \"dark\")) {\n       *                 options.push({id:\"dark\", label:\"Set dark theme\"});\n       *              }\n       *              if (contentSpotsSupportsTheme(action.getPreviewId(), \"light)) {\n       *                 options.push({id:\"light\", label:\"Set light theme\"});\n       *              }\n       *              return options;\n       *           }\n       *        )\n       *      .execute((action, args) =>\n       *          var theme = args[0];\n       *          setTheme(action.getPreviewId(), theme);\n       *        );\n       *\n       *\n       **/\n      CUSTOM: ActionStore.CUSTOM,\n\n      /**\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CREATE_PAGE\n       * @example\n       *\n       * // Example A\n       *\n       * // 1. Create Placeholder\n       * // In case you have no data for a current slot on your page, you can render an element $el as a placeholder\n       * var $el = MyApp.createPlaceholder();\n       *\n       * // 2. Decorate it\n       * // * $el will be decorated with a border\n       * // * If $el has no data-preview-id attribute a CREATE_PAGE button will be rendered\n       * // * This Button opens an editor form for a page based on 'template_uid'\n       * // * If form is submitted\n       * //  + a Page will be create in the PageStore under 'path/to/element' with the uid 'uid_of_element'\n       * //  + a PageRef to this Page will be created in the SiteStore under 'path/to/element' with the uid 'uid_of_element'\n       * //  + if successful an ELEMENT_CREATED event will be fired\n       * var create = TPP_API.Button.CREATE_PAGE.context({\n       *                                      template: 'template_uid',\n       *                                      path: 'path/to/element/uid_of_element',\n       *                                      language: 'en'})\n       * var decorator = TPP_API.Decorate.element($el).addButton(create);\n       *\n       *\n       * // 3. Wait for creation\n       * $el.addEventListener(TPP_API.EVENT.ELEMENT_CREATED, function(e){\n       *\n       *    // 4. Fill your placeholder with real data\n       *    var contentData = e.detail.content;\n       *    $el.innerHTML = MyApp.render(contentData);\n       *\n       *    // 5. Update the decoration\n       *    // This will update the elements decoration and enable all previewId related buttons.\n       *    // (Currently the ELEMENT_CREATED event does not have a previewId property.\n       *    // You have to know where you put it in your content and extract it by yourself.)\n       *    var previewId = MyApp.extractPreviewId(contentData);\n       *    decorator.updatePreviewId( previewId );\n       *\n       * });\n       *\n       *\n       * // Example B\n       *\n       * // You can also add options to select the\n       * var create = Decorate.CREATE_PAGE\n       *                  .context({ path: 'path/to/element/uid_of_element', lang: 'en' })\n       *                  .options([{id : 'template_uid_1', label : 'Basic'}, {id: 'template_uid_2', label: 'Advanced'}])\n       *\n       * var decorator = Decorate.element($el).addButton(create);\n       *\n       *\n       */\n      CREATE_PAGE: ActionStore.CREATE_PAGE,\n\n\n      /**\n       * This button can be used to decorate a page element. It creates child sections for this page element.\n       * That means a new section will be added to the page within a given body/content area.\n       *\n       * The {@link TppActionBuilder#context} should be called with a parameter of type {@link TppCreateChildSectionConfig}.\n       *\n       * The section template can be selected in three different ways. Either by the standard ContentCreator dialog,\n       * given as a fixed value, or with the TPP buttons drop down capability ({@link TppActionBuilder#options}).\n       * See examples for more info about choosing the section template.\n       *\n       * To handle the creation of the section afterwards see {@link TPP_API.Event.CHILD_SECTION_CREATED} and\n       * {@link TPP_API.Event.ELEMENT_CREATED}.\n       *\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CREATE_CHILD_SECTION\n       * @example\n       *\n       * // Assumption for every example:\n       * // An html element representing the page is given.\n       * // It is annotated with a data-preview-id of a page.\n       * // The page element should not be the body element of the whole page even if only on FirstSpirit page is rendered\n       * // as a whole page in the third party application.\n       * // Instead it could be a title or header element.\n       * var $pageElement = ...\n       *\n       *\n       * // Example 1 - Simple case\n       * // User is provided a dialog with all possible templates.\n       * // At least the name of the body (content area) has to be specified.\n       * // This dialog is a standard ContentCreator functionality.\n       * // The name of the section will be derived from the uid of the selected template.\n       * // The new section will be placed after the given section\n       * TPP_API.Decorate.element($pageElement).addButton(Decorate.CREATE_CHILD_SECTION.context({body : \"main\"}));\n       *\n       * // Example 2 - Preselect the given template.\n       * // The button can also be pre-configured to choose a specific section template.\n       * TPP_API.Decorate\n       *      .element($pageElement)\n       *      .addButton(TPP_API.Button.CREATE_CHILD_SECTION.context(\n       *        {\n       *          body: \"main\",\n       *          template : \"section_template_uid\"\n       *        }\n       *      ));\n       *\n       *\n       * // Example 3 - Give a static list of templates.\n       * // The section template can also be chosen from a fixed list of templates.\n       * // There for the drop down capability of the TppButtons can be used.\n       * TPP_API.Decorate\n       *      .element($pageElement)\n       *      .addButton(TPP_API.Button.CREATE_CHILD_SECTION\n       *        .context(\n       *          {\n       *            body: \"main\",\n       *            template : \"section_template_uid\"\n       *          }\n       *        )\n       *        .options(\n       *          [\n       *          {id: 'section_template_uid_1', label : 'Basic Section'},\n       *          {id: 'section_template_uid_2', label : 'Advanced Section'}\n       *          ]\n       *         }\n       *      );\n       *\n       * // Example 4 - Position and section name\n       * // The position and also the name of the new section can be set .\n       * // (If there are collisions in the section names a suffix will be appended.)\n       * // The object given to the context i\n       * TPP_API.Decorate\n       *      .element($pageElement)\n       *      .addButton(TPP_API.Button.CREATE_CHILD_SECTION.context(\n       *        {\n       *          body: \"left\",\n       *          template : \"section_template_uid\",\n       *          position: TPP_API.SectionPosition.LAST,\n       *          sectionName: \"teaser_entry\"\n       *        }\n       *      ));\n       */\n      CREATE_CHILD_SECTION: ActionStore.CREATE_CHILD_SECTION,\n\n\n      /**\n       * This button can be used to decorate a section. It creates siblings sections for it.\n       * That means a new section will be added to the same body within the same page.\n       *\n       * The {@link TppActionBuilder#context} should be called with a parameter of type {@link TppCreateSiblingSectionConfig}.\n       *\n       * The section template can be selected in three different ways. Either by the standard ContentCreator dialog,\n       * given as a fixed value, or with the TPP buttons drop down capability ({@link TppActionBuilder#options}).\n       * See examples for more info about choosing the section template.\n       *\n       * To handle the creation of the section afterwards see {@link TPP_API.Event.SIBLING_SECTION_CREATED} and\n       * {@link TPP_API.Event.ELEMENT_CREATED}.\n       *\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CREATE_SIBLING_SECTION\n       * @example\n       *\n       * //In every example $section is an html element annotated with the data-preview-id of a section.\n       *\n       * // Example 1 - Simple case\n       * // User is provided a dialog with all possible templates.\n       * // This dialog is a standard ContentCreator functionality.\n       * // The name of the section will be derived from the uid of the selected template.\n       * // The new section will be placed after the given section\n       * TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION);\n       *\n       *\n       * // Example 2 - Preselect the given template.\n       * // The button can also be pre-configured to choose a specific section template.\n       * TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.context(\n       *        { template : \"section_template_uid\" }\n       *      ));\n       *\n       *\n       * // Example 3 - Give a static list of templates.\n       * // The section template can also be chosen from a fixed list of templates.\n       * // There for the drop down capability of the TppButtons can be used.\n       * TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.options(\n       *        [\n       *          {id: 'section_template_uid_1', label : 'Basic Section'},\n       *          {id: 'section_template_uid_2', label : 'Advanced Section'}\n       *        ]\n       *      ));\n       *\n       * // Example 4 - Position and section name\n       * // The position relative to the given section can be set and the name of the section can also be set.\n       * // (If there are collisions in the section names a suffix will be appended.)\n       * // The object given to the context i\n       *  TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.context(\n       *        {\n       *          template: \"teaser_entry_template_uid\"\n       *          position: TPP_API.SectionPosition.AFTER,\n       *          sectionName: \"teaser_entry\"\n       *        }\n       *      ));\n       *\n       * // Example 5 - Full example, decorate every child section with a button.\n       * // This should be full example for a list of sibling sections\n       *\n       * // a) Assume you have given a list of section in your application.\n       * // Every section is annotated with its own previewId.\n       * <div data-slot=\"teaser\">\n       *   <div class=\"slot-entry\" data-preview-id=\"...\"/>\n       *   <div class=\"slot-entry\" data-preview-id=\"...\"/>\n       * </div>\n       *\n       * // b) Decorate each slot entry with a create sibling button.\n       * var $slotEntries = document.querySelectorAll('.slot-entry');\n       * [].forEach.call($slotEntries, ($section) => {\n       *      Decorate.element($section).addButton(Decorate.CREATE_SIBLING_SECTION);\n       * });\n       *\n       */\n      CREATE_SIBLING_SECTION: ActionStore.CREATE_SIBLING_SECTION,\n\n      /**\n       * This button adds the ability to edit the element given by the previewId.\n       * It supports Sections, Pages and PageRefs.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.EDIT_ELEMENT\n       *\n       */\n      EDIT_ELEMENT: ActionStore.EDIT_ELEMENT,\n\n      /**\n       * This button adds the ability to edit the meta data of the element given by the previewId.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since NEXT_STABLE\n       * @name TPP_API.Button.EDIT_META_DATA\n       *\n       */\n      EDIT_META_DATA: ActionStore.EDIT_META_DATA,\n\n      /**\n       * This button adds the ability to delete the section given by a previewId.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.DELETE_SECTION\n       *\n       */\n      DELETE_SECTION: ActionStore.DELETE_SECTION,\n\n      /**\n       * Dropdown button that shows all available workflow that could currently been started.\n       * An element that is decorated with this button, should also be decorated with {@link TPP_API.Button.PROCESS_WORKFLOW}.\n       * Either one of them will be shown, depending on the elements workflow state.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.START_WORKFLOW\n       */\n      START_WORKFLOW: ActionStore.START_WORKFLOW,\n\n      /**\n       * Dropdown button that triggers the translation dialog\n       * @public\n       * @since 1.2.4\n       * @name TPP_API.Button.TRANSLATE\n       */\n      TRANSLATE: ActionStore.TRANSLATE,\n\n      /**\n       * Dropdown button that shows all available workflow steps that could currently been taken.\n       * An element that is decorated with this button, should also be decorated with {@link TPP_API.Button.START_WORKFLOW}.\n       * Either one of them will be shown, depending on the elements workflow state.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.PROCESS_WORKFLOW\n       */\n      PROCESS_WORKFLOW: ActionStore.PROCESS_WORKFLOW,\n\n\n      /**\n       * Open the crop image dialog for an image given as a previewId.\n       * The resolution has to be given as additional context value or will be derived from\n       * the decorated tab.\n       * @public\n       * @since 1.1.0\n       * @name TPP_API.Button.CROP_IMAGE\n       * @example\n       * //\n       * // Example 1 - decorate image tag, give previewId and resolution via data-fs-resolution\n       * // The previewId for the image can be rendered like this\n       * //\n       * $CMS_VALUE(previewId:\"fs_image\")$\n       *\n       * // Assume you have the following image tag\n       * <img src=\"...\" alt=\"...\" id=\"headerImage\" data-preview-id=\"...\" data-tpp-context-image-resolution=\"HEADER_640x150\">\n       * <img src=\"...\" alt=\"...\" id=\"headerImage\" data-preview-id=\"...\" data-tpp-context-image-resolutions=\"HEADER_640x150, HEADER_1280x300\">\n       *\n       * // Decorate the image tag\n       * var $image = document.getElementById('#headerImage');\n       * TPP_API.Decorate.element($image).addButton(TPP_API.Button.CROP_IMAGE);\n       *\n       * //\n       * // Example 2 - decorate image tag, give previewId and resolution via api.\n       * //\n       * // Assume you have the previewId and resolution fetched via the CaaS\n       * var imageResolution = ...;\n       * var previewId = ...;\n       *\n       * // Your image tag does not need the attributes now\n       * <img src=\"...\" alt=\"...\" id=\"headerImage\">\n       *\n       * // Decorate the image tag\n       * var $image = document.getElementById('#headerImage');\n       * var cropImageButton = TPP_API.Button.CROP_IMAGE.context({imageResolution: imageResolution});\n       * TPP_API.Decorate.element($image, previewId).addButton(cropImageButton);\n       *\n       */\n      CROP_IMAGE: ActionStore.CROP_IMAGE,\n\n      /**\n       * Adds bookmark for element.\n       * @public\n       * @since 1.1.6\n       * @name TPP_API.Button.ADD_BOOKMARK\n       */\n      ADD_BOOKMARK: ActionStore.ADD_BOOKMARK,\n\n      /**\n       * Removes bookmark for element.\n       * @public\n       * @since 1.1.6\n       * @name TPP_API.Button.DELETE_BOOKMARK\n       */\n      DELETE_BOOKMARK: ActionStore.DELETE_BOOKMARK,\n\n      /**\n       * This button prints debug information to the browser console.\n       * It's only visible when debug logging is enabled.\n       * {@link TPP_API.enableDebugLog}\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.DEBUG_STATUS\n       **/\n      DEBUG_STATUS: ActionStore.DEBUG_STATUS\n    };\n\n  }\n\n  function checkForReceiver(util, common, timeout) {\n\n    var inIFrame = function () {\n      try {\n        return window.self !== window.top;\n      } catch (e) {\n        return true;\n      }\n    };\n    util.messageService.updateReceiverOverride();\n    return new Promise(function (resolve) {\n      if (typeof window !== 'undefined' && inIFrame()) {\n        util.log(\"This app runs in iframe and uses First Spirit TPP so we assume it is in edit mode. Try to connect with TPP-Api.\");\n        var pingResult = null;\n        common.ping(function (result) {\n          pingResult = result;\n          if (result.version !== FRONTEND_VERSION) {\n            util.log(\"WARNING: TPP-Module and TPP_API Version missmatch. \" +\n                       \"TPP_API version: \" + FRONTEND_VERSION + \" TPP-Module Version: \" + result.version);\n          }\n        });\n\n        setTimeout(function () {\n          if (!pingResult) {\n            util.log(\"WARNING: Could not reach TPP-Module receiver (TIMEOUT=\" + timeout + \"ms). The Module might not be installed or this app runs within an iframe but not in FirstSpirits ContentCreators.\");\n            resolve(false);\n          } else {\n            util.log(\"SUCCESS: Connection to TPP-Module could be established. \" +\n                       \"TPP_API version: \" + FRONTEND_VERSION + \" TPP-Module Version: \" + pingResult.version);\n            resolve(true);\n          }\n        }, timeout)\n\n      } else {\n        resolve(false);\n      }\n    });\n  }\n\n  function connectHandler(receiverFound, util, config) {\n    return new Promise(function (resolve) {\n      if (receiverFound) {\n        util.messageService.connectApi(config.origin, function () {\n          util.log(\"Message handler initialized\");\n          resolve(receiverFound);\n        });\n      } else {\n        resolve(receiverFound);\n      }\n    });\n  }\n\n\n  /**\n   * Added for better testability.\n   * Access to the three API-Parts as Constructor.\n   * Each of the three parts should not depend on global variables.\n   * The TPP_API, util, and config can be given as constructor argument.\n   * The iframe communication can be mocked be setting another message receiver,\n   * but DOM-Event will be emitted and received (can be partially mocked by changing util.emit);\n   * @private\n   */\n  TPP_API._internal = {\n    CommonConstructor: Common,\n    OperationConstructor: Operation,\n    DecorateConstructor: Decorate,\n    DebugConstructor: Debug,\n    util: util,\n    setMessageReceiver: function (receiver) {\n      messageReceiverOverride = receiver;\n      util.messageService.updateReceiverOverride();\n    }\n  };\n\n\n  /**\n   * Enables the debug log. Setting is stored in localStorage and survives reload.\n   * @name TPP_API.enableDebugLog\n   * @public\n   * @since 1.0.0\n   * @param {boolean} [enable=true]\n   */\n  TPP_API.enableDebugLog = function (enable) {\n    enable = typeof (enable) === 'undefined' || enable;\n    util.log.setEnabled(enable);\n  };\n\n\n  var initCalled = false;\n  /**\n   * The API has to be initialize either by calling TPP_API.init() or by adding a blank data-tpp-init attribute to the the script tag. You should use only one of these methods once.\n   * @name TPP_API.init\n   * @public\n   * @since 1.0.0\n   * @example\n   * // Default values\n   * TPP_API.init({\n   *     origin: \"*\",                                       // every origin allowed\n   *\n   *     autoScanDelay: null                                // disabled\n   *                                                        // This option is deprecated and might be replaced with a observer based solution)\n   *\n   *     alwaysDebug: false,                                // if true, debug will be enabled by default.\n   *                                                        // Otherwise debug has to be toggled manually\n   *\n   *     autoReload: false,                                 // disabled\n   *\n   *     deletePageWorkflow: null,                          // disabled, overrides the default delete workflow configured in project\n   *\n   *     workflowMode: TPP_API.WorkflowMode.PAGE_DRIVEN,    // Workflows will be started on PageRef.\n   *                                                        // This is TPPs initial approach\n   *   }\n   *\n   * // Reasonable alternative configuration\n   * TPP_API.init({\n   *     origin: \"https://dev.contentCreatorUrl.com:9000\",    // The domain of the outer ContentCreator window.\n   *                                                          // Restricts communication only to out frame with this domain.\n   *\n   *     autoScanDelay: 1000                                  // Scan every 1000ms\n   *                                                          // This option is deprecated and might be replaced\n   *                                                          // with a observer based solution.\n   *\n   *     alwaysDebug: true,                                   // Debug logging and PP_API.Button.DEBUG_STATUS action is enabled.\n   *\n   *     autoReload: true,                                    // Reloads the whole page on certain actions\n   *\n   *     deletePageWorkflow: null,                            // Disabled, overrides the default delete workflow configured in project\n   *\n   *     workflowMode: TPP_API.WorkflowMode.PAGE_REF_DRIVEN,  // Workflows will be started on PageRefs.\n   *                                                          // This is the approach more compatible with the actions\n   *                                                          // accessible the ContentCreator frame.\n   *\n   *   }\n   * );\n   *\n   * @example\n   * // Alternatively use data-tpp-* attributes\n   *\n   * <script src=\"$PATH_TO_MODULE$/lib/fs-tpp-api.js\"\n   *   data-tpp-init\n   *   data-tpp-auto-reload=\"true\"></script>\n   *\n   * // Note, that data-tpp-init has to be always present in the second method, that there is a data-tpp-* prefix and that the camelCase on one side is kebab-case on the other side.\n   *\n   *\n   * @param {Object} tppConfig\n   */\n  TPP_API.init = function (tppConfig) {\n    if (initCalled) {\n      console.error('TPP_API.init() was called twice. Please do only one of EITHER calling it directly OR using <script data-tpp-init>');\n    }\n    initCalled = true;\n\n    config = Object.assign({}, DEFAULT_CONFIG, tppConfig);\n\n    TPP_API.Common = new Common(TPP_API, util, config);\n    TPP_API.Operation = new Operation(TPP_API, util, config);\n    TPP_API.Decorate = new Decorate(TPP_API, util, config);\n    TPP_API.Debug = new Debug(TPP_API, util, config);\n\n    initButtonConstants(TPP_API);\n\n\n    if (config.autoScanDelay) {\n      setTimeout(TPP_API.Decorate.scan, parseInt(config.autoScanDelay, 10));\n    }\n\n    if (config.alwaysDebug) {\n      util.log.setEnabled(true);\n    }\n\n    if (config.autoReload) {\n      var reloadEvents = [TPP_API.Event.CONTENT_CHANGED, TPP_API.Event.ELEMENT_DELETED];\n      reloadEvents.forEach(function (eventName) {\n        document.body.addEventListener(eventName, self.location.reload.bind(self.location));\n      });\n    }\n\n    // deprecated - was used in old prototypes\n    TPP_API.Decorate.Action = TPP_API.Button;\n    TPP_API.Decorate.Icon = TPP_API.Icon;\n\n    //Connect with receiver\n    var timeout = 800;\n    checkForReceiver(util, TPP_API.Common, timeout)\n      .then(function (receiverFound) {\n        return connectHandler(receiverFound, util, config);\n      })\n      .then(function () {\n        TPP_API.Debug.apiInitialized = true;\n      });\n  };\n\n\n  (/**\n   * @private\n   * Script tag initialize\n   * @param {HTMLElement} $script\n   * param {{tppOrigin,tppAlwaysDebug,tppAutoScanDelay,tppAutoReload}} data\n   */\n  function ($script) {\n    if ($script) {\n\n      var data = $script.dataset;\n      var config = {};\n\n      var getTppCamelCase = function (str) {\n        return \"tpp\" + str[0].toUpperCase() + str.slice(1);\n      };\n\n      var setBoolean = function (config, key, data) {\n        var strValue = data[getTppCamelCase(key)];\n        if (typeof (strValue) !== 'undefined') {\n          config[key] = (strValue === 'true');\n        }\n      };\n\n      var setNumber = function (config, key, data) {\n        var strValue = data[getTppCamelCase(key)];\n        var value = Number.parseInt(strValue);\n        if (!Number.isNaN(value)) {\n          config[key] = value;\n        }\n      };\n\n      var setString = function (config, key, data) {\n        var strValue = data[getTppCamelCase(key)];\n        if (typeof (strValue) !== 'undefined') {\n          config[key] = strValue;\n        }\n      };\n\n      setString(config, 'origin', data);\n\n      setString(config, 'workflowMode', data);\n\n      setBoolean(config, 'alwaysDebug', data);\n\n      setNumber(config, 'autoScanDelay', data);\n\n      setBoolean(config, 'autoReload', data);\n\n      setBoolean(config, 'deleteSectionEnabled', data);\n\n      setString(config, 'deletePageWorkflow', data);\n\n      TPP_API.init(config);\n    }\n  })(typeof (document) !== 'undefined' && document.querySelector('script[data-tpp-init]'));\n\n  /**\n   * In setups where you can not control the load order of your scripts you can define this as a global callback.\n   * It will be called with TPP_API as parameter.\n   * The best way would be to avoid such situations and control the load order of your scripts.\n   * @private\n   * @name window.TPP_API_LOADED\n   *\n   * @example\n   * window.TPP_API_LOADED=function(TPP_API){\n   *   // You can use the TPP_API now.\n   *   // You should initialize and configure it as the first step\n   * }\n   */\n  if (typeof (window) !== 'undefined' && typeof window['TPP_API_LOADED'] === 'function') { // async / deferred usage\n    window['TPP_API_LOADED'](TPP_API);\n  }\n\n  util.log(\"TPP_API loaded.\");\n  if (typeof window === 'undefined') {\n    util.log(\"The API is not supposed to run on server side. It adds event listeners to the global window object.\");\n  }\n\n  return TPP_API;\n}))\n;\n","module.exports = { \"default\": require(\"core-js/library/fn/number/is-nan\"), __esModule: true };","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/number/parse-int\"), __esModule: true };","require('../../modules/es6.number.parse-int');\nmodule.exports = require('../../modules/_core').Number.parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n  var string = $trim(String(str), 3);\n  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n  var exp = {};\n  var FORCE = fails(function () {\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if (ALIAS) exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n  string = String(defined(string));\n  if (TYPE & 1) string = string.replace(ltrim, '');\n  if (TYPE & 2) string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","module.exports = require('./_hide');\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n  return $JSON.stringify.apply($JSON, arguments);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n  var promiseCapability = newPromiseCapability.f(this);\n  var result = perform(callbackfn);\n  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n  return promiseCapability.promise;\n} });\n","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n"],"sourceRoot":""}