((name,context,definition)=>{context[name]=definition(),"undefined"!=typeof module&&module.exports?module.exports=context[name]:"function"==typeof define&&define.amd&&define(function(){return context[name]})})("Promise","undefined"!=typeof global?global:this,function(){let builtInProp,cycle,scheduling_queue,ToString=Object.prototype.toString,timer="undefined"!=typeof setImmediate?function(fn){return setImmediate(fn)}:setTimeout;try{Object.defineProperty({},"x",{}),builtInProp=function(obj,name,val,config){return Object.defineProperty(obj,name,{value:val,writable:!0,configurable:!1!==config})}}catch(err){builtInProp=function(obj,name,val){return obj[name]=val,obj}}function schedule(fn,self){scheduling_queue.add(fn,self),cycle=cycle||timer(scheduling_queue.drain)}function isThenable(o){let _then,o_type=typeof o;return"function"==typeof(_then=null==o||"object"!=o_type&&"function"!=o_type?_then:o.then)&&_then}function notify(){for(let i=0;i{Constructor.resolve(arr[idx]).then(function(msg){resolver(idx,msg)},rejecter)})(idx)}function MakeDefWrapper(self){this.def=self,this.triggered=!1}function MakeDef(self){this.promise=self,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function Promise(executor){if("function"!=typeof executor)throw TypeError("Not a function");if(0!==this.__NPO__)throw TypeError("Not a promise");this.__NPO__=1;let def=new MakeDef(this);this.then=function(success,failure){let o={success:"function"!=typeof success||success,failure:"function"==typeof failure&&failure};return o.promise=new this.constructor(function(resolve,reject){if("function"!=typeof resolve||"function"!=typeof reject)throw TypeError("Not a function");o.resolve=resolve,o.reject=reject}),def.chain.push(o),0!==def.state&&schedule(notify,def),o.promise},this.catch=function(failure){return this.then(void 0,failure)};try{executor.call(void 0,function(msg){resolve.call(def,msg)},function(msg){reject.call(def,msg)})}catch(err){reject.call(def,err)}}scheduling_queue=(()=>{let first,last,item;function Item(fn,self){this.fn=fn,this.self=self,this.next=void 0}return{add:function(fn,self){item=new Item(fn,self),last?last.next=item:first=item,last=item},drain:function(){let f=first;for(first=last=cycle=void 0;f;)f.fn.call(f.self),f=f.next}}})();var PromisePrototype=builtInProp({},"constructor",Promise,!1);return Promise.prototype=PromisePrototype,builtInProp(PromisePrototype,"__NPO__",0,!1),builtInProp(Promise,"resolve",function(msg){return msg&&"object"==typeof msg&&1===msg.__NPO__?msg:new this(function(resolve,reject){if("function"!=typeof resolve||"function"!=typeof reject)throw TypeError("Not a function");resolve(msg)})}),builtInProp(Promise,"reject",function(msg){return new this(function(resolve,reject){if("function"!=typeof resolve||"function"!=typeof reject)throw TypeError("Not a function");reject(msg)})}),builtInProp(Promise,"all",function(arr){let Constructor=this;return"[object Array]"!=ToString.call(arr)?Constructor.reject(TypeError("Not an array")):0===arr.length?Constructor.resolve([]):new Constructor(function(resolve,reject){if("function"!=typeof resolve||"function"!=typeof reject)throw TypeError("Not a function");let len=arr.length,msgs=Array(len),count=0;iteratePromises(Constructor,arr,function(idx,msg){msgs[idx]=msg,++count===len&&resolve(msgs)},reject)})}),builtInProp(Promise,"race",function(arr){let Constructor=this;return"[object Array]"!=ToString.call(arr)?Constructor.reject(TypeError("Not an array")):new Constructor(function(resolve,reject){if("function"!=typeof resolve||"function"!=typeof reject)throw TypeError("Not a function");iteratePromises(Constructor,arr,function(idx,msg){resolve(msg)},reject)})}),Promise});