mirror of
https://github.com/photonstorm/phaser
synced 2024-11-24 21:53:59 +00:00
1 line
No EOL
781 KiB
Text
1 line
No EOL
781 KiB
Text
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:////Users/rich/Documents/GitHub/phaser/node_modules/eventemitter3/index.js","webpack:////Users/rich/Documents/GitHub/phaser/src/data/DataManager.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/GameObject.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/Alpha.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/BlendMode.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/Depth.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/Flip.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/ScrollFactor.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/ToJSON.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/Transform.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/TransformMatrix.js","webpack:////Users/rich/Documents/GitHub/phaser/src/gameobjects/components/Visible.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/File.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/FileTypesManager.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/GetURL.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/MergeXHRSettings.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/MultiFile.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/XHRLoader.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/XHRSettings.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/const.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/filetypes/ImageFile.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/filetypes/JSONFile.js","webpack:////Users/rich/Documents/GitHub/phaser/src/loader/filetypes/TextFile.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/Clamp.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/Matrix4.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/Vector2.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/Wrap.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/angle/CounterClockwise.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/angle/Wrap.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/angle/WrapDegrees.js","webpack:////Users/rich/Documents/GitHub/phaser/src/math/const.js","webpack:////Users/rich/Documents/GitHub/phaser/src/plugins/BasePlugin.js","webpack:////Users/rich/Documents/GitHub/phaser/src/plugins/ScenePlugin.js","webpack:////Users/rich/Documents/GitHub/phaser/src/renderer/BlendModes.js","webpack:////Users/rich/Documents/GitHub/phaser/src/utils/Class.js","webpack:////Users/rich/Documents/GitHub/phaser/src/utils/NOOP.js","webpack:////Users/rich/Documents/GitHub/phaser/src/utils/object/Extend.js","webpack:////Users/rich/Documents/GitHub/phaser/src/utils/object/GetFastValue.js","webpack:////Users/rich/Documents/GitHub/phaser/src/utils/object/GetValue.js","webpack:////Users/rich/Documents/GitHub/phaser/src/utils/object/IsPlainObject.js","webpack:///./BaseSpinePlugin.js","webpack:///./SpineFile.js","webpack:///./SpineWebGLPlugin.js","webpack:///./gameobject/SpineGameObject.js","webpack:///./gameobject/SpineGameObjectRender.js","webpack:///./gameobject/SpineGameObjectWebGLRenderer.js","webpack:///./runtimes/spine-webgl.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yDAAyD,OAAO;AAChE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA,eAAe,YAAY;AAC3B;;AAEA;AACA,2DAA2D;AAC3D,+DAA+D;AAC/D,mEAAmE;AACnE,uEAAuE;AACvE;AACA,0DAA0D,SAAS;AACnE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,aAAa;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC/UA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,mDAAgB;;AAEpC;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,KAAK;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,gBAAgB,EAAE;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA2B,gBAAgB;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2DAA2D;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,EAAE;AACjB;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,aAAa;;AAEb;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC,eAAe,EAAE;AACjB,eAAe,KAAK;AACpB;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;;AAEA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC,eAAe,QAAQ;AACvB;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA,sCAAsC,kBAAkB;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,gBAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,EAAE;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;AAED;;;;;;;;;;;;AC7mBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,mDAAgB;AACpC,uBAAuB,mBAAO,CAAC,0EAAqB;AACpD,kBAAkB,mBAAO,CAAC,6DAAqB;AAC/C,mBAAmB,mBAAO,CAAC,mEAAe;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2DAA2D;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,EAAE;AACjB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,gBAAgB,EAAE;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAsC;AACrD,eAAe,gBAAgB;AAC/B,eAAe,QAAQ;AACvB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,sCAAsC,mBAAmB;;AAEzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChlBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,oDAAkB;;AAEtC;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,oCAAoC,aAAa;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;;;;;;;;;;;AChSA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,iBAAiB,mBAAO,CAAC,sEAA2B;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2BAA2B;AAC1C;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;;;;;;;;;;;ACjHA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,kCAAkC,WAAW;;AAE7C;;AAEA;AACA;;AAEA;;AAEA;;;;;;;;;;;;ACtFA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;;;;;;;;;;;AC7IA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,8BAA8B,OAAO;;AAErC;AACA;;AAEA;AACA;;AAEA;;AAEA;;;;;;;;;;;;ACpGA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,iBAAiB;AAC/B,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,8BAA8B;AACzC;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AChFA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,iBAAiB,mBAAO,CAAC,oDAAkB;AAC3C,sBAAsB,mBAAO,CAAC,iFAAmB;AACjD,gBAAgB,mBAAO,CAAC,8DAAuB;AAC/C,uBAAuB,mBAAO,CAAC,4EAA8B;;AAE7D;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;;AAErC;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;AACrC,kCAAkC,0CAA0C;AAC5E,mCAAmC,4CAA4C;;AAE/E;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,oCAAoC,aAAa;;AAEjD;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,oCAAoC,aAAa;;AAEjD;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;;AAErC;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,kCAAkC,WAAW;;AAE7C;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,kCAAkC,WAAW;;AAE7C;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,kCAAkC,WAAW;;AAE7C;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,kCAAkC,WAAW;;AAE7C;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA8C;AAC7D;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA,uCAAuC,oCAAoC;;AAE3E;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA8C;AAC7D,eAAe,8CAA8C;AAC7D;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA,uCAAuC,oCAAoC;AAC3E,yCAAyC,sCAAsC;;AAE/E;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;;;;;;;;;;;AC7cA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,sDAAmB;AACvC,cAAc,mBAAO,CAAC,wDAAoB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;AACA;AACA,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;AACrC,8BAA8B,OAAO;AACrC,+BAA+B,QAAQ;AACvC,+BAA+B,QAAQ;;AAEvC;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA8C;AAC7D,eAAe,8CAA8C;AAC7D;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA8C;AAC7D,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,+CAA+C;AAC9D;AACA,gBAAgB,+CAA+C;AAC/D;AACA;AACA;AACA,kCAAkC,UAAU,cAAc;;AAE1D;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA8C;AAC7D;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA,mCAAmC,wBAAwB;;AAE3D;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;;;;;;;;;ACx5BA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AClFA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,mDAAgB;AACpC,YAAY,mBAAO,CAAC,6CAAS;AAC7B,mBAAmB,mBAAO,CAAC,+EAA8B;AACzD,aAAa,mBAAO,CAAC,+CAAU;AAC/B,uBAAuB,mBAAO,CAAC,mEAAoB;AACnD,gBAAgB,mBAAO,CAAC,qDAAa;AACrC,kBAAkB,mBAAO,CAAC,yDAAe;;AAEzC;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,2BAA2B;AACzC,cAAc,0BAA0B;AACxC,cAAc,IAAI;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,WAAW;AACtB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,4GAA4G;AAC5G;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,2DAA2D;;AAE3D;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,IAAI;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,eAAe,IAAI;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kBAAkB;;AAEnD;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iEAAiE;AACjE;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,2BAA2B;AAC1C;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9kBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2BAA2B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;;AC1DA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,aAAa,mBAAO,CAAC,mEAAwB;AAC7C,kBAAkB,mBAAO,CAAC,yDAAe;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,kBAAkB;AAC7B;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA,mEAAmE;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACzCA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,mDAAgB;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;;;;;;;;;AC3LA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,uBAAuB,mBAAO,CAAC,mEAAoB;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,kBAAkB;AAC7B;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AC7DA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,2BAA2B;AACzC,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,mBAAmB;AACjC,cAAc,mBAAmB;AACjC,cAAc,mBAAmB;AACjC,cAAc,mBAAmB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA,qCAAqC,mBAAmB;AACxD,8BAA8B,cAAc;AAC5C,6BAA6B,WAAW;AACxC,iCAAiC,eAAe;AAChD,gCAAgC,aAAa;;AAE7C;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACvEA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;;ACjJA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,sDAAmB;AACvC,YAAY,mBAAO,CAAC,8CAAU;AAC9B,WAAW,mBAAO,CAAC,4CAAS;AAC5B,uBAAuB,mBAAO,CAAC,oEAAqB;AACpD,mBAAmB,mBAAO,CAAC,kFAAiC;AAC5D,oBAAoB,mBAAO,CAAC,oFAAkC;;AAE9D;AACA,aAAa,OAAO;AACpB;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB;;AAEA;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,yCAAyC;AACvD,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,iDAAiD;AAC5D,WAAW,gBAAgB;AAC3B,WAAW,kBAAkB;AAC7B,WAAW,yCAAyC;AACpD;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2FAA2F;AACtG,WAAW,gBAAgB;AAC3B,WAAW,kBAAkB;AAC7B;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;;ACjSA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,sDAAmB;AACvC,YAAY,mBAAO,CAAC,8CAAU;AAC9B,WAAW,mBAAO,CAAC,4CAAS;AAC5B,uBAAuB,mBAAO,CAAC,oEAAqB;AACpD,mBAAmB,mBAAO,CAAC,kFAAiC;AAC5D,eAAe,mBAAO,CAAC,0EAA6B;AACpD,oBAAoB,mBAAO,CAAC,oFAAkC;;AAE9D;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,WAAW;AACzB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,gDAAgD;AAC3D,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,QAAQ;AACR,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yFAAyF;AACpG,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;;ACzOA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,sDAAmB;AACvC,YAAY,mBAAO,CAAC,8CAAU;AAC9B,WAAW,mBAAO,CAAC,4CAAS;AAC5B,uBAAuB,mBAAO,CAAC,oEAAqB;AACpD,mBAAmB,mBAAO,CAAC,kFAAiC;AAC5D,oBAAoB,mBAAO,CAAC,oFAAkC;;AAE9D;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,gDAAgD;AAC3D,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yFAAyF;AACpG,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;;ACjLA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;;AAEA,YAAY,mBAAO,CAAC,mDAAgB;;AAEpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAA0C;AACzD;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAA0C;AACzD;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAA0C;AACzD,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,oBAAoB;AACnC,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,oBAAoB;AACnC,eAAe,oBAAoB;AACnC,eAAe,oBAAoB;AACnC,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC;;AAED;AACA;;AAEA;;;;;;;;;;;;AC/6CA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;;AAEA,YAAY,mBAAO,CAAC,mDAAgB;;AAEpC;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,OAAO;;AAEzC;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA,8BAA8B,OAAO;;AAErC;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA,6BAA6B,YAAY;;AAEzC;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,OAAO;AACtB;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA,8BAA8B,OAAO;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;;;;;;;;;;;;ACjkBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,4CAAU;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjCA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,eAAe,mBAAO,CAAC,0CAAS;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,WAAW,mBAAO,CAAC,0CAAS;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;;AChEA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA,YAAY,mBAAO,CAAC,mDAAgB;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;;;;;;;;;AC9KA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA,iBAAiB,mBAAO,CAAC,wDAAc;AACvC,YAAY,mBAAO,CAAC,mDAAgB;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,6BAA6B;AACxC;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;;;;;;;;;ACjFA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChJA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;ACvOA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,oBAAoB,mBAAO,CAAC,mEAAiB;;AAE7C,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,YAAY,OAAO;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5FA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA,8CAA8C,aAAa,qBAAqB;AAChF;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA,YAAY,EAAE,oBAAoB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA,YAAY,EAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChEA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C;AACA;;AAEA;;;;;;;;;;;;ACjDA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,6DAA0B;AAC9C,kBAAkB,mBAAO,CAAC,6EAAkC;AAC5D,gBAAgB,mBAAO,CAAC,mCAAa;AACrC,sBAAsB,mBAAO,CAAC,qEAA8B;;AAE5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,6BAA6B;AACxC;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,gBAAgB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,iBAAiB;AAChC;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,gBAAgB;AAChB,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA,gBAAgB;AAChB,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA,gBAAgB;AAChB,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;;;;;;;;;AC7LA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,6DAA0B;AAC9C,mBAAmB,mBAAO,CAAC,yFAAwC;AACnE,gBAAgB,mBAAO,CAAC,8FAA4C;AACpE,oBAAoB,mBAAO,CAAC,2FAAyC;AACrE,eAAe,mBAAO,CAAC,4FAA2C;AAClE,gBAAgB,mBAAO,CAAC,0EAAkC;AAC1D,eAAe,mBAAO,CAAC,4FAA2C;;AAElE;AACA,aAAa,OAAO;AACpB;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,sDAAsD;AACjE,WAAW,gBAAgB;AAC3B,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,WAAW,kBAAkB;AAC7B;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+BAA+B,oBAAoB;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,qBAAqB;AACpD;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,2BAA2B,uBAAuB;AAClD;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2FAA2F;AACtG,WAAW,gBAAgB;AAC3B,WAAW,OAAO;AAClB,WAAW,kBAAkB;AAC7B,WAAW,kBAAkB;AAC7B;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;;;;;;;;;;;;ACpUA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,6DAA0B;AAC9C,sBAAsB,mBAAO,CAAC,+CAAmB;AACjD,iBAAiB,mBAAO,CAAC,6CAAY;AACrC,cAAc,mBAAO,CAAC,+DAA2B;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,6BAA6B;AACxC;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA,CAAC;;AAED;;;;;;;;;;;;ACzFA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,YAAY,mBAAO,CAAC,gEAA6B;AACjD,sBAAsB,mBAAO,CAAC,kGAA8C;AAC5E,0BAA0B,mBAAO,CAAC,0GAAkD;AACpF,sBAAsB,mBAAO,CAAC,kGAA8C;AAC5E,qBAAqB,mBAAO,CAAC,gGAA6C;AAC1E,6BAA6B,mBAAO,CAAC,gHAAqD;AAC1F,0BAA0B,mBAAO,CAAC,0GAAkD;AACpF,wBAAwB,mBAAO,CAAC,sGAAgD;AAChF,iBAAiB,mBAAO,CAAC,sFAAwC;AACjE,4BAA4B,mBAAO,CAAC,sEAAyB;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,6BAA6B;AACxC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,CAAC;;AAED;;;;;;;;;;;;ACzSA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,kBAAkB,mBAAO,CAAC,8DAA4B;AACtD,mBAAmB,mBAAO,CAAC,8DAA4B;;AAEvD,IAAI,IAAqB;AACzB;AACA,kBAAkB,mBAAO,CAAC,oFAAgC;AAC1D;;AAEA,IAAI,KAAsB;AAC1B,EAEC;;AAED;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,uBAAuB,mBAAO,CAAC,gGAA6C;;AAE5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;AACjD,WAAW,mCAAmC;AAC9C,WAAW,OAAO;AAClB,WAAW,8BAA8B;AACzC,WAAW,8CAA8C;AACzD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxHA;AACA;;AAEA;AACA;AACA,IAAI,gBAAgB,sCAAsC,iBAAiB,EAAE;AAC7E,mBAAmB,uDAAuD;AAC1E;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,WAAW;AAC1D;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gDAAgD;AAClD;AACA;AACA;AACA;AACA,EAAE,+DAA+D;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,+DAA+D;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,6CAA6C;AACtD;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,yBAAyB,EAAE;AAChF;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oBAAoB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sDAAsD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,+CAA+C,0BAA0B;AACzE;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sDAAsD;AACxD,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kEAAkE;AACpE,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE,+DAA+D;AACjE;AACA;AACA;AACA;AACA;AACA,EAAE,4DAA4D;AAC9D;AACA;AACA;AACA;AACA;AACA,EAAE,yDAAyD;AAC3D,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gCAAgC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;AACA,kBAAkB,sCAAsC;AACxD;AACA;AACA;AACA;AACA,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA,kBAAkB,eAAe;AACjC;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,OAAO;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,OAAO;AAClE;AACA;AACA;AACA,yBAAyB,kBAAkB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kEAAkE;AACpE;AACA;AACA;AACA;AACA;AACA,EAAE,4DAA4D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;AACtE,4DAA4D;AAC5D,+CAA+C;AAC/C;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,gBAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B,sBAAsB,OAAO;AAC7B,sBAAsB,OAAO;AAC7B,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA,0BAA0B,WAAW;AACrC;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA,0BAA0B,WAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,WAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,WAAW;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qEAAqE;AACvE,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,UAAU;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,mDAAmD;AACnD;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE,6CAA6C,sDAAsD;AACnG,6CAA6C,qDAAqD;AAClG;AACA;AACA;AACA;AACA,6CAA6C,sBAAsB;AACnE,4CAA4C,4BAA4B;AACxE,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA,4CAA4C,qBAAqB;AACjE;AACA;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B,UAAU;AACpC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG,oFAAoF;AACvF,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD,iCAAiC,qBAAqB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oBAAoB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,uBAAuB;AAC/E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4BAA4B;AACpE,oCAAoC,qBAAqB;AACzD,kCAAkC,mBAAmB;AACrD;AACA;AACA;AACA;AACA;AACA,wCAAwC,4BAA4B;AACpE,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,wCAAwC,4BAA4B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,wCAAwC,4BAA4B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,8BAA8B,cAAc;AAC5C;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,yDAAyD;AAC5D,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,qBAAqB;AACnE,mDAAmD,0BAA0B;AAC7E,qDAAqD,4BAA4B;AACjF,yDAAyD,sBAAsB;AAC/E,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,8CAA8C,kDAAkD,iDAAiD,+BAA+B,mCAAmC,0BAA0B,2CAA2C,mDAAmD,8EAA8E,WAAW;AACne,qGAAqG,2FAA2F,mCAAmC,sCAAsC,0BAA0B,uEAAuE,WAAW;AACrX;AACA;AACA;AACA,+DAA+D,8CAA8C,+CAA+C,kDAAkD,iDAAiD,+BAA+B,8BAA8B,mCAAmC,0BAA0B,2CAA2C,2CAA2C,mDAAmD,8EAA8E,WAAW;AAC3lB,qGAAqG,2FAA2F,mCAAmC,mCAAmC,sCAAsC,0BAA0B,8DAA8D,oDAAoD,8HAA8H,WAAW;AACjkB;AACA;AACA;AACA,+DAA+D,8CAA8C,iDAAiD,+BAA+B,0BAA0B,2CAA2C,8EAA8E,WAAW;AAC3V,qGAAqG,2FAA2F,0BAA0B,mCAAmC,WAAW;AACxQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,8BAA8B,cAAc;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,sDAAsD;AACzD,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,SAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qBAAqB;AACzD,kCAAkC,mBAAmB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B,uBAAuB,OAAO;AAC9B,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB,iBAAiB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4BAA4B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE,0CAA0C;AAC5C,CAAC,sBAAsB;AACvB;;AAEA;AACA;AACA,CAAC,e","file":"SpineWebGLPlugin.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(\"SpineWebGLPlugin\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SpineWebGLPlugin\"] = factory();\n\telse\n\t\troot[\"SpineWebGLPlugin\"] = 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 = \"./SpineWebGLPlugin.js\");\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../utils/Class');\n\n/**\n * @callback DataEachCallback\n *\n * @param {*} parent - The parent object of the DataManager.\n * @param {string} key - The key of the value.\n * @param {*} value - The value.\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the game object, key, and data.\n */\n\n/**\n * @classdesc\n * The Data Component features a means to store pieces of data specific to a Game Object, System or Plugin.\n * You can then search, query it, and retrieve the data. The parent must either extend EventEmitter,\n * or have a property called `events` that is an instance of it.\n *\n * @class DataManager\n * @memberof Phaser.Data\n * @constructor\n * @since 3.0.0\n *\n * @param {object} parent - The object that this DataManager belongs to.\n * @param {Phaser.Events.EventEmitter} eventEmitter - The DataManager's event emitter.\n */\nvar DataManager = new Class({\n\n initialize:\n\n function DataManager (parent, eventEmitter)\n {\n /**\n * The object that this DataManager belongs to.\n *\n * @name Phaser.Data.DataManager#parent\n * @type {*}\n * @since 3.0.0\n */\n this.parent = parent;\n\n /**\n * The DataManager's event emitter.\n *\n * @name Phaser.Data.DataManager#events\n * @type {Phaser.Events.EventEmitter}\n * @since 3.0.0\n */\n this.events = eventEmitter;\n\n if (!eventEmitter)\n {\n this.events = (parent.events) ? parent.events : parent;\n }\n\n /**\n * The data list.\n *\n * @name Phaser.Data.DataManager#list\n * @type {Object.<string, *>}\n * @default {}\n * @since 3.0.0\n */\n this.list = {};\n\n /**\n * The public values list. You can use this to access anything you have stored\n * in this Data Manager. For example, if you set a value called `gold` you can\n * access it via:\n *\n * ```javascript\n * this.data.values.gold;\n * ```\n *\n * You can also modify it directly:\n * \n * ```javascript\n * this.data.values.gold += 1000;\n * ```\n *\n * Doing so will emit a `setdata` event from the parent of this Data Manager.\n * \n * Do not modify this object directly. Adding properties directly to this object will not\n * emit any events. Always use `DataManager.set` to create new items the first time around.\n *\n * @name Phaser.Data.DataManager#values\n * @type {Object.<string, *>}\n * @default {}\n * @since 3.10.0\n */\n this.values = {};\n\n /**\n * Whether setting data is frozen for this DataManager.\n *\n * @name Phaser.Data.DataManager#_frozen\n * @type {boolean}\n * @private\n * @default false\n * @since 3.0.0\n */\n this._frozen = false;\n\n if (!parent.hasOwnProperty('sys') && this.events)\n {\n this.events.once('destroy', this.destroy, this);\n }\n },\n\n /**\n * Retrieves the value for the given key, or undefined if it doesn't exist.\n *\n * You can also access values via the `values` object. For example, if you had a key called `gold` you can do either:\n * \n * ```javascript\n * this.data.get('gold');\n * ```\n *\n * Or access the value directly:\n * \n * ```javascript\n * this.data.values.gold;\n * ```\n *\n * You can also pass in an array of keys, in which case an array of values will be returned:\n * \n * ```javascript\n * this.data.get([ 'gold', 'armor', 'health' ]);\n * ```\n *\n * This approach is useful for destructuring arrays in ES6.\n *\n * @method Phaser.Data.DataManager#get\n * @since 3.0.0\n *\n * @param {(string|string[])} key - The key of the value to retrieve, or an array of keys.\n *\n * @return {*} The value belonging to the given key, or an array of values, the order of which will match the input array.\n */\n get: function (key)\n {\n var list = this.list;\n\n if (Array.isArray(key))\n {\n var output = [];\n\n for (var i = 0; i < key.length; i++)\n {\n output.push(list[key[i]]);\n }\n\n return output;\n }\n else\n {\n return list[key];\n }\n },\n\n /**\n * Retrieves all data values in a new object.\n *\n * @method Phaser.Data.DataManager#getAll\n * @since 3.0.0\n *\n * @return {Object.<string, *>} All data values.\n */\n getAll: function ()\n {\n var results = {};\n\n for (var key in this.list)\n {\n if (this.list.hasOwnProperty(key))\n {\n results[key] = this.list[key];\n }\n }\n\n return results;\n },\n\n /**\n * Queries the DataManager for the values of keys matching the given regular expression.\n *\n * @method Phaser.Data.DataManager#query\n * @since 3.0.0\n *\n * @param {RegExp} search - A regular expression object. If a non-RegExp object obj is passed, it is implicitly converted to a RegExp by using new RegExp(obj).\n *\n * @return {Object.<string, *>} The values of the keys matching the search string.\n */\n query: function (search)\n {\n var results = {};\n\n for (var key in this.list)\n {\n if (this.list.hasOwnProperty(key) && key.match(search))\n {\n results[key] = this.list[key];\n }\n }\n\n return results;\n },\n\n /**\n * Sets a value for the given key. If the key doesn't already exist in the Data Manager then it is created.\n * \n * ```javascript\n * data.set('name', 'Red Gem Stone');\n * ```\n *\n * You can also pass in an object of key value pairs as the first argument:\n *\n * ```javascript\n * data.set({ name: 'Red Gem Stone', level: 2, owner: 'Link', gold: 50 });\n * ```\n *\n * To get a value back again you can call `get`:\n * \n * ```javascript\n * data.get('gold');\n * ```\n * \n * Or you can access the value directly via the `values` property, where it works like any other variable:\n * \n * ```javascript\n * data.values.gold += 50;\n * ```\n *\n * When the value is first set, a `setdata` event is emitted.\n *\n * If the key already exists, a `changedata` event is emitted instead, along an event named after the key.\n * For example, if you updated an existing key called `PlayerLives` then it would emit the event `changedata_PlayerLives`.\n * These events will be emitted regardless if you use this method to set the value, or the direct `values` setter.\n *\n * Please note that the data keys are case-sensitive and must be valid JavaScript Object property strings.\n * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\n *\n * @method Phaser.Data.DataManager#set\n * @since 3.0.0\n *\n * @param {(string|object)} key - The key to set the value for. Or an object or key value pairs. If an object the `data` argument is ignored.\n * @param {*} data - The value to set for the given key. If an object is provided as the key this argument is ignored.\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n set: function (key, data)\n {\n if (this._frozen)\n {\n return this;\n }\n\n if (typeof key === 'string')\n {\n return this.setValue(key, data);\n }\n else\n {\n for (var entry in key)\n {\n this.setValue(entry, key[entry]);\n }\n }\n\n return this;\n },\n\n /**\n * Internal value setter, called automatically by the `set` method.\n *\n * @method Phaser.Data.DataManager#setValue\n * @private\n * @since 3.10.0\n *\n * @param {string} key - The key to set the value for.\n * @param {*} data - The value to set.\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n setValue: function (key, data)\n {\n if (this._frozen)\n {\n return this;\n }\n\n if (this.has(key))\n {\n // Hit the key getter, which will in turn emit the events.\n this.values[key] = data;\n }\n else\n {\n var _this = this;\n var list = this.list;\n var events = this.events;\n var parent = this.parent;\n\n Object.defineProperty(this.values, key, {\n\n enumerable: true,\n \n configurable: true,\n\n get: function ()\n {\n return list[key];\n },\n\n set: function (value)\n {\n if (!_this._frozen)\n {\n var previousValue = list[key];\n list[key] = value;\n\n events.emit('changedata', parent, key, value, previousValue);\n events.emit('changedata_' + key, parent, value, previousValue);\n }\n }\n\n });\n\n list[key] = data;\n\n events.emit('setdata', parent, key, data);\n }\n\n return this;\n },\n\n /**\n * Passes all data entries to the given callback.\n *\n * @method Phaser.Data.DataManager#each\n * @since 3.0.0\n *\n * @param {DataEachCallback} callback - The function to call.\n * @param {*} [context] - Value to use as `this` when executing callback.\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the game object, key, and data.\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n each: function (callback, context)\n {\n var args = [ this.parent, null, undefined ];\n\n for (var i = 1; i < arguments.length; i++)\n {\n args.push(arguments[i]);\n }\n\n for (var key in this.list)\n {\n args[1] = key;\n args[2] = this.list[key];\n\n callback.apply(context, args);\n }\n\n return this;\n },\n\n /**\n * Merge the given object of key value pairs into this DataManager.\n *\n * Any newly created values will emit a `setdata` event. Any updated values (see the `overwrite` argument)\n * will emit a `changedata` event.\n *\n * @method Phaser.Data.DataManager#merge\n * @since 3.0.0\n *\n * @param {Object.<string, *>} data - The data to merge.\n * @param {boolean} [overwrite=true] - Whether to overwrite existing data. Defaults to true.\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n merge: function (data, overwrite)\n {\n if (overwrite === undefined) { overwrite = true; }\n\n // Merge data from another component into this one\n for (var key in data)\n {\n if (data.hasOwnProperty(key) && (overwrite || (!overwrite && !this.has(key))))\n {\n this.setValue(key, data[key]);\n }\n }\n\n return this;\n },\n\n /**\n * Remove the value for the given key.\n *\n * If the key is found in this Data Manager it is removed from the internal lists and a\n * `removedata` event is emitted.\n * \n * You can also pass in an array of keys, in which case all keys in the array will be removed:\n * \n * ```javascript\n * this.data.remove([ 'gold', 'armor', 'health' ]);\n * ```\n *\n * @method Phaser.Data.DataManager#remove\n * @since 3.0.0\n *\n * @param {(string|string[])} key - The key to remove, or an array of keys to remove.\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n remove: function (key)\n {\n if (this._frozen)\n {\n return this;\n }\n\n if (Array.isArray(key))\n {\n for (var i = 0; i < key.length; i++)\n {\n this.removeValue(key[i]);\n }\n }\n else\n {\n return this.removeValue(key);\n }\n\n return this;\n },\n\n /**\n * Internal value remover, called automatically by the `remove` method.\n *\n * @method Phaser.Data.DataManager#removeValue\n * @private\n * @since 3.10.0\n *\n * @param {string} key - The key to set the value for.\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n removeValue: function (key)\n {\n if (this.has(key))\n {\n var data = this.list[key];\n\n delete this.list[key];\n delete this.values[key];\n\n this.events.emit('removedata', this.parent, key, data);\n }\n\n return this;\n },\n\n /**\n * Retrieves the data associated with the given 'key', deletes it from this Data Manager, then returns it.\n *\n * @method Phaser.Data.DataManager#pop\n * @since 3.0.0\n *\n * @param {string} key - The key of the value to retrieve and delete.\n *\n * @return {*} The value of the given key.\n */\n pop: function (key)\n {\n var data = undefined;\n\n if (!this._frozen && this.has(key))\n {\n data = this.list[key];\n\n delete this.list[key];\n delete this.values[key];\n\n this.events.emit('removedata', this, key, data);\n }\n\n return data;\n },\n\n /**\n * Determines whether the given key is set in this Data Manager.\n * \n * Please note that the keys are case-sensitive and must be valid JavaScript Object property strings.\n * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\n *\n * @method Phaser.Data.DataManager#has\n * @since 3.0.0\n *\n * @param {string} key - The key to check.\n *\n * @return {boolean} Returns `true` if the key exists, otherwise `false`.\n */\n has: function (key)\n {\n return this.list.hasOwnProperty(key);\n },\n\n /**\n * Freeze or unfreeze this Data Manager. A frozen Data Manager will block all attempts\n * to create new values or update existing ones.\n *\n * @method Phaser.Data.DataManager#setFreeze\n * @since 3.0.0\n *\n * @param {boolean} value - Whether to freeze or unfreeze the Data Manager.\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n setFreeze: function (value)\n {\n this._frozen = value;\n\n return this;\n },\n\n /**\n * Delete all data in this Data Manager and unfreeze it.\n *\n * @method Phaser.Data.DataManager#reset\n * @since 3.0.0\n *\n * @return {Phaser.Data.DataManager} This DataManager object.\n */\n reset: function ()\n {\n for (var key in this.list)\n {\n delete this.list[key];\n delete this.values[key];\n }\n\n this._frozen = false;\n\n return this;\n },\n\n /**\n * Destroy this data manager.\n *\n * @method Phaser.Data.DataManager#destroy\n * @since 3.0.0\n */\n destroy: function ()\n {\n this.reset();\n\n this.events.off('changedata');\n this.events.off('setdata');\n this.events.off('removedata');\n\n this.parent = null;\n },\n\n /**\n * Gets or sets the frozen state of this Data Manager.\n * A frozen Data Manager will block all attempts to create new values or update existing ones.\n *\n * @name Phaser.Data.DataManager#freeze\n * @type {boolean}\n * @since 3.0.0\n */\n freeze: {\n\n get: function ()\n {\n return this._frozen;\n },\n\n set: function (value)\n {\n this._frozen = (value) ? true : false;\n }\n\n },\n\n /**\n * Return the total number of entries in this Data Manager.\n *\n * @name Phaser.Data.DataManager#count\n * @type {integer}\n * @since 3.0.0\n */\n count: {\n\n get: function ()\n {\n var i = 0;\n\n for (var key in this.list)\n {\n if (this.list[key] !== undefined)\n {\n i++;\n }\n }\n\n return i;\n }\n\n }\n\n});\n\nmodule.exports = DataManager;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../utils/Class');\nvar ComponentsToJSON = require('./components/ToJSON');\nvar DataManager = require('../data/DataManager');\nvar EventEmitter = require('eventemitter3');\n\n/**\n * @classdesc\n * The base class that all Game Objects extend.\n * You don't create GameObjects directly and they cannot be added to the display list.\n * Instead, use them as the base for your own custom classes.\n *\n * @class GameObject\n * @memberof Phaser.GameObjects\n * @extends Phaser.Events.EventEmitter\n * @constructor\n * @since 3.0.0\n *\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.\n * @param {string} type - A textual representation of the type of Game Object, i.e. `sprite`.\n */\nvar GameObject = new Class({\n\n Extends: EventEmitter,\n\n initialize:\n\n function GameObject (scene, type)\n {\n EventEmitter.call(this);\n\n /**\n * The Scene to which this Game Object belongs.\n * Game Objects can only belong to one Scene.\n *\n * @name Phaser.GameObjects.GameObject#scene\n * @type {Phaser.Scene}\n * @protected\n * @since 3.0.0\n */\n this.scene = scene;\n\n /**\n * A textual representation of this Game Object, i.e. `sprite`.\n * Used internally by Phaser but is available for your own custom classes to populate.\n *\n * @name Phaser.GameObjects.GameObject#type\n * @type {string}\n * @since 3.0.0\n */\n this.type = type;\n\n /**\n * The parent Container of this Game Object, if it has one.\n *\n * @name Phaser.GameObjects.GameObject#parentContainer\n * @type {Phaser.GameObjects.Container}\n * @since 3.4.0\n */\n this.parentContainer = null;\n\n /**\n * The name of this Game Object.\n * Empty by default and never populated by Phaser, this is left for developers to use.\n *\n * @name Phaser.GameObjects.GameObject#name\n * @type {string}\n * @default ''\n * @since 3.0.0\n */\n this.name = '';\n\n /**\n * The active state of this Game Object.\n * A Game Object with an active state of `true` is processed by the Scenes UpdateList, if added to it.\n * An active object is one which is having its logic and internal systems updated.\n *\n * @name Phaser.GameObjects.GameObject#active\n * @type {boolean}\n * @default true\n * @since 3.0.0\n */\n this.active = true;\n\n /**\n * The Tab Index of the Game Object.\n * Reserved for future use by plugins and the Input Manager.\n *\n * @name Phaser.GameObjects.GameObject#tabIndex\n * @type {integer}\n * @default -1\n * @since 3.0.0\n */\n this.tabIndex = -1;\n\n /**\n * A Data Manager.\n * It allows you to store, query and get key/value paired information specific to this Game Object.\n * `null` by default. Automatically created if you use `getData` or `setData` or `setDataEnabled`.\n *\n * @name Phaser.GameObjects.GameObject#data\n * @type {Phaser.Data.DataManager}\n * @default null\n * @since 3.0.0\n */\n this.data = null;\n\n /**\n * The flags that are compared against `RENDER_MASK` to determine if this Game Object will render or not.\n * The bits are 0001 | 0010 | 0100 | 1000 set by the components Visible, Alpha, Transform and Texture respectively.\n * If those components are not used by your custom class then you can use this bitmask as you wish.\n *\n * @name Phaser.GameObjects.GameObject#renderFlags\n * @type {integer}\n * @default 15\n * @since 3.0.0\n */\n this.renderFlags = 15;\n\n /**\n * A bitmask that controls if this Game Object is drawn by a Camera or not.\n * Not usually set directly, instead call `Camera.ignore`, however you can\n * set this property directly using the Camera.id property:\n *\n * @example\n * this.cameraFilter |= camera.id\n *\n * @name Phaser.GameObjects.GameObject#cameraFilter\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n this.cameraFilter = 0;\n\n /**\n * If this Game Object is enabled for input then this property will contain an InteractiveObject instance.\n * Not usually set directly. Instead call `GameObject.setInteractive()`.\n *\n * @name Phaser.GameObjects.GameObject#input\n * @type {?Phaser.Input.InteractiveObject}\n * @default null\n * @since 3.0.0\n */\n this.input = null;\n\n /**\n * If this Game Object is enabled for physics then this property will contain a reference to a Physics Body.\n *\n * @name Phaser.GameObjects.GameObject#body\n * @type {?(object|Phaser.Physics.Arcade.Body|Phaser.Physics.Impact.Body)}\n * @default null\n * @since 3.0.0\n */\n this.body = null;\n\n /**\n * This Game Object will ignore all calls made to its destroy method if this flag is set to `true`.\n * This includes calls that may come from a Group, Container or the Scene itself.\n * While it allows you to persist a Game Object across Scenes, please understand you are entirely\n * responsible for managing references to and from this Game Object.\n *\n * @name Phaser.GameObjects.GameObject#ignoreDestroy\n * @type {boolean}\n * @default false\n * @since 3.5.0\n */\n this.ignoreDestroy = false;\n\n // Tell the Scene to re-sort the children\n scene.sys.queueDepthSort();\n },\n\n /**\n * Sets the `active` property of this Game Object and returns this Game Object for further chaining.\n * A Game Object with its `active` property set to `true` will be updated by the Scenes UpdateList.\n *\n * @method Phaser.GameObjects.GameObject#setActive\n * @since 3.0.0\n *\n * @param {boolean} value - True if this Game Object should be set as active, false if not.\n *\n * @return {this} This GameObject.\n */\n setActive: function (value)\n {\n this.active = value;\n\n return this;\n },\n\n /**\n * Sets the `name` property of this Game Object and returns this Game Object for further chaining.\n * The `name` property is not populated by Phaser and is presented for your own use.\n *\n * @method Phaser.GameObjects.GameObject#setName\n * @since 3.0.0\n *\n * @param {string} value - The name to be given to this Game Object.\n *\n * @return {this} This GameObject.\n */\n setName: function (value)\n {\n this.name = value;\n\n return this;\n },\n\n /**\n * Adds a Data Manager component to this Game Object.\n *\n * @method Phaser.GameObjects.GameObject#setDataEnabled\n * @since 3.0.0\n * @see Phaser.Data.DataManager\n *\n * @return {this} This GameObject.\n */\n setDataEnabled: function ()\n {\n if (!this.data)\n {\n this.data = new DataManager(this);\n }\n\n return this;\n },\n\n /**\n * Allows you to store a key value pair within this Game Objects Data Manager.\n *\n * If the Game Object has not been enabled for data (via `setDataEnabled`) then it will be enabled\n * before setting the value.\n *\n * If the key doesn't already exist in the Data Manager then it is created.\n *\n * ```javascript\n * sprite.setData('name', 'Red Gem Stone');\n * ```\n *\n * You can also pass in an object of key value pairs as the first argument:\n *\n * ```javascript\n * sprite.setData({ name: 'Red Gem Stone', level: 2, owner: 'Link', gold: 50 });\n * ```\n *\n * To get a value back again you can call `getData`:\n *\n * ```javascript\n * sprite.getData('gold');\n * ```\n *\n * Or you can access the value directly via the `values` property, where it works like any other variable:\n *\n * ```javascript\n * sprite.data.values.gold += 50;\n * ```\n *\n * When the value is first set, a `setdata` event is emitted from this Game Object.\n *\n * If the key already exists, a `changedata` event is emitted instead, along an event named after the key.\n * For example, if you updated an existing key called `PlayerLives` then it would emit the event `changedata_PlayerLives`.\n * These events will be emitted regardless if you use this method to set the value, or the direct `values` setter.\n *\n * Please note that the data keys are case-sensitive and must be valid JavaScript Object property strings.\n * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\n *\n * @method Phaser.GameObjects.GameObject#setData\n * @since 3.0.0\n *\n * @param {(string|object)} key - The key to set the value for. Or an object or key value pairs. If an object the `data` argument is ignored.\n * @param {*} data - The value to set for the given key. If an object is provided as the key this argument is ignored.\n *\n * @return {this} This GameObject.\n */\n setData: function (key, value)\n {\n if (!this.data)\n {\n this.data = new DataManager(this);\n }\n\n this.data.set(key, value);\n\n return this;\n },\n\n /**\n * Retrieves the value for the given key in this Game Objects Data Manager, or undefined if it doesn't exist.\n *\n * You can also access values via the `values` object. For example, if you had a key called `gold` you can do either:\n *\n * ```javascript\n * sprite.getData('gold');\n * ```\n *\n * Or access the value directly:\n *\n * ```javascript\n * sprite.data.values.gold;\n * ```\n *\n * You can also pass in an array of keys, in which case an array of values will be returned:\n *\n * ```javascript\n * sprite.getData([ 'gold', 'armor', 'health' ]);\n * ```\n *\n * This approach is useful for destructuring arrays in ES6.\n *\n * @method Phaser.GameObjects.GameObject#getData\n * @since 3.0.0\n *\n * @param {(string|string[])} key - The key of the value to retrieve, or an array of keys.\n *\n * @return {*} The value belonging to the given key, or an array of values, the order of which will match the input array.\n */\n getData: function (key)\n {\n if (!this.data)\n {\n this.data = new DataManager(this);\n }\n\n return this.data.get(key);\n },\n\n /**\n * Pass this Game Object to the Input Manager to enable it for Input.\n *\n * Input works by using hit areas, these are nearly always geometric shapes, such as rectangles or circles, that act as the hit area\n * for the Game Object. However, you can provide your own hit area shape and callback, should you wish to handle some more advanced\n * input detection.\n *\n * If no arguments are provided it will try and create a rectangle hit area based on the texture frame the Game Object is using. If\n * this isn't a texture-bound object, such as a Graphics or BitmapText object, this will fail, and you'll need to provide a specific\n * shape for it to use.\n *\n * You can also provide an Input Configuration Object as the only argument to this method.\n *\n * @method Phaser.GameObjects.GameObject#setInteractive\n * @since 3.0.0\n *\n * @param {(Phaser.Input.InputConfiguration|any)} [shape] - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\n * @param {HitAreaCallback} [callback] - A callback to be invoked when the Game Object is interacted with. If you provide a shape you must also provide a callback.\n * @param {boolean} [dropZone=false] - Should this Game Object be treated as a drop zone target?\n *\n * @return {this} This GameObject.\n */\n setInteractive: function (shape, callback, dropZone)\n {\n this.scene.sys.input.enable(this, shape, callback, dropZone);\n\n return this;\n },\n\n /**\n * If this Game Object has previously been enabled for input, this will disable it.\n *\n * An object that is disabled for input stops processing or being considered for\n * input events, but can be turned back on again at any time by simply calling\n * `setInteractive()` with no arguments provided.\n *\n * If want to completely remove interaction from this Game Object then use `removeInteractive` instead.\n *\n * @method Phaser.GameObjects.GameObject#disableInteractive\n * @since 3.7.0\n *\n * @return {this} This GameObject.\n */\n disableInteractive: function ()\n {\n if (this.input)\n {\n this.input.enabled = false;\n }\n\n return this;\n },\n\n /**\n * If this Game Object has previously been enabled for input, this will queue it\n * for removal, causing it to no longer be interactive. The removal happens on\n * the next game step, it is not immediate.\n *\n * The Interactive Object that was assigned to this Game Object will be destroyed,\n * removed from the Input Manager and cleared from this Game Object.\n *\n * If you wish to re-enable this Game Object at a later date you will need to\n * re-create its InteractiveObject by calling `setInteractive` again.\n *\n * If you wish to only temporarily stop an object from receiving input then use\n * `disableInteractive` instead, as that toggles the interactive state, where-as\n * this erases it completely.\n * \n * If you wish to resize a hit area, don't remove and then set it as being\n * interactive. Instead, access the hitarea object directly and resize the shape\n * being used. I.e.: `sprite.input.hitArea.setSize(width, height)` (assuming the\n * shape is a Rectangle, which it is by default.)\n *\n * @method Phaser.GameObjects.GameObject#removeInteractive\n * @since 3.7.0\n *\n * @return {this} This GameObject.\n */\n removeInteractive: function ()\n {\n this.scene.sys.input.clear(this);\n\n this.input = undefined;\n\n return this;\n },\n\n /**\n * To be overridden by custom GameObjects. Allows base objects to be used in a Pool.\n *\n * @method Phaser.GameObjects.GameObject#update\n * @since 3.0.0\n *\n * @param {...*} [args] - args\n */\n update: function ()\n {\n },\n\n /**\n * Returns a JSON representation of the Game Object.\n *\n * @method Phaser.GameObjects.GameObject#toJSON\n * @since 3.0.0\n *\n * @return {JSONGameObject} A JSON representation of the Game Object.\n */\n toJSON: function ()\n {\n return ComponentsToJSON(this);\n },\n\n /**\n * Compares the renderMask with the renderFlags to see if this Game Object will render or not.\n * Also checks the Game Object against the given Cameras exclusion list.\n *\n * @method Phaser.GameObjects.GameObject#willRender\n * @since 3.0.0\n *\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to check against this Game Object.\n *\n * @return {boolean} True if the Game Object should be rendered, otherwise false.\n */\n willRender: function (camera)\n {\n return !(GameObject.RENDER_MASK !== this.renderFlags || (this.cameraFilter > 0 && (this.cameraFilter & camera.id)));\n },\n\n /**\n * Returns an array containing the display list index of either this Game Object, or if it has one,\n * its parent Container. It then iterates up through all of the parent containers until it hits the\n * root of the display list (which is index 0 in the returned array).\n *\n * Used internally by the InputPlugin but also useful if you wish to find out the display depth of\n * this Game Object and all of its ancestors.\n *\n * @method Phaser.GameObjects.GameObject#getIndexList\n * @since 3.4.0\n *\n * @return {integer[]} An array of display list position indexes.\n */\n getIndexList: function ()\n {\n // eslint-disable-next-line consistent-this\n var child = this;\n var parent = this.parentContainer;\n\n var indexes = [];\n\n while (parent)\n {\n // indexes.unshift([parent.getIndex(child), parent.name]);\n indexes.unshift(parent.getIndex(child));\n\n child = parent;\n\n if (!parent.parentContainer)\n {\n break;\n }\n else\n {\n parent = parent.parentContainer;\n }\n }\n\n // indexes.unshift([this.scene.sys.displayList.getIndex(child), 'root']);\n indexes.unshift(this.scene.sys.displayList.getIndex(child));\n\n return indexes;\n },\n\n /**\n * Destroys this Game Object removing it from the Display List and Update List and\n * severing all ties to parent resources.\n *\n * Also removes itself from the Input Manager and Physics Manager if previously enabled.\n *\n * Use this to remove a Game Object from your game if you don't ever plan to use it again.\n * As long as no reference to it exists within your own code it should become free for\n * garbage collection by the browser.\n *\n * If you just want to temporarily disable an object then look at using the\n * Game Object Pool instead of destroying it, as destroyed objects cannot be resurrected.\n *\n * @method Phaser.GameObjects.GameObject#destroy\n * @since 3.0.0\n * \n * @param {boolean} [fromScene=false] - Is this Game Object being destroyed as the result of a Scene shutdown?\n */\n destroy: function (fromScene)\n {\n if (fromScene === undefined) { fromScene = false; }\n\n // This Game Object has already been destroyed\n if (!this.scene || this.ignoreDestroy)\n {\n return;\n }\n\n if (this.preDestroy)\n {\n this.preDestroy.call(this);\n }\n\n this.emit('destroy', this);\n\n var sys = this.scene.sys;\n\n if (!fromScene)\n {\n sys.displayList.remove(this);\n sys.updateList.remove(this);\n }\n\n if (this.input)\n {\n sys.input.clear(this);\n this.input = undefined;\n }\n\n if (this.data)\n {\n this.data.destroy();\n\n this.data = undefined;\n }\n\n if (this.body)\n {\n this.body.destroy();\n this.body = undefined;\n }\n\n // Tell the Scene to re-sort the children\n if (!fromScene)\n {\n sys.queueDepthSort();\n }\n\n this.active = false;\n this.visible = false;\n\n this.scene = undefined;\n\n this.parentContainer = undefined;\n\n this.removeAllListeners();\n }\n\n});\n\n/**\n * The bitmask that `GameObject.renderFlags` is compared against to determine if the Game Object will render or not.\n *\n * @constant {integer} RENDER_MASK\n * @memberof Phaser.GameObjects.GameObject\n * @default\n */\nGameObject.RENDER_MASK = 15;\n\nmodule.exports = GameObject;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Clamp = require('../../math/Clamp');\n\n// bitmask flag for GameObject.renderMask\nvar _FLAG = 2; // 0010\n\n/**\n * Provides methods used for setting the alpha properties of a Game Object.\n * Should be applied as a mixin and not used directly.\n *\n * @name Phaser.GameObjects.Components.Alpha\n * @since 3.0.0\n */\n\nvar Alpha = {\n\n /**\n * Private internal value. Holds the global alpha value.\n *\n * @name Phaser.GameObjects.Components.Alpha#_alpha\n * @type {number}\n * @private\n * @default 1\n * @since 3.0.0\n */\n _alpha: 1,\n\n /**\n * Private internal value. Holds the top-left alpha value.\n *\n * @name Phaser.GameObjects.Components.Alpha#_alphaTL\n * @type {number}\n * @private\n * @default 1\n * @since 3.0.0\n */\n _alphaTL: 1,\n\n /**\n * Private internal value. Holds the top-right alpha value.\n *\n * @name Phaser.GameObjects.Components.Alpha#_alphaTR\n * @type {number}\n * @private\n * @default 1\n * @since 3.0.0\n */\n _alphaTR: 1,\n\n /**\n * Private internal value. Holds the bottom-left alpha value.\n *\n * @name Phaser.GameObjects.Components.Alpha#_alphaBL\n * @type {number}\n * @private\n * @default 1\n * @since 3.0.0\n */\n _alphaBL: 1,\n\n /**\n * Private internal value. Holds the bottom-right alpha value.\n *\n * @name Phaser.GameObjects.Components.Alpha#_alphaBR\n * @type {number}\n * @private\n * @default 1\n * @since 3.0.0\n */\n _alphaBR: 1,\n\n /**\n * Clears all alpha values associated with this Game Object.\n *\n * Immediately sets the alpha levels back to 1 (fully opaque).\n *\n * @method Phaser.GameObjects.Components.Alpha#clearAlpha\n * @since 3.0.0\n *\n * @return {this} This Game Object instance.\n */\n clearAlpha: function ()\n {\n return this.setAlpha(1);\n },\n\n /**\n * Set the Alpha level of this Game Object. The alpha controls the opacity of the Game Object as it renders.\n * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque.\n *\n * If your game is running under WebGL you can optionally specify four different alpha values, each of which\n * correspond to the four corners of the Game Object. Under Canvas only the `topLeft` value given is used.\n *\n * @method Phaser.GameObjects.Components.Alpha#setAlpha\n * @since 3.0.0\n *\n * @param {number} [topLeft=1] - The alpha value used for the top-left of the Game Object. If this is the only value given it's applied across the whole Game Object.\n * @param {number} [topRight] - The alpha value used for the top-right of the Game Object. WebGL only.\n * @param {number} [bottomLeft] - The alpha value used for the bottom-left of the Game Object. WebGL only.\n * @param {number} [bottomRight] - The alpha value used for the bottom-right of the Game Object. WebGL only.\n *\n * @return {this} This Game Object instance.\n */\n setAlpha: function (topLeft, topRight, bottomLeft, bottomRight)\n {\n if (topLeft === undefined) { topLeft = 1; }\n\n // Treat as if there is only one alpha value for the whole Game Object\n if (topRight === undefined)\n {\n this.alpha = topLeft;\n }\n else\n {\n this._alphaTL = Clamp(topLeft, 0, 1);\n this._alphaTR = Clamp(topRight, 0, 1);\n this._alphaBL = Clamp(bottomLeft, 0, 1);\n this._alphaBR = Clamp(bottomRight, 0, 1);\n }\n\n return this;\n },\n\n /**\n * The alpha value of the Game Object.\n *\n * This is a global value, impacting the entire Game Object, not just a region of it.\n *\n * @name Phaser.GameObjects.Components.Alpha#alpha\n * @type {number}\n * @since 3.0.0\n */\n alpha: {\n\n get: function ()\n {\n return this._alpha;\n },\n\n set: function (value)\n {\n var v = Clamp(value, 0, 1);\n\n this._alpha = v;\n this._alphaTL = v;\n this._alphaTR = v;\n this._alphaBL = v;\n this._alphaBR = v;\n\n if (v === 0)\n {\n this.renderFlags &= ~_FLAG;\n }\n else\n {\n this.renderFlags |= _FLAG;\n }\n }\n\n },\n\n /**\n * The alpha value starting from the top-left of the Game Object.\n * This value is interpolated from the corner to the center of the Game Object.\n *\n * @name Phaser.GameObjects.Components.Alpha#alphaTopLeft\n * @type {number}\n * @webglOnly\n * @since 3.0.0\n */\n alphaTopLeft: {\n\n get: function ()\n {\n return this._alphaTL;\n },\n\n set: function (value)\n {\n var v = Clamp(value, 0, 1);\n\n this._alphaTL = v;\n\n if (v !== 0)\n {\n this.renderFlags |= _FLAG;\n }\n }\n\n },\n\n /**\n * The alpha value starting from the top-right of the Game Object.\n * This value is interpolated from the corner to the center of the Game Object.\n *\n * @name Phaser.GameObjects.Components.Alpha#alphaTopRight\n * @type {number}\n * @webglOnly\n * @since 3.0.0\n */\n alphaTopRight: {\n\n get: function ()\n {\n return this._alphaTR;\n },\n\n set: function (value)\n {\n var v = Clamp(value, 0, 1);\n\n this._alphaTR = v;\n\n if (v !== 0)\n {\n this.renderFlags |= _FLAG;\n }\n }\n\n },\n\n /**\n * The alpha value starting from the bottom-left of the Game Object.\n * This value is interpolated from the corner to the center of the Game Object.\n *\n * @name Phaser.GameObjects.Components.Alpha#alphaBottomLeft\n * @type {number}\n * @webglOnly\n * @since 3.0.0\n */\n alphaBottomLeft: {\n\n get: function ()\n {\n return this._alphaBL;\n },\n\n set: function (value)\n {\n var v = Clamp(value, 0, 1);\n\n this._alphaBL = v;\n\n if (v !== 0)\n {\n this.renderFlags |= _FLAG;\n }\n }\n\n },\n\n /**\n * The alpha value starting from the bottom-right of the Game Object.\n * This value is interpolated from the corner to the center of the Game Object.\n *\n * @name Phaser.GameObjects.Components.Alpha#alphaBottomRight\n * @type {number}\n * @webglOnly\n * @since 3.0.0\n */\n alphaBottomRight: {\n\n get: function ()\n {\n return this._alphaBR;\n },\n\n set: function (value)\n {\n var v = Clamp(value, 0, 1);\n\n this._alphaBR = v;\n\n if (v !== 0)\n {\n this.renderFlags |= _FLAG;\n }\n }\n\n }\n\n};\n\nmodule.exports = Alpha;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar BlendModes = require('../../renderer/BlendModes');\n\n/**\n * Provides methods used for setting the blend mode of a Game Object.\n * Should be applied as a mixin and not used directly.\n *\n * @name Phaser.GameObjects.Components.BlendMode\n * @since 3.0.0\n */\n\nvar BlendMode = {\n\n /**\n * Private internal value. Holds the current blend mode.\n * \n * @name Phaser.GameObjects.Components.BlendMode#_blendMode\n * @type {integer}\n * @private\n * @default 0\n * @since 3.0.0\n */\n _blendMode: BlendModes.NORMAL,\n\n /**\n * Sets the Blend Mode being used by this Game Object.\n *\n * This can be a const, such as `Phaser.BlendModes.SCREEN`, or an integer, such as 4 (for Overlay)\n *\n * Under WebGL only the following Blend Modes are available:\n *\n * * ADD\n * * MULTIPLY\n * * SCREEN\n *\n * Canvas has more available depending on browser support.\n *\n * You can also create your own custom Blend Modes in WebGL.\n *\n * Blend modes have different effects under Canvas and WebGL, and from browser to browser, depending\n * on support. Blend Modes also cause a WebGL batch flush should it encounter a new blend mode. For these\n * reasons try to be careful about the construction of your Scene and the frequency of which blend modes\n * are used.\n *\n * @name Phaser.GameObjects.Components.BlendMode#blendMode\n * @type {(Phaser.BlendModes|string)}\n * @since 3.0.0\n */\n blendMode: {\n\n get: function ()\n {\n return this._blendMode;\n },\n\n set: function (value)\n {\n if (typeof value === 'string')\n {\n value = BlendModes[value];\n }\n\n value |= 0;\n\n if (value >= -1)\n {\n this._blendMode = value;\n }\n }\n\n },\n\n /**\n * Sets the Blend Mode being used by this Game Object.\n *\n * This can be a const, such as `Phaser.BlendModes.SCREEN`, or an integer, such as 4 (for Overlay)\n *\n * Under WebGL only the following Blend Modes are available:\n *\n * * ADD\n * * MULTIPLY\n * * SCREEN\n *\n * Canvas has more available depending on browser support.\n *\n * You can also create your own custom Blend Modes in WebGL.\n *\n * Blend modes have different effects under Canvas and WebGL, and from browser to browser, depending\n * on support. Blend Modes also cause a WebGL batch flush should it encounter a new blend mode. For these\n * reasons try to be careful about the construction of your Scene and the frequency of which blend modes\n * are used.\n *\n * @method Phaser.GameObjects.Components.BlendMode#setBlendMode\n * @since 3.0.0\n *\n * @param {(string|Phaser.BlendModes)} value - The BlendMode value. Either a string or a CONST.\n *\n * @return {this} This Game Object instance.\n */\n setBlendMode: function (value)\n {\n this.blendMode = value;\n\n return this;\n }\n\n};\n\nmodule.exports = BlendMode;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Provides methods used for setting the depth of a Game Object.\n * Should be applied as a mixin and not used directly.\n * \n * @name Phaser.GameObjects.Components.Depth\n * @since 3.0.0\n */\n\nvar Depth = {\n\n /**\n * Private internal value. Holds the depth of the Game Object.\n * \n * @name Phaser.GameObjects.Components.Depth#_depth\n * @type {integer}\n * @private\n * @default 0\n * @since 3.0.0\n */\n _depth: 0,\n\n /**\n * The depth of this Game Object within the Scene.\n * \n * The depth is also known as the 'z-index' in some environments, and allows you to change the rendering order\n * of Game Objects, without actually moving their position in the display list.\n *\n * The depth starts from zero (the default value) and increases from that point. A Game Object with a higher depth\n * value will always render in front of one with a lower value.\n *\n * Setting the depth will queue a depth sort event within the Scene.\n * \n * @name Phaser.GameObjects.Components.Depth#depth\n * @type {number}\n * @since 3.0.0\n */\n depth: {\n\n get: function ()\n {\n return this._depth;\n },\n\n set: function (value)\n {\n this.scene.sys.queueDepthSort();\n this._depth = value;\n }\n\n },\n\n /**\n * The depth of this Game Object within the Scene.\n * \n * The depth is also known as the 'z-index' in some environments, and allows you to change the rendering order\n * of Game Objects, without actually moving their position in the display list.\n *\n * The depth starts from zero (the default value) and increases from that point. A Game Object with a higher depth\n * value will always render in front of one with a lower value.\n *\n * Setting the depth will queue a depth sort event within the Scene.\n * \n * @method Phaser.GameObjects.Components.Depth#setDepth\n * @since 3.0.0\n *\n * @param {integer} value - The depth of this Game Object.\n * \n * @return {this} This Game Object instance.\n */\n setDepth: function (value)\n {\n if (value === undefined) { value = 0; }\n\n this.depth = value;\n\n return this;\n }\n\n};\n\nmodule.exports = Depth;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Provides methods used for visually flipping a Game Object.\n * Should be applied as a mixin and not used directly.\n * \n * @name Phaser.GameObjects.Components.Flip\n * @since 3.0.0\n */\n\nvar Flip = {\n\n /**\n * The horizontally flipped state of the Game Object.\n * A Game Object that is flipped horizontally will render inversed on the horizontal axis.\n * Flipping always takes place from the middle of the texture and does not impact the scale value.\n * \n * @name Phaser.GameObjects.Components.Flip#flipX\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n flipX: false,\n\n /**\n * The vertically flipped state of the Game Object.\n * A Game Object that is flipped vertically will render inversed on the vertical axis (i.e. upside down)\n * Flipping always takes place from the middle of the texture and does not impact the scale value.\n * \n * @name Phaser.GameObjects.Components.Flip#flipY\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n flipY: false,\n\n /**\n * Toggles the horizontal flipped state of this Game Object.\n * \n * @method Phaser.GameObjects.Components.Flip#toggleFlipX\n * @since 3.0.0\n * \n * @return {this} This Game Object instance.\n */\n toggleFlipX: function ()\n {\n this.flipX = !this.flipX;\n\n return this;\n },\n\n /**\n * Toggles the vertical flipped state of this Game Object.\n * \n * @method Phaser.GameObjects.Components.Flip#toggleFlipY\n * @since 3.0.0\n * \n * @return {this} This Game Object instance.\n */\n toggleFlipY: function ()\n {\n this.flipY = !this.flipY;\n\n return this;\n },\n\n /**\n * Sets the horizontal flipped state of this Game Object.\n * \n * @method Phaser.GameObjects.Components.Flip#setFlipX\n * @since 3.0.0\n *\n * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\n * \n * @return {this} This Game Object instance.\n */\n setFlipX: function (value)\n {\n this.flipX = value;\n\n return this;\n },\n\n /**\n * Sets the vertical flipped state of this Game Object.\n * \n * @method Phaser.GameObjects.Components.Flip#setFlipY\n * @since 3.0.0\n *\n * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\n * \n * @return {this} This Game Object instance.\n */\n setFlipY: function (value)\n {\n this.flipY = value;\n\n return this;\n },\n\n /**\n * Sets the horizontal and vertical flipped state of this Game Object.\n * \n * @method Phaser.GameObjects.Components.Flip#setFlip\n * @since 3.0.0\n *\n * @param {boolean} x - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\n * @param {boolean} y - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\n * \n * @return {this} This Game Object instance.\n */\n setFlip: function (x, y)\n {\n this.flipX = x;\n this.flipY = y;\n\n return this;\n },\n\n /**\n * Resets the horizontal and vertical flipped state of this Game Object back to their default un-flipped state.\n * \n * @method Phaser.GameObjects.Components.Flip#resetFlip\n * @since 3.0.0\n *\n * @return {this} This Game Object instance.\n */\n resetFlip: function ()\n {\n this.flipX = false;\n this.flipY = false;\n\n return this;\n }\n\n};\n\nmodule.exports = Flip;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Provides methods used for getting and setting the Scroll Factor of a Game Object.\n *\n * @name Phaser.GameObjects.Components.ScrollFactor\n * @since 3.0.0\n */\n\nvar ScrollFactor = {\n\n /**\n * The horizontal scroll factor of this Game Object.\n *\n * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\n *\n * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\n * It does not change the Game Objects actual position values.\n *\n * A value of 1 means it will move exactly in sync with a camera.\n * A value of 0 means it will not move at all, even if the camera moves.\n * Other values control the degree to which the camera movement is mapped to this Game Object.\n * \n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\n * calculating physics collisions. Bodies always collide based on their world position, but changing\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\n * them from physics bodies if not accounted for in your code.\n *\n * @name Phaser.GameObjects.Components.ScrollFactor#scrollFactorX\n * @type {number}\n * @default 1\n * @since 3.0.0\n */\n scrollFactorX: 1,\n\n /**\n * The vertical scroll factor of this Game Object.\n *\n * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\n *\n * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\n * It does not change the Game Objects actual position values.\n *\n * A value of 1 means it will move exactly in sync with a camera.\n * A value of 0 means it will not move at all, even if the camera moves.\n * Other values control the degree to which the camera movement is mapped to this Game Object.\n * \n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\n * calculating physics collisions. Bodies always collide based on their world position, but changing\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\n * them from physics bodies if not accounted for in your code.\n *\n * @name Phaser.GameObjects.Components.ScrollFactor#scrollFactorY\n * @type {number}\n * @default 1\n * @since 3.0.0\n */\n scrollFactorY: 1,\n\n /**\n * Sets the scroll factor of this Game Object.\n *\n * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\n *\n * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\n * It does not change the Game Objects actual position values.\n *\n * A value of 1 means it will move exactly in sync with a camera.\n * A value of 0 means it will not move at all, even if the camera moves.\n * Other values control the degree to which the camera movement is mapped to this Game Object.\n * \n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\n * calculating physics collisions. Bodies always collide based on their world position, but changing\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\n * them from physics bodies if not accounted for in your code.\n *\n * @method Phaser.GameObjects.Components.ScrollFactor#setScrollFactor\n * @since 3.0.0\n *\n * @param {number} x - The horizontal scroll factor of this Game Object.\n * @param {number} [y=x] - The vertical scroll factor of this Game Object. If not set it will use the `x` value.\n *\n * @return {this} This Game Object instance.\n */\n setScrollFactor: function (x, y)\n {\n if (y === undefined) { y = x; }\n\n this.scrollFactorX = x;\n this.scrollFactorY = y;\n\n return this;\n }\n\n};\n\nmodule.exports = ScrollFactor;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * @typedef {object} JSONGameObject\n *\n * @property {string} name - The name of this Game Object.\n * @property {string} type - A textual representation of this Game Object, i.e. `sprite`.\n * @property {number} x - The x position of this Game Object.\n * @property {number} y - The y position of this Game Object.\n * @property {object} scale - The scale of this Game Object\n * @property {number} scale.x - The horizontal scale of this Game Object.\n * @property {number} scale.y - The vertical scale of this Game Object.\n * @property {object} origin - The origin of this Game Object.\n * @property {number} origin.x - The horizontal origin of this Game Object.\n * @property {number} origin.y - The vertical origin of this Game Object.\n * @property {boolean} flipX - The horizontally flipped state of the Game Object.\n * @property {boolean} flipY - The vertically flipped state of the Game Object.\n * @property {number} rotation - The angle of this Game Object in radians.\n * @property {number} alpha - The alpha value of the Game Object.\n * @property {boolean} visible - The visible state of the Game Object.\n * @property {integer} scaleMode - The Scale Mode being used by this Game Object.\n * @property {(integer|string)} blendMode - Sets the Blend Mode being used by this Game Object.\n * @property {string} textureKey - The texture key of this Game Object.\n * @property {string} frameKey - The frame key of this Game Object.\n * @property {object} data - The data of this Game Object.\n */\n\n/**\n * Build a JSON representation of the given Game Object.\n *\n * This is typically extended further by Game Object specific implementations.\n *\n * @method Phaser.GameObjects.Components.ToJSON\n * @since 3.0.0\n *\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to export as JSON.\n *\n * @return {JSONGameObject} A JSON representation of the Game Object.\n */\nvar ToJSON = function (gameObject)\n{\n var out = {\n name: gameObject.name,\n type: gameObject.type,\n x: gameObject.x,\n y: gameObject.y,\n depth: gameObject.depth,\n scale: {\n x: gameObject.scaleX,\n y: gameObject.scaleY\n },\n origin: {\n x: gameObject.originX,\n y: gameObject.originY\n },\n flipX: gameObject.flipX,\n flipY: gameObject.flipY,\n rotation: gameObject.rotation,\n alpha: gameObject.alpha,\n visible: gameObject.visible,\n scaleMode: gameObject.scaleMode,\n blendMode: gameObject.blendMode,\n textureKey: '',\n frameKey: '',\n data: {}\n };\n\n if (gameObject.texture)\n {\n out.textureKey = gameObject.texture.key;\n out.frameKey = gameObject.frame.name;\n }\n\n return out;\n};\n\nmodule.exports = ToJSON;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar MATH_CONST = require('../../math/const');\nvar TransformMatrix = require('./TransformMatrix');\nvar WrapAngle = require('../../math/angle/Wrap');\nvar WrapAngleDegrees = require('../../math/angle/WrapDegrees');\n\n// global bitmask flag for GameObject.renderMask (used by Scale)\nvar _FLAG = 4; // 0100\n\n/**\n * Provides methods used for getting and setting the position, scale and rotation of a Game Object.\n *\n * @name Phaser.GameObjects.Components.Transform\n * @since 3.0.0\n */\n\nvar Transform = {\n\n /**\n * Private internal value. Holds the horizontal scale value.\n * \n * @name Phaser.GameObjects.Components.Transform#_scaleX\n * @type {number}\n * @private\n * @default 1\n * @since 3.0.0\n */\n _scaleX: 1,\n\n /**\n * Private internal value. Holds the vertical scale value.\n * \n * @name Phaser.GameObjects.Components.Transform#_scaleY\n * @type {number}\n * @private\n * @default 1\n * @since 3.0.0\n */\n _scaleY: 1,\n\n /**\n * Private internal value. Holds the rotation value in radians.\n * \n * @name Phaser.GameObjects.Components.Transform#_rotation\n * @type {number}\n * @private\n * @default 0\n * @since 3.0.0\n */\n _rotation: 0,\n\n /**\n * The x position of this Game Object.\n *\n * @name Phaser.GameObjects.Components.Transform#x\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n x: 0,\n\n /**\n * The y position of this Game Object.\n *\n * @name Phaser.GameObjects.Components.Transform#y\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n y: 0,\n\n /**\n * The z position of this Game Object.\n * Note: Do not use this value to set the z-index, instead see the `depth` property.\n *\n * @name Phaser.GameObjects.Components.Transform#z\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n z: 0,\n\n /**\n * The w position of this Game Object.\n *\n * @name Phaser.GameObjects.Components.Transform#w\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n w: 0,\n\n /**\n * The horizontal scale of this Game Object.\n *\n * @name Phaser.GameObjects.Components.Transform#scaleX\n * @type {number}\n * @default 1\n * @since 3.0.0\n */\n scaleX: {\n\n get: function ()\n {\n return this._scaleX;\n },\n\n set: function (value)\n {\n this._scaleX = value;\n\n if (this._scaleX === 0)\n {\n this.renderFlags &= ~_FLAG;\n }\n else\n {\n this.renderFlags |= _FLAG;\n }\n }\n\n },\n\n /**\n * The vertical scale of this Game Object.\n *\n * @name Phaser.GameObjects.Components.Transform#scaleY\n * @type {number}\n * @default 1\n * @since 3.0.0\n */\n scaleY: {\n\n get: function ()\n {\n return this._scaleY;\n },\n\n set: function (value)\n {\n this._scaleY = value;\n\n if (this._scaleY === 0)\n {\n this.renderFlags &= ~_FLAG;\n }\n else\n {\n this.renderFlags |= _FLAG;\n }\n }\n\n },\n\n /**\n * The angle of this Game Object as expressed in degrees.\n *\n * Where 0 is to the right, 90 is down, 180 is left.\n *\n * If you prefer to work in radians, see the `rotation` property instead.\n *\n * @name Phaser.GameObjects.Components.Transform#angle\n * @type {integer}\n * @default 0\n * @since 3.0.0\n */\n angle: {\n\n get: function ()\n {\n return WrapAngleDegrees(this._rotation * MATH_CONST.RAD_TO_DEG);\n },\n\n set: function (value)\n {\n // value is in degrees\n this.rotation = WrapAngleDegrees(value) * MATH_CONST.DEG_TO_RAD;\n }\n },\n\n /**\n * The angle of this Game Object in radians.\n *\n * If you prefer to work in degrees, see the `angle` property instead.\n *\n * @name Phaser.GameObjects.Components.Transform#rotation\n * @type {number}\n * @default 1\n * @since 3.0.0\n */\n rotation: {\n\n get: function ()\n {\n return this._rotation;\n },\n\n set: function (value)\n {\n // value is in radians\n this._rotation = WrapAngle(value);\n }\n },\n\n /**\n * Sets the position of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setPosition\n * @since 3.0.0\n *\n * @param {number} [x=0] - The x position of this Game Object.\n * @param {number} [y=x] - The y position of this Game Object. If not set it will use the `x` value.\n * @param {number} [z=0] - The z position of this Game Object.\n * @param {number} [w=0] - The w position of this Game Object.\n *\n * @return {this} This Game Object instance.\n */\n setPosition: function (x, y, z, w)\n {\n if (x === undefined) { x = 0; }\n if (y === undefined) { y = x; }\n if (z === undefined) { z = 0; }\n if (w === undefined) { w = 0; }\n\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n\n return this;\n },\n\n /**\n * Sets the position of this Game Object to be a random position within the confines of\n * the given area.\n * \n * If no area is specified a random position between 0 x 0 and the game width x height is used instead.\n *\n * The position does not factor in the size of this Game Object, meaning that only the origin is\n * guaranteed to be within the area.\n *\n * @method Phaser.GameObjects.Components.Transform#setRandomPosition\n * @since 3.8.0\n *\n * @param {number} [x=0] - The x position of the top-left of the random area.\n * @param {number} [y=0] - The y position of the top-left of the random area.\n * @param {number} [width] - The width of the random area.\n * @param {number} [height] - The height of the random area.\n *\n * @return {this} This Game Object instance.\n */\n setRandomPosition: function (x, y, width, height)\n {\n if (x === undefined) { x = 0; }\n if (y === undefined) { y = 0; }\n if (width === undefined) { width = this.scene.sys.game.config.width; }\n if (height === undefined) { height = this.scene.sys.game.config.height; }\n\n this.x = x + (Math.random() * width);\n this.y = y + (Math.random() * height);\n\n return this;\n },\n\n /**\n * Sets the rotation of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setRotation\n * @since 3.0.0\n *\n * @param {number} [radians=0] - The rotation of this Game Object, in radians.\n *\n * @return {this} This Game Object instance.\n */\n setRotation: function (radians)\n {\n if (radians === undefined) { radians = 0; }\n\n this.rotation = radians;\n\n return this;\n },\n\n /**\n * Sets the angle of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setAngle\n * @since 3.0.0\n *\n * @param {number} [degrees=0] - The rotation of this Game Object, in degrees.\n *\n * @return {this} This Game Object instance.\n */\n setAngle: function (degrees)\n {\n if (degrees === undefined) { degrees = 0; }\n\n this.angle = degrees;\n\n return this;\n },\n\n /**\n * Sets the scale of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setScale\n * @since 3.0.0\n *\n * @param {number} x - The horizontal scale of this Game Object.\n * @param {number} [y=x] - The vertical scale of this Game Object. If not set it will use the `x` value.\n *\n * @return {this} This Game Object instance.\n */\n setScale: function (x, y)\n {\n if (x === undefined) { x = 1; }\n if (y === undefined) { y = x; }\n\n this.scaleX = x;\n this.scaleY = y;\n\n return this;\n },\n\n /**\n * Sets the x position of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setX\n * @since 3.0.0\n *\n * @param {number} [value=0] - The x position of this Game Object.\n *\n * @return {this} This Game Object instance.\n */\n setX: function (value)\n {\n if (value === undefined) { value = 0; }\n\n this.x = value;\n\n return this;\n },\n\n /**\n * Sets the y position of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setY\n * @since 3.0.0\n *\n * @param {number} [value=0] - The y position of this Game Object.\n *\n * @return {this} This Game Object instance.\n */\n setY: function (value)\n {\n if (value === undefined) { value = 0; }\n\n this.y = value;\n\n return this;\n },\n\n /**\n * Sets the z position of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setZ\n * @since 3.0.0\n *\n * @param {number} [value=0] - The z position of this Game Object.\n *\n * @return {this} This Game Object instance.\n */\n setZ: function (value)\n {\n if (value === undefined) { value = 0; }\n\n this.z = value;\n\n return this;\n },\n\n /**\n * Sets the w position of this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#setW\n * @since 3.0.0\n *\n * @param {number} [value=0] - The w position of this Game Object.\n *\n * @return {this} This Game Object instance.\n */\n setW: function (value)\n {\n if (value === undefined) { value = 0; }\n\n this.w = value;\n\n return this;\n },\n\n /**\n * Gets the local transform matrix for this Game Object.\n *\n * @method Phaser.GameObjects.Components.Transform#getLocalTransformMatrix\n * @since 3.4.0\n *\n * @param {Phaser.GameObjects.Components.TransformMatrix} [tempMatrix] - The matrix to populate with the values from this Game Object.\n *\n * @return {Phaser.GameObjects.Components.TransformMatrix} The populated Transform Matrix.\n */\n getLocalTransformMatrix: function (tempMatrix)\n {\n if (tempMatrix === undefined) { tempMatrix = new TransformMatrix(); }\n\n return tempMatrix.applyITRS(this.x, this.y, this._rotation, this._scaleX, this._scaleY);\n },\n\n /**\n * Gets the world transform matrix for this Game Object, factoring in any parent Containers.\n *\n * @method Phaser.GameObjects.Components.Transform#getWorldTransformMatrix\n * @since 3.4.0\n *\n * @param {Phaser.GameObjects.Components.TransformMatrix} [tempMatrix] - The matrix to populate with the values from this Game Object.\n * @param {Phaser.GameObjects.Components.TransformMatrix} [parentMatrix] - A temporary matrix to hold parent values during the calculations.\n *\n * @return {Phaser.GameObjects.Components.TransformMatrix} The populated Transform Matrix.\n */\n getWorldTransformMatrix: function (tempMatrix, parentMatrix)\n {\n if (tempMatrix === undefined) { tempMatrix = new TransformMatrix(); }\n if (parentMatrix === undefined) { parentMatrix = new TransformMatrix(); }\n\n var parent = this.parentContainer;\n\n if (!parent)\n {\n return this.getLocalTransformMatrix(tempMatrix);\n }\n\n tempMatrix.applyITRS(this.x, this.y, this._rotation, this._scaleX, this._scaleY);\n\n while (parent)\n {\n parentMatrix.applyITRS(parent.x, parent.y, parent._rotation, parent._scaleX, parent._scaleY);\n\n parentMatrix.multiply(tempMatrix, tempMatrix);\n\n parent = parent.parentContainer;\n }\n\n return tempMatrix;\n }\n\n};\n\nmodule.exports = Transform;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../utils/Class');\nvar Vector2 = require('../../math/Vector2');\n\n/**\n * @classdesc\n * A Matrix used for display transformations for rendering.\n *\n * It is represented like so:\n *\n * ```\n * | a | c | tx |\n * | b | d | ty |\n * | 0 | 0 | 1 |\n * ```\n *\n * @class TransformMatrix\n * @memberof Phaser.GameObjects.Components\n * @constructor\n * @since 3.0.0\n *\n * @param {number} [a=1] - The Scale X value.\n * @param {number} [b=0] - The Shear Y value.\n * @param {number} [c=0] - The Shear X value.\n * @param {number} [d=1] - The Scale Y value.\n * @param {number} [tx=0] - The Translate X value.\n * @param {number} [ty=0] - The Translate Y value.\n */\nvar TransformMatrix = new Class({\n\n initialize:\n\n function TransformMatrix (a, b, c, d, tx, ty)\n {\n if (a === undefined) { a = 1; }\n if (b === undefined) { b = 0; }\n if (c === undefined) { c = 0; }\n if (d === undefined) { d = 1; }\n if (tx === undefined) { tx = 0; }\n if (ty === undefined) { ty = 0; }\n\n /**\n * The matrix values.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#matrix\n * @type {Float32Array}\n * @since 3.0.0\n */\n this.matrix = new Float32Array([ a, b, c, d, tx, ty, 0, 0, 1 ]);\n\n /**\n * The decomposed matrix.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#decomposedMatrix\n * @type {object}\n * @since 3.0.0\n */\n this.decomposedMatrix = {\n translateX: 0,\n translateY: 0,\n scaleX: 1,\n scaleY: 1,\n rotation: 0\n };\n },\n\n /**\n * The Scale X value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#a\n * @type {number}\n * @since 3.4.0\n */\n a: {\n\n get: function ()\n {\n return this.matrix[0];\n },\n\n set: function (value)\n {\n this.matrix[0] = value;\n }\n\n },\n\n /**\n * The Shear Y value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#b\n * @type {number}\n * @since 3.4.0\n */\n b: {\n\n get: function ()\n {\n return this.matrix[1];\n },\n\n set: function (value)\n {\n this.matrix[1] = value;\n }\n\n },\n\n /**\n * The Shear X value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#c\n * @type {number}\n * @since 3.4.0\n */\n c: {\n\n get: function ()\n {\n return this.matrix[2];\n },\n\n set: function (value)\n {\n this.matrix[2] = value;\n }\n\n },\n\n /**\n * The Scale Y value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#d\n * @type {number}\n * @since 3.4.0\n */\n d: {\n\n get: function ()\n {\n return this.matrix[3];\n },\n\n set: function (value)\n {\n this.matrix[3] = value;\n }\n\n },\n\n /**\n * The Translate X value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#e\n * @type {number}\n * @since 3.11.0\n */\n e: {\n\n get: function ()\n {\n return this.matrix[4];\n },\n\n set: function (value)\n {\n this.matrix[4] = value;\n }\n\n },\n\n /**\n * The Translate Y value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#f\n * @type {number}\n * @since 3.11.0\n */\n f: {\n\n get: function ()\n {\n return this.matrix[5];\n },\n\n set: function (value)\n {\n this.matrix[5] = value;\n }\n\n },\n\n /**\n * The Translate X value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#tx\n * @type {number}\n * @since 3.4.0\n */\n tx: {\n\n get: function ()\n {\n return this.matrix[4];\n },\n\n set: function (value)\n {\n this.matrix[4] = value;\n }\n\n },\n\n /**\n * The Translate Y value.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#ty\n * @type {number}\n * @since 3.4.0\n */\n ty: {\n\n get: function ()\n {\n return this.matrix[5];\n },\n\n set: function (value)\n {\n this.matrix[5] = value;\n }\n\n },\n\n /**\n * The rotation of the Matrix.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#rotation\n * @type {number}\n * @readonly\n * @since 3.4.0\n */\n rotation: {\n\n get: function ()\n {\n return Math.acos(this.a / this.scaleX) * (Math.atan(-this.c / this.a) < 0 ? -1 : 1);\n }\n\n },\n\n /**\n * The horizontal scale of the Matrix.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#scaleX\n * @type {number}\n * @readonly\n * @since 3.4.0\n */\n scaleX: {\n\n get: function ()\n {\n return Math.sqrt((this.a * this.a) + (this.c * this.c));\n }\n\n },\n\n /**\n * The vertical scale of the Matrix.\n *\n * @name Phaser.GameObjects.Components.TransformMatrix#scaleY\n * @type {number}\n * @readonly\n * @since 3.4.0\n */\n scaleY: {\n\n get: function ()\n {\n return Math.sqrt((this.b * this.b) + (this.d * this.d));\n }\n\n },\n\n /**\n * Reset the Matrix to an identity matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#loadIdentity\n * @since 3.0.0\n *\n * @return {this} This TransformMatrix.\n */\n loadIdentity: function ()\n {\n var matrix = this.matrix;\n\n matrix[0] = 1;\n matrix[1] = 0;\n matrix[2] = 0;\n matrix[3] = 1;\n matrix[4] = 0;\n matrix[5] = 0;\n\n return this;\n },\n\n /**\n * Translate the Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#translate\n * @since 3.0.0\n *\n * @param {number} x - The horizontal translation value.\n * @param {number} y - The vertical translation value.\n *\n * @return {this} This TransformMatrix.\n */\n translate: function (x, y)\n {\n var matrix = this.matrix;\n\n matrix[4] = matrix[0] * x + matrix[2] * y + matrix[4];\n matrix[5] = matrix[1] * x + matrix[3] * y + matrix[5];\n\n return this;\n },\n\n /**\n * Scale the Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#scale\n * @since 3.0.0\n *\n * @param {number} x - The horizontal scale value.\n * @param {number} y - The vertical scale value.\n *\n * @return {this} This TransformMatrix.\n */\n scale: function (x, y)\n {\n var matrix = this.matrix;\n\n matrix[0] *= x;\n matrix[1] *= x;\n matrix[2] *= y;\n matrix[3] *= y;\n\n return this;\n },\n\n /**\n * Rotate the Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#rotate\n * @since 3.0.0\n *\n * @param {number} angle - The angle of rotation in radians.\n *\n * @return {this} This TransformMatrix.\n */\n rotate: function (angle)\n {\n var sin = Math.sin(angle);\n var cos = Math.cos(angle);\n\n var matrix = this.matrix;\n\n var a = matrix[0];\n var b = matrix[1];\n var c = matrix[2];\n var d = matrix[3];\n\n matrix[0] = a * cos + c * sin;\n matrix[1] = b * cos + d * sin;\n matrix[2] = a * -sin + c * cos;\n matrix[3] = b * -sin + d * cos;\n\n return this;\n },\n\n /**\n * Multiply this Matrix by the given Matrix.\n * \n * If an `out` Matrix is given then the results will be stored in it.\n * If it is not given, this matrix will be updated in place instead.\n * Use an `out` Matrix if you do not wish to mutate this matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#multiply\n * @since 3.0.0\n *\n * @param {Phaser.GameObjects.Components.TransformMatrix} rhs - The Matrix to multiply by.\n * @param {Phaser.GameObjects.Components.TransformMatrix} [out] - An optional Matrix to store the results in.\n *\n * @return {Phaser.GameObjects.Components.TransformMatrix} Either this TransformMatrix, or the `out` Matrix, if given in the arguments.\n */\n multiply: function (rhs, out)\n {\n var matrix = this.matrix;\n var source = rhs.matrix;\n\n var localA = matrix[0];\n var localB = matrix[1];\n var localC = matrix[2];\n var localD = matrix[3];\n var localE = matrix[4];\n var localF = matrix[5];\n\n var sourceA = source[0];\n var sourceB = source[1];\n var sourceC = source[2];\n var sourceD = source[3];\n var sourceE = source[4];\n var sourceF = source[5];\n\n var destinationMatrix = (out === undefined) ? this : out;\n\n destinationMatrix.a = (sourceA * localA) + (sourceB * localC);\n destinationMatrix.b = (sourceA * localB) + (sourceB * localD);\n destinationMatrix.c = (sourceC * localA) + (sourceD * localC);\n destinationMatrix.d = (sourceC * localB) + (sourceD * localD);\n destinationMatrix.e = (sourceE * localA) + (sourceF * localC) + localE;\n destinationMatrix.f = (sourceE * localB) + (sourceF * localD) + localF;\n\n return destinationMatrix;\n },\n\n /**\n * Multiply this Matrix by the matrix given, including the offset.\n * \n * The offsetX is added to the tx value: `offsetX * a + offsetY * c + tx`.\n * The offsetY is added to the ty value: `offsetY * b + offsetY * d + ty`.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#multiplyWithOffset\n * @since 3.11.0\n *\n * @param {Phaser.GameObjects.Components.TransformMatrix} src - The source Matrix to copy from.\n * @param {number} offsetX - Horizontal offset to factor in to the multiplication.\n * @param {number} offsetY - Vertical offset to factor in to the multiplication.\n *\n * @return {this} This TransformMatrix.\n */\n multiplyWithOffset: function (src, offsetX, offsetY)\n {\n var matrix = this.matrix;\n var otherMatrix = src.matrix;\n\n var a0 = matrix[0];\n var b0 = matrix[1];\n var c0 = matrix[2];\n var d0 = matrix[3];\n var tx0 = matrix[4];\n var ty0 = matrix[5];\n\n var pse = offsetX * a0 + offsetY * c0 + tx0;\n var psf = offsetX * b0 + offsetY * d0 + ty0;\n\n var a1 = otherMatrix[0];\n var b1 = otherMatrix[1];\n var c1 = otherMatrix[2];\n var d1 = otherMatrix[3];\n var tx1 = otherMatrix[4];\n var ty1 = otherMatrix[5];\n\n matrix[0] = a1 * a0 + b1 * c0;\n matrix[1] = a1 * b0 + b1 * d0;\n matrix[2] = c1 * a0 + d1 * c0;\n matrix[3] = c1 * b0 + d1 * d0;\n matrix[4] = tx1 * a0 + ty1 * c0 + pse;\n matrix[5] = tx1 * b0 + ty1 * d0 + psf;\n\n return this;\n },\n\n /**\n * Transform the Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#transform\n * @since 3.0.0\n *\n * @param {number} a - The Scale X value.\n * @param {number} b - The Shear Y value.\n * @param {number} c - The Shear X value.\n * @param {number} d - The Scale Y value.\n * @param {number} tx - The Translate X value.\n * @param {number} ty - The Translate Y value.\n *\n * @return {this} This TransformMatrix.\n */\n transform: function (a, b, c, d, tx, ty)\n {\n var matrix = this.matrix;\n\n var a0 = matrix[0];\n var b0 = matrix[1];\n var c0 = matrix[2];\n var d0 = matrix[3];\n var tx0 = matrix[4];\n var ty0 = matrix[5];\n\n matrix[0] = a * a0 + b * c0;\n matrix[1] = a * b0 + b * d0;\n matrix[2] = c * a0 + d * c0;\n matrix[3] = c * b0 + d * d0;\n matrix[4] = tx * a0 + ty * c0 + tx0;\n matrix[5] = tx * b0 + ty * d0 + ty0;\n\n return this;\n },\n\n /**\n * Transform a point using this Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#transformPoint\n * @since 3.0.0\n *\n * @param {number} x - The x coordinate of the point to transform.\n * @param {number} y - The y coordinate of the point to transform.\n * @param {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} point - The Point object to store the transformed coordinates.\n *\n * @return {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} The Point containing the transformed coordinates.\n */\n transformPoint: function (x, y, point)\n {\n if (point === undefined) { point = { x: 0, y: 0 }; }\n\n var matrix = this.matrix;\n\n var a = matrix[0];\n var b = matrix[1];\n var c = matrix[2];\n var d = matrix[3];\n var tx = matrix[4];\n var ty = matrix[5];\n\n point.x = x * a + y * c + tx;\n point.y = x * b + y * d + ty;\n\n return point;\n },\n\n /**\n * Invert the Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#invert\n * @since 3.0.0\n *\n * @return {this} This TransformMatrix.\n */\n invert: function ()\n {\n var matrix = this.matrix;\n\n var a = matrix[0];\n var b = matrix[1];\n var c = matrix[2];\n var d = matrix[3];\n var tx = matrix[4];\n var ty = matrix[5];\n\n var n = a * d - b * c;\n\n matrix[0] = d / n;\n matrix[1] = -b / n;\n matrix[2] = -c / n;\n matrix[3] = a / n;\n matrix[4] = (c * ty - d * tx) / n;\n matrix[5] = -(a * ty - b * tx) / n;\n\n return this;\n },\n\n /**\n * Set the values of this Matrix to copy those of the matrix given.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#copyFrom\n * @since 3.11.0\n *\n * @param {Phaser.GameObjects.Components.TransformMatrix} src - The source Matrix to copy from.\n *\n * @return {this} This TransformMatrix.\n */\n copyFrom: function (src)\n {\n var matrix = this.matrix;\n\n matrix[0] = src.a;\n matrix[1] = src.b;\n matrix[2] = src.c;\n matrix[3] = src.d;\n matrix[4] = src.e;\n matrix[5] = src.f;\n\n return this;\n },\n\n /**\n * Set the values of this Matrix to copy those of the array given.\n * Where array indexes 0, 1, 2, 3, 4 and 5 are mapped to a, b, c, d, e and f.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#copyFromArray\n * @since 3.11.0\n *\n * @param {array} src - The array of values to set into this matrix.\n *\n * @return {this} This TransformMatrix.\n */\n copyFromArray: function (src)\n {\n var matrix = this.matrix;\n\n matrix[0] = src[0];\n matrix[1] = src[1];\n matrix[2] = src[2];\n matrix[3] = src[3];\n matrix[4] = src[4];\n matrix[5] = src[5];\n\n return this;\n },\n\n /**\n * Copy the values from this Matrix to the given Canvas Rendering Context.\n * This will use the Context.transform method.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#copyToContext\n * @since 3.12.0\n *\n * @param {CanvasRenderingContext2D} ctx - The Canvas Rendering Context to copy the matrix values to.\n *\n * @return {CanvasRenderingContext2D} The Canvas Rendering Context.\n */\n copyToContext: function (ctx)\n {\n var matrix = this.matrix;\n\n ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\n\n return ctx;\n },\n\n /**\n * Copy the values from this Matrix to the given Canvas Rendering Context.\n * This will use the Context.setTransform method.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#setToContext\n * @since 3.12.0\n *\n * @param {CanvasRenderingContext2D} ctx - The Canvas Rendering Context to copy the matrix values to.\n *\n * @return {CanvasRenderingContext2D} The Canvas Rendering Context.\n */\n setToContext: function (ctx)\n {\n var matrix = this.matrix;\n\n ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\n\n return ctx;\n },\n\n /**\n * Copy the values in this Matrix to the array given.\n * \n * Where array indexes 0, 1, 2, 3, 4 and 5 are mapped to a, b, c, d, e and f.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#copyToArray\n * @since 3.12.0\n *\n * @param {array} [out] - The array to copy the matrix values in to.\n *\n * @return {array} An array where elements 0 to 5 contain the values from this matrix.\n */\n copyToArray: function (out)\n {\n var matrix = this.matrix;\n\n if (out === undefined)\n {\n out = [ matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5] ];\n }\n else\n {\n out[0] = matrix[0];\n out[1] = matrix[1];\n out[2] = matrix[2];\n out[3] = matrix[3];\n out[4] = matrix[4];\n out[5] = matrix[5];\n }\n\n return out;\n },\n\n /**\n * Set the values of this Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#setTransform\n * @since 3.0.0\n *\n * @param {number} a - The Scale X value.\n * @param {number} b - The Shear Y value.\n * @param {number} c - The Shear X value.\n * @param {number} d - The Scale Y value.\n * @param {number} tx - The Translate X value.\n * @param {number} ty - The Translate Y value.\n *\n * @return {this} This TransformMatrix.\n */\n setTransform: function (a, b, c, d, tx, ty)\n {\n var matrix = this.matrix;\n\n matrix[0] = a;\n matrix[1] = b;\n matrix[2] = c;\n matrix[3] = d;\n matrix[4] = tx;\n matrix[5] = ty;\n\n return this;\n },\n\n /**\n * Decompose this Matrix into its translation, scale and rotation values using QR decomposition.\n * \n * The result must be applied in the following order to reproduce the current matrix:\n * \n * translate -> rotate -> scale\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#decomposeMatrix\n * @since 3.0.0\n *\n * @return {object} The decomposed Matrix.\n */\n decomposeMatrix: function ()\n {\n var decomposedMatrix = this.decomposedMatrix;\n\n var matrix = this.matrix;\n\n // a = scale X (1)\n // b = shear Y (0)\n // c = shear X (0)\n // d = scale Y (1)\n\n var a = matrix[0];\n var b = matrix[1];\n var c = matrix[2];\n var d = matrix[3];\n\n var determ = a * d - b * c;\n\n decomposedMatrix.translateX = matrix[4];\n decomposedMatrix.translateY = matrix[5];\n\n if (a || b)\n {\n var r = Math.sqrt(a * a + b * b);\n\n decomposedMatrix.rotation = (b > 0) ? Math.acos(a / r) : -Math.acos(a / r);\n decomposedMatrix.scaleX = r;\n decomposedMatrix.scaleY = determ / r;\n }\n else if (c || d)\n {\n var s = Math.sqrt(c * c + d * d);\n\n decomposedMatrix.rotation = Math.PI * 0.5 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));\n decomposedMatrix.scaleX = determ / s;\n decomposedMatrix.scaleY = s;\n }\n else\n {\n decomposedMatrix.rotation = 0;\n decomposedMatrix.scaleX = 0;\n decomposedMatrix.scaleY = 0;\n }\n\n return decomposedMatrix;\n },\n\n /**\n * Apply the identity, translate, rotate and scale operations on the Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#applyITRS\n * @since 3.0.0\n *\n * @param {number} x - The horizontal translation.\n * @param {number} y - The vertical translation.\n * @param {number} rotation - The angle of rotation in radians.\n * @param {number} scaleX - The horizontal scale.\n * @param {number} scaleY - The vertical scale.\n *\n * @return {this} This TransformMatrix.\n */\n applyITRS: function (x, y, rotation, scaleX, scaleY)\n {\n var matrix = this.matrix;\n\n var radianSin = Math.sin(rotation);\n var radianCos = Math.cos(rotation);\n\n // Translate\n matrix[4] = x;\n matrix[5] = y;\n\n // Rotate and Scale\n matrix[0] = radianCos * scaleX;\n matrix[1] = radianSin * scaleX;\n matrix[2] = -radianSin * scaleY;\n matrix[3] = radianCos * scaleY;\n\n return this;\n },\n\n /**\n * Takes the `x` and `y` values and returns a new position in the `output` vector that is the inverse of\n * the current matrix with its transformation applied.\n * \n * Can be used to translate points from world to local space.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#applyInverse\n * @since 3.12.0\n *\n * @param {number} x - The x position to translate.\n * @param {number} y - The y position to translate.\n * @param {Phaser.Math.Vector2} [output] - A Vector2, or point-like object, to store the results in.\n *\n * @return {Phaser.Math.Vector2} The coordinates, inverse-transformed through this matrix.\n */\n applyInverse: function (x, y, output)\n {\n if (output === undefined) { output = new Vector2(); }\n\n var matrix = this.matrix;\n\n var a = matrix[0];\n var b = matrix[1];\n var c = matrix[2];\n var d = matrix[3];\n var tx = matrix[4];\n var ty = matrix[5];\n\n var id = 1 / ((a * d) + (c * -b));\n\n output.x = (d * id * x) + (-c * id * y) + (((ty * c) - (tx * d)) * id);\n output.y = (a * id * y) + (-b * id * x) + (((-ty * a) + (tx * b)) * id);\n\n return output;\n },\n\n /**\n * Returns the X component of this matrix multiplied by the given values.\n * This is the same as `x * a + y * c + e`.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#getX\n * @since 3.12.0\n * \n * @param {number} x - The x value.\n * @param {number} y - The y value.\n *\n * @return {number} The calculated x value.\n */\n getX: function (x, y)\n {\n return x * this.a + y * this.c + this.e;\n },\n\n /**\n * Returns the Y component of this matrix multiplied by the given values.\n * This is the same as `x * b + y * d + f`.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#getY\n * @since 3.12.0\n * \n * @param {number} x - The x value.\n * @param {number} y - The y value.\n *\n * @return {number} The calculated y value.\n */\n getY: function (x, y)\n {\n return x * this.b + y * this.d + this.f;\n },\n\n /**\n * Returns a string that can be used in a CSS Transform call as a `matrix` property.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#getCSSMatrix\n * @since 3.12.0\n *\n * @return {string} A string containing the CSS Transform matrix values.\n */\n getCSSMatrix: function ()\n {\n var m = this.matrix;\n\n return 'matrix(' + m[0] + ',' + m[1] + ',' + m[2] + ',' + m[3] + ',' + m[4] + ',' + m[5] + ')';\n },\n\n /**\n * Destroys this Transform Matrix.\n *\n * @method Phaser.GameObjects.Components.TransformMatrix#destroy\n * @since 3.4.0\n */\n destroy: function ()\n {\n this.matrix = null;\n this.decomposedMatrix = null;\n }\n\n});\n\nmodule.exports = TransformMatrix;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n// bitmask flag for GameObject.renderMask\nvar _FLAG = 1; // 0001\n\n/**\n * Provides methods used for setting the visibility of a Game Object.\n * Should be applied as a mixin and not used directly.\n * \n * @name Phaser.GameObjects.Components.Visible\n * @since 3.0.0\n */\n\nvar Visible = {\n\n /**\n * Private internal value. Holds the visible value.\n * \n * @name Phaser.GameObjects.Components.Visible#_visible\n * @type {boolean}\n * @private\n * @default true\n * @since 3.0.0\n */\n _visible: true,\n\n /**\n * The visible state of the Game Object.\n * \n * An invisible Game Object will skip rendering, but will still process update logic.\n * \n * @name Phaser.GameObjects.Components.Visible#visible\n * @type {boolean}\n * @since 3.0.0\n */\n visible: {\n\n get: function ()\n {\n return this._visible;\n },\n\n set: function (value)\n {\n if (value)\n {\n this._visible = true;\n this.renderFlags |= _FLAG;\n }\n else\n {\n this._visible = false;\n this.renderFlags &= ~_FLAG;\n }\n }\n\n },\n\n /**\n * Sets the visibility of this Game Object.\n * \n * An invisible Game Object will skip rendering, but will still process update logic.\n *\n * @method Phaser.GameObjects.Components.Visible#setVisible\n * @since 3.0.0\n *\n * @param {boolean} value - The visible state of the Game Object.\n * \n * @return {this} This Game Object instance.\n */\n setVisible: function (value)\n {\n this.visible = value;\n\n return this;\n }\n};\n\nmodule.exports = Visible;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../utils/Class');\nvar CONST = require('./const');\nvar GetFastValue = require('../utils/object/GetFastValue');\nvar GetURL = require('./GetURL');\nvar MergeXHRSettings = require('./MergeXHRSettings');\nvar XHRLoader = require('./XHRLoader');\nvar XHRSettings = require('./XHRSettings');\n\n/**\n * @typedef {object} FileConfig\n *\n * @property {string} type - The file type string (image, json, etc) for sorting within the Loader.\n * @property {string} key - Unique cache key (unique within its file type)\n * @property {string} [url] - The URL of the file, not including baseURL.\n * @property {string} [path] - The path of the file, not including the baseURL.\n * @property {string} [extension] - The default extension this file uses.\n * @property {XMLHttpRequestResponseType} [responseType] - The responseType to be used by the XHR request.\n * @property {(XHRSettingsObject|false)} [xhrSettings=false] - Custom XHR Settings specific to this file and merged with the Loader defaults.\n * @property {any} [config] - A config object that can be used by file types to store transitional data.\n */\n\n/**\n * @classdesc\n * The base File class used by all File Types that the Loader can support.\n * You shouldn't create an instance of a File directly, but should extend it with your own class, setting a custom type and processing methods.\n *\n * @class File\n * @memberof Phaser.Loader\n * @constructor\n * @since 3.0.0\n *\n * @param {Phaser.Loader.LoaderPlugin} loader - The Loader that is going to load this File.\n * @param {FileConfig} fileConfig - The file configuration object, as created by the file type.\n */\nvar File = new Class({\n\n initialize:\n\n function File (loader, fileConfig)\n {\n /**\n * A reference to the Loader that is going to load this file.\n *\n * @name Phaser.Loader.File#loader\n * @type {Phaser.Loader.LoaderPlugin}\n * @since 3.0.0\n */\n this.loader = loader;\n\n /**\n * A reference to the Cache, or Texture Manager, that is going to store this file if it loads.\n *\n * @name Phaser.Loader.File#cache\n * @type {(Phaser.Cache.BaseCache|Phaser.Textures.TextureManager)}\n * @since 3.7.0\n */\n this.cache = GetFastValue(fileConfig, 'cache', false);\n\n /**\n * The file type string (image, json, etc) for sorting within the Loader.\n *\n * @name Phaser.Loader.File#type\n * @type {string}\n * @since 3.0.0\n */\n this.type = GetFastValue(fileConfig, 'type', false);\n\n /**\n * Unique cache key (unique within its file type)\n *\n * @name Phaser.Loader.File#key\n * @type {string}\n * @since 3.0.0\n */\n this.key = GetFastValue(fileConfig, 'key', false);\n\n var loadKey = this.key;\n\n if (loader.prefix && loader.prefix !== '')\n {\n this.key = loader.prefix + loadKey;\n }\n\n if (!this.type || !this.key)\n {\n throw new Error('Error calling \\'Loader.' + this.type + '\\' invalid key provided.');\n }\n\n /**\n * The URL of the file, not including baseURL.\n * Automatically has Loader.path prepended to it.\n *\n * @name Phaser.Loader.File#url\n * @type {string}\n * @since 3.0.0\n */\n this.url = GetFastValue(fileConfig, 'url');\n\n if (this.url === undefined)\n {\n this.url = loader.path + loadKey + '.' + GetFastValue(fileConfig, 'extension', '');\n }\n else if (typeof(this.url) !== 'function')\n {\n this.url = loader.path + this.url;\n }\n\n /**\n * The final URL this file will load from, including baseURL and path.\n * Set automatically when the Loader calls 'load' on this file.\n *\n * @name Phaser.Loader.File#src\n * @type {string}\n * @since 3.0.0\n */\n this.src = '';\n\n /**\n * The merged XHRSettings for this file.\n *\n * @name Phaser.Loader.File#xhrSettings\n * @type {XHRSettingsObject}\n * @since 3.0.0\n */\n this.xhrSettings = XHRSettings(GetFastValue(fileConfig, 'responseType', undefined));\n\n if (GetFastValue(fileConfig, 'xhrSettings', false))\n {\n this.xhrSettings = MergeXHRSettings(this.xhrSettings, GetFastValue(fileConfig, 'xhrSettings', {}));\n }\n\n /**\n * The XMLHttpRequest instance (as created by XHR Loader) that is loading this File.\n *\n * @name Phaser.Loader.File#xhrLoader\n * @type {?XMLHttpRequest}\n * @since 3.0.0\n */\n this.xhrLoader = null;\n\n /**\n * The current state of the file. One of the FILE_CONST values.\n *\n * @name Phaser.Loader.File#state\n * @type {integer}\n * @since 3.0.0\n */\n this.state = (typeof(this.url) === 'function') ? CONST.FILE_POPULATED : CONST.FILE_PENDING;\n\n /**\n * The total size of this file.\n * Set by onProgress and only if loading via XHR.\n *\n * @name Phaser.Loader.File#bytesTotal\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n this.bytesTotal = 0;\n\n /**\n * Updated as the file loads.\n * Only set if loading via XHR.\n *\n * @name Phaser.Loader.File#bytesLoaded\n * @type {number}\n * @default -1\n * @since 3.0.0\n */\n this.bytesLoaded = -1;\n\n /**\n * A percentage value between 0 and 1 indicating how much of this file has loaded.\n * Only set if loading via XHR.\n *\n * @name Phaser.Loader.File#percentComplete\n * @type {number}\n * @default -1\n * @since 3.0.0\n */\n this.percentComplete = -1;\n\n /**\n * For CORs based loading.\n * If this is undefined then the File will check BaseLoader.crossOrigin and use that (if set)\n *\n * @name Phaser.Loader.File#crossOrigin\n * @type {(string|undefined)}\n * @since 3.0.0\n */\n this.crossOrigin = undefined;\n\n /**\n * The processed file data, stored here after the file has loaded.\n *\n * @name Phaser.Loader.File#data\n * @type {*}\n * @since 3.0.0\n */\n this.data = undefined;\n\n /**\n * A config object that can be used by file types to store transitional data.\n *\n * @name Phaser.Loader.File#config\n * @type {*}\n * @since 3.0.0\n */\n this.config = GetFastValue(fileConfig, 'config', {});\n\n /**\n * If this is a multipart file, i.e. an atlas and its json together, then this is a reference\n * to the parent MultiFile. Set and used internally by the Loader or specific file types.\n *\n * @name Phaser.Loader.File#multiFile\n * @type {?Phaser.Loader.MultiFile}\n * @since 3.7.0\n */\n this.multiFile;\n\n /**\n * Does this file have an associated linked file? Such as an image and a normal map.\n * Atlases and Bitmap Fonts use the multiFile, because those files need loading together but aren't\n * actually bound by data, where-as a linkFile is.\n *\n * @name Phaser.Loader.File#linkFile\n * @type {?Phaser.Loader.File}\n * @since 3.7.0\n */\n this.linkFile;\n },\n\n /**\n * Links this File with another, so they depend upon each other for loading and processing.\n *\n * @method Phaser.Loader.File#setLink\n * @since 3.7.0\n *\n * @param {Phaser.Loader.File} fileB - The file to link to this one.\n */\n setLink: function (fileB)\n {\n this.linkFile = fileB;\n\n fileB.linkFile = this;\n },\n\n /**\n * Resets the XHRLoader instance this file is using.\n *\n * @method Phaser.Loader.File#resetXHR\n * @since 3.0.0\n */\n resetXHR: function ()\n {\n if (this.xhrLoader)\n {\n this.xhrLoader.onload = undefined;\n this.xhrLoader.onerror = undefined;\n this.xhrLoader.onprogress = undefined;\n }\n },\n\n /**\n * Called by the Loader, starts the actual file downloading.\n * During the load the methods onLoad, onError and onProgress are called, based on the XHR events.\n * You shouldn't normally call this method directly, it's meant to be invoked by the Loader.\n *\n * @method Phaser.Loader.File#load\n * @since 3.0.0\n */\n load: function ()\n {\n if (this.state === CONST.FILE_POPULATED)\n {\n // Can happen for example in a JSONFile if they've provided a JSON object instead of a URL\n this.loader.nextFile(this, true);\n }\n else\n {\n this.src = GetURL(this, this.loader.baseURL);\n\n if (this.src.indexOf('data:') === 0)\n {\n console.warn('Local data URIs are not supported: ' + this.key);\n }\n else\n {\n // The creation of this XHRLoader starts the load process going.\n // It will automatically call the following, based on the load outcome:\n // \n // xhr.onload = this.onLoad\n // xhr.onerror = this.onError\n // xhr.onprogress = this.onProgress\n\n this.xhrLoader = XHRLoader(this, this.loader.xhr);\n }\n }\n },\n\n /**\n * Called when the file finishes loading, is sent a DOM ProgressEvent.\n *\n * @method Phaser.Loader.File#onLoad\n * @since 3.0.0\n *\n * @param {XMLHttpRequest} xhr - The XMLHttpRequest that caused this onload event.\n * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this load.\n */\n onLoad: function (xhr, event)\n {\n var success = !(event.target && event.target.status !== 200);\n\n // Handle HTTP status codes of 4xx and 5xx as errors, even if xhr.onerror was not called.\n if (xhr.readyState === 4 && xhr.status >= 400 && xhr.status <= 599)\n {\n success = false;\n }\n\n this.resetXHR();\n\n this.loader.nextFile(this, success);\n },\n\n /**\n * Called if the file errors while loading, is sent a DOM ProgressEvent.\n *\n * @method Phaser.Loader.File#onError\n * @since 3.0.0\n *\n * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this error.\n */\n onError: function ()\n {\n this.resetXHR();\n\n this.loader.nextFile(this, false);\n },\n\n /**\n * Called during the file load progress. Is sent a DOM ProgressEvent.\n *\n * @method Phaser.Loader.File#onProgress\n * @since 3.0.0\n *\n * @param {ProgressEvent} event - The DOM ProgressEvent.\n */\n onProgress: function (event)\n {\n if (event.lengthComputable)\n {\n this.bytesLoaded = event.loaded;\n this.bytesTotal = event.total;\n\n this.percentComplete = Math.min((this.bytesLoaded / this.bytesTotal), 1);\n\n this.loader.emit('fileprogress', this, this.percentComplete);\n }\n },\n\n /**\n * Usually overridden by the FileTypes and is called by Loader.nextFile.\n * This method controls what extra work this File does with its loaded data, for example a JSON file will parse itself during this stage.\n *\n * @method Phaser.Loader.File#onProcess\n * @since 3.0.0\n */\n onProcess: function ()\n {\n this.state = CONST.FILE_PROCESSING;\n\n this.onProcessComplete();\n },\n\n /**\n * Called when the File has completed processing.\n * Checks on the state of its multifile, if set.\n *\n * @method Phaser.Loader.File#onProcessComplete\n * @since 3.7.0\n */\n onProcessComplete: function ()\n {\n this.state = CONST.FILE_COMPLETE;\n\n if (this.multiFile)\n {\n this.multiFile.onFileComplete(this);\n }\n\n this.loader.fileProcessComplete(this);\n },\n\n /**\n * Called when the File has completed processing but it generated an error.\n * Checks on the state of its multifile, if set.\n *\n * @method Phaser.Loader.File#onProcessError\n * @since 3.7.0\n */\n onProcessError: function ()\n {\n this.state = CONST.FILE_ERRORED;\n\n if (this.multiFile)\n {\n this.multiFile.onFileFailed(this);\n }\n\n this.loader.fileProcessComplete(this);\n },\n\n /**\n * Checks if a key matching the one used by this file exists in the target Cache or not.\n * This is called automatically by the LoaderPlugin to decide if the file can be safely\n * loaded or will conflict.\n *\n * @method Phaser.Loader.File#hasCacheConflict\n * @since 3.7.0\n *\n * @return {boolean} `true` if adding this file will cause a conflict, otherwise `false`.\n */\n hasCacheConflict: function ()\n {\n return (this.cache && this.cache.exists(this.key));\n },\n\n /**\n * Adds this file to its target cache upon successful loading and processing.\n * This method is often overridden by specific file types.\n *\n * @method Phaser.Loader.File#addToCache\n * @since 3.7.0\n */\n addToCache: function ()\n {\n if (this.cache)\n {\n this.cache.add(this.key, this.data);\n }\n\n this.pendingDestroy();\n },\n\n /**\n * You can listen for this event from the LoaderPlugin. It is dispatched _every time_\n * a file loads and is sent 3 arguments, which allow you to identify the file:\n *\n * ```javascript\n * this.load.on('filecomplete', function (key, type, data) {\n * // Your handler code\n * });\n * ```\n * \n * @event Phaser.Loader.File#fileCompleteEvent\n * @param {string} key - The key of the file that just loaded and finished processing.\n * @param {string} type - The type of the file that just loaded and finished processing.\n * @param {any} data - The data of the file.\n */\n\n /**\n * You can listen for this event from the LoaderPlugin. It is dispatched only once per\n * file and you have to use a special listener handle to pick it up.\n * \n * The string of the event is based on the file type and the key you gave it, split up\n * using hyphens.\n * \n * For example, if you have loaded an image with a key of `monster`, you can listen for it\n * using the following:\n *\n * ```javascript\n * this.load.on('filecomplete-image-monster', function (key, type, data) {\n * // Your handler code\n * });\n * ```\n *\n * Or, if you have loaded a texture atlas with a key of `Level1`:\n * \n * ```javascript\n * this.load.on('filecomplete-atlas-Level1', function (key, type, data) {\n * // Your handler code\n * });\n * ```\n * \n * Or, if you have loaded a sprite sheet with a key of `Explosion` and a prefix of `GAMEOVER`:\n * \n * ```javascript\n * this.load.on('filecomplete-spritesheet-GAMEOVERExplosion', function (key, type, data) {\n * // Your handler code\n * });\n * ```\n * \n * @event Phaser.Loader.File#singleFileCompleteEvent\n * @param {any} data - The data of the file.\n */\n\n /**\n * Called once the file has been added to its cache and is now ready for deletion from the Loader.\n * It will emit a `filecomplete` event from the LoaderPlugin.\n *\n * @method Phaser.Loader.File#pendingDestroy\n * @fires Phaser.Loader.File#fileCompleteEvent\n * @fires Phaser.Loader.File#singleFileCompleteEvent\n * @since 3.7.0\n */\n pendingDestroy: function (data)\n {\n if (data === undefined) { data = this.data; }\n\n var key = this.key;\n var type = this.type;\n\n this.loader.emit('filecomplete', key, type, data);\n this.loader.emit('filecomplete-' + type + '-' + key, key, type, data);\n\n this.loader.flagForRemoval(this);\n },\n\n /**\n * Destroy this File and any references it holds.\n *\n * @method Phaser.Loader.File#destroy\n * @since 3.7.0\n */\n destroy: function ()\n {\n this.loader = null;\n this.cache = null;\n this.xhrSettings = null;\n this.multiFile = null;\n this.linkFile = null;\n this.data = null;\n }\n\n});\n\n/**\n * Static method for creating object URL using URL API and setting it as image 'src' attribute.\n * If URL API is not supported (usually on old browsers) it falls back to creating Base64 encoded url using FileReader.\n *\n * @method Phaser.Loader.File.createObjectURL\n * @static\n * @param {HTMLImageElement} image - Image object which 'src' attribute should be set to object URL.\n * @param {Blob} blob - A Blob object to create an object URL for.\n * @param {string} defaultType - Default mime type used if blob type is not available.\n */\nFile.createObjectURL = function (image, blob, defaultType)\n{\n if (typeof URL === 'function')\n {\n image.src = URL.createObjectURL(blob);\n }\n else\n {\n var reader = new FileReader();\n\n reader.onload = function ()\n {\n image.removeAttribute('crossOrigin');\n image.src = 'data:' + (blob.type || defaultType) + ';base64,' + reader.result.split(',')[1];\n };\n\n reader.onerror = image.onerror;\n\n reader.readAsDataURL(blob);\n }\n};\n\n/**\n * Static method for releasing an existing object URL which was previously created\n * by calling {@link File#createObjectURL} method.\n *\n * @method Phaser.Loader.File.revokeObjectURL\n * @static\n * @param {HTMLImageElement} image - Image object which 'src' attribute should be revoked.\n */\nFile.revokeObjectURL = function (image)\n{\n if (typeof URL === 'function')\n {\n URL.revokeObjectURL(image.src);\n }\n};\n\nmodule.exports = File;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar types = {};\n\nvar FileTypesManager = {\n\n /**\n * Static method called when a LoaderPlugin is created.\n * \n * Loops through the local types object and injects all of them as\n * properties into the LoaderPlugin instance.\n *\n * @method Phaser.Loader.FileTypesManager.register\n * @since 3.0.0\n * \n * @param {Phaser.Loader.LoaderPlugin} loader - The LoaderPlugin to install the types into.\n */\n install: function (loader)\n {\n for (var key in types)\n {\n loader[key] = types[key];\n }\n },\n\n /**\n * Static method called directly by the File Types.\n * \n * The key is a reference to the function used to load the files via the Loader, i.e. `image`.\n *\n * @method Phaser.Loader.FileTypesManager.register\n * @since 3.0.0\n * \n * @param {string} key - The key that will be used as the method name in the LoaderPlugin.\n * @param {function} factoryFunction - The function that will be called when LoaderPlugin.key is invoked.\n */\n register: function (key, factoryFunction)\n {\n types[key] = factoryFunction;\n },\n\n /**\n * Removed all associated file types.\n *\n * @method Phaser.Loader.FileTypesManager.destroy\n * @since 3.0.0\n */\n destroy: function ()\n {\n types = {};\n }\n\n};\n\nmodule.exports = FileTypesManager;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Given a File and a baseURL value this returns the URL the File will use to download from.\n *\n * @function Phaser.Loader.GetURL\n * @since 3.0.0\n *\n * @param {Phaser.Loader.File} file - The File object.\n * @param {string} baseURL - A default base URL.\n *\n * @return {string} The URL the File will use.\n */\nvar GetURL = function (file, baseURL)\n{\n if (!file.url)\n {\n return false;\n }\n\n if (file.url.match(/^(?:blob:|data:|http:\\/\\/|https:\\/\\/|\\/\\/)/))\n {\n return file.url;\n }\n else\n {\n return baseURL + file.url;\n }\n};\n\nmodule.exports = GetURL;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Extend = require('../utils/object/Extend');\nvar XHRSettings = require('./XHRSettings');\n\n/**\n * Takes two XHRSettings Objects and creates a new XHRSettings object from them.\n *\n * The new object is seeded by the values given in the global settings, but any setting in\n * the local object overrides the global ones.\n *\n * @function Phaser.Loader.MergeXHRSettings\n * @since 3.0.0\n *\n * @param {XHRSettingsObject} global - The global XHRSettings object.\n * @param {XHRSettingsObject} local - The local XHRSettings object.\n *\n * @return {XHRSettingsObject} A newly formed XHRSettings object.\n */\nvar MergeXHRSettings = function (global, local)\n{\n var output = (global === undefined) ? XHRSettings() : Extend({}, global);\n\n if (local)\n {\n for (var setting in local)\n {\n if (local[setting] !== undefined)\n {\n output[setting] = local[setting];\n }\n }\n }\n\n return output;\n};\n\nmodule.exports = MergeXHRSettings;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../utils/Class');\n\n/**\n * @classdesc\n * A MultiFile is a special kind of parent that contains two, or more, Files as children and looks after\n * the loading and processing of them all. It is commonly extended and used as a base class for file types such as AtlasJSON or BitmapFont.\n * \n * You shouldn't create an instance of a MultiFile directly, but should extend it with your own class, setting a custom type and processing methods.\n *\n * @class MultiFile\n * @memberof Phaser.Loader\n * @constructor\n * @since 3.7.0\n *\n * @param {Phaser.Loader.LoaderPlugin} loader - The Loader that is going to load this File.\n * @param {string} type - The file type string for sorting within the Loader.\n * @param {string} key - The key of the file within the loader.\n * @param {Phaser.Loader.File[]} files - An array of Files that make-up this MultiFile.\n */\nvar MultiFile = new Class({\n\n initialize:\n\n function MultiFile (loader, type, key, files)\n {\n /**\n * A reference to the Loader that is going to load this file.\n *\n * @name Phaser.Loader.MultiFile#loader\n * @type {Phaser.Loader.LoaderPlugin}\n * @since 3.7.0\n */\n this.loader = loader;\n\n /**\n * The file type string for sorting within the Loader.\n *\n * @name Phaser.Loader.MultiFile#type\n * @type {string}\n * @since 3.7.0\n */\n this.type = type;\n\n /**\n * Unique cache key (unique within its file type)\n *\n * @name Phaser.Loader.MultiFile#key\n * @type {string}\n * @since 3.7.0\n */\n this.key = key;\n\n /**\n * Array of files that make up this MultiFile.\n *\n * @name Phaser.Loader.MultiFile#files\n * @type {Phaser.Loader.File[]}\n * @since 3.7.0\n */\n this.files = files;\n\n /**\n * The completion status of this MultiFile.\n *\n * @name Phaser.Loader.MultiFile#complete\n * @type {boolean}\n * @default false\n * @since 3.7.0\n */\n this.complete = false;\n\n /**\n * The number of files to load.\n *\n * @name Phaser.Loader.MultiFile#pending\n * @type {integer}\n * @since 3.7.0\n */\n\n this.pending = files.length;\n\n /**\n * The number of files that failed to load.\n *\n * @name Phaser.Loader.MultiFile#failed\n * @type {integer}\n * @default 0\n * @since 3.7.0\n */\n this.failed = 0;\n\n /**\n * A storage container for transient data that the loading files need.\n *\n * @name Phaser.Loader.MultiFile#config\n * @type {any}\n * @since 3.7.0\n */\n this.config = {};\n\n // Link the files\n for (var i = 0; i < files.length; i++)\n {\n files[i].multiFile = this;\n }\n },\n\n /**\n * Checks if this MultiFile is ready to process its children or not.\n *\n * @method Phaser.Loader.MultiFile#isReadyToProcess\n * @since 3.7.0\n *\n * @return {boolean} `true` if all children of this MultiFile have loaded, otherwise `false`.\n */\n isReadyToProcess: function ()\n {\n return (this.pending === 0 && this.failed === 0 && !this.complete);\n },\n\n /**\n * Adds another child to this MultiFile, increases the pending count and resets the completion status.\n *\n * @method Phaser.Loader.MultiFile#addToMultiFile\n * @since 3.7.0\n *\n * @param {Phaser.Loader.File} files - The File to add to this MultiFile.\n *\n * @return {Phaser.Loader.MultiFile} This MultiFile instance.\n */\n addToMultiFile: function (file)\n {\n this.files.push(file);\n\n file.multiFile = this;\n\n this.pending++;\n\n this.complete = false;\n\n return this;\n },\n\n /**\n * Called by each File when it finishes loading.\n *\n * @method Phaser.Loader.MultiFile#onFileComplete\n * @since 3.7.0\n *\n * @param {Phaser.Loader.File} file - The File that has completed processing.\n */\n onFileComplete: function (file)\n {\n var index = this.files.indexOf(file);\n\n if (index !== -1)\n {\n this.pending--;\n }\n },\n\n /**\n * Called by each File that fails to load.\n *\n * @method Phaser.Loader.MultiFile#onFileFailed\n * @since 3.7.0\n *\n * @param {Phaser.Loader.File} file - The File that has failed to load.\n */\n onFileFailed: function (file)\n {\n var index = this.files.indexOf(file);\n\n if (index !== -1)\n {\n this.failed++;\n }\n }\n\n});\n\nmodule.exports = MultiFile;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar MergeXHRSettings = require('./MergeXHRSettings');\n\n/**\n * Creates a new XMLHttpRequest (xhr) object based on the given File and XHRSettings\n * and starts the download of it. It uses the Files own XHRSettings and merges them\n * with the global XHRSettings object to set the xhr values before download.\n *\n * @function Phaser.Loader.XHRLoader\n * @since 3.0.0\n *\n * @param {Phaser.Loader.File} file - The File to download.\n * @param {XHRSettingsObject} globalXHRSettings - The global XHRSettings object.\n *\n * @return {XMLHttpRequest} The XHR object.\n */\nvar XHRLoader = function (file, globalXHRSettings)\n{\n var config = MergeXHRSettings(globalXHRSettings, file.xhrSettings);\n\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', file.src, config.async, config.user, config.password);\n\n xhr.responseType = file.xhrSettings.responseType;\n xhr.timeout = config.timeout;\n\n if (config.header && config.headerValue)\n {\n xhr.setRequestHeader(config.header, config.headerValue);\n }\n\n if (config.requestedWith)\n {\n xhr.setRequestHeader('X-Requested-With', config.requestedWith);\n }\n\n if (config.overrideMimeType)\n {\n xhr.overrideMimeType(config.overrideMimeType);\n }\n\n // After a successful request, the xhr.response property will contain the requested data as a DOMString, ArrayBuffer, Blob, or Document (depending on what was set for responseType.)\n\n xhr.onload = file.onLoad.bind(file, xhr);\n xhr.onerror = file.onError.bind(file);\n xhr.onprogress = file.onProgress.bind(file);\n\n // This is the only standard method, the ones above are browser additions (maybe not universal?)\n // xhr.onreadystatechange\n\n xhr.send();\n\n return xhr;\n};\n\nmodule.exports = XHRLoader;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * @typedef {object} XHRSettingsObject\n *\n * @property {XMLHttpRequestResponseType} responseType - The response type of the XHR request, i.e. `blob`, `text`, etc.\n * @property {boolean} [async=true] - Should the XHR request use async or not?\n * @property {string} [user=''] - Optional username for the XHR request.\n * @property {string} [password=''] - Optional password for the XHR request.\n * @property {integer} [timeout=0] - Optional XHR timeout value.\n * @property {(string|undefined)} [header] - This value is used to populate the XHR `setRequestHeader` and is undefined by default.\n * @property {(string|undefined)} [headerValue] - This value is used to populate the XHR `setRequestHeader` and is undefined by default.\n * @property {(string|undefined)} [requestedWith] - This value is used to populate the XHR `setRequestHeader` and is undefined by default.\n * @property {(string|undefined)} [overrideMimeType] - Provide a custom mime-type to use instead of the default.\n */\n\n/**\n * Creates an XHRSettings Object with default values.\n *\n * @function Phaser.Loader.XHRSettings\n * @since 3.0.0\n *\n * @param {XMLHttpRequestResponseType} [responseType=''] - The responseType, such as 'text'.\n * @param {boolean} [async=true] - Should the XHR request use async or not?\n * @param {string} [user=''] - Optional username for the XHR request.\n * @param {string} [password=''] - Optional password for the XHR request.\n * @param {integer} [timeout=0] - Optional XHR timeout value.\n *\n * @return {XHRSettingsObject} The XHRSettings object as used by the Loader.\n */\nvar XHRSettings = function (responseType, async, user, password, timeout)\n{\n if (responseType === undefined) { responseType = ''; }\n if (async === undefined) { async = true; }\n if (user === undefined) { user = ''; }\n if (password === undefined) { password = ''; }\n if (timeout === undefined) { timeout = 0; }\n\n // Before sending a request, set the xhr.responseType to \"text\",\n // \"arraybuffer\", \"blob\", or \"document\", depending on your data needs.\n // Note, setting xhr.responseType = '' (or omitting) will default the response to \"text\".\n\n return {\n\n // Ignored by the Loader, only used by File.\n responseType: responseType,\n\n async: async,\n\n // credentials\n user: user,\n password: password,\n\n // timeout in ms (0 = no timeout)\n timeout: timeout,\n\n // setRequestHeader\n header: undefined,\n headerValue: undefined,\n requestedWith: false,\n\n // overrideMimeType\n overrideMimeType: undefined\n\n };\n};\n\nmodule.exports = XHRSettings;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar FILE_CONST = {\n\n /**\n * The Loader is idle.\n * \n * @name Phaser.Loader.LOADER_IDLE\n * @type {integer}\n * @since 3.0.0\n */\n LOADER_IDLE: 0,\n\n /**\n * The Loader is actively loading.\n * \n * @name Phaser.Loader.LOADER_LOADING\n * @type {integer}\n * @since 3.0.0\n */\n LOADER_LOADING: 1,\n\n /**\n * The Loader is processing files is has loaded.\n * \n * @name Phaser.Loader.LOADER_PROCESSING\n * @type {integer}\n * @since 3.0.0\n */\n LOADER_PROCESSING: 2,\n\n /**\n * The Loader has completed loading and processing.\n * \n * @name Phaser.Loader.LOADER_COMPLETE\n * @type {integer}\n * @since 3.0.0\n */\n LOADER_COMPLETE: 3,\n\n /**\n * The Loader is shutting down.\n * \n * @name Phaser.Loader.LOADER_SHUTDOWN\n * @type {integer}\n * @since 3.0.0\n */\n LOADER_SHUTDOWN: 4,\n\n /**\n * The Loader has been destroyed.\n * \n * @name Phaser.Loader.LOADER_DESTROYED\n * @type {integer}\n * @since 3.0.0\n */\n LOADER_DESTROYED: 5,\n\n /**\n * File is in the load queue but not yet started\n * \n * @name Phaser.Loader.FILE_PENDING\n * @type {integer}\n * @since 3.0.0\n */\n FILE_PENDING: 10,\n\n /**\n * File has been started to load by the loader (onLoad called)\n * \n * @name Phaser.Loader.FILE_LOADING\n * @type {integer}\n * @since 3.0.0\n */\n FILE_LOADING: 11,\n\n /**\n * File has loaded successfully, awaiting processing \n * \n * @name Phaser.Loader.FILE_LOADED\n * @type {integer}\n * @since 3.0.0\n */\n FILE_LOADED: 12,\n\n /**\n * File failed to load\n * \n * @name Phaser.Loader.FILE_FAILED\n * @type {integer}\n * @since 3.0.0\n */\n FILE_FAILED: 13,\n\n /**\n * File is being processed (onProcess callback)\n * \n * @name Phaser.Loader.FILE_PROCESSING\n * @type {integer}\n * @since 3.0.0\n */\n FILE_PROCESSING: 14,\n\n /**\n * The File has errored somehow during processing.\n * \n * @name Phaser.Loader.FILE_ERRORED\n * @type {integer}\n * @since 3.0.0\n */\n FILE_ERRORED: 16,\n\n /**\n * File has finished processing.\n * \n * @name Phaser.Loader.FILE_COMPLETE\n * @type {integer}\n * @since 3.0.0\n */\n FILE_COMPLETE: 17,\n\n /**\n * File has been destroyed\n * \n * @name Phaser.Loader.FILE_DESTROYED\n * @type {integer}\n * @since 3.0.0\n */\n FILE_DESTROYED: 18,\n\n /**\n * File was populated from local data and doesn't need an HTTP request\n * \n * @name Phaser.Loader.FILE_POPULATED\n * @type {integer}\n * @since 3.0.0\n */\n FILE_POPULATED: 19\n\n};\n\nmodule.exports = FILE_CONST;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../utils/Class');\nvar CONST = require('../const');\nvar File = require('../File');\nvar FileTypesManager = require('../FileTypesManager');\nvar GetFastValue = require('../../utils/object/GetFastValue');\nvar IsPlainObject = require('../../utils/object/IsPlainObject');\n\n/**\n * @typedef {object} Phaser.Loader.FileTypes.ImageFrameConfig\n *\n * @property {integer} frameWidth - The width of the frame in pixels.\n * @property {integer} [frameHeight] - The height of the frame in pixels. Uses the `frameWidth` value if not provided.\n * @property {integer} [startFrame=0] - The first frame to start parsing from.\n * @property {integer} [endFrame] - The frame to stop parsing at. If not provided it will calculate the value based on the image and frame dimensions.\n * @property {integer} [margin=0] - The margin in the image. This is the space around the edge of the frames.\n * @property {integer} [spacing=0] - The spacing between each frame in the image.\n */\n\n/**\n * @typedef {object} Phaser.Loader.FileTypes.ImageFileConfig\n *\n * @property {string} key - The key of the file. Must be unique within both the Loader and the Texture Manager.\n * @property {string} [url] - The absolute or relative URL to load the file from.\n * @property {string} [extension='png'] - The default file extension to use if no url is provided.\n * @property {string} [normalMap] - The filename of an associated normal map. It uses the same path and url to load as the image.\n * @property {Phaser.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object. Only provided for, and used by, Sprite Sheets.\n * @property {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\n */\n\n/**\n * @classdesc\n * A single Image File suitable for loading by the Loader.\n *\n * These are created when you use the Phaser.Loader.LoaderPlugin#image method and are not typically created directly.\n * \n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#image.\n *\n * @class ImageFile\n * @extends Phaser.Loader.File\n * @memberof Phaser.Loader.FileTypes\n * @constructor\n * @since 3.0.0\n *\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\n * @param {(string|Phaser.Loader.FileTypes.ImageFileConfig)} key - The key to use for this file, or a file configuration object.\n * @param {string|string[]} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\n * @param {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\n * @param {Phaser.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object. Only provided for, and used by, Sprite Sheets.\n */\nvar ImageFile = new Class({\n\n Extends: File,\n\n initialize:\n\n function ImageFile (loader, key, url, xhrSettings, frameConfig)\n {\n var extension = 'png';\n var normalMapURL;\n\n if (IsPlainObject(key))\n {\n var config = key;\n\n key = GetFastValue(config, 'key');\n url = GetFastValue(config, 'url');\n normalMapURL = GetFastValue(config, 'normalMap');\n xhrSettings = GetFastValue(config, 'xhrSettings');\n extension = GetFastValue(config, 'extension', extension);\n frameConfig = GetFastValue(config, 'frameConfig');\n }\n\n if (Array.isArray(url))\n {\n normalMapURL = url[1];\n url = url[0];\n }\n\n var fileConfig = {\n type: 'image',\n cache: loader.textureManager,\n extension: extension,\n responseType: 'blob',\n key: key,\n url: url,\n xhrSettings: xhrSettings,\n config: frameConfig\n };\n\n File.call(this, loader, fileConfig);\n\n // Do we have a normal map to load as well?\n if (normalMapURL)\n {\n var normalMap = new ImageFile(loader, this.key, normalMapURL, xhrSettings, frameConfig);\n\n normalMap.type = 'normalMap';\n\n this.setLink(normalMap);\n\n loader.addFile(normalMap);\n }\n },\n\n /**\n * Called automatically by Loader.nextFile.\n * This method controls what extra work this File does with its loaded data.\n *\n * @method Phaser.Loader.FileTypes.ImageFile#onProcess\n * @since 3.7.0\n */\n onProcess: function ()\n {\n this.state = CONST.FILE_PROCESSING;\n\n this.data = new Image();\n\n this.data.crossOrigin = this.crossOrigin;\n\n var _this = this;\n\n this.data.onload = function ()\n {\n File.revokeObjectURL(_this.data);\n\n _this.onProcessComplete();\n };\n\n this.data.onerror = function ()\n {\n File.revokeObjectURL(_this.data);\n\n _this.onProcessError();\n };\n\n File.createObjectURL(this.data, this.xhrLoader.response, 'image/png');\n },\n\n /**\n * Adds this file to its target cache upon successful loading and processing.\n *\n * @method Phaser.Loader.FileTypes.ImageFile#addToCache\n * @since 3.7.0\n */\n addToCache: function ()\n {\n var texture;\n var linkFile = this.linkFile;\n\n if (linkFile && linkFile.state === CONST.FILE_COMPLETE)\n {\n if (this.type === 'image')\n {\n texture = this.cache.addImage(this.key, this.data, linkFile.data);\n }\n else\n {\n texture = this.cache.addImage(linkFile.key, linkFile.data, this.data);\n }\n\n this.pendingDestroy(texture);\n\n linkFile.pendingDestroy(texture);\n }\n else if (!linkFile)\n {\n texture = this.cache.addImage(this.key, this.data);\n\n this.pendingDestroy(texture);\n }\n }\n\n});\n\n/**\n * Adds an Image, or array of Images, to the current load queue.\n *\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\n * \n * ```javascript\n * function preload ()\n * {\n * this.load.image('logo', 'images/phaserLogo.png');\n * }\n * ```\n *\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\n * loaded.\n * \n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\n * If you try to load an animated gif only the first frame will be rendered. Browsers do not natively support playback\n * of animated gifs to Canvas elements.\n *\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\n * then remove it from the Texture Manager first, before loading a new one.\n *\n * Instead of passing arguments you can pass a configuration object, such as:\n * \n * ```javascript\n * this.load.image({\n * key: 'logo',\n * url: 'images/AtariLogo.png'\n * });\n * ```\n *\n * See the documentation for `Phaser.Loader.FileTypes.ImageFileConfig` for more details.\n *\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\n * \n * ```javascript\n * this.load.image('logo', 'images/AtariLogo.png');\n * // and later in your game ...\n * this.add.image(x, y, 'logo');\n * ```\n *\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\n * this is what you would use to retrieve the image from the Texture Manager.\n *\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\n *\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\n *\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\n * \n * ```javascript\n * this.load.image('logo', [ 'images/AtariLogo.png', 'images/AtariLogo-n.png' ]);\n * ```\n *\n * Or, if you are using a config object use the `normalMap` property:\n * \n * ```javascript\n * this.load.image({\n * key: 'logo',\n * url: 'images/AtariLogo.png',\n * normalMap: 'images/AtariLogo-n.png'\n * });\n * ```\n *\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\n * Normal maps are a WebGL only feature.\n *\n * Note: The ability to load this type of file will only be available if the Image File type has been built into Phaser.\n * It is available in the default build but can be excluded from custom builds.\n *\n * @method Phaser.Loader.LoaderPlugin#image\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\n * @since 3.0.0\n *\n * @param {(string|Phaser.Loader.FileTypes.ImageFileConfig|Phaser.Loader.FileTypes.ImageFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\n * @param {string|string[]} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\n * @param {XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\n *\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\n */\nFileTypesManager.register('image', function (key, url, xhrSettings)\n{\n if (Array.isArray(key))\n {\n for (var i = 0; i < key.length; i++)\n {\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\n this.addFile(new ImageFile(this, key[i]));\n }\n }\n else\n {\n this.addFile(new ImageFile(this, key, url, xhrSettings));\n }\n\n return this;\n});\n\nmodule.exports = ImageFile;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../utils/Class');\nvar CONST = require('../const');\nvar File = require('../File');\nvar FileTypesManager = require('../FileTypesManager');\nvar GetFastValue = require('../../utils/object/GetFastValue');\nvar GetValue = require('../../utils/object/GetValue');\nvar IsPlainObject = require('../../utils/object/IsPlainObject');\n\n/**\n * @typedef {object} Phaser.Loader.FileTypes.JSONFileConfig\n *\n * @property {string} key - The key of the file. Must be unique within both the Loader and the JSON Cache.\n * @property {string|any} [url] - The absolute or relative URL to load the file from. Or can be a ready formed JSON object, in which case it will be directly added to the Cache.\n * @property {string} [extension='json'] - The default file extension to use if no url is provided.\n * @property {string} [dataKey] - If specified instead of the whole JSON file being parsed and added to the Cache, only the section corresponding to this property key will be added. If the property you want to extract is nested, use periods to divide it.\n * @property {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\n */\n\n/**\n * @classdesc\n * A single JSON File suitable for loading by the Loader.\n *\n * These are created when you use the Phaser.Loader.LoaderPlugin#json method and are not typically created directly.\n * \n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#json.\n *\n * @class JSONFile\n * @extends Phaser.Loader.File\n * @memberof Phaser.Loader.FileTypes\n * @constructor\n * @since 3.0.0\n *\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\n * @param {(string|Phaser.Loader.FileTypes.JSONFileConfig)} key - The key to use for this file, or a file configuration object.\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\n * @param {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\n */\nvar JSONFile = new Class({\n\n Extends: File,\n\n initialize:\n\n // url can either be a string, in which case it is treated like a proper url, or an object, in which case it is treated as a ready-made JS Object\n // dataKey allows you to pluck a specific object out of the JSON and put just that into the cache, rather than the whole thing\n\n function JSONFile (loader, key, url, xhrSettings, dataKey)\n {\n var extension = 'json';\n\n if (IsPlainObject(key))\n {\n var config = key;\n\n key = GetFastValue(config, 'key');\n url = GetFastValue(config, 'url');\n xhrSettings = GetFastValue(config, 'xhrSettings');\n extension = GetFastValue(config, 'extension', extension);\n dataKey = GetFastValue(config, 'dataKey', dataKey);\n }\n\n var fileConfig = {\n type: 'json',\n cache: loader.cacheManager.json,\n extension: extension,\n responseType: 'text',\n key: key,\n url: url,\n xhrSettings: xhrSettings,\n config: dataKey\n };\n\n File.call(this, loader, fileConfig);\n\n if (IsPlainObject(url))\n {\n // Object provided instead of a URL, so no need to actually load it (populate data with value)\n if (dataKey)\n {\n this.data = GetValue(url, dataKey);\n }\n else\n {\n this.data = url;\n }\n\n this.state = CONST.FILE_POPULATED;\n }\n },\n\n /**\n * Called automatically by Loader.nextFile.\n * This method controls what extra work this File does with its loaded data.\n *\n * @method Phaser.Loader.FileTypes.JSONFile#onProcess\n * @since 3.7.0\n */\n onProcess: function ()\n {\n if (this.state !== CONST.FILE_POPULATED)\n {\n this.state = CONST.FILE_PROCESSING;\n\n var json = JSON.parse(this.xhrLoader.responseText);\n\n var key = this.config;\n\n if (typeof key === 'string')\n {\n this.data = GetValue(json, key, json);\n }\n else\n {\n this.data = json;\n }\n }\n\n this.onProcessComplete();\n }\n\n});\n\n/**\n * Adds a JSON file, or array of JSON files, to the current load queue.\n *\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\n * \n * ```javascript\n * function preload ()\n * {\n * this.load.json('wavedata', 'files/AlienWaveData.json');\n * }\n * ```\n *\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\n * loaded.\n * \n * The key must be a unique String. It is used to add the file to the global JSON Cache upon a successful load.\n * The key should be unique both in terms of files being loaded and files already present in the JSON Cache.\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\n * then remove it from the JSON Cache first, before loading a new one.\n *\n * Instead of passing arguments you can pass a configuration object, such as:\n * \n * ```javascript\n * this.load.json({\n * key: 'wavedata',\n * url: 'files/AlienWaveData.json'\n * });\n * ```\n *\n * See the documentation for `Phaser.Loader.FileTypes.JSONFileConfig` for more details.\n *\n * Once the file has finished loading you can access it from its Cache using its key:\n * \n * ```javascript\n * this.load.json('wavedata', 'files/AlienWaveData.json');\n * // and later in your game ...\n * var data = this.cache.json.get('wavedata');\n * ```\n *\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\n * this is what you would use to retrieve the text from the JSON Cache.\n *\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\n *\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\n * and no URL is given then the Loader will set the URL to be \"data.json\". It will always add `.json` as the extension, although\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\n *\n * You can also optionally provide a `dataKey` to use. This allows you to extract only a part of the JSON and store it in the Cache,\n * rather than the whole file. For example, if your JSON data had a structure like this:\n * \n * ```json\n * {\n * \"level1\": {\n * \"baddies\": {\n * \"aliens\": {},\n * \"boss\": {}\n * }\n * },\n * \"level2\": {},\n * \"level3\": {}\n * }\n * ```\n *\n * And you only wanted to store the `boss` data in the Cache, then you could pass `level1.baddies.boss`as the `dataKey`.\n *\n * Note: The ability to load this type of file will only be available if the JSON File type has been built into Phaser.\n * It is available in the default build but can be excluded from custom builds.\n *\n * @method Phaser.Loader.LoaderPlugin#json\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\n * @since 3.0.0\n *\n * @param {(string|Phaser.Loader.FileTypes.JSONFileConfig|Phaser.Loader.FileTypes.JSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\n * @param {XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\n *\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\n */\nFileTypesManager.register('json', function (key, url, dataKey, xhrSettings)\n{\n if (Array.isArray(key))\n {\n for (var i = 0; i < key.length; i++)\n {\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\n this.addFile(new JSONFile(this, key[i]));\n }\n }\n else\n {\n this.addFile(new JSONFile(this, key, url, xhrSettings, dataKey));\n }\n\n return this;\n});\n\nmodule.exports = JSONFile;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../utils/Class');\nvar CONST = require('../const');\nvar File = require('../File');\nvar FileTypesManager = require('../FileTypesManager');\nvar GetFastValue = require('../../utils/object/GetFastValue');\nvar IsPlainObject = require('../../utils/object/IsPlainObject');\n\n/**\n * @typedef {object} Phaser.Loader.FileTypes.TextFileConfig\n *\n * @property {string} key - The key of the file. Must be unique within both the Loader and the Text Cache.\n * @property {string} [url] - The absolute or relative URL to load the file from.\n * @property {string} [extension='txt'] - The default file extension to use if no url is provided.\n * @property {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\n */\n\n/**\n * @classdesc\n * A single Text File suitable for loading by the Loader.\n *\n * These are created when you use the Phaser.Loader.LoaderPlugin#text method and are not typically created directly.\n *\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#text.\n *\n * @class TextFile\n * @extends Phaser.Loader.File\n * @memberof Phaser.Loader.FileTypes\n * @constructor\n * @since 3.0.0\n *\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\n * @param {(string|Phaser.Loader.FileTypes.TextFileConfig)} key - The key to use for this file, or a file configuration object.\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\n * @param {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\n */\nvar TextFile = new Class({\n\n Extends: File,\n\n initialize:\n\n function TextFile (loader, key, url, xhrSettings)\n {\n var extension = 'txt';\n\n if (IsPlainObject(key))\n {\n var config = key;\n\n key = GetFastValue(config, 'key');\n url = GetFastValue(config, 'url');\n xhrSettings = GetFastValue(config, 'xhrSettings');\n extension = GetFastValue(config, 'extension', extension);\n }\n\n var fileConfig = {\n type: 'text',\n cache: loader.cacheManager.text,\n extension: extension,\n responseType: 'text',\n key: key,\n url: url,\n xhrSettings: xhrSettings\n };\n\n File.call(this, loader, fileConfig);\n },\n\n /**\n * Called automatically by Loader.nextFile.\n * This method controls what extra work this File does with its loaded data.\n *\n * @method Phaser.Loader.FileTypes.TextFile#onProcess\n * @since 3.7.0\n */\n onProcess: function ()\n {\n this.state = CONST.FILE_PROCESSING;\n\n this.data = this.xhrLoader.responseText;\n\n this.onProcessComplete();\n }\n\n});\n\n/**\n * Adds a Text file, or array of Text files, to the current load queue.\n *\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\n *\n * ```javascript\n * function preload ()\n * {\n * this.load.text('story', 'files/IntroStory.txt');\n * }\n * ```\n *\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\n * loaded.\n *\n * The key must be a unique String. It is used to add the file to the global Text Cache upon a successful load.\n * The key should be unique both in terms of files being loaded and files already present in the Text Cache.\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\n * then remove it from the Text Cache first, before loading a new one.\n *\n * Instead of passing arguments you can pass a configuration object, such as:\n *\n * ```javascript\n * this.load.text({\n * key: 'story',\n * url: 'files/IntroStory.txt'\n * });\n * ```\n *\n * See the documentation for `Phaser.Loader.FileTypes.TextFileConfig` for more details.\n *\n * Once the file has finished loading you can access it from its Cache using its key:\n *\n * ```javascript\n * this.load.text('story', 'files/IntroStory.txt');\n * // and later in your game ...\n * var data = this.cache.text.get('story');\n * ```\n *\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\n * key. For example, if the prefix was `LEVEL1.` and the key was `Story` the final key will be `LEVEL1.Story` and\n * this is what you would use to retrieve the text from the Text Cache.\n *\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\n *\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"story\"\n * and no URL is given then the Loader will set the URL to be \"story.txt\". It will always add `.txt` as the extension, although\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\n *\n * Note: The ability to load this type of file will only be available if the Text File type has been built into Phaser.\n * It is available in the default build but can be excluded from custom builds.\n *\n * @method Phaser.Loader.LoaderPlugin#text\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\n * @since 3.0.0\n *\n * @param {(string|Phaser.Loader.FileTypes.TextFileConfig|Phaser.Loader.FileTypes.TextFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\n * @param {XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\n *\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\n */\nFileTypesManager.register('text', function (key, url, xhrSettings)\n{\n if (Array.isArray(key))\n {\n for (var i = 0; i < key.length; i++)\n {\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\n this.addFile(new TextFile(this, key[i]));\n }\n }\n else\n {\n this.addFile(new TextFile(this, key, url, xhrSettings));\n }\n\n return this;\n});\n\nmodule.exports = TextFile;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Force a value within the boundaries by clamping it to the range `min`, `max`.\n *\n * @function Phaser.Math.Clamp\n * @since 3.0.0\n *\n * @param {number} value - The value to be clamped.\n * @param {number} min - The minimum bounds.\n * @param {number} max - The maximum bounds.\n *\n * @return {number} The clamped value.\n */\nvar Clamp = function (value, min, max)\n{\n return Math.max(min, Math.min(max, value));\n};\n\nmodule.exports = Clamp;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n// Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\n// and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\n\nvar Class = require('../utils/Class');\n\nvar EPSILON = 0.000001;\n\n/**\n * @classdesc\n * A four-dimensional matrix.\n *\n * @class Matrix4\n * @memberof Phaser.Math\n * @constructor\n * @since 3.0.0\n *\n * @param {Phaser.Math.Matrix4} [m] - Optional Matrix4 to copy values from.\n */\nvar Matrix4 = new Class({\n\n initialize:\n\n function Matrix4 (m)\n {\n /**\n * The matrix values.\n *\n * @name Phaser.Math.Matrix4#val\n * @type {Float32Array}\n * @since 3.0.0\n */\n this.val = new Float32Array(16);\n\n if (m)\n {\n // Assume Matrix4 with val:\n this.copy(m);\n }\n else\n {\n // Default to identity\n this.identity();\n }\n },\n\n /**\n * Make a clone of this Matrix4.\n *\n * @method Phaser.Math.Matrix4#clone\n * @since 3.0.0\n *\n * @return {Phaser.Math.Matrix4} A clone of this Matrix4.\n */\n clone: function ()\n {\n return new Matrix4(this);\n },\n\n // TODO - Should work with basic values\n\n /**\n * This method is an alias for `Matrix4.copy`.\n *\n * @method Phaser.Math.Matrix4#set\n * @since 3.0.0\n *\n * @param {Phaser.Math.Matrix4} src - The Matrix to set the values of this Matrix's from.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n set: function (src)\n {\n return this.copy(src);\n },\n\n /**\n * Copy the values of a given Matrix into this Matrix.\n *\n * @method Phaser.Math.Matrix4#copy\n * @since 3.0.0\n *\n * @param {Phaser.Math.Matrix4} src - The Matrix to copy the values from.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n copy: function (src)\n {\n var out = this.val;\n var a = src.val;\n\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n\n return this;\n },\n\n /**\n * Set the values of this Matrix from the given array.\n *\n * @method Phaser.Math.Matrix4#fromArray\n * @since 3.0.0\n *\n * @param {array} a - The array to copy the values from.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n fromArray: function (a)\n {\n var out = this.val;\n\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n\n return this;\n },\n\n /**\n * Reset this Matrix.\n *\n * Sets all values to `0`.\n *\n * @method Phaser.Math.Matrix4#zero\n * @since 3.0.0\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n zero: function ()\n {\n var out = this.val;\n\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 0;\n\n return this;\n },\n\n /**\n * Set the `x`, `y` and `z` values of this Matrix.\n *\n * @method Phaser.Math.Matrix4#xyz\n * @since 3.0.0\n *\n * @param {number} x - The x value.\n * @param {number} y - The y value.\n * @param {number} z - The z value.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n xyz: function (x, y, z)\n {\n this.identity();\n\n var out = this.val;\n\n out[12] = x;\n out[13] = y;\n out[14] = z;\n\n return this;\n },\n\n /**\n * Set the scaling values of this Matrix.\n *\n * @method Phaser.Math.Matrix4#scaling\n * @since 3.0.0\n *\n * @param {number} x - The x scaling value.\n * @param {number} y - The y scaling value.\n * @param {number} z - The z scaling value.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n scaling: function (x, y, z)\n {\n this.zero();\n\n var out = this.val;\n\n out[0] = x;\n out[5] = y;\n out[10] = z;\n out[15] = 1;\n\n return this;\n },\n\n /**\n * Reset this Matrix to an identity (default) matrix.\n *\n * @method Phaser.Math.Matrix4#identity\n * @since 3.0.0\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n identity: function ()\n {\n var out = this.val;\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n\n return this;\n },\n\n /**\n * Transpose this Matrix.\n *\n * @method Phaser.Math.Matrix4#transpose\n * @since 3.0.0\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n transpose: function ()\n {\n var a = this.val;\n\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a12 = a[6];\n var a13 = a[7];\n var a23 = a[11];\n\n a[1] = a[4];\n a[2] = a[8];\n a[3] = a[12];\n a[4] = a01;\n a[6] = a[9];\n a[7] = a[13];\n a[8] = a02;\n a[9] = a12;\n a[11] = a[14];\n a[12] = a03;\n a[13] = a13;\n a[14] = a23;\n\n return this;\n },\n\n /**\n * Invert this Matrix.\n *\n * @method Phaser.Math.Matrix4#invert\n * @since 3.0.0\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n invert: function ()\n {\n var a = this.val;\n\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n var a30 = a[12];\n var a31 = a[13];\n var a32 = a[14];\n var a33 = a[15];\n\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det)\n {\n return null;\n }\n\n det = 1 / det;\n\n a[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n a[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n a[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n a[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n a[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n a[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n a[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n a[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n a[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n a[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n a[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n a[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n a[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n a[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n a[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n a[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\n return this;\n },\n\n /**\n * Calculate the adjoint, or adjugate, of this Matrix.\n *\n * @method Phaser.Math.Matrix4#adjoint\n * @since 3.0.0\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n adjoint: function ()\n {\n var a = this.val;\n\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n var a30 = a[12];\n var a31 = a[13];\n var a32 = a[14];\n var a33 = a[15];\n\n a[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n a[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n a[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n a[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n a[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n a[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n a[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n a[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n a[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n a[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n a[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n a[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n a[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n a[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n a[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n a[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n\n return this;\n },\n\n /**\n * Calculate the determinant of this Matrix.\n *\n * @method Phaser.Math.Matrix4#determinant\n * @since 3.0.0\n *\n * @return {number} The determinant of this Matrix.\n */\n determinant: function ()\n {\n var a = this.val;\n\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n var a30 = a[12];\n var a31 = a[13];\n var a32 = a[14];\n var a33 = a[15];\n\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n },\n\n /**\n * Multiply this Matrix by the given Matrix.\n *\n * @method Phaser.Math.Matrix4#multiply\n * @since 3.0.0\n *\n * @param {Phaser.Math.Matrix4} src - The Matrix to multiply this Matrix by.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n multiply: function (src)\n {\n var a = this.val;\n\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n var a30 = a[12];\n var a31 = a[13];\n var a32 = a[14];\n var a33 = a[15];\n\n var b = src.val;\n\n // Cache only the current line of the second matrix\n var b0 = b[0];\n var b1 = b[1];\n var b2 = b[2];\n var b3 = b[3];\n\n a[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n a[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n a[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n a[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n\n a[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n a[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n a[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n a[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n\n a[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n a[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n a[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n a[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n\n a[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n a[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n a[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n a[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n return this;\n },\n\n /**\n * [description]\n *\n * @method Phaser.Math.Matrix4#multiplyLocal\n * @since 3.0.0\n *\n * @param {Phaser.Math.Matrix4} src - [description]\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n multiplyLocal: function (src)\n {\n var a = [];\n var m1 = this.val;\n var m2 = src.val;\n\n a[0] = m1[0] * m2[0] + m1[1] * m2[4] + m1[2] * m2[8] + m1[3] * m2[12];\n a[1] = m1[0] * m2[1] + m1[1] * m2[5] + m1[2] * m2[9] + m1[3] * m2[13];\n a[2] = m1[0] * m2[2] + m1[1] * m2[6] + m1[2] * m2[10] + m1[3] * m2[14];\n a[3] = m1[0] * m2[3] + m1[1] * m2[7] + m1[2] * m2[11] + m1[3] * m2[15];\n\n a[4] = m1[4] * m2[0] + m1[5] * m2[4] + m1[6] * m2[8] + m1[7] * m2[12];\n a[5] = m1[4] * m2[1] + m1[5] * m2[5] + m1[6] * m2[9] + m1[7] * m2[13];\n a[6] = m1[4] * m2[2] + m1[5] * m2[6] + m1[6] * m2[10] + m1[7] * m2[14];\n a[7] = m1[4] * m2[3] + m1[5] * m2[7] + m1[6] * m2[11] + m1[7] * m2[15];\n\n a[8] = m1[8] * m2[0] + m1[9] * m2[4] + m1[10] * m2[8] + m1[11] * m2[12];\n a[9] = m1[8] * m2[1] + m1[9] * m2[5] + m1[10] * m2[9] + m1[11] * m2[13];\n a[10] = m1[8] * m2[2] + m1[9] * m2[6] + m1[10] * m2[10] + m1[11] * m2[14];\n a[11] = m1[8] * m2[3] + m1[9] * m2[7] + m1[10] * m2[11] + m1[11] * m2[15];\n\n a[12] = m1[12] * m2[0] + m1[13] * m2[4] + m1[14] * m2[8] + m1[15] * m2[12];\n a[13] = m1[12] * m2[1] + m1[13] * m2[5] + m1[14] * m2[9] + m1[15] * m2[13];\n a[14] = m1[12] * m2[2] + m1[13] * m2[6] + m1[14] * m2[10] + m1[15] * m2[14];\n a[15] = m1[12] * m2[3] + m1[13] * m2[7] + m1[14] * m2[11] + m1[15] * m2[15];\n\n return this.fromArray(a);\n },\n\n /**\n * Translate this Matrix using the given Vector.\n *\n * @method Phaser.Math.Matrix4#translate\n * @since 3.0.0\n *\n * @param {(Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to translate this Matrix with.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n translate: function (v)\n {\n var x = v.x;\n var y = v.y;\n var z = v.z;\n var a = this.val;\n\n a[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n a[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n a[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n a[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n\n return this;\n },\n\n /**\n * Translate this Matrix using the given values.\n *\n * @method Phaser.Math.Matrix4#translateXYZ\n * @since 3.16.0\n *\n * @param {number} x - The x component.\n * @param {number} y - The y component.\n * @param {number} z - The z component.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n translateXYZ: function (x, y, z)\n {\n var a = this.val;\n\n a[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n a[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n a[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n a[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n\n return this;\n },\n\n /**\n * Apply a scale transformation to this Matrix.\n *\n * Uses the `x`, `y` and `z` components of the given Vector to scale the Matrix.\n *\n * @method Phaser.Math.Matrix4#scale\n * @since 3.0.0\n *\n * @param {(Phaser.Math.Vector3|Phaser.Math.Vector4)} v - The Vector to scale this Matrix with.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n scale: function (v)\n {\n var x = v.x;\n var y = v.y;\n var z = v.z;\n var a = this.val;\n\n a[0] = a[0] * x;\n a[1] = a[1] * x;\n a[2] = a[2] * x;\n a[3] = a[3] * x;\n\n a[4] = a[4] * y;\n a[5] = a[5] * y;\n a[6] = a[6] * y;\n a[7] = a[7] * y;\n\n a[8] = a[8] * z;\n a[9] = a[9] * z;\n a[10] = a[10] * z;\n a[11] = a[11] * z;\n\n return this;\n },\n\n /**\n * Apply a scale transformation to this Matrix.\n *\n * @method Phaser.Math.Matrix4#scaleXYZ\n * @since 3.16.0\n *\n * @param {number} x - The x component.\n * @param {number} y - The y component.\n * @param {number} z - The z component.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n scaleXYZ: function (x, y, z)\n {\n var a = this.val;\n\n a[0] = a[0] * x;\n a[1] = a[1] * x;\n a[2] = a[2] * x;\n a[3] = a[3] * x;\n\n a[4] = a[4] * y;\n a[5] = a[5] * y;\n a[6] = a[6] * y;\n a[7] = a[7] * y;\n\n a[8] = a[8] * z;\n a[9] = a[9] * z;\n a[10] = a[10] * z;\n a[11] = a[11] * z;\n\n return this;\n },\n\n /**\n * Derive a rotation matrix around the given axis.\n *\n * @method Phaser.Math.Matrix4#makeRotationAxis\n * @since 3.0.0\n *\n * @param {(Phaser.Math.Vector3|Phaser.Math.Vector4)} axis - The rotation axis.\n * @param {number} angle - The rotation angle in radians.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n makeRotationAxis: function (axis, angle)\n {\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n var c = Math.cos(angle);\n var s = Math.sin(angle);\n var t = 1 - c;\n var x = axis.x;\n var y = axis.y;\n var z = axis.z;\n var tx = t * x;\n var ty = t * y;\n\n this.fromArray([\n tx * x + c, tx * y - s * z, tx * z + s * y, 0,\n tx * y + s * z, ty * y + c, ty * z - s * x, 0,\n tx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n 0, 0, 0, 1\n ]);\n\n return this;\n },\n\n /**\n * Apply a rotation transformation to this Matrix.\n *\n * @method Phaser.Math.Matrix4#rotate\n * @since 3.0.0\n *\n * @param {number} rad - The angle in radians to rotate by.\n * @param {Phaser.Math.Vector3} axis - The axis to rotate upon.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n rotate: function (rad, axis)\n {\n var a = this.val;\n var x = axis.x;\n var y = axis.y;\n var z = axis.z;\n var len = Math.sqrt(x * x + y * y + z * z);\n\n if (Math.abs(len) < EPSILON)\n {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var t = 1 - c;\n\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n // Construct the elements of the rotation matrix\n var b00 = x * x * t + c;\n var b01 = y * x * t + z * s;\n var b02 = z * x * t - y * s;\n\n var b10 = x * y * t - z * s;\n var b11 = y * y * t + c;\n var b12 = z * y * t + x * s;\n\n var b20 = x * z * t + y * s;\n var b21 = y * z * t - x * s;\n var b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n a[0] = a00 * b00 + a10 * b01 + a20 * b02;\n a[1] = a01 * b00 + a11 * b01 + a21 * b02;\n a[2] = a02 * b00 + a12 * b01 + a22 * b02;\n a[3] = a03 * b00 + a13 * b01 + a23 * b02;\n a[4] = a00 * b10 + a10 * b11 + a20 * b12;\n a[5] = a01 * b10 + a11 * b11 + a21 * b12;\n a[6] = a02 * b10 + a12 * b11 + a22 * b12;\n a[7] = a03 * b10 + a13 * b11 + a23 * b12;\n a[8] = a00 * b20 + a10 * b21 + a20 * b22;\n a[9] = a01 * b20 + a11 * b21 + a21 * b22;\n a[10] = a02 * b20 + a12 * b21 + a22 * b22;\n a[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n return this;\n },\n\n /**\n * Rotate this matrix on its X axis.\n *\n * @method Phaser.Math.Matrix4#rotateX\n * @since 3.0.0\n *\n * @param {number} rad - The angle in radians to rotate by.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n rotateX: function (rad)\n {\n var a = this.val;\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n // Perform axis-specific matrix multiplication\n a[4] = a10 * c + a20 * s;\n a[5] = a11 * c + a21 * s;\n a[6] = a12 * c + a22 * s;\n a[7] = a13 * c + a23 * s;\n a[8] = a20 * c - a10 * s;\n a[9] = a21 * c - a11 * s;\n a[10] = a22 * c - a12 * s;\n a[11] = a23 * c - a13 * s;\n\n return this;\n },\n\n /**\n * Rotate this matrix on its Y axis.\n *\n * @method Phaser.Math.Matrix4#rotateY\n * @since 3.0.0\n *\n * @param {number} rad - The angle to rotate by, in radians.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n rotateY: function (rad)\n {\n var a = this.val;\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n // Perform axis-specific matrix multiplication\n a[0] = a00 * c - a20 * s;\n a[1] = a01 * c - a21 * s;\n a[2] = a02 * c - a22 * s;\n a[3] = a03 * c - a23 * s;\n a[8] = a00 * s + a20 * c;\n a[9] = a01 * s + a21 * c;\n a[10] = a02 * s + a22 * c;\n a[11] = a03 * s + a23 * c;\n\n return this;\n },\n\n /**\n * Rotate this matrix on its Z axis.\n *\n * @method Phaser.Math.Matrix4#rotateZ\n * @since 3.0.0\n *\n * @param {number} rad - The angle to rotate by, in radians.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n rotateZ: function (rad)\n {\n var a = this.val;\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n // Perform axis-specific matrix multiplication\n a[0] = a00 * c + a10 * s;\n a[1] = a01 * c + a11 * s;\n a[2] = a02 * c + a12 * s;\n a[3] = a03 * c + a13 * s;\n a[4] = a10 * c - a00 * s;\n a[5] = a11 * c - a01 * s;\n a[6] = a12 * c - a02 * s;\n a[7] = a13 * c - a03 * s;\n\n return this;\n },\n\n /**\n * Set the values of this Matrix from the given rotation Quaternion and translation Vector.\n *\n * @method Phaser.Math.Matrix4#fromRotationTranslation\n * @since 3.0.0\n *\n * @param {Phaser.Math.Quaternion} q - The Quaternion to set rotation from.\n * @param {Phaser.Math.Vector3} v - The Vector to set translation from.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n fromRotationTranslation: function (q, v)\n {\n // Quaternion math\n var out = this.val;\n\n var x = q.x;\n var y = q.y;\n var z = q.z;\n var w = q.w;\n\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n\n out[12] = v.x;\n out[13] = v.y;\n out[14] = v.z;\n out[15] = 1;\n\n return this;\n },\n\n /**\n * Set the values of this Matrix from the given Quaternion.\n *\n * @method Phaser.Math.Matrix4#fromQuat\n * @since 3.0.0\n *\n * @param {Phaser.Math.Quaternion} q - The Quaternion to set the values of this Matrix from.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n fromQuat: function (q)\n {\n var out = this.val;\n\n var x = q.x;\n var y = q.y;\n var z = q.z;\n var w = q.w;\n\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n\n return this;\n },\n\n /**\n * Generate a frustum matrix with the given bounds.\n *\n * @method Phaser.Math.Matrix4#frustum\n * @since 3.0.0\n *\n * @param {number} left - The left bound of the frustum.\n * @param {number} right - The right bound of the frustum.\n * @param {number} bottom - The bottom bound of the frustum.\n * @param {number} top - The top bound of the frustum.\n * @param {number} near - The near bound of the frustum.\n * @param {number} far - The far bound of the frustum.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n frustum: function (left, right, bottom, top, near, far)\n {\n var out = this.val;\n\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n\n out[0] = (near * 2) * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n\n out[4] = 0;\n out[5] = (near * 2) * tb;\n out[6] = 0;\n out[7] = 0;\n\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = (far * near * 2) * nf;\n out[15] = 0;\n\n return this;\n },\n\n /**\n * Generate a perspective projection matrix with the given bounds.\n *\n * @method Phaser.Math.Matrix4#perspective\n * @since 3.0.0\n *\n * @param {number} fovy - Vertical field of view in radians\n * @param {number} aspect - Aspect ratio. Typically viewport width /height.\n * @param {number} near - Near bound of the frustum.\n * @param {number} far - Far bound of the frustum.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n perspective: function (fovy, aspect, near, far)\n {\n var out = this.val;\n var f = 1.0 / Math.tan(fovy / 2);\n var nf = 1 / (near - far);\n\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n\n out[8] = 0;\n out[9] = 0;\n out[10] = (far + near) * nf;\n out[11] = -1;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = (2 * far * near) * nf;\n out[15] = 0;\n\n return this;\n },\n\n /**\n * Generate a perspective projection matrix with the given bounds.\n *\n * @method Phaser.Math.Matrix4#perspectiveLH\n * @since 3.0.0\n *\n * @param {number} width - The width of the frustum.\n * @param {number} height - The height of the frustum.\n * @param {number} near - Near bound of the frustum.\n * @param {number} far - Far bound of the frustum.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n perspectiveLH: function (width, height, near, far)\n {\n var out = this.val;\n\n out[0] = (2 * near) / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n\n out[4] = 0;\n out[5] = (2 * near) / height;\n out[6] = 0;\n out[7] = 0;\n\n out[8] = 0;\n out[9] = 0;\n out[10] = -far / (near - far);\n out[11] = 1;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = (near * far) / (near - far);\n out[15] = 0;\n\n return this;\n },\n\n /**\n * Generate an orthogonal projection matrix with the given bounds.\n *\n * @method Phaser.Math.Matrix4#ortho\n * @since 3.0.0\n *\n * @param {number} left - The left bound of the frustum.\n * @param {number} right - The right bound of the frustum.\n * @param {number} bottom - The bottom bound of the frustum.\n * @param {number} top - The top bound of the frustum.\n * @param {number} near - The near bound of the frustum.\n * @param {number} far - The far bound of the frustum.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n ortho: function (left, right, bottom, top, near, far)\n {\n var out = this.val;\n var lr = left - right;\n var bt = bottom - top;\n var nf = near - far;\n\n // Avoid division by zero\n lr = (lr === 0) ? lr : 1 / lr;\n bt = (bt === 0) ? bt : 1 / bt;\n nf = (nf === 0) ? nf : 1 / nf;\n\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n\n return this;\n },\n\n /**\n * Generate a look-at matrix with the given eye position, focal point, and up axis.\n *\n * @method Phaser.Math.Matrix4#lookAt\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector3} eye - Position of the viewer\n * @param {Phaser.Math.Vector3} center - Point the viewer is looking at\n * @param {Phaser.Math.Vector3} up - vec3 pointing up.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n lookAt: function (eye, center, up)\n {\n var out = this.val;\n\n var eyex = eye.x;\n var eyey = eye.y;\n var eyez = eye.z;\n\n var upx = up.x;\n var upy = up.y;\n var upz = up.z;\n\n var centerx = center.x;\n var centery = center.y;\n var centerz = center.z;\n\n if (Math.abs(eyex - centerx) < EPSILON &&\n Math.abs(eyey - centery) < EPSILON &&\n Math.abs(eyez - centerz) < EPSILON)\n {\n return this.identity();\n }\n\n var z0 = eyex - centerx;\n var z1 = eyey - centery;\n var z2 = eyez - centerz;\n\n var len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n var x0 = upy * z2 - upz * z1;\n var x1 = upz * z0 - upx * z2;\n var x2 = upx * z1 - upy * z0;\n\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n\n if (!len)\n {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n }\n else\n {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n var y0 = z1 * x2 - z2 * x1;\n var y1 = z2 * x0 - z0 * x2;\n var y2 = z0 * x1 - z1 * x0;\n\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n\n if (!len)\n {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n }\n else\n {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n\n return this;\n },\n\n /**\n * Set the values of this matrix from the given `yaw`, `pitch` and `roll` values.\n *\n * @method Phaser.Math.Matrix4#yawPitchRoll\n * @since 3.0.0\n *\n * @param {number} yaw - [description]\n * @param {number} pitch - [description]\n * @param {number} roll - [description]\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n yawPitchRoll: function (yaw, pitch, roll)\n {\n this.zero();\n _tempMat1.zero();\n _tempMat2.zero();\n\n var m0 = this.val;\n var m1 = _tempMat1.val;\n var m2 = _tempMat2.val;\n\n // Rotate Z\n var s = Math.sin(roll);\n var c = Math.cos(roll);\n\n m0[10] = 1;\n m0[15] = 1;\n m0[0] = c;\n m0[1] = s;\n m0[4] = -s;\n m0[5] = c;\n\n // Rotate X\n s = Math.sin(pitch);\n c = Math.cos(pitch);\n\n m1[0] = 1;\n m1[15] = 1;\n m1[5] = c;\n m1[10] = c;\n m1[9] = -s;\n m1[6] = s;\n\n // Rotate Y\n s = Math.sin(yaw);\n c = Math.cos(yaw);\n\n m2[5] = 1;\n m2[15] = 1;\n m2[0] = c;\n m2[2] = -s;\n m2[8] = s;\n m2[10] = c;\n\n this.multiplyLocal(_tempMat1);\n this.multiplyLocal(_tempMat2);\n\n return this;\n },\n\n /**\n * Generate a world matrix from the given rotation, position, scale, view matrix and projection matrix.\n *\n * @method Phaser.Math.Matrix4#setWorldMatrix\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector3} rotation - The rotation of the world matrix.\n * @param {Phaser.Math.Vector3} position - The position of the world matrix.\n * @param {Phaser.Math.Vector3} scale - The scale of the world matrix.\n * @param {Phaser.Math.Matrix4} [viewMatrix] - The view matrix.\n * @param {Phaser.Math.Matrix4} [projectionMatrix] - The projection matrix.\n *\n * @return {Phaser.Math.Matrix4} This Matrix4.\n */\n setWorldMatrix: function (rotation, position, scale, viewMatrix, projectionMatrix)\n {\n this.yawPitchRoll(rotation.y, rotation.x, rotation.z);\n\n _tempMat1.scaling(scale.x, scale.y, scale.z);\n _tempMat2.xyz(position.x, position.y, position.z);\n\n this.multiplyLocal(_tempMat1);\n this.multiplyLocal(_tempMat2);\n\n if (viewMatrix !== undefined)\n {\n this.multiplyLocal(viewMatrix);\n }\n\n if (projectionMatrix !== undefined)\n {\n this.multiplyLocal(projectionMatrix);\n }\n\n return this;\n }\n\n});\n\nvar _tempMat1 = new Matrix4();\nvar _tempMat2 = new Matrix4();\n\nmodule.exports = Matrix4;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n// Adapted from [gl-matrix](https://github.com/toji/gl-matrix) by toji\n// and [vecmath](https://github.com/mattdesl/vecmath) by mattdesl\n\nvar Class = require('../utils/Class');\n\n/**\n * @typedef {object} Vector2Like\n *\n * @property {number} x - The x component.\n * @property {number} y - The y component.\n */\n\n/**\n * @classdesc\n * A representation of a vector in 2D space.\n *\n * A two-component vector.\n *\n * @class Vector2\n * @memberof Phaser.Math\n * @constructor\n * @since 3.0.0\n *\n * @param {number|Vector2Like} [x] - The x component, or an object with `x` and `y` properties.\n * @param {number} [y] - The y component.\n */\nvar Vector2 = new Class({\n\n initialize:\n\n function Vector2 (x, y)\n {\n /**\n * The x component of this Vector.\n *\n * @name Phaser.Math.Vector2#x\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n this.x = 0;\n\n /**\n * The y component of this Vector.\n *\n * @name Phaser.Math.Vector2#y\n * @type {number}\n * @default 0\n * @since 3.0.0\n */\n this.y = 0;\n\n if (typeof x === 'object')\n {\n this.x = x.x || 0;\n this.y = x.y || 0;\n }\n else\n {\n if (y === undefined) { y = x; }\n\n this.x = x || 0;\n this.y = y || 0;\n }\n },\n\n /**\n * Make a clone of this Vector2.\n *\n * @method Phaser.Math.Vector2#clone\n * @since 3.0.0\n *\n * @return {Phaser.Math.Vector2} A clone of this Vector2.\n */\n clone: function ()\n {\n return new Vector2(this.x, this.y);\n },\n\n /**\n * Copy the components of a given Vector into this Vector.\n *\n * @method Phaser.Math.Vector2#copy\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector to copy the components from.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n copy: function (src)\n {\n this.x = src.x || 0;\n this.y = src.y || 0;\n\n return this;\n },\n\n /**\n * Set the component values of this Vector from a given Vector2Like object.\n *\n * @method Phaser.Math.Vector2#setFromObject\n * @since 3.0.0\n *\n * @param {Vector2Like} obj - The object containing the component values to set for this Vector.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n setFromObject: function (obj)\n {\n this.x = obj.x || 0;\n this.y = obj.y || 0;\n\n return this;\n },\n\n /**\n * Set the `x` and `y` components of the this Vector to the given `x` and `y` values.\n *\n * @method Phaser.Math.Vector2#set\n * @since 3.0.0\n *\n * @param {number} x - The x value to set for this Vector.\n * @param {number} [y=x] - The y value to set for this Vector.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n set: function (x, y)\n {\n if (y === undefined) { y = x; }\n\n this.x = x;\n this.y = y;\n\n return this;\n },\n\n /**\n * This method is an alias for `Vector2.set`.\n *\n * @method Phaser.Math.Vector2#setTo\n * @since 3.4.0\n *\n * @param {number} x - The x value to set for this Vector.\n * @param {number} [y=x] - The y value to set for this Vector.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n setTo: function (x, y)\n {\n return this.set(x, y);\n },\n\n /**\n * Sets the `x` and `y` values of this object from a given polar coordinate.\n *\n * @method Phaser.Math.Vector2#setToPolar\n * @since 3.0.0\n *\n * @param {number} azimuth - The angular coordinate, in radians.\n * @param {number} [radius=1] - The radial coordinate (length).\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n setToPolar: function (azimuth, radius)\n {\n if (radius == null) { radius = 1; }\n\n this.x = Math.cos(azimuth) * radius;\n this.y = Math.sin(azimuth) * radius;\n\n return this;\n },\n\n /**\n * Check whether this Vector is equal to a given Vector.\n *\n * Performs a strict equality check against each Vector's components.\n *\n * @method Phaser.Math.Vector2#equals\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} v - The vector to compare with this Vector.\n *\n * @return {boolean} Whether the given Vector is equal to this Vector.\n */\n equals: function (v)\n {\n return ((this.x === v.x) && (this.y === v.y));\n },\n\n /**\n * Calculate the angle between this Vector and the positive x-axis, in radians.\n *\n * @method Phaser.Math.Vector2#angle\n * @since 3.0.0\n *\n * @return {number} The angle between this Vector, and the positive x-axis, given in radians.\n */\n angle: function ()\n {\n // computes the angle in radians with respect to the positive x-axis\n\n var angle = Math.atan2(this.y, this.x);\n\n if (angle < 0)\n {\n angle += 2 * Math.PI;\n }\n\n return angle;\n },\n\n /**\n * Add a given Vector to this Vector. Addition is component-wise.\n *\n * @method Phaser.Math.Vector2#add\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector to add to this Vector.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n add: function (src)\n {\n this.x += src.x;\n this.y += src.y;\n\n return this;\n },\n\n /**\n * Subtract the given Vector from this Vector. Subtraction is component-wise.\n *\n * @method Phaser.Math.Vector2#subtract\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector to subtract from this Vector.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n subtract: function (src)\n {\n this.x -= src.x;\n this.y -= src.y;\n\n return this;\n },\n\n /**\n * Perform a component-wise multiplication between this Vector and the given Vector.\n *\n * Multiplies this Vector by the given Vector.\n *\n * @method Phaser.Math.Vector2#multiply\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector to multiply this Vector by.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n multiply: function (src)\n {\n this.x *= src.x;\n this.y *= src.y;\n\n return this;\n },\n\n /**\n * Scale this Vector by the given value.\n *\n * @method Phaser.Math.Vector2#scale\n * @since 3.0.0\n *\n * @param {number} value - The value to scale this Vector by.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n scale: function (value)\n {\n if (isFinite(value))\n {\n this.x *= value;\n this.y *= value;\n }\n else\n {\n this.x = 0;\n this.y = 0;\n }\n\n return this;\n },\n\n /**\n * Perform a component-wise division between this Vector and the given Vector.\n *\n * Divides this Vector by the given Vector.\n *\n * @method Phaser.Math.Vector2#divide\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector to divide this Vector by.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n divide: function (src)\n {\n this.x /= src.x;\n this.y /= src.y;\n\n return this;\n },\n\n /**\n * Negate the `x` and `y` components of this Vector.\n *\n * @method Phaser.Math.Vector2#negate\n * @since 3.0.0\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n negate: function ()\n {\n this.x = -this.x;\n this.y = -this.y;\n\n return this;\n },\n\n /**\n * Calculate the distance between this Vector and the given Vector.\n *\n * @method Phaser.Math.Vector2#distance\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector to calculate the distance to.\n *\n * @return {number} The distance from this Vector to the given Vector.\n */\n distance: function (src)\n {\n var dx = src.x - this.x;\n var dy = src.y - this.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n },\n\n /**\n * Calculate the distance between this Vector and the given Vector, squared.\n *\n * @method Phaser.Math.Vector2#distanceSq\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector to calculate the distance to.\n *\n * @return {number} The distance from this Vector to the given Vector, squared.\n */\n distanceSq: function (src)\n {\n var dx = src.x - this.x;\n var dy = src.y - this.y;\n\n return dx * dx + dy * dy;\n },\n\n /**\n * Calculate the length (or magnitude) of this Vector.\n *\n * @method Phaser.Math.Vector2#length\n * @since 3.0.0\n *\n * @return {number} The length of this Vector.\n */\n length: function ()\n {\n var x = this.x;\n var y = this.y;\n\n return Math.sqrt(x * x + y * y);\n },\n\n /**\n * Calculate the length of this Vector squared.\n *\n * @method Phaser.Math.Vector2#lengthSq\n * @since 3.0.0\n *\n * @return {number} The length of this Vector, squared.\n */\n lengthSq: function ()\n {\n var x = this.x;\n var y = this.y;\n\n return x * x + y * y;\n },\n\n /**\n * Normalize this Vector.\n *\n * Makes the vector a unit length vector (magnitude of 1) in the same direction.\n *\n * @method Phaser.Math.Vector2#normalize\n * @since 3.0.0\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n normalize: function ()\n {\n var x = this.x;\n var y = this.y;\n var len = x * x + y * y;\n\n if (len > 0)\n {\n len = 1 / Math.sqrt(len);\n\n this.x = x * len;\n this.y = y * len;\n }\n\n return this;\n },\n\n /**\n * Right-hand normalize (make unit length) this Vector.\n *\n * @method Phaser.Math.Vector2#normalizeRightHand\n * @since 3.0.0\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n normalizeRightHand: function ()\n {\n var x = this.x;\n\n this.x = this.y * -1;\n this.y = x;\n\n return this;\n },\n\n /**\n * Calculate the dot product of this Vector and the given Vector.\n *\n * @method Phaser.Math.Vector2#dot\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector2 to dot product with this Vector2.\n *\n * @return {number} The dot product of this Vector and the given Vector.\n */\n dot: function (src)\n {\n return this.x * src.x + this.y * src.y;\n },\n\n /**\n * Calculate the cross product of this Vector and the given Vector.\n *\n * @method Phaser.Math.Vector2#cross\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector2 to cross with this Vector2.\n *\n * @return {number} The cross product of this Vector and the given Vector.\n */\n cross: function (src)\n {\n return this.x * src.y - this.y * src.x;\n },\n\n /**\n * Linearly interpolate between this Vector and the given Vector.\n *\n * Interpolates this Vector towards the given Vector.\n *\n * @method Phaser.Math.Vector2#lerp\n * @since 3.0.0\n *\n * @param {Phaser.Math.Vector2} src - The Vector2 to interpolate towards.\n * @param {number} [t=0] - The interpolation percentage, between 0 and 1.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n lerp: function (src, t)\n {\n if (t === undefined) { t = 0; }\n\n var ax = this.x;\n var ay = this.y;\n\n this.x = ax + t * (src.x - ax);\n this.y = ay + t * (src.y - ay);\n\n return this;\n },\n\n /**\n * Transform this Vector with the given Matrix.\n *\n * @method Phaser.Math.Vector2#transformMat3\n * @since 3.0.0\n *\n * @param {Phaser.Math.Matrix3} mat - The Matrix3 to transform this Vector2 with.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n transformMat3: function (mat)\n {\n var x = this.x;\n var y = this.y;\n var m = mat.val;\n\n this.x = m[0] * x + m[3] * y + m[6];\n this.y = m[1] * x + m[4] * y + m[7];\n\n return this;\n },\n\n /**\n * Transform this Vector with the given Matrix.\n *\n * @method Phaser.Math.Vector2#transformMat4\n * @since 3.0.0\n *\n * @param {Phaser.Math.Matrix4} mat - The Matrix4 to transform this Vector2 with.\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n transformMat4: function (mat)\n {\n var x = this.x;\n var y = this.y;\n var m = mat.val;\n\n this.x = m[0] * x + m[4] * y + m[12];\n this.y = m[1] * x + m[5] * y + m[13];\n\n return this;\n },\n\n /**\n * Make this Vector the zero vector (0, 0).\n *\n * @method Phaser.Math.Vector2#reset\n * @since 3.0.0\n *\n * @return {Phaser.Math.Vector2} This Vector2.\n */\n reset: function ()\n {\n this.x = 0;\n this.y = 0;\n\n return this;\n }\n\n});\n\n/**\n * A static zero Vector2 for use by reference.\n *\n * @constant\n * @name Phaser.Math.Vector2.ZERO\n * @type {Vector2}\n * @since 3.1.0\n */\nVector2.ZERO = new Vector2();\n\nmodule.exports = Vector2;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Wrap the given `value` between `min` and `max.\n *\n * @function Phaser.Math.Wrap\n * @since 3.0.0\n *\n * @param {number} value - The value to wrap.\n * @param {number} min - The minimum value.\n * @param {number} max - The maximum value.\n *\n * @return {number} The wrapped value.\n */\nvar Wrap = function (value, min, max)\n{\n var range = max - min;\n\n return (min + ((((value - min) % range) + range) % range));\n};\n\nmodule.exports = Wrap;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar CONST = require('../const');\n\n/**\n * Takes an angle in Phasers default clockwise format and converts it so that\n * 0 is North, 90 is West, 180 is South and 270 is East,\n * therefore running counter-clockwise instead of clockwise.\n * \n * You can pass in the angle from a Game Object using:\n * \n * ```javascript\n * var converted = CounterClockwise(gameobject.rotation);\n * ```\n * \n * All values for this function are in radians.\n *\n * @function Phaser.Math.Angle.CounterClockwise\n * @since 3.16.0\n *\n * @param {number} angle - The angle to convert, in radians.\n *\n * @return {number} The converted angle, in radians.\n */\nvar CounterClockwise = function (angle)\n{\n return Math.abs((((angle + CONST.TAU) % CONST.PI2) - CONST.PI2) % CONST.PI2);\n};\n\nmodule.exports = CounterClockwise;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar MathWrap = require('../Wrap');\n\n/**\n * Wrap an angle.\n *\n * Wraps the angle to a value in the range of -PI to PI.\n *\n * @function Phaser.Math.Angle.Wrap\n * @since 3.0.0\n *\n * @param {number} angle - The angle to wrap, in radians.\n *\n * @return {number} The wrapped angle, in radians.\n */\nvar Wrap = function (angle)\n{\n return MathWrap(angle, -Math.PI, Math.PI);\n};\n\nmodule.exports = Wrap;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Wrap = require('../Wrap');\n\n/**\n * Wrap an angle in degrees.\n *\n * Wraps the angle to a value in the range of -180 to 180.\n *\n * @function Phaser.Math.Angle.WrapDegrees\n * @since 3.0.0\n *\n * @param {number} angle - The angle to wrap, in degrees.\n *\n * @return {number} The wrapped angle, in degrees.\n */\nvar WrapDegrees = function (angle)\n{\n return Wrap(angle, -180, 180);\n};\n\nmodule.exports = WrapDegrees;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar MATH_CONST = {\n\n /**\n * The value of PI * 2.\n * \n * @name Phaser.Math.PI2\n * @type {number}\n * @since 3.0.0\n */\n PI2: Math.PI * 2,\n\n /**\n * The value of PI * 0.5.\n * \n * @name Phaser.Math.TAU\n * @type {number}\n * @since 3.0.0\n */\n TAU: Math.PI * 0.5,\n\n /**\n * An epsilon value (1.0e-6)\n * \n * @name Phaser.Math.EPSILON\n * @type {number}\n * @since 3.0.0\n */\n EPSILON: 1.0e-6,\n\n /**\n * For converting degrees to radians (PI / 180)\n * \n * @name Phaser.Math.DEG_TO_RAD\n * @type {number}\n * @since 3.0.0\n */\n DEG_TO_RAD: Math.PI / 180,\n\n /**\n * For converting radians to degrees (180 / PI)\n * \n * @name Phaser.Math.RAD_TO_DEG\n * @type {number}\n * @since 3.0.0\n */\n RAD_TO_DEG: 180 / Math.PI,\n\n /**\n * An instance of the Random Number Generator.\n * \n * @name Phaser.Math.RND\n * @type {Phaser.Math.RandomDataGenerator}\n * @since 3.0.0\n */\n RND: null\n\n};\n\nmodule.exports = MATH_CONST;\n","/**\n* @author Richard Davey <rich@photonstorm.com>\n* @copyright 2018 Photon Storm Ltd.\n* @license {@link https://github.com/photonstorm/phaser3-plugin-template/blob/master/LICENSE|MIT License}\n*/\n\nvar Class = require('../utils/Class');\n\n/**\n * @classdesc\n * A Global Plugin is installed just once into the Game owned Plugin Manager.\n * It can listen for Game events and respond to them.\n *\n * @class BasePlugin\n * @memberof Phaser.Plugins\n * @constructor\n * @since 3.8.0\n *\n * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Plugin Manager.\n */\nvar BasePlugin = new Class({\n\n initialize:\n\n function BasePlugin (pluginManager)\n {\n /**\n * A handy reference to the Plugin Manager that is responsible for this plugin.\n * Can be used as a route to gain access to game systems and events.\n *\n * @name Phaser.Plugins.BasePlugin#pluginManager\n * @type {Phaser.Plugins.PluginManager}\n * @protected\n * @since 3.8.0\n */\n this.pluginManager = pluginManager;\n\n /**\n * A reference to the Game instance this plugin is running under.\n *\n * @name Phaser.Plugins.BasePlugin#game\n * @type {Phaser.Game}\n * @protected\n * @since 3.8.0\n */\n this.game = pluginManager.game;\n\n /**\n * A reference to the Scene that has installed this plugin.\n * Only set if it's a Scene Plugin, otherwise `null`.\n * This property is only set when the plugin is instantiated and added to the Scene, not before.\n * You cannot use it during the `init` method, but you can during the `boot` method.\n *\n * @name Phaser.Plugins.BasePlugin#scene\n * @type {?Phaser.Scene}\n * @protected\n * @since 3.8.0\n */\n this.scene;\n\n /**\n * A reference to the Scene Systems of the Scene that has installed this plugin.\n * Only set if it's a Scene Plugin, otherwise `null`.\n * This property is only set when the plugin is instantiated and added to the Scene, not before.\n * You cannot use it during the `init` method, but you can during the `boot` method.\n *\n * @name Phaser.Plugins.BasePlugin#systems\n * @type {?Phaser.Scenes.Systems}\n * @protected\n * @since 3.8.0\n */\n this.systems;\n },\n\n /**\n * Called by the PluginManager when this plugin is first instantiated.\n * It will never be called again on this instance.\n * In here you can set-up whatever you need for this plugin to run.\n * If a plugin is set to automatically start then `BasePlugin.start` will be called immediately after this.\n *\n * @method Phaser.Plugins.BasePlugin#init\n * @since 3.8.0\n *\n * @param {?any} [data] - A value specified by the user, if any, from the `data` property of the plugin's configuration object (if started at game boot) or passed in the PluginManager's `install` method (if started manually).\n */\n init: function ()\n {\n },\n\n /**\n * Called by the PluginManager when this plugin is started.\n * If a plugin is stopped, and then started again, this will get called again.\n * Typically called immediately after `BasePlugin.init`.\n *\n * @method Phaser.Plugins.BasePlugin#start\n * @since 3.8.0\n */\n start: function ()\n {\n // Here are the game-level events you can listen to.\n // At the very least you should offer a destroy handler for when the game closes down.\n\n // var eventEmitter = this.game.events;\n\n // eventEmitter.once('destroy', this.gameDestroy, this);\n // eventEmitter.on('pause', this.gamePause, this);\n // eventEmitter.on('resume', this.gameResume, this);\n // eventEmitter.on('resize', this.gameResize, this);\n // eventEmitter.on('prestep', this.gamePreStep, this);\n // eventEmitter.on('step', this.gameStep, this);\n // eventEmitter.on('poststep', this.gamePostStep, this);\n // eventEmitter.on('prerender', this.gamePreRender, this);\n // eventEmitter.on('postrender', this.gamePostRender, this);\n },\n\n /**\n * Called by the PluginManager when this plugin is stopped.\n * The game code has requested that your plugin stop doing whatever it does.\n * It is now considered as 'inactive' by the PluginManager.\n * Handle that process here (i.e. stop listening for events, etc)\n * If the plugin is started again then `BasePlugin.start` will be called again.\n *\n * @method Phaser.Plugins.BasePlugin#stop\n * @since 3.8.0\n */\n stop: function ()\n {\n },\n\n /**\n * If this is a Scene Plugin (i.e. installed into a Scene) then this method is called when the Scene boots.\n * By this point the plugin properties `scene` and `systems` will have already been set.\n * In here you can listen for Scene events and set-up whatever you need for this plugin to run.\n *\n * @method Phaser.Plugins.BasePlugin#boot\n * @since 3.8.0\n */\n boot: function ()\n {\n // Here are the Scene events you can listen to.\n // At the very least you should offer a destroy handler for when the Scene closes down.\n\n // var eventEmitter = this.systems.events;\n\n // eventEmitter.once('destroy', this.sceneDestroy, this);\n // eventEmitter.on('start', this.sceneStart, this);\n // eventEmitter.on('preupdate', this.scenePreUpdate, this);\n // eventEmitter.on('update', this.sceneUpdate, this);\n // eventEmitter.on('postupdate', this.scenePostUpdate, this);\n // eventEmitter.on('pause', this.scenePause, this);\n // eventEmitter.on('resume', this.sceneResume, this);\n // eventEmitter.on('sleep', this.sceneSleep, this);\n // eventEmitter.on('wake', this.sceneWake, this);\n // eventEmitter.on('shutdown', this.sceneShutdown, this);\n // eventEmitter.on('destroy', this.sceneDestroy, this);\n },\n\n /**\n * Game instance has been destroyed.\n * You must release everything in here, all references, all objects, free it all up.\n *\n * @method Phaser.Plugins.BasePlugin#destroy\n * @since 3.8.0\n */\n destroy: function ()\n {\n this.pluginManager = null;\n this.game = null;\n this.scene = null;\n this.systems = null;\n }\n\n});\n\nmodule.exports = BasePlugin;\n","/**\n* @author Richard Davey <rich@photonstorm.com>\n* @copyright 2018 Photon Storm Ltd.\n* @license {@link https://github.com/photonstorm/phaser3-plugin-template/blob/master/LICENSE|MIT License}\n*/\n\nvar BasePlugin = require('./BasePlugin');\nvar Class = require('../utils/Class');\n\n/**\n * @classdesc\n * A Scene Level Plugin is installed into every Scene and belongs to that Scene.\n * It can listen for Scene events and respond to them.\n * It can map itself to a Scene property, or into the Scene Systems, or both.\n *\n * @class ScenePlugin\n * @memberof Phaser.Plugins\n * @extends Phaser.Plugins.BasePlugin\n * @constructor\n * @since 3.8.0\n *\n * @param {Phaser.Scene} scene - A reference to the Scene that has installed this plugin.\n * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Plugin Manager.\n */\nvar ScenePlugin = new Class({\n\n Extends: BasePlugin,\n\n initialize:\n\n function ScenePlugin (scene, pluginManager)\n {\n BasePlugin.call(this, pluginManager);\n\n this.scene = scene;\n this.systems = scene.sys;\n\n scene.sys.events.once('boot', this.boot, this);\n },\n\n /**\n * This method is called when the Scene boots. It is only ever called once.\n * \n * By this point the plugin properties `scene` and `systems` will have already been set.\n * \n * In here you can listen for Scene events and set-up whatever you need for this plugin to run.\n * Here are the Scene events you can listen to:\n * \n * start\n * ready\n * preupdate\n * update\n * postupdate\n * resize\n * pause\n * resume\n * sleep\n * wake\n * transitioninit\n * transitionstart\n * transitioncomplete\n * transitionout\n * shutdown\n * destroy\n * \n * At the very least you should offer a destroy handler for when the Scene closes down, i.e:\n *\n * ```javascript\n * var eventEmitter = this.systems.events;\n * eventEmitter.once('destroy', this.sceneDestroy, this);\n * ```\n *\n * @method Phaser.Plugins.ScenePlugin#boot\n * @since 3.8.0\n */\n boot: function ()\n {\n }\n\n});\n\nmodule.exports = ScenePlugin;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Phaser Blend Modes.\n * \n * @name Phaser.BlendModes\n * @enum {integer}\n * @memberof Phaser\n * @readonly\n * @since 3.0.0\n */\n\nmodule.exports = {\n\n /**\n * Skips the Blend Mode check in the renderer.\n * \n * @name Phaser.BlendModes.SKIP_CHECK\n */\n SKIP_CHECK: -1,\n\n /**\n * Normal blend mode.\n * \n * @name Phaser.BlendModes.NORMAL\n */\n NORMAL: 0,\n\n /**\n * Add blend mode.\n * \n * @name Phaser.BlendModes.ADD\n */\n ADD: 1,\n\n /**\n * Multiply blend mode.\n * \n * @name Phaser.BlendModes.MULTIPLY\n */\n MULTIPLY: 2,\n\n /**\n * Screen blend mode.\n * \n * @name Phaser.BlendModes.SCREEN\n */\n SCREEN: 3,\n\n /**\n * Overlay blend mode.\n * \n * @name Phaser.BlendModes.OVERLAY\n */\n OVERLAY: 4,\n\n /**\n * Darken blend mode.\n * \n * @name Phaser.BlendModes.DARKEN\n */\n DARKEN: 5,\n\n /**\n * Lighten blend mode.\n * \n * @name Phaser.BlendModes.LIGHTEN\n */\n LIGHTEN: 6,\n\n /**\n * Color Dodge blend mode.\n * \n * @name Phaser.BlendModes.COLOR_DODGE\n */\n COLOR_DODGE: 7,\n\n /**\n * Color Burn blend mode.\n * \n * @name Phaser.BlendModes.COLOR_BURN\n */\n COLOR_BURN: 8,\n\n /**\n * Hard Light blend mode.\n * \n * @name Phaser.BlendModes.HARD_LIGHT\n */\n HARD_LIGHT: 9,\n\n /**\n * Soft Light blend mode.\n * \n * @name Phaser.BlendModes.SOFT_LIGHT\n */\n SOFT_LIGHT: 10,\n\n /**\n * Difference blend mode.\n * \n * @name Phaser.BlendModes.DIFFERENCE\n */\n DIFFERENCE: 11,\n\n /**\n * Exclusion blend mode.\n * \n * @name Phaser.BlendModes.EXCLUSION\n */\n EXCLUSION: 12,\n\n /**\n * Hue blend mode.\n * \n * @name Phaser.BlendModes.HUE\n */\n HUE: 13,\n\n /**\n * Saturation blend mode.\n * \n * @name Phaser.BlendModes.SATURATION\n */\n SATURATION: 14,\n\n /**\n * Color blend mode.\n * \n * @name Phaser.BlendModes.COLOR\n */\n COLOR: 15,\n\n /**\n * Luminosity blend mode.\n * \n * @name Phaser.BlendModes.LUMINOSITY\n */\n LUMINOSITY: 16\n\n};\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n// Taken from klasse by mattdesl https://github.com/mattdesl/klasse\n\nfunction hasGetterOrSetter (def)\n{\n return (!!def.get && typeof def.get === 'function') || (!!def.set && typeof def.set === 'function');\n}\n\nfunction getProperty (definition, k, isClassDescriptor)\n{\n // This may be a lightweight object, OR it might be a property that was defined previously.\n\n // For simple class descriptors we can just assume its NOT previously defined.\n var def = (isClassDescriptor) ? definition[k] : Object.getOwnPropertyDescriptor(definition, k);\n\n if (!isClassDescriptor && def.value && typeof def.value === 'object')\n {\n def = def.value;\n }\n\n // This might be a regular property, or it may be a getter/setter the user defined in a class.\n if (def && hasGetterOrSetter(def))\n {\n if (typeof def.enumerable === 'undefined')\n {\n def.enumerable = true;\n }\n\n if (typeof def.configurable === 'undefined')\n {\n def.configurable = true;\n }\n\n return def;\n }\n else\n {\n return false;\n }\n}\n\nfunction hasNonConfigurable (obj, k)\n{\n var prop = Object.getOwnPropertyDescriptor(obj, k);\n\n if (!prop)\n {\n return false;\n }\n\n if (prop.value && typeof prop.value === 'object')\n {\n prop = prop.value;\n }\n\n if (prop.configurable === false)\n {\n return true;\n }\n\n return false;\n}\n\nfunction extend (ctor, definition, isClassDescriptor, extend)\n{\n for (var k in definition)\n {\n if (!definition.hasOwnProperty(k))\n {\n continue;\n }\n\n var def = getProperty(definition, k, isClassDescriptor);\n\n if (def !== false)\n {\n // If Extends is used, we will check its prototype to see if the final variable exists.\n\n var parent = extend || ctor;\n\n if (hasNonConfigurable(parent.prototype, k))\n {\n // Just skip the final property\n if (Class.ignoreFinals)\n {\n continue;\n }\n\n // We cannot re-define a property that is configurable=false.\n // So we will consider them final and throw an error. This is by\n // default so it is clear to the developer what is happening.\n // You can set ignoreFinals to true if you need to extend a class\n // which has configurable=false; it will simply not re-define final properties.\n throw new Error('cannot override final property \\'' + k + '\\', set Class.ignoreFinals = true to skip');\n }\n\n Object.defineProperty(ctor.prototype, k, def);\n }\n else\n {\n ctor.prototype[k] = definition[k];\n }\n }\n}\n\nfunction mixin (myClass, mixins)\n{\n if (!mixins)\n {\n return;\n }\n\n if (!Array.isArray(mixins))\n {\n mixins = [ mixins ];\n }\n\n for (var i = 0; i < mixins.length; i++)\n {\n extend(myClass, mixins[i].prototype || mixins[i]);\n }\n}\n\n/**\n * Creates a new class with the given descriptor.\n * The constructor, defined by the name `initialize`,\n * is an optional function. If unspecified, an anonymous\n * function will be used which calls the parent class (if\n * one exists).\n *\n * You can also use `Extends` and `Mixins` to provide subclassing\n * and inheritance.\n *\n * @class Class\n * @constructor\n * @param {Object} definition a dictionary of functions for the class\n * @example\n *\n * var MyClass = new Phaser.Class({\n *\n * initialize: function() {\n * this.foo = 2.0;\n * },\n *\n * bar: function() {\n * return this.foo + 5;\n * }\n * });\n */\nfunction Class (definition)\n{\n if (!definition)\n {\n definition = {};\n }\n\n // The variable name here dictates what we see in Chrome debugger\n var initialize;\n var Extends;\n\n if (definition.initialize)\n {\n if (typeof definition.initialize !== 'function')\n {\n throw new Error('initialize must be a function');\n }\n\n initialize = definition.initialize;\n\n // Usually we should avoid 'delete' in V8 at all costs.\n // However, its unlikely to make any performance difference\n // here since we only call this on class creation (i.e. not object creation).\n delete definition.initialize;\n }\n else if (definition.Extends)\n {\n var base = definition.Extends;\n\n initialize = function ()\n {\n base.apply(this, arguments);\n };\n }\n else\n {\n initialize = function () {};\n }\n\n if (definition.Extends)\n {\n initialize.prototype = Object.create(definition.Extends.prototype);\n initialize.prototype.constructor = initialize;\n\n // For getOwnPropertyDescriptor to work, we need to act directly on the Extends (or Mixin)\n\n Extends = definition.Extends;\n\n delete definition.Extends;\n }\n else\n {\n initialize.prototype.constructor = initialize;\n }\n\n // Grab the mixins, if they are specified...\n var mixins = null;\n\n if (definition.Mixins)\n {\n mixins = definition.Mixins;\n delete definition.Mixins;\n }\n\n // First, mixin if we can.\n mixin(initialize, mixins);\n\n // Now we grab the actual definition which defines the overrides.\n extend(initialize, definition, true, Extends);\n\n return initialize;\n}\n\nClass.extend = extend;\nClass.mixin = mixin;\nClass.ignoreFinals = false;\n\nmodule.exports = Class;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * A NOOP (No Operation) callback function.\n *\n * Used internally by Phaser when it's more expensive to determine if a callback exists\n * than it is to just invoke an empty function.\n *\n * @function Phaser.Utils.NOOP\n * @since 3.0.0\n */\nvar NOOP = function ()\n{\n // NOOP\n};\n\nmodule.exports = NOOP;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar IsPlainObject = require('./IsPlainObject');\n\n// @param {boolean} deep - Perform a deep copy?\n// @param {object} target - The target object to copy to.\n// @return {object} The extended object.\n\n/**\n * This is a slightly modified version of http://api.jquery.com/jQuery.extend/\n *\n * @function Phaser.Utils.Objects.Extend\n * @since 3.0.0\n *\n * @return {object} The extended object.\n */\nvar Extend = function ()\n{\n var options, name, src, copy, copyIsArray, clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false;\n\n // Handle a deep copy situation\n if (typeof target === 'boolean')\n {\n deep = target;\n target = arguments[1] || {};\n\n // skip the boolean and the target\n i = 2;\n }\n\n // extend Phaser if only one argument is passed\n if (length === i)\n {\n target = this;\n --i;\n }\n\n for (; i < length; i++)\n {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null)\n {\n // Extend the base object\n for (name in options)\n {\n src = target[name];\n copy = options[name];\n\n // Prevent never-ending loop\n if (target === copy)\n {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if (deep && copy && (IsPlainObject(copy) || (copyIsArray = Array.isArray(copy))))\n {\n if (copyIsArray)\n {\n copyIsArray = false;\n clone = src && Array.isArray(src) ? src : [];\n }\n else\n {\n clone = src && IsPlainObject(src) ? src : {};\n }\n\n // Never move original objects, clone them\n target[name] = Extend(deep, clone, copy);\n\n // Don't bring in undefined values\n }\n else if (copy !== undefined)\n {\n target[name] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n};\n\nmodule.exports = Extend;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * Finds the key within the top level of the {@link source} object, or returns {@link defaultValue}\n *\n * @function Phaser.Utils.Objects.GetFastValue\n * @since 3.0.0\n *\n * @param {object} source - The object to search\n * @param {string} key - The key for the property on source. Must exist at the top level of the source object (no periods)\n * @param {*} [defaultValue] - The default value to use if the key does not exist.\n *\n * @return {*} The value if found; otherwise, defaultValue (null if none provided)\n */\nvar GetFastValue = function (source, key, defaultValue)\n{\n var t = typeof(source);\n\n if (!source || t === 'number' || t === 'string')\n {\n return defaultValue;\n }\n else if (source.hasOwnProperty(key) && source[key] !== undefined)\n {\n return source[key];\n }\n else\n {\n return defaultValue;\n }\n};\n\nmodule.exports = GetFastValue;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n// Source object\n// The key as a string, or an array of keys, i.e. 'banner', or 'banner.hideBanner'\n// The default value to use if the key doesn't exist\n\n/**\n * Retrieves a value from an object.\n *\n * @function Phaser.Utils.Objects.GetValue\n * @since 3.0.0\n *\n * @param {object} source - The object to retrieve the value from.\n * @param {string} key - The name of the property to retrieve from the object. If a property is nested, the names of its preceding properties should be separated by a dot (`.`) - `banner.hideBanner` would return the value of the `hideBanner` property from the object stored in the `banner` property of the `source` object.\n * @param {*} defaultValue - The value to return if the `key` isn't found in the `source` object.\n *\n * @return {*} The value of the requested key.\n */\nvar GetValue = function (source, key, defaultValue)\n{\n if (!source || typeof source === 'number')\n {\n return defaultValue;\n }\n else if (source.hasOwnProperty(key))\n {\n return source[key];\n }\n else if (key.indexOf('.'))\n {\n var keys = key.split('.');\n var parent = source;\n var value = defaultValue;\n\n // Use for loop here so we can break early\n for (var i = 0; i < keys.length; i++)\n {\n if (parent.hasOwnProperty(keys[i]))\n {\n // Yes it has a key property, let's carry on down\n value = parent[keys[i]];\n\n parent = parent[keys[i]];\n }\n else\n {\n // Can't go any further, so reset to default\n value = defaultValue;\n break;\n }\n }\n\n return value;\n }\n else\n {\n return defaultValue;\n }\n};\n\nmodule.exports = GetValue;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\n/**\n * This is a slightly modified version of jQuery.isPlainObject.\n * A plain object is an object whose internal class property is [object Object].\n *\n * @function Phaser.Utils.Objects.IsPlainObject\n * @since 3.0.0\n *\n * @param {object} obj - The object to inspect.\n *\n * @return {boolean} `true` if the object is plain, otherwise `false`.\n */\nvar IsPlainObject = function (obj)\n{\n // Not plain objects:\n // - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n // - DOM nodes\n // - window\n if (typeof(obj) !== 'object' || obj.nodeType || obj === obj.window)\n {\n return false;\n }\n\n // Support: Firefox <20\n // The try/catch suppresses exceptions thrown when attempting to access\n // the \"constructor\" property of certain host objects, ie. |window.location|\n // https://bugzilla.mozilla.org/show_bug.cgi?id=814622\n try\n {\n if (obj.constructor && !({}).hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf'))\n {\n return false;\n }\n }\n catch (e)\n {\n return false;\n }\n\n // If the function hasn't returned already, we're confident that\n // |obj| is a plain object, created by {} or constructed with new Object\n return true;\n};\n\nmodule.exports = IsPlainObject;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../../src/utils/Class');\nvar ScenePlugin = require('../../../src/plugins/ScenePlugin');\nvar SpineFile = require('./SpineFile');\nvar SpineGameObject = require('./gameobject/SpineGameObject');\n\nvar runtime;\n\n/**\n * @classdesc\n * TODO\n *\n * @class SpinePlugin\n * @extends Phaser.Plugins.ScenePlugin\n * @constructor\n * @since 3.16.0\n *\n * @param {Phaser.Scene} scene - A reference to the Scene that has installed this plugin.\n * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Phaser Plugin Manager.\n */\nvar SpinePlugin = new Class({\n\n Extends: ScenePlugin,\n\n initialize:\n\n function SpinePlugin (scene, pluginManager, SpineRuntime)\n {\n console.log('BaseSpinePlugin created');\n\n ScenePlugin.call(this, scene, pluginManager);\n\n var game = pluginManager.game;\n\n // Create a custom cache to store the spine data (.atlas files)\n this.cache = game.cache.addCustom('spine');\n\n this.json = game.cache.json;\n\n this.textures = game.textures;\n\n this.skeletonRenderer;\n\n this.drawDebug = false;\n\n // Register our file type\n pluginManager.registerFileType('spine', this.spineFileCallback, scene);\n\n // Register our game object\n pluginManager.registerGameObject('spine', this.createSpineFactory(this));\n\n runtime = SpineRuntime;\n },\n\n spineFileCallback: function (key, jsonURL, atlasURL, jsonXhrSettings, atlasXhrSettings)\n {\n var multifile;\n \n if (Array.isArray(key))\n {\n for (var i = 0; i < key.length; i++)\n {\n multifile = new SpineFile(this, key[i]);\n \n this.addFile(multifile.files);\n }\n }\n else\n {\n multifile = new SpineFile(this, key, jsonURL, atlasURL, jsonXhrSettings, atlasXhrSettings);\n\n this.addFile(multifile.files);\n }\n \n return this;\n },\n\n /**\n * Creates a new Spine Game Object and adds it to the Scene.\n *\n * @method Phaser.GameObjects.GameObjectFactory#spineFactory\n * @since 3.16.0\n * \n * @param {number} x - The horizontal position of this Game Object.\n * @param {number} y - The vertical position of this Game Object.\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\n *\n * @return {Phaser.GameObjects.Spine} The Game Object that was created.\n */\n createSpineFactory: function (plugin)\n {\n var callback = function (x, y, key, animationName, loop)\n {\n var spineGO = new SpineGameObject(this.scene, plugin, x, y, key, animationName, loop);\n\n this.displayList.add(spineGO);\n this.updateList.add(spineGO);\n \n return spineGO;\n };\n\n return callback;\n },\n\n getRuntime: function ()\n {\n return runtime;\n },\n\n createSkeleton: function (key, skeletonJSON)\n {\n var atlas = this.getAtlas(key);\n\n var atlasLoader = new runtime.AtlasAttachmentLoader(atlas);\n \n var skeletonJson = new runtime.SkeletonJson(atlasLoader);\n\n var data = (skeletonJSON) ? skeletonJSON : this.json.get(key);\n\n var skeletonData = skeletonJson.readSkeletonData(data);\n\n var skeleton = new runtime.Skeleton(skeletonData);\n \n return { skeletonData: skeletonData, skeleton: skeleton };\n },\n\n getBounds: function (skeleton)\n {\n var offset = new runtime.Vector2();\n var size = new runtime.Vector2();\n\n skeleton.getBounds(offset, size, []);\n\n return { offset: offset, size: size };\n },\n\n createAnimationState: function (skeleton)\n {\n var stateData = new runtime.AnimationStateData(skeleton.data);\n\n var state = new runtime.AnimationState(stateData);\n\n return { stateData: stateData, state: state };\n },\n\n /**\n * The Scene that owns this plugin is shutting down.\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\n *\n * @method Camera3DPlugin#shutdown\n * @private\n * @since 3.0.0\n */\n shutdown: function ()\n {\n var eventEmitter = this.systems.events;\n\n eventEmitter.off('update', this.update, this);\n eventEmitter.off('shutdown', this.shutdown, this);\n\n this.removeAll();\n },\n\n /**\n * The Scene that owns this plugin is being destroyed.\n * We need to shutdown and then kill off all external references.\n *\n * @method Camera3DPlugin#destroy\n * @private\n * @since 3.0.0\n */\n destroy: function ()\n {\n this.shutdown();\n\n this.pluginManager = null;\n this.game = null;\n this.scene = null;\n this.systems = null;\n }\n\n});\n\nmodule.exports = SpinePlugin;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../../src/utils/Class');\nvar GetFastValue = require('../../../src/utils/object/GetFastValue');\nvar ImageFile = require('../../../src/loader/filetypes/ImageFile.js');\nvar IsPlainObject = require('../../../src/utils/object/IsPlainObject');\nvar JSONFile = require('../../../src/loader/filetypes/JSONFile.js');\nvar MultiFile = require('../../../src/loader/MultiFile.js');\nvar TextFile = require('../../../src/loader/filetypes/TextFile.js');\n\n/**\n * @typedef {object} Phaser.Loader.FileTypes.SpineFileConfig\n *\n * @property {string} key - The key of the file. Must be unique within both the Loader and the Texture Manager.\n * @property {string} [textureURL] - The absolute or relative URL to load the texture image file from.\n * @property {string} [textureExtension='png'] - The default file extension to use for the image texture if no url is provided.\n * @property {XHRSettingsObject} [textureXhrSettings] - Extra XHR Settings specifically for the texture image file.\n * @property {string} [normalMap] - The filename of an associated normal map. It uses the same path and url to load as the texture image.\n * @property {string} [atlasURL] - The absolute or relative URL to load the atlas data file from.\n * @property {string} [atlasExtension='txt'] - The default file extension to use for the atlas data if no url is provided.\n * @property {XHRSettingsObject} [atlasXhrSettings] - Extra XHR Settings specifically for the atlas data file.\n */\n\n/**\n * @classdesc\n * A Spine File suitable for loading by the Loader.\n *\n * These are created when you use the Phaser.Loader.LoaderPlugin#spine method and are not typically created directly.\n * \n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#spine.\n *\n * @class SpineFile\n * @extends Phaser.Loader.MultiFile\n * @memberof Phaser.Loader.FileTypes\n * @constructor\n *\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\n * @param {(string|Phaser.Loader.FileTypes.UnityAtlasFileConfig)} key - The key to use for this file, or a file configuration object.\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas data file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\n * @param {XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\n * @param {XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas data file. Used in replacement of the Loaders default XHR Settings.\n */\nvar SpineFile = new Class({\n\n Extends: MultiFile,\n\n initialize:\n\n function SpineFile (loader, key, jsonURL, atlasURL, jsonXhrSettings, atlasXhrSettings)\n {\n var json;\n var atlas;\n\n if (IsPlainObject(key))\n {\n var config = key;\n\n key = GetFastValue(config, 'key');\n\n json = new JSONFile(loader, {\n key: key,\n url: GetFastValue(config, 'jsonURL'),\n extension: GetFastValue(config, 'jsonExtension', 'json'),\n xhrSettings: GetFastValue(config, 'jsonXhrSettings')\n });\n\n atlas = new TextFile(loader, {\n key: key,\n url: GetFastValue(config, 'atlasURL'),\n extension: GetFastValue(config, 'atlasExtension', 'atlas'),\n xhrSettings: GetFastValue(config, 'atlasXhrSettings')\n });\n }\n else\n {\n json = new JSONFile(loader, key, jsonURL, jsonXhrSettings);\n atlas = new TextFile(loader, key, atlasURL, atlasXhrSettings);\n }\n \n atlas.cache = loader.cacheManager.custom.spine;\n\n MultiFile.call(this, loader, 'spine', key, [ json, atlas ]);\n },\n\n /**\n * Called by each File when it finishes loading.\n *\n * @method Phaser.Loader.MultiFile#onFileComplete\n * @since 3.7.0\n *\n * @param {Phaser.Loader.File} file - The File that has completed processing.\n */\n onFileComplete: function (file)\n {\n var index = this.files.indexOf(file);\n\n if (index !== -1)\n {\n this.pending--;\n\n if (file.type === 'text')\n {\n // Inspect the data for the files to now load\n var content = file.data.split('\\n');\n\n // Extract the textures\n var textures = [];\n\n for (var t = 0; t < content.length; t++)\n {\n var line = content[t];\n\n if (line.trim() === '' && t < content.length - 1)\n {\n line = content[t + 1];\n\n textures.push(line);\n }\n }\n\n var config = this.config;\n var loader = this.loader;\n\n var currentBaseURL = loader.baseURL;\n var currentPath = loader.path;\n var currentPrefix = loader.prefix;\n\n var baseURL = GetFastValue(config, 'baseURL', currentBaseURL);\n var path = GetFastValue(config, 'path', currentPath);\n var prefix = GetFastValue(config, 'prefix', currentPrefix);\n var textureXhrSettings = GetFastValue(config, 'textureXhrSettings');\n\n loader.setBaseURL(baseURL);\n loader.setPath(path);\n loader.setPrefix(prefix);\n\n for (var i = 0; i < textures.length; i++)\n {\n var textureURL = textures[i];\n\n var key = '_SP_' + textureURL;\n\n var image = new ImageFile(loader, key, textureURL, textureXhrSettings);\n\n this.addToMultiFile(image);\n\n loader.addFile(image);\n }\n\n // Reset the loader settings\n loader.setBaseURL(currentBaseURL);\n loader.setPath(currentPath);\n loader.setPrefix(currentPrefix);\n }\n }\n },\n\n /**\n * Adds this file to its target cache upon successful loading and processing.\n *\n * @method Phaser.Loader.FileTypes.SpineFile#addToCache\n * @since 3.16.0\n */\n addToCache: function ()\n {\n if (this.isReadyToProcess())\n {\n var fileJSON = this.files[0];\n\n fileJSON.addToCache();\n\n var fileText = this.files[1];\n\n fileText.addToCache();\n\n for (var i = 2; i < this.files.length; i++)\n {\n var file = this.files[i];\n\n var key = file.key.substr(4).trim();\n\n this.loader.textureManager.addImage(key, file.data);\n\n file.pendingDestroy();\n }\n\n this.complete = true;\n }\n }\n\n});\n\n/**\n * Adds a Unity YAML based Texture Atlas, or array of atlases, to the current load queue.\n *\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\n * \n * ```javascript\n * function preload ()\n * {\n * this.load.unityAtlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.txt');\n * }\n * ```\n *\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\n * loaded.\n * \n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\n *\n * Phaser expects the atlas data to be provided in a YAML formatted text file as exported from Unity.\n * \n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\n *\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\n * then remove it from the Texture Manager first, before loading a new one.\n *\n * Instead of passing arguments you can pass a configuration object, such as:\n * \n * ```javascript\n * this.load.unityAtlas({\n * key: 'mainmenu',\n * textureURL: 'images/MainMenu.png',\n * atlasURL: 'images/MainMenu.txt'\n * });\n * ```\n *\n * See the documentation for `Phaser.Loader.FileTypes.SpineFileConfig` for more details.\n *\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\n * \n * ```javascript\n * this.load.unityAtlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.json');\n * // and later in your game ...\n * this.add.image(x, y, 'mainmenu', 'background');\n * ```\n *\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\n *\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\n * this is what you would use to retrieve the image from the Texture Manager.\n *\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\n *\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\n *\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\n * \n * ```javascript\n * this.load.unityAtlas('mainmenu', [ 'images/MainMenu.png', 'images/MainMenu-n.png' ], 'images/MainMenu.txt');\n * ```\n *\n * Or, if you are using a config object use the `normalMap` property:\n * \n * ```javascript\n * this.load.unityAtlas({\n * key: 'mainmenu',\n * textureURL: 'images/MainMenu.png',\n * normalMap: 'images/MainMenu-n.png',\n * atlasURL: 'images/MainMenu.txt'\n * });\n * ```\n *\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\n * Normal maps are a WebGL only feature.\n *\n * Note: The ability to load this type of file will only be available if the Unity Atlas File type has been built into Phaser.\n * It is available in the default build but can be excluded from custom builds.\n *\n * @method Phaser.Loader.LoaderPlugin#spine\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\n * @since 3.16.0\n *\n * @param {(string|Phaser.Loader.FileTypes.SpineFileConfig|Phaser.Loader.FileTypes.SpineFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas data file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\n * @param {XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\n * @param {XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas data file. Used in replacement of the Loaders default XHR Settings.\n *\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\nFileTypesManager.register('spine', function (key, jsonURL, atlasURL, jsonXhrSettings, atlasXhrSettings)\n{\n var multifile;\n\n // Supports an Object file definition in the key argument\n // Or an array of objects in the key argument\n // Or a single entry where all arguments have been defined\n\n if (Array.isArray(key))\n {\n for (var i = 0; i < key.length; i++)\n {\n multifile = new SpineFile(this, key[i]);\n\n this.addFile(multifile.files);\n }\n }\n else\n {\n multifile = new SpineFile(this, key, jsonURL, atlasURL, jsonXhrSettings, atlasXhrSettings);\n\n this.addFile(multifile.files);\n }\n\n return this;\n});\n */\n\nmodule.exports = SpineFile;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../../src/utils/Class');\nvar BaseSpinePlugin = require('./BaseSpinePlugin');\nvar SpineWebGL = require('SpineWebGL');\nvar Matrix4 = require('../../../src/math/Matrix4');\n\n/**\n * @classdesc\n * Just the WebGL Runtime.\n *\n * @class SpinePlugin\n * @extends Phaser.Plugins.ScenePlugin\n * @constructor\n * @since 3.16.0\n *\n * @param {Phaser.Scene} scene - A reference to the Scene that has installed this plugin.\n * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Phaser Plugin Manager.\n */\nvar SpineWebGLPlugin = new Class({\n\n Extends: BaseSpinePlugin,\n\n initialize:\n\n function SpineWebGLPlugin (scene, pluginManager)\n {\n console.log('SpineWebGLPlugin created');\n\n BaseSpinePlugin.call(this, scene, pluginManager, SpineWebGL);\n\n this.gl;\n this.mvp;\n this.shader;\n this.batcher;\n this.debugRenderer;\n this.debugShader;\n },\n\n boot: function ()\n {\n var gl = this.game.renderer.gl;\n\n this.gl = gl;\n\n this.mvp = new Matrix4();\n\n // Create a simple shader, mesh, model-view-projection matrix and SkeletonRenderer.\n this.shader = SpineWebGL.webgl.Shader.newTwoColoredTextured(gl);\n this.batcher = new SpineWebGL.webgl.PolygonBatcher(gl);\n\n this.skeletonRenderer = new SpineWebGL.webgl.SkeletonRenderer(gl);\n this.skeletonRenderer.premultipliedAlpha = true;\n\n this.shapes = new SpineWebGL.webgl.ShapeRenderer(gl);\n\n this.debugRenderer = new SpineWebGL.webgl.SkeletonDebugRenderer(gl);\n\n this.debugShader = SpineWebGL.webgl.Shader.newColored(gl);\n },\n\n getAtlas: function (key)\n {\n var atlasData = this.cache.get(key);\n\n if (!atlasData)\n {\n console.warn('No atlas data for: ' + key);\n return;\n }\n\n var textures = this.textures;\n\n var gl = this.game.renderer.gl;\n\n var atlas = new SpineWebGL.TextureAtlas(atlasData, function (path)\n {\n return new SpineWebGL.webgl.GLTexture(gl, textures.get(path).getSourceImage());\n });\n\n return atlas;\n }\n\n});\n\nmodule.exports = SpineWebGLPlugin;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar Class = require('../../../../src/utils/Class');\nvar ComponentsAlpha = require('../../../../src/gameobjects/components/Alpha');\nvar ComponentsBlendMode = require('../../../../src/gameobjects/components/BlendMode');\nvar ComponentsDepth = require('../../../../src/gameobjects/components/Depth');\nvar ComponentsFlip = require('../../../../src/gameobjects/components/Flip');\nvar ComponentsScrollFactor = require('../../../../src/gameobjects/components/ScrollFactor');\nvar ComponentsTransform = require('../../../../src/gameobjects/components/Transform');\nvar ComponentsVisible = require('../../../../src/gameobjects/components/Visible');\nvar GameObject = require('../../../../src/gameobjects/GameObject');\nvar SpineGameObjectRender = require('./SpineGameObjectRender');\n\n/**\n * @classdesc\n * TODO\n *\n * @class SpineGameObject\n * @constructor\n * @since 3.16.0\n *\n * @param {Phaser.Scene} scene - A reference to the Scene that has installed this plugin.\n * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Phaser Plugin Manager.\n */\nvar SpineGameObject = new Class({\n\n Extends: GameObject,\n\n Mixins: [\n ComponentsAlpha,\n ComponentsBlendMode,\n ComponentsDepth,\n ComponentsFlip,\n ComponentsScrollFactor,\n ComponentsTransform,\n ComponentsVisible,\n SpineGameObjectRender\n ],\n\n initialize:\n\n function SpineGameObject (scene, plugin, x, y, key, animationName, loop)\n {\n GameObject.call(this, scene, 'Spine');\n\n this.plugin = plugin;\n\n this.runtime = plugin.getRuntime();\n\n this.skeleton = null;\n this.skeletonData = null;\n\n this.state = null;\n this.stateData = null;\n\n this.drawDebug = false;\n\n this.timeScale = 1;\n\n this.setPosition(x, y);\n\n if (key)\n {\n this.setSkeleton(key, animationName, loop);\n }\n },\n\n setSkeletonFromJSON: function (atlasDataKey, skeletonJSON, animationName, loop)\n {\n return this.setSkeleton(atlasDataKey, skeletonJSON, animationName, loop);\n },\n\n setSkeleton: function (atlasDataKey, animationName, loop, skeletonJSON)\n {\n var data = this.plugin.createSkeleton(atlasDataKey, skeletonJSON);\n\n this.skeletonData = data.skeletonData;\n\n var skeleton = data.skeleton;\n\n skeleton.flipY = (this.scene.sys.game.config.renderType === 1);\n\n skeleton.setToSetupPose();\n\n skeleton.updateWorldTransform();\n\n skeleton.setSkinByName('default');\n\n this.skeleton = skeleton;\n\n // AnimationState\n data = this.plugin.createAnimationState(skeleton);\n\n if (this.state)\n {\n this.state.clearListeners();\n this.state.clearListenerNotifications();\n }\n\n this.state = data.state;\n\n this.stateData = data.stateData;\n\n var _this = this;\n\n this.state.addListener({\n event: function (trackIndex, event)\n {\n // Event on a Track\n _this.emit('spine.event', _this, trackIndex, event);\n },\n complete: function (trackIndex, loopCount)\n {\n // Animation on Track x completed, loop count\n _this.emit('spine.complete', _this, trackIndex, loopCount);\n },\n start: function (trackIndex)\n {\n // Animation on Track x started\n _this.emit('spine.start', _this, trackIndex);\n },\n end: function (trackIndex)\n {\n // Animation on Track x ended\n _this.emit('spine.end', _this, trackIndex);\n }\n });\n\n if (animationName)\n {\n this.setAnimation(0, animationName, loop);\n }\n\n return this;\n },\n\n // http://esotericsoftware.com/spine-runtimes-guide\n\n getAnimationList: function ()\n {\n var output = [];\n\n var skeletonData = this.skeletonData;\n\n if (skeletonData)\n {\n for (var i = 0; i < skeletonData.animations.length; i++)\n {\n output.push(skeletonData.animations[i].name);\n }\n }\n\n return output;\n },\n\n play: function (animationName, loop)\n {\n if (loop === undefined)\n {\n loop = false;\n }\n\n return this.setAnimation(0, animationName, loop);\n },\n\n setAnimation: function (trackIndex, animationName, loop)\n {\n this.state.setAnimation(trackIndex, animationName, loop);\n\n return this;\n },\n\n addAnimation: function (trackIndex, animationName, loop, delay)\n {\n return this.state.addAnimation(trackIndex, animationName, loop, delay);\n },\n\n setEmptyAnimation: function (trackIndex, mixDuration)\n {\n this.state.setEmptyAnimation(trackIndex, mixDuration);\n\n return this;\n },\n\n clearTrack: function (trackIndex)\n {\n this.state.clearTrack(trackIndex);\n\n return this;\n },\n \n clearTracks: function ()\n {\n this.state.clearTracks();\n\n return this;\n },\n\n setSkinByName: function (skinName)\n {\n this.skeleton.setSkinByName(skinName);\n\n return this;\n },\n\n setSkin: function (newSkin)\n {\n var skeleton = this.skeleton;\n\n skeleton.setSkin(newSkin);\n\n skeleton.setSlotsToSetupPose();\n\n this.state.apply(skeleton);\n\n return this;\n },\n\n setMix: function (fromName, toName, duration)\n {\n this.stateData.setMix(fromName, toName, duration);\n\n return this;\n },\n\n findBone: function (boneName)\n {\n return this.skeleton.findBone(boneName);\n },\n\n findBoneIndex: function (boneName)\n {\n return this.skeleton.findBoneIndex(boneName);\n },\n\n findSlot: function (slotName)\n {\n return this.skeleton.findSlot(slotName);\n },\n\n findSlotIndex: function (slotName)\n {\n return this.skeleton.findSlotIndex(slotName);\n },\n\n getBounds: function ()\n {\n return this.plugin.getBounds(this.skeleton);\n },\n\n preUpdate: function (time, delta)\n {\n var skeleton = this.skeleton;\n\n skeleton.flipX = this.flipX;\n skeleton.flipY = this.flipY;\n\n this.state.update((delta / 1000) * this.timeScale);\n\n this.state.apply(skeleton);\n\n this.emit('spine.update', skeleton);\n\n skeleton.updateWorldTransform();\n },\n\n /**\n * Internal destroy handler, called as part of the destroy process.\n *\n * @method Phaser.GameObjects.RenderTexture#preDestroy\n * @protected\n * @since 3.16.0\n */\n preDestroy: function ()\n {\n if (this.state)\n {\n this.state.clearListeners();\n this.state.clearListenerNotifications();\n }\n\n this.plugin = null;\n this.runtime = null;\n\n this.skeleton = null;\n this.skeletonData = null;\n\n this.state = null;\n this.stateData = null;\n }\n\n});\n\nmodule.exports = SpineGameObject;\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar renderWebGL = require('../../../../src/utils/NOOP');\nvar renderCanvas = require('../../../../src/utils/NOOP');\n\nif (typeof WEBGL_RENDERER)\n{\n renderWebGL = require('./SpineGameObjectWebGLRenderer');\n}\n\nif (typeof CANVAS_RENDERER)\n{\n renderCanvas = require('./SpineGameObjectCanvasRenderer');\n}\n\nmodule.exports = {\n\n renderWebGL: renderWebGL,\n renderCanvas: renderCanvas\n\n};\n","/**\n * @author Richard Davey <rich@photonstorm.com>\n * @copyright 2018 Photon Storm Ltd.\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\n */\n\nvar CounterClockwise = require('../../../../src/math/angle/CounterClockwise');\n\n/**\n * Renders this Game Object with the Canvas Renderer to the given Camera.\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\n * This method should not be called directly. It is a utility function of the Render module.\n *\n * @method Phaser.GameObjects.SpineGameObject#renderCanvas\n * @since 3.16.0\n * @private\n *\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\n * @param {Phaser.GameObjects.SpineGameObject} src - The Game Object being rendered in this call.\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\n */\nvar SpineGameObjectWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\n{\n var pipeline = renderer.currentPipeline;\n var plugin = src.plugin;\n var mvp = plugin.mvp;\n\n var shader = plugin.shader;\n var batcher = plugin.batcher;\n var runtime = src.runtime;\n var skeleton = src.skeleton;\n var skeletonRenderer = plugin.skeletonRenderer;\n\n if (!skeleton)\n {\n return;\n }\n\n renderer.clearPipeline();\n\n var camMatrix = renderer._tempMatrix1;\n var spriteMatrix = renderer._tempMatrix2;\n var calcMatrix = renderer._tempMatrix3;\n\n // - 90 degrees to account for the difference in Spine vs. Phaser rotation\n spriteMatrix.applyITRS(src.x, src.y, src.rotation - 1.5707963267948966, src.scaleX, src.scaleY);\n\n camMatrix.copyFrom(camera.matrix);\n\n if (parentMatrix)\n {\n // Multiply the camera by the parent matrix\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\n\n // Undo the camera scroll\n spriteMatrix.e = src.x;\n spriteMatrix.f = src.y;\n\n // Multiply by the Sprite matrix, store result in calcMatrix\n camMatrix.multiply(spriteMatrix, calcMatrix);\n }\n else\n {\n spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\n spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\n\n // Multiply by the Sprite matrix, store result in calcMatrix\n camMatrix.multiply(spriteMatrix, calcMatrix);\n }\n\n var width = renderer.width;\n var height = renderer.height;\n\n var data = calcMatrix.decomposeMatrix();\n\n mvp.ortho(0, width, 0, height, 0, 1);\n mvp.translateXYZ(data.translateX, height - data.translateY, 0);\n mvp.rotateZ(CounterClockwise(data.rotation));\n mvp.scaleXYZ(data.scaleX, data.scaleY, 1);\n\n // For a Stage 1 release we'll handle it like this:\n shader.bind();\n shader.setUniformi(runtime.webgl.Shader.SAMPLER, 0);\n shader.setUniform4x4f(runtime.webgl.Shader.MVP_MATRIX, mvp.val);\n\n // For Stage 2, we'll move to using a custom pipeline, so Spine objects are batched\n\n batcher.begin(shader);\n\n skeletonRenderer.premultipliedAlpha = true;\n\n skeletonRenderer.draw(batcher, skeleton);\n\n batcher.end();\n\n shader.unbind();\n\n if (plugin.drawDebug || src.drawDebug)\n {\n var debugShader = plugin.debugShader;\n var debugRenderer = plugin.debugRenderer;\n var shapes = plugin.shapes;\n\n debugShader.bind();\n debugShader.setUniform4x4f(runtime.webgl.Shader.MVP_MATRIX, mvp.val);\n\n shapes.begin(debugShader);\n\n debugRenderer.draw(shapes, skeleton);\n\n shapes.end();\n\n debugShader.unbind();\n }\n\n renderer.rebindPipeline(pipeline);\n};\n\nmodule.exports = SpineGameObjectWebGLRenderer;\n","/*** IMPORTS FROM imports-loader ***/\n(function() {\n\nvar __extends = (this && this.__extends) || (function () {\n\tvar extendStatics = Object.setPrototypeOf ||\n\t\t({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t\tfunction (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\treturn function (d, b) {\n\t\textendStatics(d, b);\n\t\tfunction __() { this.constructor = d; }\n\t\td.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n})();\nvar spine;\n(function (spine) {\n\tvar Animation = (function () {\n\t\tfunction Animation(name, timelines, duration) {\n\t\t\tif (name == null)\n\t\t\t\tthrow new Error(\"name cannot be null.\");\n\t\t\tif (timelines == null)\n\t\t\t\tthrow new Error(\"timelines cannot be null.\");\n\t\t\tthis.name = name;\n\t\t\tthis.timelines = timelines;\n\t\t\tthis.duration = duration;\n\t\t}\n\t\tAnimation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, pose, direction) {\n\t\t\tif (skeleton == null)\n\t\t\t\tthrow new Error(\"skeleton cannot be null.\");\n\t\t\tif (loop && this.duration != 0) {\n\t\t\t\ttime %= this.duration;\n\t\t\t\tif (lastTime > 0)\n\t\t\t\t\tlastTime %= this.duration;\n\t\t\t}\n\t\t\tvar timelines = this.timelines;\n\t\t\tfor (var i = 0, n = timelines.length; i < n; i++)\n\t\t\t\ttimelines[i].apply(skeleton, lastTime, time, events, alpha, pose, direction);\n\t\t};\n\t\tAnimation.binarySearch = function (values, target, step) {\n\t\t\tif (step === void 0) { step = 1; }\n\t\t\tvar low = 0;\n\t\t\tvar high = values.length / step - 2;\n\t\t\tif (high == 0)\n\t\t\t\treturn step;\n\t\t\tvar current = high >>> 1;\n\t\t\twhile (true) {\n\t\t\t\tif (values[(current + 1) * step] <= target)\n\t\t\t\t\tlow = current + 1;\n\t\t\t\telse\n\t\t\t\t\thigh = current;\n\t\t\t\tif (low == high)\n\t\t\t\t\treturn (low + 1) * step;\n\t\t\t\tcurrent = (low + high) >>> 1;\n\t\t\t}\n\t\t};\n\t\tAnimation.linearSearch = function (values, target, step) {\n\t\t\tfor (var i = 0, last = values.length - step; i <= last; i += step)\n\t\t\t\tif (values[i] > target)\n\t\t\t\t\treturn i;\n\t\t\treturn -1;\n\t\t};\n\t\treturn Animation;\n\t}());\n\tspine.Animation = Animation;\n\tvar MixPose;\n\t(function (MixPose) {\n\t\tMixPose[MixPose[\"setup\"] = 0] = \"setup\";\n\t\tMixPose[MixPose[\"current\"] = 1] = \"current\";\n\t\tMixPose[MixPose[\"currentLayered\"] = 2] = \"currentLayered\";\n\t})(MixPose = spine.MixPose || (spine.MixPose = {}));\n\tvar MixDirection;\n\t(function (MixDirection) {\n\t\tMixDirection[MixDirection[\"in\"] = 0] = \"in\";\n\t\tMixDirection[MixDirection[\"out\"] = 1] = \"out\";\n\t})(MixDirection = spine.MixDirection || (spine.MixDirection = {}));\n\tvar TimelineType;\n\t(function (TimelineType) {\n\t\tTimelineType[TimelineType[\"rotate\"] = 0] = \"rotate\";\n\t\tTimelineType[TimelineType[\"translate\"] = 1] = \"translate\";\n\t\tTimelineType[TimelineType[\"scale\"] = 2] = \"scale\";\n\t\tTimelineType[TimelineType[\"shear\"] = 3] = \"shear\";\n\t\tTimelineType[TimelineType[\"attachment\"] = 4] = \"attachment\";\n\t\tTimelineType[TimelineType[\"color\"] = 5] = \"color\";\n\t\tTimelineType[TimelineType[\"deform\"] = 6] = \"deform\";\n\t\tTimelineType[TimelineType[\"event\"] = 7] = \"event\";\n\t\tTimelineType[TimelineType[\"drawOrder\"] = 8] = \"drawOrder\";\n\t\tTimelineType[TimelineType[\"ikConstraint\"] = 9] = \"ikConstraint\";\n\t\tTimelineType[TimelineType[\"transformConstraint\"] = 10] = \"transformConstraint\";\n\t\tTimelineType[TimelineType[\"pathConstraintPosition\"] = 11] = \"pathConstraintPosition\";\n\t\tTimelineType[TimelineType[\"pathConstraintSpacing\"] = 12] = \"pathConstraintSpacing\";\n\t\tTimelineType[TimelineType[\"pathConstraintMix\"] = 13] = \"pathConstraintMix\";\n\t\tTimelineType[TimelineType[\"twoColor\"] = 14] = \"twoColor\";\n\t})(TimelineType = spine.TimelineType || (spine.TimelineType = {}));\n\tvar CurveTimeline = (function () {\n\t\tfunction CurveTimeline(frameCount) {\n\t\t\tif (frameCount <= 0)\n\t\t\t\tthrow new Error(\"frameCount must be > 0: \" + frameCount);\n\t\t\tthis.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE);\n\t\t}\n\t\tCurveTimeline.prototype.getFrameCount = function () {\n\t\t\treturn this.curves.length / CurveTimeline.BEZIER_SIZE + 1;\n\t\t};\n\t\tCurveTimeline.prototype.setLinear = function (frameIndex) {\n\t\t\tthis.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR;\n\t\t};\n\t\tCurveTimeline.prototype.setStepped = function (frameIndex) {\n\t\t\tthis.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED;\n\t\t};\n\t\tCurveTimeline.prototype.getCurveType = function (frameIndex) {\n\t\t\tvar index = frameIndex * CurveTimeline.BEZIER_SIZE;\n\t\t\tif (index == this.curves.length)\n\t\t\t\treturn CurveTimeline.LINEAR;\n\t\t\tvar type = this.curves[index];\n\t\t\tif (type == CurveTimeline.LINEAR)\n\t\t\t\treturn CurveTimeline.LINEAR;\n\t\t\tif (type == CurveTimeline.STEPPED)\n\t\t\t\treturn CurveTimeline.STEPPED;\n\t\t\treturn CurveTimeline.BEZIER;\n\t\t};\n\t\tCurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) {\n\t\t\tvar tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03;\n\t\t\tvar dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006;\n\t\t\tvar ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy;\n\t\t\tvar dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667;\n\t\t\tvar i = frameIndex * CurveTimeline.BEZIER_SIZE;\n\t\t\tvar curves = this.curves;\n\t\t\tcurves[i++] = CurveTimeline.BEZIER;\n\t\t\tvar x = dfx, y = dfy;\n\t\t\tfor (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n\t\t\t\tcurves[i] = x;\n\t\t\t\tcurves[i + 1] = y;\n\t\t\t\tdfx += ddfx;\n\t\t\t\tdfy += ddfy;\n\t\t\t\tddfx += dddfx;\n\t\t\t\tddfy += dddfy;\n\t\t\t\tx += dfx;\n\t\t\t\ty += dfy;\n\t\t\t}\n\t\t};\n\t\tCurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) {\n\t\t\tpercent = spine.MathUtils.clamp(percent, 0, 1);\n\t\t\tvar curves = this.curves;\n\t\t\tvar i = frameIndex * CurveTimeline.BEZIER_SIZE;\n\t\t\tvar type = curves[i];\n\t\t\tif (type == CurveTimeline.LINEAR)\n\t\t\t\treturn percent;\n\t\t\tif (type == CurveTimeline.STEPPED)\n\t\t\t\treturn 0;\n\t\t\ti++;\n\t\t\tvar x = 0;\n\t\t\tfor (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n\t\t\t\tx = curves[i];\n\t\t\t\tif (x >= percent) {\n\t\t\t\t\tvar prevX = void 0, prevY = void 0;\n\t\t\t\t\tif (i == start) {\n\t\t\t\t\t\tprevX = 0;\n\t\t\t\t\t\tprevY = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tprevX = curves[i - 2];\n\t\t\t\t\t\tprevY = curves[i - 1];\n\t\t\t\t\t}\n\t\t\t\t\treturn prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar y = curves[i - 1];\n\t\t\treturn y + (1 - y) * (percent - x) / (1 - x);\n\t\t};\n\t\tCurveTimeline.LINEAR = 0;\n\t\tCurveTimeline.STEPPED = 1;\n\t\tCurveTimeline.BEZIER = 2;\n\t\tCurveTimeline.BEZIER_SIZE = 10 * 2 - 1;\n\t\treturn CurveTimeline;\n\t}());\n\tspine.CurveTimeline = CurveTimeline;\n\tvar RotateTimeline = (function (_super) {\n\t\t__extends(RotateTimeline, _super);\n\t\tfunction RotateTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount << 1);\n\t\t\treturn _this;\n\t\t}\n\t\tRotateTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.rotate << 24) + this.boneIndex;\n\t\t};\n\t\tRotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) {\n\t\t\tframeIndex <<= 1;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + RotateTimeline.ROTATION] = degrees;\n\t\t};\n\t\tRotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar bone = skeleton.bones[this.boneIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tbone.rotation = bone.data.rotation;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tvar r_1 = bone.data.rotation - bone.rotation;\n\t\t\t\t\t\tr_1 -= (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360;\n\t\t\t\t\t\tbone.rotation += r_1 * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (time >= frames[frames.length - RotateTimeline.ENTRIES]) {\n\t\t\t\tif (pose == MixPose.setup)\n\t\t\t\t\tbone.rotation = bone.data.rotation + frames[frames.length + RotateTimeline.PREV_ROTATION] * alpha;\n\t\t\t\telse {\n\t\t\t\t\tvar r_2 = bone.data.rotation + frames[frames.length + RotateTimeline.PREV_ROTATION] - bone.rotation;\n\t\t\t\t\tr_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360;\n\t\t\t\t\tbone.rotation += r_2 * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES);\n\t\t\tvar prevRotation = frames[frame + RotateTimeline.PREV_ROTATION];\n\t\t\tvar frameTime = frames[frame];\n\t\t\tvar percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime));\n\t\t\tvar r = frames[frame + RotateTimeline.ROTATION] - prevRotation;\n\t\t\tr -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n\t\t\tr = prevRotation + r * percent;\n\t\t\tif (pose == MixPose.setup) {\n\t\t\t\tr -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n\t\t\t\tbone.rotation = bone.data.rotation + r * alpha;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tr = bone.data.rotation + r - bone.rotation;\n\t\t\t\tr -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n\t\t\t\tbone.rotation += r * alpha;\n\t\t\t}\n\t\t};\n\t\tRotateTimeline.ENTRIES = 2;\n\t\tRotateTimeline.PREV_TIME = -2;\n\t\tRotateTimeline.PREV_ROTATION = -1;\n\t\tRotateTimeline.ROTATION = 1;\n\t\treturn RotateTimeline;\n\t}(CurveTimeline));\n\tspine.RotateTimeline = RotateTimeline;\n\tvar TranslateTimeline = (function (_super) {\n\t\t__extends(TranslateTimeline, _super);\n\t\tfunction TranslateTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES);\n\t\t\treturn _this;\n\t\t}\n\t\tTranslateTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.translate << 24) + this.boneIndex;\n\t\t};\n\t\tTranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) {\n\t\t\tframeIndex *= TranslateTimeline.ENTRIES;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + TranslateTimeline.X] = x;\n\t\t\tthis.frames[frameIndex + TranslateTimeline.Y] = y;\n\t\t};\n\t\tTranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar bone = skeleton.bones[this.boneIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tbone.x = bone.data.x;\n\t\t\t\t\t\tbone.y = bone.data.y;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tbone.x += (bone.data.x - bone.x) * alpha;\n\t\t\t\t\t\tbone.y += (bone.data.y - bone.y) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar x = 0, y = 0;\n\t\t\tif (time >= frames[frames.length - TranslateTimeline.ENTRIES]) {\n\t\t\t\tx = frames[frames.length + TranslateTimeline.PREV_X];\n\t\t\t\ty = frames[frames.length + TranslateTimeline.PREV_Y];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES);\n\t\t\t\tx = frames[frame + TranslateTimeline.PREV_X];\n\t\t\t\ty = frames[frame + TranslateTimeline.PREV_Y];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime));\n\t\t\t\tx += (frames[frame + TranslateTimeline.X] - x) * percent;\n\t\t\t\ty += (frames[frame + TranslateTimeline.Y] - y) * percent;\n\t\t\t}\n\t\t\tif (pose == MixPose.setup) {\n\t\t\t\tbone.x = bone.data.x + x * alpha;\n\t\t\t\tbone.y = bone.data.y + y * alpha;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbone.x += (bone.data.x + x - bone.x) * alpha;\n\t\t\t\tbone.y += (bone.data.y + y - bone.y) * alpha;\n\t\t\t}\n\t\t};\n\t\tTranslateTimeline.ENTRIES = 3;\n\t\tTranslateTimeline.PREV_TIME = -3;\n\t\tTranslateTimeline.PREV_X = -2;\n\t\tTranslateTimeline.PREV_Y = -1;\n\t\tTranslateTimeline.X = 1;\n\t\tTranslateTimeline.Y = 2;\n\t\treturn TranslateTimeline;\n\t}(CurveTimeline));\n\tspine.TranslateTimeline = TranslateTimeline;\n\tvar ScaleTimeline = (function (_super) {\n\t\t__extends(ScaleTimeline, _super);\n\t\tfunction ScaleTimeline(frameCount) {\n\t\t\treturn _super.call(this, frameCount) || this;\n\t\t}\n\t\tScaleTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.scale << 24) + this.boneIndex;\n\t\t};\n\t\tScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar bone = skeleton.bones[this.boneIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tbone.scaleX = bone.data.scaleX;\n\t\t\t\t\t\tbone.scaleY = bone.data.scaleY;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tbone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n\t\t\t\t\t\tbone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar x = 0, y = 0;\n\t\t\tif (time >= frames[frames.length - ScaleTimeline.ENTRIES]) {\n\t\t\t\tx = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX;\n\t\t\t\ty = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES);\n\t\t\t\tx = frames[frame + ScaleTimeline.PREV_X];\n\t\t\t\ty = frames[frame + ScaleTimeline.PREV_Y];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime));\n\t\t\t\tx = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX;\n\t\t\t\ty = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY;\n\t\t\t}\n\t\t\tif (alpha == 1) {\n\t\t\t\tbone.scaleX = x;\n\t\t\t\tbone.scaleY = y;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar bx = 0, by = 0;\n\t\t\t\tif (pose == MixPose.setup) {\n\t\t\t\t\tbx = bone.data.scaleX;\n\t\t\t\t\tby = bone.data.scaleY;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tbx = bone.scaleX;\n\t\t\t\t\tby = bone.scaleY;\n\t\t\t\t}\n\t\t\t\tif (direction == MixDirection.out) {\n\t\t\t\t\tx = Math.abs(x) * spine.MathUtils.signum(bx);\n\t\t\t\t\ty = Math.abs(y) * spine.MathUtils.signum(by);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tbx = Math.abs(bx) * spine.MathUtils.signum(x);\n\t\t\t\t\tby = Math.abs(by) * spine.MathUtils.signum(y);\n\t\t\t\t}\n\t\t\t\tbone.scaleX = bx + (x - bx) * alpha;\n\t\t\t\tbone.scaleY = by + (y - by) * alpha;\n\t\t\t}\n\t\t};\n\t\treturn ScaleTimeline;\n\t}(TranslateTimeline));\n\tspine.ScaleTimeline = ScaleTimeline;\n\tvar ShearTimeline = (function (_super) {\n\t\t__extends(ShearTimeline, _super);\n\t\tfunction ShearTimeline(frameCount) {\n\t\t\treturn _super.call(this, frameCount) || this;\n\t\t}\n\t\tShearTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.shear << 24) + this.boneIndex;\n\t\t};\n\t\tShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar bone = skeleton.bones[this.boneIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tbone.shearX = bone.data.shearX;\n\t\t\t\t\t\tbone.shearY = bone.data.shearY;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tbone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n\t\t\t\t\t\tbone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar x = 0, y = 0;\n\t\t\tif (time >= frames[frames.length - ShearTimeline.ENTRIES]) {\n\t\t\t\tx = frames[frames.length + ShearTimeline.PREV_X];\n\t\t\t\ty = frames[frames.length + ShearTimeline.PREV_Y];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES);\n\t\t\t\tx = frames[frame + ShearTimeline.PREV_X];\n\t\t\t\ty = frames[frame + ShearTimeline.PREV_Y];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime));\n\t\t\t\tx = x + (frames[frame + ShearTimeline.X] - x) * percent;\n\t\t\t\ty = y + (frames[frame + ShearTimeline.Y] - y) * percent;\n\t\t\t}\n\t\t\tif (pose == MixPose.setup) {\n\t\t\t\tbone.shearX = bone.data.shearX + x * alpha;\n\t\t\t\tbone.shearY = bone.data.shearY + y * alpha;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n\t\t\t\tbone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n\t\t\t}\n\t\t};\n\t\treturn ShearTimeline;\n\t}(TranslateTimeline));\n\tspine.ShearTimeline = ShearTimeline;\n\tvar ColorTimeline = (function (_super) {\n\t\t__extends(ColorTimeline, _super);\n\t\tfunction ColorTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES);\n\t\t\treturn _this;\n\t\t}\n\t\tColorTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.color << 24) + this.slotIndex;\n\t\t};\n\t\tColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) {\n\t\t\tframeIndex *= ColorTimeline.ENTRIES;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + ColorTimeline.R] = r;\n\t\t\tthis.frames[frameIndex + ColorTimeline.G] = g;\n\t\t\tthis.frames[frameIndex + ColorTimeline.B] = b;\n\t\t\tthis.frames[frameIndex + ColorTimeline.A] = a;\n\t\t};\n\t\tColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, pose, direction) {\n\t\t\tvar slot = skeleton.slots[this.slotIndex];\n\t\t\tvar frames = this.frames;\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tslot.color.setFromColor(slot.data.color);\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tvar color = slot.color, setup = slot.data.color;\n\t\t\t\t\t\tcolor.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar r = 0, g = 0, b = 0, a = 0;\n\t\t\tif (time >= frames[frames.length - ColorTimeline.ENTRIES]) {\n\t\t\t\tvar i = frames.length;\n\t\t\t\tr = frames[i + ColorTimeline.PREV_R];\n\t\t\t\tg = frames[i + ColorTimeline.PREV_G];\n\t\t\t\tb = frames[i + ColorTimeline.PREV_B];\n\t\t\t\ta = frames[i + ColorTimeline.PREV_A];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES);\n\t\t\t\tr = frames[frame + ColorTimeline.PREV_R];\n\t\t\t\tg = frames[frame + ColorTimeline.PREV_G];\n\t\t\t\tb = frames[frame + ColorTimeline.PREV_B];\n\t\t\t\ta = frames[frame + ColorTimeline.PREV_A];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime));\n\t\t\t\tr += (frames[frame + ColorTimeline.R] - r) * percent;\n\t\t\t\tg += (frames[frame + ColorTimeline.G] - g) * percent;\n\t\t\t\tb += (frames[frame + ColorTimeline.B] - b) * percent;\n\t\t\t\ta += (frames[frame + ColorTimeline.A] - a) * percent;\n\t\t\t}\n\t\t\tif (alpha == 1)\n\t\t\t\tslot.color.set(r, g, b, a);\n\t\t\telse {\n\t\t\t\tvar color = slot.color;\n\t\t\t\tif (pose == MixPose.setup)\n\t\t\t\t\tcolor.setFromColor(slot.data.color);\n\t\t\t\tcolor.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n\t\t\t}\n\t\t};\n\t\tColorTimeline.ENTRIES = 5;\n\t\tColorTimeline.PREV_TIME = -5;\n\t\tColorTimeline.PREV_R = -4;\n\t\tColorTimeline.PREV_G = -3;\n\t\tColorTimeline.PREV_B = -2;\n\t\tColorTimeline.PREV_A = -1;\n\t\tColorTimeline.R = 1;\n\t\tColorTimeline.G = 2;\n\t\tColorTimeline.B = 3;\n\t\tColorTimeline.A = 4;\n\t\treturn ColorTimeline;\n\t}(CurveTimeline));\n\tspine.ColorTimeline = ColorTimeline;\n\tvar TwoColorTimeline = (function (_super) {\n\t\t__extends(TwoColorTimeline, _super);\n\t\tfunction TwoColorTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES);\n\t\t\treturn _this;\n\t\t}\n\t\tTwoColorTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.twoColor << 24) + this.slotIndex;\n\t\t};\n\t\tTwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) {\n\t\t\tframeIndex *= TwoColorTimeline.ENTRIES;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + TwoColorTimeline.R] = r;\n\t\t\tthis.frames[frameIndex + TwoColorTimeline.G] = g;\n\t\t\tthis.frames[frameIndex + TwoColorTimeline.B] = b;\n\t\t\tthis.frames[frameIndex + TwoColorTimeline.A] = a;\n\t\t\tthis.frames[frameIndex + TwoColorTimeline.R2] = r2;\n\t\t\tthis.frames[frameIndex + TwoColorTimeline.G2] = g2;\n\t\t\tthis.frames[frameIndex + TwoColorTimeline.B2] = b2;\n\t\t};\n\t\tTwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, pose, direction) {\n\t\t\tvar slot = skeleton.slots[this.slotIndex];\n\t\t\tvar frames = this.frames;\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tslot.color.setFromColor(slot.data.color);\n\t\t\t\t\t\tslot.darkColor.setFromColor(slot.data.darkColor);\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tvar light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor;\n\t\t\t\t\t\tlight.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);\n\t\t\t\t\t\tdark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n\t\t\tif (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) {\n\t\t\t\tvar i = frames.length;\n\t\t\t\tr = frames[i + TwoColorTimeline.PREV_R];\n\t\t\t\tg = frames[i + TwoColorTimeline.PREV_G];\n\t\t\t\tb = frames[i + TwoColorTimeline.PREV_B];\n\t\t\t\ta = frames[i + TwoColorTimeline.PREV_A];\n\t\t\t\tr2 = frames[i + TwoColorTimeline.PREV_R2];\n\t\t\t\tg2 = frames[i + TwoColorTimeline.PREV_G2];\n\t\t\t\tb2 = frames[i + TwoColorTimeline.PREV_B2];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES);\n\t\t\t\tr = frames[frame + TwoColorTimeline.PREV_R];\n\t\t\t\tg = frames[frame + TwoColorTimeline.PREV_G];\n\t\t\t\tb = frames[frame + TwoColorTimeline.PREV_B];\n\t\t\t\ta = frames[frame + TwoColorTimeline.PREV_A];\n\t\t\t\tr2 = frames[frame + TwoColorTimeline.PREV_R2];\n\t\t\t\tg2 = frames[frame + TwoColorTimeline.PREV_G2];\n\t\t\t\tb2 = frames[frame + TwoColorTimeline.PREV_B2];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime));\n\t\t\t\tr += (frames[frame + TwoColorTimeline.R] - r) * percent;\n\t\t\t\tg += (frames[frame + TwoColorTimeline.G] - g) * percent;\n\t\t\t\tb += (frames[frame + TwoColorTimeline.B] - b) * percent;\n\t\t\t\ta += (frames[frame + TwoColorTimeline.A] - a) * percent;\n\t\t\t\tr2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent;\n\t\t\t\tg2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent;\n\t\t\t\tb2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent;\n\t\t\t}\n\t\t\tif (alpha == 1) {\n\t\t\t\tslot.color.set(r, g, b, a);\n\t\t\t\tslot.darkColor.set(r2, g2, b2, 1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar light = slot.color, dark = slot.darkColor;\n\t\t\t\tif (pose == MixPose.setup) {\n\t\t\t\t\tlight.setFromColor(slot.data.color);\n\t\t\t\t\tdark.setFromColor(slot.data.darkColor);\n\t\t\t\t}\n\t\t\t\tlight.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n\t\t\t\tdark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0);\n\t\t\t}\n\t\t};\n\t\tTwoColorTimeline.ENTRIES = 8;\n\t\tTwoColorTimeline.PREV_TIME = -8;\n\t\tTwoColorTimeline.PREV_R = -7;\n\t\tTwoColorTimeline.PREV_G = -6;\n\t\tTwoColorTimeline.PREV_B = -5;\n\t\tTwoColorTimeline.PREV_A = -4;\n\t\tTwoColorTimeline.PREV_R2 = -3;\n\t\tTwoColorTimeline.PREV_G2 = -2;\n\t\tTwoColorTimeline.PREV_B2 = -1;\n\t\tTwoColorTimeline.R = 1;\n\t\tTwoColorTimeline.G = 2;\n\t\tTwoColorTimeline.B = 3;\n\t\tTwoColorTimeline.A = 4;\n\t\tTwoColorTimeline.R2 = 5;\n\t\tTwoColorTimeline.G2 = 6;\n\t\tTwoColorTimeline.B2 = 7;\n\t\treturn TwoColorTimeline;\n\t}(CurveTimeline));\n\tspine.TwoColorTimeline = TwoColorTimeline;\n\tvar AttachmentTimeline = (function () {\n\t\tfunction AttachmentTimeline(frameCount) {\n\t\t\tthis.frames = spine.Utils.newFloatArray(frameCount);\n\t\t\tthis.attachmentNames = new Array(frameCount);\n\t\t}\n\t\tAttachmentTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.attachment << 24) + this.slotIndex;\n\t\t};\n\t\tAttachmentTimeline.prototype.getFrameCount = function () {\n\t\t\treturn this.frames.length;\n\t\t};\n\t\tAttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) {\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.attachmentNames[frameIndex] = attachmentName;\n\t\t};\n\t\tAttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, pose, direction) {\n\t\t\tvar slot = skeleton.slots[this.slotIndex];\n\t\t\tif (direction == MixDirection.out && pose == MixPose.setup) {\n\t\t\t\tvar attachmentName_1 = slot.data.attachmentName;\n\t\t\t\tslot.setAttachment(attachmentName_1 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName_1));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frames = this.frames;\n\t\t\tif (time < frames[0]) {\n\t\t\t\tif (pose == MixPose.setup) {\n\t\t\t\t\tvar attachmentName_2 = slot.data.attachmentName;\n\t\t\t\t\tslot.setAttachment(attachmentName_2 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName_2));\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frameIndex = 0;\n\t\t\tif (time >= frames[frames.length - 1])\n\t\t\t\tframeIndex = frames.length - 1;\n\t\t\telse\n\t\t\t\tframeIndex = Animation.binarySearch(frames, time, 1) - 1;\n\t\t\tvar attachmentName = this.attachmentNames[frameIndex];\n\t\t\tskeleton.slots[this.slotIndex]\n\t\t\t\t.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n\t\t};\n\t\treturn AttachmentTimeline;\n\t}());\n\tspine.AttachmentTimeline = AttachmentTimeline;\n\tvar zeros = null;\n\tvar DeformTimeline = (function (_super) {\n\t\t__extends(DeformTimeline, _super);\n\t\tfunction DeformTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount);\n\t\t\t_this.frameVertices = new Array(frameCount);\n\t\t\tif (zeros == null)\n\t\t\t\tzeros = spine.Utils.newFloatArray(64);\n\t\t\treturn _this;\n\t\t}\n\t\tDeformTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex;\n\t\t};\n\t\tDeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) {\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frameVertices[frameIndex] = vertices;\n\t\t};\n\t\tDeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tvar slot = skeleton.slots[this.slotIndex];\n\t\t\tvar slotAttachment = slot.getAttachment();\n\t\t\tif (!(slotAttachment instanceof spine.VertexAttachment) || !slotAttachment.applyDeform(this.attachment))\n\t\t\t\treturn;\n\t\t\tvar verticesArray = slot.attachmentVertices;\n\t\t\tif (verticesArray.length == 0)\n\t\t\t\talpha = 1;\n\t\t\tvar frameVertices = this.frameVertices;\n\t\t\tvar vertexCount = frameVertices[0].length;\n\t\t\tvar frames = this.frames;\n\t\t\tif (time < frames[0]) {\n\t\t\t\tvar vertexAttachment = slotAttachment;\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tverticesArray.length = 0;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tif (alpha == 1) {\n\t\t\t\t\t\t\tverticesArray.length = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar vertices_1 = spine.Utils.setArraySize(verticesArray, vertexCount);\n\t\t\t\t\t\tif (vertexAttachment.bones == null) {\n\t\t\t\t\t\t\tvar setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\t\tfor (var i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\t\tvertices_1[i] += (setupVertices[i] - vertices_1[i]) * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\talpha = 1 - alpha;\n\t\t\t\t\t\t\tfor (var i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\t\tvertices_1[i] *= alpha;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar vertices = spine.Utils.setArraySize(verticesArray, vertexCount);\n\t\t\tif (time >= frames[frames.length - 1]) {\n\t\t\t\tvar lastVertices = frameVertices[frames.length - 1];\n\t\t\t\tif (alpha == 1) {\n\t\t\t\t\tspine.Utils.arrayCopy(lastVertices, 0, vertices, 0, vertexCount);\n\t\t\t\t}\n\t\t\t\telse if (pose == MixPose.setup) {\n\t\t\t\t\tvar vertexAttachment = slotAttachment;\n\t\t\t\t\tif (vertexAttachment.bones == null) {\n\t\t\t\t\t\tvar setupVertices_1 = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (var i_1 = 0; i_1 < vertexCount; i_1++) {\n\t\t\t\t\t\t\tvar setup = setupVertices_1[i_1];\n\t\t\t\t\t\t\tvertices[i_1] = setup + (lastVertices[i_1] - setup) * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (var i_2 = 0; i_2 < vertexCount; i_2++)\n\t\t\t\t\t\t\tvertices[i_2] = lastVertices[i_2] * alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (var i_3 = 0; i_3 < vertexCount; i_3++)\n\t\t\t\t\t\tvertices[i_3] += (lastVertices[i_3] - vertices[i_3]) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frame = Animation.binarySearch(frames, time);\n\t\t\tvar prevVertices = frameVertices[frame - 1];\n\t\t\tvar nextVertices = frameVertices[frame];\n\t\t\tvar frameTime = frames[frame];\n\t\t\tvar percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime));\n\t\t\tif (alpha == 1) {\n\t\t\t\tfor (var i_4 = 0; i_4 < vertexCount; i_4++) {\n\t\t\t\t\tvar prev = prevVertices[i_4];\n\t\t\t\t\tvertices[i_4] = prev + (nextVertices[i_4] - prev) * percent;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (pose == MixPose.setup) {\n\t\t\t\tvar vertexAttachment = slotAttachment;\n\t\t\t\tif (vertexAttachment.bones == null) {\n\t\t\t\t\tvar setupVertices_2 = vertexAttachment.vertices;\n\t\t\t\t\tfor (var i_5 = 0; i_5 < vertexCount; i_5++) {\n\t\t\t\t\t\tvar prev = prevVertices[i_5], setup = setupVertices_2[i_5];\n\t\t\t\t\t\tvertices[i_5] = setup + (prev + (nextVertices[i_5] - prev) * percent - setup) * alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (var i_6 = 0; i_6 < vertexCount; i_6++) {\n\t\t\t\t\t\tvar prev = prevVertices[i_6];\n\t\t\t\t\t\tvertices[i_6] = (prev + (nextVertices[i_6] - prev) * percent) * alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (var i_7 = 0; i_7 < vertexCount; i_7++) {\n\t\t\t\t\tvar prev = prevVertices[i_7];\n\t\t\t\t\tvertices[i_7] += (prev + (nextVertices[i_7] - prev) * percent - vertices[i_7]) * alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn DeformTimeline;\n\t}(CurveTimeline));\n\tspine.DeformTimeline = DeformTimeline;\n\tvar EventTimeline = (function () {\n\t\tfunction EventTimeline(frameCount) {\n\t\t\tthis.frames = spine.Utils.newFloatArray(frameCount);\n\t\t\tthis.events = new Array(frameCount);\n\t\t}\n\t\tEventTimeline.prototype.getPropertyId = function () {\n\t\t\treturn TimelineType.event << 24;\n\t\t};\n\t\tEventTimeline.prototype.getFrameCount = function () {\n\t\t\treturn this.frames.length;\n\t\t};\n\t\tEventTimeline.prototype.setFrame = function (frameIndex, event) {\n\t\t\tthis.frames[frameIndex] = event.time;\n\t\t\tthis.events[frameIndex] = event;\n\t\t};\n\t\tEventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tif (firedEvents == null)\n\t\t\t\treturn;\n\t\t\tvar frames = this.frames;\n\t\t\tvar frameCount = this.frames.length;\n\t\t\tif (lastTime > time) {\n\t\t\t\tthis.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, pose, direction);\n\t\t\t\tlastTime = -1;\n\t\t\t}\n\t\t\telse if (lastTime >= frames[frameCount - 1])\n\t\t\t\treturn;\n\t\t\tif (time < frames[0])\n\t\t\t\treturn;\n\t\t\tvar frame = 0;\n\t\t\tif (lastTime < frames[0])\n\t\t\t\tframe = 0;\n\t\t\telse {\n\t\t\t\tframe = Animation.binarySearch(frames, lastTime);\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\twhile (frame > 0) {\n\t\t\t\t\tif (frames[frame - 1] != frameTime)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tframe--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (; frame < frameCount && time >= frames[frame]; frame++)\n\t\t\t\tfiredEvents.push(this.events[frame]);\n\t\t};\n\t\treturn EventTimeline;\n\t}());\n\tspine.EventTimeline = EventTimeline;\n\tvar DrawOrderTimeline = (function () {\n\t\tfunction DrawOrderTimeline(frameCount) {\n\t\t\tthis.frames = spine.Utils.newFloatArray(frameCount);\n\t\t\tthis.drawOrders = new Array(frameCount);\n\t\t}\n\t\tDrawOrderTimeline.prototype.getPropertyId = function () {\n\t\t\treturn TimelineType.drawOrder << 24;\n\t\t};\n\t\tDrawOrderTimeline.prototype.getFrameCount = function () {\n\t\t\treturn this.frames.length;\n\t\t};\n\t\tDrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) {\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.drawOrders[frameIndex] = drawOrder;\n\t\t};\n\t\tDrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tvar drawOrder = skeleton.drawOrder;\n\t\t\tvar slots = skeleton.slots;\n\t\t\tif (direction == MixDirection.out && pose == MixPose.setup) {\n\t\t\t\tspine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frames = this.frames;\n\t\t\tif (time < frames[0]) {\n\t\t\t\tif (pose == MixPose.setup)\n\t\t\t\t\tspine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frame = 0;\n\t\t\tif (time >= frames[frames.length - 1])\n\t\t\t\tframe = frames.length - 1;\n\t\t\telse\n\t\t\t\tframe = Animation.binarySearch(frames, time) - 1;\n\t\t\tvar drawOrderToSetupIndex = this.drawOrders[frame];\n\t\t\tif (drawOrderToSetupIndex == null)\n\t\t\t\tspine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length);\n\t\t\telse {\n\t\t\t\tfor (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n\t\t\t\t\tdrawOrder[i] = slots[drawOrderToSetupIndex[i]];\n\t\t\t}\n\t\t};\n\t\treturn DrawOrderTimeline;\n\t}());\n\tspine.DrawOrderTimeline = DrawOrderTimeline;\n\tvar IkConstraintTimeline = (function (_super) {\n\t\t__extends(IkConstraintTimeline, _super);\n\t\tfunction IkConstraintTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES);\n\t\t\treturn _this;\n\t\t}\n\t\tIkConstraintTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.ikConstraint << 24) + this.ikConstraintIndex;\n\t\t};\n\t\tIkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, bendDirection) {\n\t\t\tframeIndex *= IkConstraintTimeline.ENTRIES;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + IkConstraintTimeline.MIX] = mix;\n\t\t\tthis.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection;\n\t\t};\n\t\tIkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar constraint = skeleton.ikConstraints[this.ikConstraintIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tconstraint.mix = constraint.data.mix;\n\t\t\t\t\t\tconstraint.bendDirection = constraint.data.bendDirection;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tconstraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n\t\t\t\t\t\tconstraint.bendDirection = constraint.data.bendDirection;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) {\n\t\t\t\tif (pose == MixPose.setup) {\n\t\t\t\t\tconstraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha;\n\t\t\t\t\tconstraint.bendDirection = direction == MixDirection.out ? constraint.data.bendDirection\n\t\t\t\t\t\t: frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconstraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha;\n\t\t\t\t\tif (direction == MixDirection[\"in\"])\n\t\t\t\t\t\tconstraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES);\n\t\t\tvar mix = frames[frame + IkConstraintTimeline.PREV_MIX];\n\t\t\tvar frameTime = frames[frame];\n\t\t\tvar percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime));\n\t\t\tif (pose == MixPose.setup) {\n\t\t\t\tconstraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha;\n\t\t\t\tconstraint.bendDirection = direction == MixDirection.out ? constraint.data.bendDirection : frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha;\n\t\t\t\tif (direction == MixDirection[\"in\"])\n\t\t\t\t\tconstraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];\n\t\t\t}\n\t\t};\n\t\tIkConstraintTimeline.ENTRIES = 3;\n\t\tIkConstraintTimeline.PREV_TIME = -3;\n\t\tIkConstraintTimeline.PREV_MIX = -2;\n\t\tIkConstraintTimeline.PREV_BEND_DIRECTION = -1;\n\t\tIkConstraintTimeline.MIX = 1;\n\t\tIkConstraintTimeline.BEND_DIRECTION = 2;\n\t\treturn IkConstraintTimeline;\n\t}(CurveTimeline));\n\tspine.IkConstraintTimeline = IkConstraintTimeline;\n\tvar TransformConstraintTimeline = (function (_super) {\n\t\t__extends(TransformConstraintTimeline, _super);\n\t\tfunction TransformConstraintTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES);\n\t\t\treturn _this;\n\t\t}\n\t\tTransformConstraintTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.transformConstraint << 24) + this.transformConstraintIndex;\n\t\t};\n\t\tTransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) {\n\t\t\tframeIndex *= TransformConstraintTimeline.ENTRIES;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix;\n\t\t\tthis.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix;\n\t\t\tthis.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix;\n\t\t\tthis.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix;\n\t\t};\n\t\tTransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar constraint = skeleton.transformConstraints[this.transformConstraintIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tvar data = constraint.data;\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tconstraint.rotateMix = data.rotateMix;\n\t\t\t\t\t\tconstraint.translateMix = data.translateMix;\n\t\t\t\t\t\tconstraint.scaleMix = data.scaleMix;\n\t\t\t\t\t\tconstraint.shearMix = data.shearMix;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tconstraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha;\n\t\t\t\t\t\tconstraint.translateMix += (data.translateMix - constraint.translateMix) * alpha;\n\t\t\t\t\t\tconstraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha;\n\t\t\t\t\t\tconstraint.shearMix += (data.shearMix - constraint.shearMix) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar rotate = 0, translate = 0, scale = 0, shear = 0;\n\t\t\tif (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) {\n\t\t\t\tvar i = frames.length;\n\t\t\t\trotate = frames[i + TransformConstraintTimeline.PREV_ROTATE];\n\t\t\t\ttranslate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE];\n\t\t\t\tscale = frames[i + TransformConstraintTimeline.PREV_SCALE];\n\t\t\t\tshear = frames[i + TransformConstraintTimeline.PREV_SHEAR];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES);\n\t\t\t\trotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE];\n\t\t\t\ttranslate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE];\n\t\t\t\tscale = frames[frame + TransformConstraintTimeline.PREV_SCALE];\n\t\t\t\tshear = frames[frame + TransformConstraintTimeline.PREV_SHEAR];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime));\n\t\t\t\trotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent;\n\t\t\t\ttranslate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent;\n\t\t\t\tscale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent;\n\t\t\t\tshear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent;\n\t\t\t}\n\t\t\tif (pose == MixPose.setup) {\n\t\t\t\tvar data = constraint.data;\n\t\t\t\tconstraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha;\n\t\t\t\tconstraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha;\n\t\t\t\tconstraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha;\n\t\t\t\tconstraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n\t\t\t\tconstraint.translateMix += (translate - constraint.translateMix) * alpha;\n\t\t\t\tconstraint.scaleMix += (scale - constraint.scaleMix) * alpha;\n\t\t\t\tconstraint.shearMix += (shear - constraint.shearMix) * alpha;\n\t\t\t}\n\t\t};\n\t\tTransformConstraintTimeline.ENTRIES = 5;\n\t\tTransformConstraintTimeline.PREV_TIME = -5;\n\t\tTransformConstraintTimeline.PREV_ROTATE = -4;\n\t\tTransformConstraintTimeline.PREV_TRANSLATE = -3;\n\t\tTransformConstraintTimeline.PREV_SCALE = -2;\n\t\tTransformConstraintTimeline.PREV_SHEAR = -1;\n\t\tTransformConstraintTimeline.ROTATE = 1;\n\t\tTransformConstraintTimeline.TRANSLATE = 2;\n\t\tTransformConstraintTimeline.SCALE = 3;\n\t\tTransformConstraintTimeline.SHEAR = 4;\n\t\treturn TransformConstraintTimeline;\n\t}(CurveTimeline));\n\tspine.TransformConstraintTimeline = TransformConstraintTimeline;\n\tvar PathConstraintPositionTimeline = (function (_super) {\n\t\t__extends(PathConstraintPositionTimeline, _super);\n\t\tfunction PathConstraintPositionTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES);\n\t\t\treturn _this;\n\t\t}\n\t\tPathConstraintPositionTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex;\n\t\t};\n\t\tPathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) {\n\t\t\tframeIndex *= PathConstraintPositionTimeline.ENTRIES;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value;\n\t\t};\n\t\tPathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tconstraint.position = constraint.data.position;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tconstraint.position += (constraint.data.position - constraint.position) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar position = 0;\n\t\t\tif (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES])\n\t\t\t\tposition = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE];\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES);\n\t\t\t\tposition = frames[frame + PathConstraintPositionTimeline.PREV_VALUE];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime));\n\t\t\t\tposition += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent;\n\t\t\t}\n\t\t\tif (pose == MixPose.setup)\n\t\t\t\tconstraint.position = constraint.data.position + (position - constraint.data.position) * alpha;\n\t\t\telse\n\t\t\t\tconstraint.position += (position - constraint.position) * alpha;\n\t\t};\n\t\tPathConstraintPositionTimeline.ENTRIES = 2;\n\t\tPathConstraintPositionTimeline.PREV_TIME = -2;\n\t\tPathConstraintPositionTimeline.PREV_VALUE = -1;\n\t\tPathConstraintPositionTimeline.VALUE = 1;\n\t\treturn PathConstraintPositionTimeline;\n\t}(CurveTimeline));\n\tspine.PathConstraintPositionTimeline = PathConstraintPositionTimeline;\n\tvar PathConstraintSpacingTimeline = (function (_super) {\n\t\t__extends(PathConstraintSpacingTimeline, _super);\n\t\tfunction PathConstraintSpacingTimeline(frameCount) {\n\t\t\treturn _super.call(this, frameCount) || this;\n\t\t}\n\t\tPathConstraintSpacingTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex;\n\t\t};\n\t\tPathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tconstraint.spacing = constraint.data.spacing;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tconstraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar spacing = 0;\n\t\t\tif (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES])\n\t\t\t\tspacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE];\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES);\n\t\t\t\tspacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime));\n\t\t\t\tspacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent;\n\t\t\t}\n\t\t\tif (pose == MixPose.setup)\n\t\t\t\tconstraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;\n\t\t\telse\n\t\t\t\tconstraint.spacing += (spacing - constraint.spacing) * alpha;\n\t\t};\n\t\treturn PathConstraintSpacingTimeline;\n\t}(PathConstraintPositionTimeline));\n\tspine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline;\n\tvar PathConstraintMixTimeline = (function (_super) {\n\t\t__extends(PathConstraintMixTimeline, _super);\n\t\tfunction PathConstraintMixTimeline(frameCount) {\n\t\t\tvar _this = _super.call(this, frameCount) || this;\n\t\t\t_this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES);\n\t\t\treturn _this;\n\t\t}\n\t\tPathConstraintMixTimeline.prototype.getPropertyId = function () {\n\t\t\treturn (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex;\n\t\t};\n\t\tPathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) {\n\t\t\tframeIndex *= PathConstraintMixTimeline.ENTRIES;\n\t\t\tthis.frames[frameIndex] = time;\n\t\t\tthis.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix;\n\t\t\tthis.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix;\n\t\t};\n\t\tPathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, pose, direction) {\n\t\t\tvar frames = this.frames;\n\t\t\tvar constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tswitch (pose) {\n\t\t\t\t\tcase MixPose.setup:\n\t\t\t\t\t\tconstraint.rotateMix = constraint.data.rotateMix;\n\t\t\t\t\t\tconstraint.translateMix = constraint.data.translateMix;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase MixPose.current:\n\t\t\t\t\t\tconstraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha;\n\t\t\t\t\t\tconstraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar rotate = 0, translate = 0;\n\t\t\tif (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) {\n\t\t\t\trotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE];\n\t\t\t\ttranslate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES);\n\t\t\t\trotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE];\n\t\t\t\ttranslate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime));\n\t\t\t\trotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent;\n\t\t\t\ttranslate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent;\n\t\t\t}\n\t\t\tif (pose == MixPose.setup) {\n\t\t\t\tconstraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha;\n\t\t\t\tconstraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n\t\t\t\tconstraint.translateMix += (translate - constraint.translateMix) * alpha;\n\t\t\t}\n\t\t};\n\t\tPathConstraintMixTimeline.ENTRIES = 3;\n\t\tPathConstraintMixTimeline.PREV_TIME = -3;\n\t\tPathConstraintMixTimeline.PREV_ROTATE = -2;\n\t\tPathConstraintMixTimeline.PREV_TRANSLATE = -1;\n\t\tPathConstraintMixTimeline.ROTATE = 1;\n\t\tPathConstraintMixTimeline.TRANSLATE = 2;\n\t\treturn PathConstraintMixTimeline;\n\t}(CurveTimeline));\n\tspine.PathConstraintMixTimeline = PathConstraintMixTimeline;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar AnimationState = (function () {\n\t\tfunction AnimationState(data) {\n\t\t\tthis.tracks = new Array();\n\t\t\tthis.events = new Array();\n\t\t\tthis.listeners = new Array();\n\t\t\tthis.queue = new EventQueue(this);\n\t\t\tthis.propertyIDs = new spine.IntSet();\n\t\t\tthis.mixingTo = new Array();\n\t\t\tthis.animationsChanged = false;\n\t\t\tthis.timeScale = 1;\n\t\t\tthis.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); });\n\t\t\tthis.data = data;\n\t\t}\n\t\tAnimationState.prototype.update = function (delta) {\n\t\t\tdelta *= this.timeScale;\n\t\t\tvar tracks = this.tracks;\n\t\t\tfor (var i = 0, n = tracks.length; i < n; i++) {\n\t\t\t\tvar current = tracks[i];\n\t\t\t\tif (current == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tcurrent.animationLast = current.nextAnimationLast;\n\t\t\t\tcurrent.trackLast = current.nextTrackLast;\n\t\t\t\tvar currentDelta = delta * current.timeScale;\n\t\t\t\tif (current.delay > 0) {\n\t\t\t\t\tcurrent.delay -= currentDelta;\n\t\t\t\t\tif (current.delay > 0)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcurrentDelta = -current.delay;\n\t\t\t\t\tcurrent.delay = 0;\n\t\t\t\t}\n\t\t\t\tvar next = current.next;\n\t\t\t\tif (next != null) {\n\t\t\t\t\tvar nextTime = current.trackLast - next.delay;\n\t\t\t\t\tif (nextTime >= 0) {\n\t\t\t\t\t\tnext.delay = 0;\n\t\t\t\t\t\tnext.trackTime = nextTime + delta * next.timeScale;\n\t\t\t\t\t\tcurrent.trackTime += currentDelta;\n\t\t\t\t\t\tthis.setCurrent(i, next, true);\n\t\t\t\t\t\twhile (next.mixingFrom != null) {\n\t\t\t\t\t\t\tnext.mixTime += currentDelta;\n\t\t\t\t\t\t\tnext = next.mixingFrom;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (current.trackLast >= current.trackEnd && current.mixingFrom == null) {\n\t\t\t\t\ttracks[i] = null;\n\t\t\t\t\tthis.queue.end(current);\n\t\t\t\t\tthis.disposeNext(current);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (current.mixingFrom != null && this.updateMixingFrom(current, delta)) {\n\t\t\t\t\tvar from = current.mixingFrom;\n\t\t\t\t\tcurrent.mixingFrom = null;\n\t\t\t\t\twhile (from != null) {\n\t\t\t\t\t\tthis.queue.end(from);\n\t\t\t\t\t\tfrom = from.mixingFrom;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurrent.trackTime += currentDelta;\n\t\t\t}\n\t\t\tthis.queue.drain();\n\t\t};\n\t\tAnimationState.prototype.updateMixingFrom = function (to, delta) {\n\t\t\tvar from = to.mixingFrom;\n\t\t\tif (from == null)\n\t\t\t\treturn true;\n\t\t\tvar finished = this.updateMixingFrom(from, delta);\n\t\t\tfrom.animationLast = from.nextAnimationLast;\n\t\t\tfrom.trackLast = from.nextTrackLast;\n\t\t\tif (to.mixTime > 0 && (to.mixTime >= to.mixDuration || to.timeScale == 0)) {\n\t\t\t\tif (from.totalAlpha == 0 || to.mixDuration == 0) {\n\t\t\t\t\tto.mixingFrom = from.mixingFrom;\n\t\t\t\t\tto.interruptAlpha = from.interruptAlpha;\n\t\t\t\t\tthis.queue.end(from);\n\t\t\t\t}\n\t\t\t\treturn finished;\n\t\t\t}\n\t\t\tfrom.trackTime += delta * from.timeScale;\n\t\t\tto.mixTime += delta * to.timeScale;\n\t\t\treturn false;\n\t\t};\n\t\tAnimationState.prototype.apply = function (skeleton) {\n\t\t\tif (skeleton == null)\n\t\t\t\tthrow new Error(\"skeleton cannot be null.\");\n\t\t\tif (this.animationsChanged)\n\t\t\t\tthis._animationsChanged();\n\t\t\tvar events = this.events;\n\t\t\tvar tracks = this.tracks;\n\t\t\tvar applied = false;\n\t\t\tfor (var i = 0, n = tracks.length; i < n; i++) {\n\t\t\t\tvar current = tracks[i];\n\t\t\t\tif (current == null || current.delay > 0)\n\t\t\t\t\tcontinue;\n\t\t\t\tapplied = true;\n\t\t\t\tvar currentPose = i == 0 ? spine.MixPose.current : spine.MixPose.currentLayered;\n\t\t\t\tvar mix = current.alpha;\n\t\t\t\tif (current.mixingFrom != null)\n\t\t\t\t\tmix *= this.applyMixingFrom(current, skeleton, currentPose);\n\t\t\t\telse if (current.trackTime >= current.trackEnd && current.next == null)\n\t\t\t\t\tmix = 0;\n\t\t\t\tvar animationLast = current.animationLast, animationTime = current.getAnimationTime();\n\t\t\t\tvar timelineCount = current.animation.timelines.length;\n\t\t\t\tvar timelines = current.animation.timelines;\n\t\t\t\tif (mix == 1) {\n\t\t\t\t\tfor (var ii = 0; ii < timelineCount; ii++)\n\t\t\t\t\t\ttimelines[ii].apply(skeleton, animationLast, animationTime, events, 1, spine.MixPose.setup, spine.MixDirection[\"in\"]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar timelineData = current.timelineData;\n\t\t\t\t\tvar firstFrame = current.timelinesRotation.length == 0;\n\t\t\t\t\tif (firstFrame)\n\t\t\t\t\t\tspine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null);\n\t\t\t\t\tvar timelinesRotation = current.timelinesRotation;\n\t\t\t\t\tfor (var ii = 0; ii < timelineCount; ii++) {\n\t\t\t\t\t\tvar timeline = timelines[ii];\n\t\t\t\t\t\tvar pose = timelineData[ii] >= AnimationState.FIRST ? spine.MixPose.setup : currentPose;\n\t\t\t\t\t\tif (timeline instanceof spine.RotateTimeline) {\n\t\t\t\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, animationTime, mix, pose, timelinesRotation, ii << 1, firstFrame);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tspine.Utils.webkit602BugfixHelper(mix, pose);\n\t\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, animationTime, events, mix, pose, spine.MixDirection[\"in\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.queueEvents(current, animationTime);\n\t\t\t\tevents.length = 0;\n\t\t\t\tcurrent.nextAnimationLast = animationTime;\n\t\t\t\tcurrent.nextTrackLast = current.trackTime;\n\t\t\t}\n\t\t\tthis.queue.drain();\n\t\t\treturn applied;\n\t\t};\n\t\tAnimationState.prototype.applyMixingFrom = function (to, skeleton, currentPose) {\n\t\t\tvar from = to.mixingFrom;\n\t\t\tif (from.mixingFrom != null)\n\t\t\t\tthis.applyMixingFrom(from, skeleton, currentPose);\n\t\t\tvar mix = 0;\n\t\t\tif (to.mixDuration == 0) {\n\t\t\t\tmix = 1;\n\t\t\t\tcurrentPose = spine.MixPose.setup;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmix = to.mixTime / to.mixDuration;\n\t\t\t\tif (mix > 1)\n\t\t\t\t\tmix = 1;\n\t\t\t}\n\t\t\tvar events = mix < from.eventThreshold ? this.events : null;\n\t\t\tvar attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;\n\t\t\tvar animationLast = from.animationLast, animationTime = from.getAnimationTime();\n\t\t\tvar timelineCount = from.animation.timelines.length;\n\t\t\tvar timelines = from.animation.timelines;\n\t\t\tvar timelineData = from.timelineData;\n\t\t\tvar timelineDipMix = from.timelineDipMix;\n\t\t\tvar firstFrame = from.timelinesRotation.length == 0;\n\t\t\tif (firstFrame)\n\t\t\t\tspine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null);\n\t\t\tvar timelinesRotation = from.timelinesRotation;\n\t\t\tvar pose;\n\t\t\tvar alphaDip = from.alpha * to.interruptAlpha, alphaMix = alphaDip * (1 - mix), alpha = 0;\n\t\t\tfrom.totalAlpha = 0;\n\t\t\tfor (var i = 0; i < timelineCount; i++) {\n\t\t\t\tvar timeline = timelines[i];\n\t\t\t\tswitch (timelineData[i]) {\n\t\t\t\t\tcase AnimationState.SUBSEQUENT:\n\t\t\t\t\t\tif (!attachments && timeline instanceof spine.AttachmentTimeline)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tif (!drawOrder && timeline instanceof spine.DrawOrderTimeline)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tpose = currentPose;\n\t\t\t\t\t\talpha = alphaMix;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase AnimationState.FIRST:\n\t\t\t\t\t\tpose = spine.MixPose.setup;\n\t\t\t\t\t\talpha = alphaMix;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase AnimationState.DIP:\n\t\t\t\t\t\tpose = spine.MixPose.setup;\n\t\t\t\t\t\talpha = alphaDip;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tpose = spine.MixPose.setup;\n\t\t\t\t\t\talpha = alphaDip;\n\t\t\t\t\t\tvar dipMix = timelineDipMix[i];\n\t\t\t\t\t\talpha *= Math.max(0, 1 - dipMix.mixTime / dipMix.mixDuration);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfrom.totalAlpha += alpha;\n\t\t\t\tif (timeline instanceof spine.RotateTimeline)\n\t\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, animationTime, alpha, pose, timelinesRotation, i << 1, firstFrame);\n\t\t\t\telse {\n\t\t\t\t\tspine.Utils.webkit602BugfixHelper(alpha, pose);\n\t\t\t\t\ttimeline.apply(skeleton, animationLast, animationTime, events, alpha, pose, spine.MixDirection.out);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (to.mixDuration > 0)\n\t\t\t\tthis.queueEvents(from, animationTime);\n\t\t\tthis.events.length = 0;\n\t\t\tfrom.nextAnimationLast = animationTime;\n\t\t\tfrom.nextTrackLast = from.trackTime;\n\t\t\treturn mix;\n\t\t};\n\t\tAnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, pose, timelinesRotation, i, firstFrame) {\n\t\t\tif (firstFrame)\n\t\t\t\ttimelinesRotation[i] = 0;\n\t\t\tif (alpha == 1) {\n\t\t\t\ttimeline.apply(skeleton, 0, time, null, 1, pose, spine.MixDirection[\"in\"]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar rotateTimeline = timeline;\n\t\t\tvar frames = rotateTimeline.frames;\n\t\t\tvar bone = skeleton.bones[rotateTimeline.boneIndex];\n\t\t\tif (time < frames[0]) {\n\t\t\t\tif (pose == spine.MixPose.setup)\n\t\t\t\t\tbone.rotation = bone.data.rotation;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar r2 = 0;\n\t\t\tif (time >= frames[frames.length - spine.RotateTimeline.ENTRIES])\n\t\t\t\tr2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION];\n\t\t\telse {\n\t\t\t\tvar frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES);\n\t\t\t\tvar prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION];\n\t\t\t\tvar frameTime = frames[frame];\n\t\t\t\tvar percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime));\n\t\t\t\tr2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation;\n\t\t\t\tr2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360;\n\t\t\t\tr2 = prevRotation + r2 * percent + bone.data.rotation;\n\t\t\t\tr2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360;\n\t\t\t}\n\t\t\tvar r1 = pose == spine.MixPose.setup ? bone.data.rotation : bone.rotation;\n\t\t\tvar total = 0, diff = r2 - r1;\n\t\t\tif (diff == 0) {\n\t\t\t\ttotal = timelinesRotation[i];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdiff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360;\n\t\t\t\tvar lastTotal = 0, lastDiff = 0;\n\t\t\t\tif (firstFrame) {\n\t\t\t\t\tlastTotal = 0;\n\t\t\t\t\tlastDiff = diff;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlastTotal = timelinesRotation[i];\n\t\t\t\t\tlastDiff = timelinesRotation[i + 1];\n\t\t\t\t}\n\t\t\t\tvar current = diff > 0, dir = lastTotal >= 0;\n\t\t\t\tif (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {\n\t\t\t\t\tif (Math.abs(lastTotal) > 180)\n\t\t\t\t\t\tlastTotal += 360 * spine.MathUtils.signum(lastTotal);\n\t\t\t\t\tdir = current;\n\t\t\t\t}\n\t\t\t\ttotal = diff + lastTotal - lastTotal % 360;\n\t\t\t\tif (dir != current)\n\t\t\t\t\ttotal += 360 * spine.MathUtils.signum(lastTotal);\n\t\t\t\ttimelinesRotation[i] = total;\n\t\t\t}\n\t\t\ttimelinesRotation[i + 1] = diff;\n\t\t\tr1 += total * alpha;\n\t\t\tbone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360;\n\t\t};\n\t\tAnimationState.prototype.queueEvents = function (entry, animationTime) {\n\t\t\tvar animationStart = entry.animationStart, animationEnd = entry.animationEnd;\n\t\t\tvar duration = animationEnd - animationStart;\n\t\t\tvar trackLastWrapped = entry.trackLast % duration;\n\t\t\tvar events = this.events;\n\t\t\tvar i = 0, n = events.length;\n\t\t\tfor (; i < n; i++) {\n\t\t\t\tvar event_1 = events[i];\n\t\t\t\tif (event_1.time < trackLastWrapped)\n\t\t\t\t\tbreak;\n\t\t\t\tif (event_1.time > animationEnd)\n\t\t\t\t\tcontinue;\n\t\t\t\tthis.queue.event(entry, event_1);\n\t\t\t}\n\t\t\tvar complete = false;\n\t\t\tif (entry.loop)\n\t\t\t\tcomplete = duration == 0 || trackLastWrapped > entry.trackTime % duration;\n\t\t\telse\n\t\t\t\tcomplete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n\t\t\tif (complete)\n\t\t\t\tthis.queue.complete(entry);\n\t\t\tfor (; i < n; i++) {\n\t\t\t\tvar event_2 = events[i];\n\t\t\t\tif (event_2.time < animationStart)\n\t\t\t\t\tcontinue;\n\t\t\t\tthis.queue.event(entry, events[i]);\n\t\t\t}\n\t\t};\n\t\tAnimationState.prototype.clearTracks = function () {\n\t\t\tvar oldDrainDisabled = this.queue.drainDisabled;\n\t\t\tthis.queue.drainDisabled = true;\n\t\t\tfor (var i = 0, n = this.tracks.length; i < n; i++)\n\t\t\t\tthis.clearTrack(i);\n\t\t\tthis.tracks.length = 0;\n\t\t\tthis.queue.drainDisabled = oldDrainDisabled;\n\t\t\tthis.queue.drain();\n\t\t};\n\t\tAnimationState.prototype.clearTrack = function (trackIndex) {\n\t\t\tif (trackIndex >= this.tracks.length)\n\t\t\t\treturn;\n\t\t\tvar current = this.tracks[trackIndex];\n\t\t\tif (current == null)\n\t\t\t\treturn;\n\t\t\tthis.queue.end(current);\n\t\t\tthis.disposeNext(current);\n\t\t\tvar entry = current;\n\t\t\twhile (true) {\n\t\t\t\tvar from = entry.mixingFrom;\n\t\t\t\tif (from == null)\n\t\t\t\t\tbreak;\n\t\t\t\tthis.queue.end(from);\n\t\t\t\tentry.mixingFrom = null;\n\t\t\t\tentry = from;\n\t\t\t}\n\t\t\tthis.tracks[current.trackIndex] = null;\n\t\t\tthis.queue.drain();\n\t\t};\n\t\tAnimationState.prototype.setCurrent = function (index, current, interrupt) {\n\t\t\tvar from = this.expandToIndex(index);\n\t\t\tthis.tracks[index] = current;\n\t\t\tif (from != null) {\n\t\t\t\tif (interrupt)\n\t\t\t\t\tthis.queue.interrupt(from);\n\t\t\t\tcurrent.mixingFrom = from;\n\t\t\t\tcurrent.mixTime = 0;\n\t\t\t\tif (from.mixingFrom != null && from.mixDuration > 0)\n\t\t\t\t\tcurrent.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration);\n\t\t\t\tfrom.timelinesRotation.length = 0;\n\t\t\t}\n\t\t\tthis.queue.start(current);\n\t\t};\n\t\tAnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) {\n\t\t\tvar animation = this.data.skeletonData.findAnimation(animationName);\n\t\t\tif (animation == null)\n\t\t\t\tthrow new Error(\"Animation not found: \" + animationName);\n\t\t\treturn this.setAnimationWith(trackIndex, animation, loop);\n\t\t};\n\t\tAnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) {\n\t\t\tif (animation == null)\n\t\t\t\tthrow new Error(\"animation cannot be null.\");\n\t\t\tvar interrupt = true;\n\t\t\tvar current = this.expandToIndex(trackIndex);\n\t\t\tif (current != null) {\n\t\t\t\tif (current.nextTrackLast == -1) {\n\t\t\t\t\tthis.tracks[trackIndex] = current.mixingFrom;\n\t\t\t\t\tthis.queue.interrupt(current);\n\t\t\t\t\tthis.queue.end(current);\n\t\t\t\t\tthis.disposeNext(current);\n\t\t\t\t\tcurrent = current.mixingFrom;\n\t\t\t\t\tinterrupt = false;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tthis.disposeNext(current);\n\t\t\t}\n\t\t\tvar entry = this.trackEntry(trackIndex, animation, loop, current);\n\t\t\tthis.setCurrent(trackIndex, entry, interrupt);\n\t\t\tthis.queue.drain();\n\t\t\treturn entry;\n\t\t};\n\t\tAnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) {\n\t\t\tvar animation = this.data.skeletonData.findAnimation(animationName);\n\t\t\tif (animation == null)\n\t\t\t\tthrow new Error(\"Animation not found: \" + animationName);\n\t\t\treturn this.addAnimationWith(trackIndex, animation, loop, delay);\n\t\t};\n\t\tAnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) {\n\t\t\tif (animation == null)\n\t\t\t\tthrow new Error(\"animation cannot be null.\");\n\t\t\tvar last = this.expandToIndex(trackIndex);\n\t\t\tif (last != null) {\n\t\t\t\twhile (last.next != null)\n\t\t\t\t\tlast = last.next;\n\t\t\t}\n\t\t\tvar entry = this.trackEntry(trackIndex, animation, loop, last);\n\t\t\tif (last == null) {\n\t\t\t\tthis.setCurrent(trackIndex, entry, true);\n\t\t\t\tthis.queue.drain();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast.next = entry;\n\t\t\t\tif (delay <= 0) {\n\t\t\t\t\tvar duration = last.animationEnd - last.animationStart;\n\t\t\t\t\tif (duration != 0) {\n\t\t\t\t\t\tif (last.loop)\n\t\t\t\t\t\t\tdelay += duration * (1 + ((last.trackTime / duration) | 0));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdelay += duration;\n\t\t\t\t\t\tdelay -= this.data.getMix(last.animation, animation);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tdelay = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tentry.delay = delay;\n\t\t\treturn entry;\n\t\t};\n\t\tAnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) {\n\t\t\tvar entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false);\n\t\t\tentry.mixDuration = mixDuration;\n\t\t\tentry.trackEnd = mixDuration;\n\t\t\treturn entry;\n\t\t};\n\t\tAnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) {\n\t\t\tif (delay <= 0)\n\t\t\t\tdelay -= mixDuration;\n\t\t\tvar entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay);\n\t\t\tentry.mixDuration = mixDuration;\n\t\t\tentry.trackEnd = mixDuration;\n\t\t\treturn entry;\n\t\t};\n\t\tAnimationState.prototype.setEmptyAnimations = function (mixDuration) {\n\t\t\tvar oldDrainDisabled = this.queue.drainDisabled;\n\t\t\tthis.queue.drainDisabled = true;\n\t\t\tfor (var i = 0, n = this.tracks.length; i < n; i++) {\n\t\t\t\tvar current = this.tracks[i];\n\t\t\t\tif (current != null)\n\t\t\t\t\tthis.setEmptyAnimation(current.trackIndex, mixDuration);\n\t\t\t}\n\t\t\tthis.queue.drainDisabled = oldDrainDisabled;\n\t\t\tthis.queue.drain();\n\t\t};\n\t\tAnimationState.prototype.expandToIndex = function (index) {\n\t\t\tif (index < this.tracks.length)\n\t\t\t\treturn this.tracks[index];\n\t\t\tspine.Utils.ensureArrayCapacity(this.tracks, index - this.tracks.length + 1, null);\n\t\t\tthis.tracks.length = index + 1;\n\t\t\treturn null;\n\t\t};\n\t\tAnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) {\n\t\t\tvar entry = this.trackEntryPool.obtain();\n\t\t\tentry.trackIndex = trackIndex;\n\t\t\tentry.animation = animation;\n\t\t\tentry.loop = loop;\n\t\t\tentry.eventThreshold = 0;\n\t\t\tentry.attachmentThreshold = 0;\n\t\t\tentry.drawOrderThreshold = 0;\n\t\t\tentry.animationStart = 0;\n\t\t\tentry.animationEnd = animation.duration;\n\t\t\tentry.animationLast = -1;\n\t\t\tentry.nextAnimationLast = -1;\n\t\t\tentry.delay = 0;\n\t\t\tentry.trackTime = 0;\n\t\t\tentry.trackLast = -1;\n\t\t\tentry.nextTrackLast = -1;\n\t\t\tentry.trackEnd = Number.MAX_VALUE;\n\t\t\tentry.timeScale = 1;\n\t\t\tentry.alpha = 1;\n\t\t\tentry.interruptAlpha = 1;\n\t\t\tentry.mixTime = 0;\n\t\t\tentry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation);\n\t\t\treturn entry;\n\t\t};\n\t\tAnimationState.prototype.disposeNext = function (entry) {\n\t\t\tvar next = entry.next;\n\t\t\twhile (next != null) {\n\t\t\t\tthis.queue.dispose(next);\n\t\t\t\tnext = next.next;\n\t\t\t}\n\t\t\tentry.next = null;\n\t\t};\n\t\tAnimationState.prototype._animationsChanged = function () {\n\t\t\tthis.animationsChanged = false;\n\t\t\tvar propertyIDs = this.propertyIDs;\n\t\t\tpropertyIDs.clear();\n\t\t\tvar mixingTo = this.mixingTo;\n\t\t\tfor (var i = 0, n = this.tracks.length; i < n; i++) {\n\t\t\t\tvar entry = this.tracks[i];\n\t\t\t\tif (entry != null)\n\t\t\t\t\tentry.setTimelineData(null, mixingTo, propertyIDs);\n\t\t\t}\n\t\t};\n\t\tAnimationState.prototype.getCurrent = function (trackIndex) {\n\t\t\tif (trackIndex >= this.tracks.length)\n\t\t\t\treturn null;\n\t\t\treturn this.tracks[trackIndex];\n\t\t};\n\t\tAnimationState.prototype.addListener = function (listener) {\n\t\t\tif (listener == null)\n\t\t\t\tthrow new Error(\"listener cannot be null.\");\n\t\t\tthis.listeners.push(listener);\n\t\t};\n\t\tAnimationState.prototype.removeListener = function (listener) {\n\t\t\tvar index = this.listeners.indexOf(listener);\n\t\t\tif (index >= 0)\n\t\t\t\tthis.listeners.splice(index, 1);\n\t\t};\n\t\tAnimationState.prototype.clearListeners = function () {\n\t\t\tthis.listeners.length = 0;\n\t\t};\n\t\tAnimationState.prototype.clearListenerNotifications = function () {\n\t\t\tthis.queue.clear();\n\t\t};\n\t\tAnimationState.emptyAnimation = new spine.Animation(\"<empty>\", [], 0);\n\t\tAnimationState.SUBSEQUENT = 0;\n\t\tAnimationState.FIRST = 1;\n\t\tAnimationState.DIP = 2;\n\t\tAnimationState.DIP_MIX = 3;\n\t\treturn AnimationState;\n\t}());\n\tspine.AnimationState = AnimationState;\n\tvar TrackEntry = (function () {\n\t\tfunction TrackEntry() {\n\t\t\tthis.timelineData = new Array();\n\t\t\tthis.timelineDipMix = new Array();\n\t\t\tthis.timelinesRotation = new Array();\n\t\t}\n\t\tTrackEntry.prototype.reset = function () {\n\t\t\tthis.next = null;\n\t\t\tthis.mixingFrom = null;\n\t\t\tthis.animation = null;\n\t\t\tthis.listener = null;\n\t\t\tthis.timelineData.length = 0;\n\t\t\tthis.timelineDipMix.length = 0;\n\t\t\tthis.timelinesRotation.length = 0;\n\t\t};\n\t\tTrackEntry.prototype.setTimelineData = function (to, mixingToArray, propertyIDs) {\n\t\t\tif (to != null)\n\t\t\t\tmixingToArray.push(to);\n\t\t\tvar lastEntry = this.mixingFrom != null ? this.mixingFrom.setTimelineData(this, mixingToArray, propertyIDs) : this;\n\t\t\tif (to != null)\n\t\t\t\tmixingToArray.pop();\n\t\t\tvar mixingTo = mixingToArray;\n\t\t\tvar mixingToLast = mixingToArray.length - 1;\n\t\t\tvar timelines = this.animation.timelines;\n\t\t\tvar timelinesCount = this.animation.timelines.length;\n\t\t\tvar timelineData = spine.Utils.setArraySize(this.timelineData, timelinesCount);\n\t\t\tthis.timelineDipMix.length = 0;\n\t\t\tvar timelineDipMix = spine.Utils.setArraySize(this.timelineDipMix, timelinesCount);\n\t\t\touter: for (var i = 0; i < timelinesCount; i++) {\n\t\t\t\tvar id = timelines[i].getPropertyId();\n\t\t\t\tif (!propertyIDs.add(id))\n\t\t\t\t\ttimelineData[i] = AnimationState.SUBSEQUENT;\n\t\t\t\telse if (to == null || !to.hasTimeline(id))\n\t\t\t\t\ttimelineData[i] = AnimationState.FIRST;\n\t\t\t\telse {\n\t\t\t\t\tfor (var ii = mixingToLast; ii >= 0; ii--) {\n\t\t\t\t\t\tvar entry = mixingTo[ii];\n\t\t\t\t\t\tif (!entry.hasTimeline(id)) {\n\t\t\t\t\t\t\tif (entry.mixDuration > 0) {\n\t\t\t\t\t\t\t\ttimelineData[i] = AnimationState.DIP_MIX;\n\t\t\t\t\t\t\t\ttimelineDipMix[i] = entry;\n\t\t\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttimelineData[i] = AnimationState.DIP;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lastEntry;\n\t\t};\n\t\tTrackEntry.prototype.hasTimeline = function (id) {\n\t\t\tvar timelines = this.animation.timelines;\n\t\t\tfor (var i = 0, n = timelines.length; i < n; i++)\n\t\t\t\tif (timelines[i].getPropertyId() == id)\n\t\t\t\t\treturn true;\n\t\t\treturn false;\n\t\t};\n\t\tTrackEntry.prototype.getAnimationTime = function () {\n\t\t\tif (this.loop) {\n\t\t\t\tvar duration = this.animationEnd - this.animationStart;\n\t\t\t\tif (duration == 0)\n\t\t\t\t\treturn this.animationStart;\n\t\t\t\treturn (this.trackTime % duration) + this.animationStart;\n\t\t\t}\n\t\t\treturn Math.min(this.trackTime + this.animationStart, this.animationEnd);\n\t\t};\n\t\tTrackEntry.prototype.setAnimationLast = function (animationLast) {\n\t\t\tthis.animationLast = animationLast;\n\t\t\tthis.nextAnimationLast = animationLast;\n\t\t};\n\t\tTrackEntry.prototype.isComplete = function () {\n\t\t\treturn this.trackTime >= this.animationEnd - this.animationStart;\n\t\t};\n\t\tTrackEntry.prototype.resetRotationDirections = function () {\n\t\t\tthis.timelinesRotation.length = 0;\n\t\t};\n\t\treturn TrackEntry;\n\t}());\n\tspine.TrackEntry = TrackEntry;\n\tvar EventQueue = (function () {\n\t\tfunction EventQueue(animState) {\n\t\t\tthis.objects = [];\n\t\t\tthis.drainDisabled = false;\n\t\t\tthis.animState = animState;\n\t\t}\n\t\tEventQueue.prototype.start = function (entry) {\n\t\t\tthis.objects.push(EventType.start);\n\t\t\tthis.objects.push(entry);\n\t\t\tthis.animState.animationsChanged = true;\n\t\t};\n\t\tEventQueue.prototype.interrupt = function (entry) {\n\t\t\tthis.objects.push(EventType.interrupt);\n\t\t\tthis.objects.push(entry);\n\t\t};\n\t\tEventQueue.prototype.end = function (entry) {\n\t\t\tthis.objects.push(EventType.end);\n\t\t\tthis.objects.push(entry);\n\t\t\tthis.animState.animationsChanged = true;\n\t\t};\n\t\tEventQueue.prototype.dispose = function (entry) {\n\t\t\tthis.objects.push(EventType.dispose);\n\t\t\tthis.objects.push(entry);\n\t\t};\n\t\tEventQueue.prototype.complete = function (entry) {\n\t\t\tthis.objects.push(EventType.complete);\n\t\t\tthis.objects.push(entry);\n\t\t};\n\t\tEventQueue.prototype.event = function (entry, event) {\n\t\t\tthis.objects.push(EventType.event);\n\t\t\tthis.objects.push(entry);\n\t\t\tthis.objects.push(event);\n\t\t};\n\t\tEventQueue.prototype.drain = function () {\n\t\t\tif (this.drainDisabled)\n\t\t\t\treturn;\n\t\t\tthis.drainDisabled = true;\n\t\t\tvar objects = this.objects;\n\t\t\tvar listeners = this.animState.listeners;\n\t\t\tfor (var i = 0; i < objects.length; i += 2) {\n\t\t\t\tvar type = objects[i];\n\t\t\t\tvar entry = objects[i + 1];\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase EventType.start:\n\t\t\t\t\t\tif (entry.listener != null && entry.listener.start)\n\t\t\t\t\t\t\tentry.listener.start(entry);\n\t\t\t\t\t\tfor (var ii = 0; ii < listeners.length; ii++)\n\t\t\t\t\t\t\tif (listeners[ii].start)\n\t\t\t\t\t\t\t\tlisteners[ii].start(entry);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase EventType.interrupt:\n\t\t\t\t\t\tif (entry.listener != null && entry.listener.interrupt)\n\t\t\t\t\t\t\tentry.listener.interrupt(entry);\n\t\t\t\t\t\tfor (var ii = 0; ii < listeners.length; ii++)\n\t\t\t\t\t\t\tif (listeners[ii].interrupt)\n\t\t\t\t\t\t\t\tlisteners[ii].interrupt(entry);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase EventType.end:\n\t\t\t\t\t\tif (entry.listener != null && entry.listener.end)\n\t\t\t\t\t\t\tentry.listener.end(entry);\n\t\t\t\t\t\tfor (var ii = 0; ii < listeners.length; ii++)\n\t\t\t\t\t\t\tif (listeners[ii].end)\n\t\t\t\t\t\t\t\tlisteners[ii].end(entry);\n\t\t\t\t\tcase EventType.dispose:\n\t\t\t\t\t\tif (entry.listener != null && entry.listener.dispose)\n\t\t\t\t\t\t\tentry.listener.dispose(entry);\n\t\t\t\t\t\tfor (var ii = 0; ii < listeners.length; ii++)\n\t\t\t\t\t\t\tif (listeners[ii].dispose)\n\t\t\t\t\t\t\t\tlisteners[ii].dispose(entry);\n\t\t\t\t\t\tthis.animState.trackEntryPool.free(entry);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase EventType.complete:\n\t\t\t\t\t\tif (entry.listener != null && entry.listener.complete)\n\t\t\t\t\t\t\tentry.listener.complete(entry);\n\t\t\t\t\t\tfor (var ii = 0; ii < listeners.length; ii++)\n\t\t\t\t\t\t\tif (listeners[ii].complete)\n\t\t\t\t\t\t\t\tlisteners[ii].complete(entry);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase EventType.event:\n\t\t\t\t\t\tvar event_3 = objects[i++ + 2];\n\t\t\t\t\t\tif (entry.listener != null && entry.listener.event)\n\t\t\t\t\t\t\tentry.listener.event(entry, event_3);\n\t\t\t\t\t\tfor (var ii = 0; ii < listeners.length; ii++)\n\t\t\t\t\t\t\tif (listeners[ii].event)\n\t\t\t\t\t\t\t\tlisteners[ii].event(entry, event_3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clear();\n\t\t\tthis.drainDisabled = false;\n\t\t};\n\t\tEventQueue.prototype.clear = function () {\n\t\t\tthis.objects.length = 0;\n\t\t};\n\t\treturn EventQueue;\n\t}());\n\tspine.EventQueue = EventQueue;\n\tvar EventType;\n\t(function (EventType) {\n\t\tEventType[EventType[\"start\"] = 0] = \"start\";\n\t\tEventType[EventType[\"interrupt\"] = 1] = \"interrupt\";\n\t\tEventType[EventType[\"end\"] = 2] = \"end\";\n\t\tEventType[EventType[\"dispose\"] = 3] = \"dispose\";\n\t\tEventType[EventType[\"complete\"] = 4] = \"complete\";\n\t\tEventType[EventType[\"event\"] = 5] = \"event\";\n\t})(EventType = spine.EventType || (spine.EventType = {}));\n\tvar AnimationStateAdapter2 = (function () {\n\t\tfunction AnimationStateAdapter2() {\n\t\t}\n\t\tAnimationStateAdapter2.prototype.start = function (entry) {\n\t\t};\n\t\tAnimationStateAdapter2.prototype.interrupt = function (entry) {\n\t\t};\n\t\tAnimationStateAdapter2.prototype.end = function (entry) {\n\t\t};\n\t\tAnimationStateAdapter2.prototype.dispose = function (entry) {\n\t\t};\n\t\tAnimationStateAdapter2.prototype.complete = function (entry) {\n\t\t};\n\t\tAnimationStateAdapter2.prototype.event = function (entry, event) {\n\t\t};\n\t\treturn AnimationStateAdapter2;\n\t}());\n\tspine.AnimationStateAdapter2 = AnimationStateAdapter2;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar AnimationStateData = (function () {\n\t\tfunction AnimationStateData(skeletonData) {\n\t\t\tthis.animationToMixTime = {};\n\t\t\tthis.defaultMix = 0;\n\t\t\tif (skeletonData == null)\n\t\t\t\tthrow new Error(\"skeletonData cannot be null.\");\n\t\t\tthis.skeletonData = skeletonData;\n\t\t}\n\t\tAnimationStateData.prototype.setMix = function (fromName, toName, duration) {\n\t\t\tvar from = this.skeletonData.findAnimation(fromName);\n\t\t\tif (from == null)\n\t\t\t\tthrow new Error(\"Animation not found: \" + fromName);\n\t\t\tvar to = this.skeletonData.findAnimation(toName);\n\t\t\tif (to == null)\n\t\t\t\tthrow new Error(\"Animation not found: \" + toName);\n\t\t\tthis.setMixWith(from, to, duration);\n\t\t};\n\t\tAnimationStateData.prototype.setMixWith = function (from, to, duration) {\n\t\t\tif (from == null)\n\t\t\t\tthrow new Error(\"from cannot be null.\");\n\t\t\tif (to == null)\n\t\t\t\tthrow new Error(\"to cannot be null.\");\n\t\t\tvar key = from.name + \".\" + to.name;\n\t\t\tthis.animationToMixTime[key] = duration;\n\t\t};\n\t\tAnimationStateData.prototype.getMix = function (from, to) {\n\t\t\tvar key = from.name + \".\" + to.name;\n\t\t\tvar value = this.animationToMixTime[key];\n\t\t\treturn value === undefined ? this.defaultMix : value;\n\t\t};\n\t\treturn AnimationStateData;\n\t}());\n\tspine.AnimationStateData = AnimationStateData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar AssetManager = (function () {\n\t\tfunction AssetManager(textureLoader, pathPrefix) {\n\t\t\tif (pathPrefix === void 0) { pathPrefix = \"\"; }\n\t\t\tthis.assets = {};\n\t\t\tthis.errors = {};\n\t\t\tthis.toLoad = 0;\n\t\t\tthis.loaded = 0;\n\t\t\tthis.textureLoader = textureLoader;\n\t\t\tthis.pathPrefix = pathPrefix;\n\t\t}\n\t\tAssetManager.downloadText = function (url, success, error) {\n\t\t\tvar request = new XMLHttpRequest();\n\t\t\trequest.open(\"GET\", url, true);\n\t\t\trequest.onload = function () {\n\t\t\t\tif (request.status == 200) {\n\t\t\t\t\tsuccess(request.responseText);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\terror(request.status, request.responseText);\n\t\t\t\t}\n\t\t\t};\n\t\t\trequest.onerror = function () {\n\t\t\t\terror(request.status, request.responseText);\n\t\t\t};\n\t\t\trequest.send();\n\t\t};\n\t\tAssetManager.downloadBinary = function (url, success, error) {\n\t\t\tvar request = new XMLHttpRequest();\n\t\t\trequest.open(\"GET\", url, true);\n\t\t\trequest.responseType = \"arraybuffer\";\n\t\t\trequest.onload = function () {\n\t\t\t\tif (request.status == 200) {\n\t\t\t\t\tsuccess(new Uint8Array(request.response));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\terror(request.status, request.responseText);\n\t\t\t\t}\n\t\t\t};\n\t\t\trequest.onerror = function () {\n\t\t\t\terror(request.status, request.responseText);\n\t\t\t};\n\t\t\trequest.send();\n\t\t};\n\t\tAssetManager.prototype.loadText = function (path, success, error) {\n\t\t\tvar _this = this;\n\t\t\tif (success === void 0) { success = null; }\n\t\t\tif (error === void 0) { error = null; }\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tthis.toLoad++;\n\t\t\tAssetManager.downloadText(path, function (data) {\n\t\t\t\t_this.assets[path] = data;\n\t\t\t\tif (success)\n\t\t\t\t\tsuccess(path, data);\n\t\t\t\t_this.toLoad--;\n\t\t\t\t_this.loaded++;\n\t\t\t}, function (state, responseText) {\n\t\t\t\t_this.errors[path] = \"Couldn't load text \" + path + \": status \" + status + \", \" + responseText;\n\t\t\t\tif (error)\n\t\t\t\t\terror(path, \"Couldn't load text \" + path + \": status \" + status + \", \" + responseText);\n\t\t\t\t_this.toLoad--;\n\t\t\t\t_this.loaded++;\n\t\t\t});\n\t\t};\n\t\tAssetManager.prototype.loadTexture = function (path, success, error) {\n\t\t\tvar _this = this;\n\t\t\tif (success === void 0) { success = null; }\n\t\t\tif (error === void 0) { error = null; }\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tthis.toLoad++;\n\t\t\tvar img = new Image();\n\t\t\timg.crossOrigin = \"anonymous\";\n\t\t\timg.onload = function (ev) {\n\t\t\t\tvar texture = _this.textureLoader(img);\n\t\t\t\t_this.assets[path] = texture;\n\t\t\t\t_this.toLoad--;\n\t\t\t\t_this.loaded++;\n\t\t\t\tif (success)\n\t\t\t\t\tsuccess(path, img);\n\t\t\t};\n\t\t\timg.onerror = function (ev) {\n\t\t\t\t_this.errors[path] = \"Couldn't load image \" + path;\n\t\t\t\t_this.toLoad--;\n\t\t\t\t_this.loaded++;\n\t\t\t\tif (error)\n\t\t\t\t\terror(path, \"Couldn't load image \" + path);\n\t\t\t};\n\t\t\timg.src = path;\n\t\t};\n\t\tAssetManager.prototype.loadTextureData = function (path, data, success, error) {\n\t\t\tvar _this = this;\n\t\t\tif (success === void 0) { success = null; }\n\t\t\tif (error === void 0) { error = null; }\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tthis.toLoad++;\n\t\t\tvar img = new Image();\n\t\t\timg.onload = function (ev) {\n\t\t\t\tvar texture = _this.textureLoader(img);\n\t\t\t\t_this.assets[path] = texture;\n\t\t\t\t_this.toLoad--;\n\t\t\t\t_this.loaded++;\n\t\t\t\tif (success)\n\t\t\t\t\tsuccess(path, img);\n\t\t\t};\n\t\t\timg.onerror = function (ev) {\n\t\t\t\t_this.errors[path] = \"Couldn't load image \" + path;\n\t\t\t\t_this.toLoad--;\n\t\t\t\t_this.loaded++;\n\t\t\t\tif (error)\n\t\t\t\t\terror(path, \"Couldn't load image \" + path);\n\t\t\t};\n\t\t\timg.src = data;\n\t\t};\n\t\tAssetManager.prototype.loadTextureAtlas = function (path, success, error) {\n\t\t\tvar _this = this;\n\t\t\tif (success === void 0) { success = null; }\n\t\t\tif (error === void 0) { error = null; }\n\t\t\tvar parent = path.lastIndexOf(\"/\") >= 0 ? path.substring(0, path.lastIndexOf(\"/\")) : \"\";\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tthis.toLoad++;\n\t\t\tAssetManager.downloadText(path, function (atlasData) {\n\t\t\t\tvar pagesLoaded = { count: 0 };\n\t\t\t\tvar atlasPages = new Array();\n\t\t\t\ttry {\n\t\t\t\t\tvar atlas = new spine.TextureAtlas(atlasData, function (path) {\n\t\t\t\t\t\tatlasPages.push(parent + \"/\" + path);\n\t\t\t\t\t\tvar image = document.createElement(\"img\");\n\t\t\t\t\t\timage.width = 16;\n\t\t\t\t\t\timage.height = 16;\n\t\t\t\t\t\treturn new spine.FakeTexture(image);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tvar ex = e;\n\t\t\t\t\t_this.errors[path] = \"Couldn't load texture atlas \" + path + \": \" + ex.message;\n\t\t\t\t\tif (error)\n\t\t\t\t\t\terror(path, \"Couldn't load texture atlas \" + path + \": \" + ex.message);\n\t\t\t\t\t_this.toLoad--;\n\t\t\t\t\t_this.loaded++;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar _loop_1 = function (atlasPage) {\n\t\t\t\t\tvar pageLoadError = false;\n\t\t\t\t\t_this.loadTexture(atlasPage, function (imagePath, image) {\n\t\t\t\t\t\tpagesLoaded.count++;\n\t\t\t\t\t\tif (pagesLoaded.count == atlasPages.length) {\n\t\t\t\t\t\t\tif (!pageLoadError) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tvar atlas = new spine.TextureAtlas(atlasData, function (path) {\n\t\t\t\t\t\t\t\t\t\treturn _this.get(parent + \"/\" + path);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t_this.assets[path] = atlas;\n\t\t\t\t\t\t\t\t\tif (success)\n\t\t\t\t\t\t\t\t\t\tsuccess(path, atlas);\n\t\t\t\t\t\t\t\t\t_this.toLoad--;\n\t\t\t\t\t\t\t\t\t_this.loaded++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\t\t\tvar ex = e;\n\t\t\t\t\t\t\t\t\t_this.errors[path] = \"Couldn't load texture atlas \" + path + \": \" + ex.message;\n\t\t\t\t\t\t\t\t\tif (error)\n\t\t\t\t\t\t\t\t\t\terror(path, \"Couldn't load texture atlas \" + path + \": \" + ex.message);\n\t\t\t\t\t\t\t\t\t_this.toLoad--;\n\t\t\t\t\t\t\t\t\t_this.loaded++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t_this.errors[path] = \"Couldn't load texture atlas page \" + imagePath + \"} of atlas \" + path;\n\t\t\t\t\t\t\t\tif (error)\n\t\t\t\t\t\t\t\t\terror(path, \"Couldn't load texture atlas page \" + imagePath + \" of atlas \" + path);\n\t\t\t\t\t\t\t\t_this.toLoad--;\n\t\t\t\t\t\t\t\t_this.loaded++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (imagePath, errorMessage) {\n\t\t\t\t\t\tpageLoadError = true;\n\t\t\t\t\t\tpagesLoaded.count++;\n\t\t\t\t\t\tif (pagesLoaded.count == atlasPages.length) {\n\t\t\t\t\t\t\t_this.errors[path] = \"Couldn't load texture atlas page \" + imagePath + \"} of atlas \" + path;\n\t\t\t\t\t\t\tif (error)\n\t\t\t\t\t\t\t\terror(path, \"Couldn't load texture atlas page \" + imagePath + \" of atlas \" + path);\n\t\t\t\t\t\t\t_this.toLoad--;\n\t\t\t\t\t\t\t_this.loaded++;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tfor (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) {\n\t\t\t\t\tvar atlasPage = atlasPages_1[_i];\n\t\t\t\t\t_loop_1(atlasPage);\n\t\t\t\t}\n\t\t\t}, function (state, responseText) {\n\t\t\t\t_this.errors[path] = \"Couldn't load texture atlas \" + path + \": status \" + status + \", \" + responseText;\n\t\t\t\tif (error)\n\t\t\t\t\terror(path, \"Couldn't load texture atlas \" + path + \": status \" + status + \", \" + responseText);\n\t\t\t\t_this.toLoad--;\n\t\t\t\t_this.loaded++;\n\t\t\t});\n\t\t};\n\t\tAssetManager.prototype.get = function (path) {\n\t\t\tpath = this.pathPrefix + path;\n\t\t\treturn this.assets[path];\n\t\t};\n\t\tAssetManager.prototype.remove = function (path) {\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tvar asset = this.assets[path];\n\t\t\tif (asset.dispose)\n\t\t\t\tasset.dispose();\n\t\t\tthis.assets[path] = null;\n\t\t};\n\t\tAssetManager.prototype.removeAll = function () {\n\t\t\tfor (var key in this.assets) {\n\t\t\t\tvar asset = this.assets[key];\n\t\t\t\tif (asset.dispose)\n\t\t\t\t\tasset.dispose();\n\t\t\t}\n\t\t\tthis.assets = {};\n\t\t};\n\t\tAssetManager.prototype.isLoadingComplete = function () {\n\t\t\treturn this.toLoad == 0;\n\t\t};\n\t\tAssetManager.prototype.getToLoad = function () {\n\t\t\treturn this.toLoad;\n\t\t};\n\t\tAssetManager.prototype.getLoaded = function () {\n\t\t\treturn this.loaded;\n\t\t};\n\t\tAssetManager.prototype.dispose = function () {\n\t\t\tthis.removeAll();\n\t\t};\n\t\tAssetManager.prototype.hasErrors = function () {\n\t\t\treturn Object.keys(this.errors).length > 0;\n\t\t};\n\t\tAssetManager.prototype.getErrors = function () {\n\t\t\treturn this.errors;\n\t\t};\n\t\treturn AssetManager;\n\t}());\n\tspine.AssetManager = AssetManager;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar AtlasAttachmentLoader = (function () {\n\t\tfunction AtlasAttachmentLoader(atlas) {\n\t\t\tthis.atlas = atlas;\n\t\t}\n\t\tAtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) {\n\t\t\tvar region = this.atlas.findRegion(path);\n\t\t\tif (region == null)\n\t\t\t\tthrow new Error(\"Region not found in atlas: \" + path + \" (region attachment: \" + name + \")\");\n\t\t\tregion.renderObject = region;\n\t\t\tvar attachment = new spine.RegionAttachment(name);\n\t\t\tattachment.setRegion(region);\n\t\t\treturn attachment;\n\t\t};\n\t\tAtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) {\n\t\t\tvar region = this.atlas.findRegion(path);\n\t\t\tif (region == null)\n\t\t\t\tthrow new Error(\"Region not found in atlas: \" + path + \" (mesh attachment: \" + name + \")\");\n\t\t\tregion.renderObject = region;\n\t\t\tvar attachment = new spine.MeshAttachment(name);\n\t\t\tattachment.region = region;\n\t\t\treturn attachment;\n\t\t};\n\t\tAtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) {\n\t\t\treturn new spine.BoundingBoxAttachment(name);\n\t\t};\n\t\tAtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) {\n\t\t\treturn new spine.PathAttachment(name);\n\t\t};\n\t\tAtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) {\n\t\t\treturn new spine.PointAttachment(name);\n\t\t};\n\t\tAtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) {\n\t\t\treturn new spine.ClippingAttachment(name);\n\t\t};\n\t\treturn AtlasAttachmentLoader;\n\t}());\n\tspine.AtlasAttachmentLoader = AtlasAttachmentLoader;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar BlendMode;\n\t(function (BlendMode) {\n\t\tBlendMode[BlendMode[\"Normal\"] = 0] = \"Normal\";\n\t\tBlendMode[BlendMode[\"Additive\"] = 1] = \"Additive\";\n\t\tBlendMode[BlendMode[\"Multiply\"] = 2] = \"Multiply\";\n\t\tBlendMode[BlendMode[\"Screen\"] = 3] = \"Screen\";\n\t})(BlendMode = spine.BlendMode || (spine.BlendMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Bone = (function () {\n\t\tfunction Bone(data, skeleton, parent) {\n\t\t\tthis.children = new Array();\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.rotation = 0;\n\t\t\tthis.scaleX = 0;\n\t\t\tthis.scaleY = 0;\n\t\t\tthis.shearX = 0;\n\t\t\tthis.shearY = 0;\n\t\t\tthis.ax = 0;\n\t\t\tthis.ay = 0;\n\t\t\tthis.arotation = 0;\n\t\t\tthis.ascaleX = 0;\n\t\t\tthis.ascaleY = 0;\n\t\t\tthis.ashearX = 0;\n\t\t\tthis.ashearY = 0;\n\t\t\tthis.appliedValid = false;\n\t\t\tthis.a = 0;\n\t\t\tthis.b = 0;\n\t\t\tthis.worldX = 0;\n\t\t\tthis.c = 0;\n\t\t\tthis.d = 0;\n\t\t\tthis.worldY = 0;\n\t\t\tthis.sorted = false;\n\t\t\tif (data == null)\n\t\t\t\tthrow new Error(\"data cannot be null.\");\n\t\t\tif (skeleton == null)\n\t\t\t\tthrow new Error(\"skeleton cannot be null.\");\n\t\t\tthis.data = data;\n\t\t\tthis.skeleton = skeleton;\n\t\t\tthis.parent = parent;\n\t\t\tthis.setToSetupPose();\n\t\t}\n\t\tBone.prototype.update = function () {\n\t\t\tthis.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n\t\t};\n\t\tBone.prototype.updateWorldTransform = function () {\n\t\t\tthis.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n\t\t};\n\t\tBone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) {\n\t\t\tthis.ax = x;\n\t\t\tthis.ay = y;\n\t\t\tthis.arotation = rotation;\n\t\t\tthis.ascaleX = scaleX;\n\t\t\tthis.ascaleY = scaleY;\n\t\t\tthis.ashearX = shearX;\n\t\t\tthis.ashearY = shearY;\n\t\t\tthis.appliedValid = true;\n\t\t\tvar parent = this.parent;\n\t\t\tif (parent == null) {\n\t\t\t\tvar rotationY = rotation + 90 + shearY;\n\t\t\t\tvar la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;\n\t\t\t\tvar lb = spine.MathUtils.cosDeg(rotationY) * scaleY;\n\t\t\t\tvar lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;\n\t\t\t\tvar ld = spine.MathUtils.sinDeg(rotationY) * scaleY;\n\t\t\t\tvar skeleton = this.skeleton;\n\t\t\t\tif (skeleton.flipX) {\n\t\t\t\t\tx = -x;\n\t\t\t\t\tla = -la;\n\t\t\t\t\tlb = -lb;\n\t\t\t\t}\n\t\t\t\tif (skeleton.flipY) {\n\t\t\t\t\ty = -y;\n\t\t\t\t\tlc = -lc;\n\t\t\t\t\tld = -ld;\n\t\t\t\t}\n\t\t\t\tthis.a = la;\n\t\t\t\tthis.b = lb;\n\t\t\t\tthis.c = lc;\n\t\t\t\tthis.d = ld;\n\t\t\t\tthis.worldX = x + skeleton.x;\n\t\t\t\tthis.worldY = y + skeleton.y;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\t\tthis.worldX = pa * x + pb * y + parent.worldX;\n\t\t\tthis.worldY = pc * x + pd * y + parent.worldY;\n\t\t\tswitch (this.data.transformMode) {\n\t\t\t\tcase spine.TransformMode.Normal: {\n\t\t\t\t\tvar rotationY = rotation + 90 + shearY;\n\t\t\t\t\tvar la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;\n\t\t\t\t\tvar lb = spine.MathUtils.cosDeg(rotationY) * scaleY;\n\t\t\t\t\tvar lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;\n\t\t\t\t\tvar ld = spine.MathUtils.sinDeg(rotationY) * scaleY;\n\t\t\t\t\tthis.a = pa * la + pb * lc;\n\t\t\t\t\tthis.b = pa * lb + pb * ld;\n\t\t\t\t\tthis.c = pc * la + pd * lc;\n\t\t\t\t\tthis.d = pc * lb + pd * ld;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcase spine.TransformMode.OnlyTranslation: {\n\t\t\t\t\tvar rotationY = rotation + 90 + shearY;\n\t\t\t\t\tthis.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;\n\t\t\t\t\tthis.b = spine.MathUtils.cosDeg(rotationY) * scaleY;\n\t\t\t\t\tthis.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;\n\t\t\t\t\tthis.d = spine.MathUtils.sinDeg(rotationY) * scaleY;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase spine.TransformMode.NoRotationOrReflection: {\n\t\t\t\t\tvar s = pa * pa + pc * pc;\n\t\t\t\t\tvar prx = 0;\n\t\t\t\t\tif (s > 0.0001) {\n\t\t\t\t\t\ts = Math.abs(pa * pd - pb * pc) / s;\n\t\t\t\t\t\tpb = pc * s;\n\t\t\t\t\t\tpd = pa * s;\n\t\t\t\t\t\tprx = Math.atan2(pc, pa) * spine.MathUtils.radDeg;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpa = 0;\n\t\t\t\t\t\tpc = 0;\n\t\t\t\t\t\tprx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg;\n\t\t\t\t\t}\n\t\t\t\t\tvar rx = rotation + shearX - prx;\n\t\t\t\t\tvar ry = rotation + shearY - prx + 90;\n\t\t\t\t\tvar la = spine.MathUtils.cosDeg(rx) * scaleX;\n\t\t\t\t\tvar lb = spine.MathUtils.cosDeg(ry) * scaleY;\n\t\t\t\t\tvar lc = spine.MathUtils.sinDeg(rx) * scaleX;\n\t\t\t\t\tvar ld = spine.MathUtils.sinDeg(ry) * scaleY;\n\t\t\t\t\tthis.a = pa * la - pb * lc;\n\t\t\t\t\tthis.b = pa * lb - pb * ld;\n\t\t\t\t\tthis.c = pc * la + pd * lc;\n\t\t\t\t\tthis.d = pc * lb + pd * ld;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase spine.TransformMode.NoScale:\n\t\t\t\tcase spine.TransformMode.NoScaleOrReflection: {\n\t\t\t\t\tvar cos = spine.MathUtils.cosDeg(rotation);\n\t\t\t\t\tvar sin = spine.MathUtils.sinDeg(rotation);\n\t\t\t\t\tvar za = pa * cos + pb * sin;\n\t\t\t\t\tvar zc = pc * cos + pd * sin;\n\t\t\t\t\tvar s = Math.sqrt(za * za + zc * zc);\n\t\t\t\t\tif (s > 0.00001)\n\t\t\t\t\t\ts = 1 / s;\n\t\t\t\t\tza *= s;\n\t\t\t\t\tzc *= s;\n\t\t\t\t\ts = Math.sqrt(za * za + zc * zc);\n\t\t\t\t\tvar r = Math.PI / 2 + Math.atan2(zc, za);\n\t\t\t\t\tvar zb = Math.cos(r) * s;\n\t\t\t\t\tvar zd = Math.sin(r) * s;\n\t\t\t\t\tvar la = spine.MathUtils.cosDeg(shearX) * scaleX;\n\t\t\t\t\tvar lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY;\n\t\t\t\t\tvar lc = spine.MathUtils.sinDeg(shearX) * scaleX;\n\t\t\t\t\tvar ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY;\n\t\t\t\t\tif (this.data.transformMode != spine.TransformMode.NoScaleOrReflection ? pa * pd - pb * pc < 0 : this.skeleton.flipX != this.skeleton.flipY) {\n\t\t\t\t\t\tzb = -zb;\n\t\t\t\t\t\tzd = -zd;\n\t\t\t\t\t}\n\t\t\t\t\tthis.a = za * la + zb * lc;\n\t\t\t\t\tthis.b = za * lb + zb * ld;\n\t\t\t\t\tthis.c = zc * la + zd * lc;\n\t\t\t\t\tthis.d = zc * lb + zd * ld;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.skeleton.flipX) {\n\t\t\t\tthis.a = -this.a;\n\t\t\t\tthis.b = -this.b;\n\t\t\t}\n\t\t\tif (this.skeleton.flipY) {\n\t\t\t\tthis.c = -this.c;\n\t\t\t\tthis.d = -this.d;\n\t\t\t}\n\t\t};\n\t\tBone.prototype.setToSetupPose = function () {\n\t\t\tvar data = this.data;\n\t\t\tthis.x = data.x;\n\t\t\tthis.y = data.y;\n\t\t\tthis.rotation = data.rotation;\n\t\t\tthis.scaleX = data.scaleX;\n\t\t\tthis.scaleY = data.scaleY;\n\t\t\tthis.shearX = data.shearX;\n\t\t\tthis.shearY = data.shearY;\n\t\t};\n\t\tBone.prototype.getWorldRotationX = function () {\n\t\t\treturn Math.atan2(this.c, this.a) * spine.MathUtils.radDeg;\n\t\t};\n\t\tBone.prototype.getWorldRotationY = function () {\n\t\t\treturn Math.atan2(this.d, this.b) * spine.MathUtils.radDeg;\n\t\t};\n\t\tBone.prototype.getWorldScaleX = function () {\n\t\t\treturn Math.sqrt(this.a * this.a + this.c * this.c);\n\t\t};\n\t\tBone.prototype.getWorldScaleY = function () {\n\t\t\treturn Math.sqrt(this.b * this.b + this.d * this.d);\n\t\t};\n\t\tBone.prototype.updateAppliedTransform = function () {\n\t\t\tthis.appliedValid = true;\n\t\t\tvar parent = this.parent;\n\t\t\tif (parent == null) {\n\t\t\t\tthis.ax = this.worldX;\n\t\t\t\tthis.ay = this.worldY;\n\t\t\t\tthis.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg;\n\t\t\t\tthis.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);\n\t\t\t\tthis.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);\n\t\t\t\tthis.ashearX = 0;\n\t\t\t\tthis.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\t\tvar pid = 1 / (pa * pd - pb * pc);\n\t\t\tvar dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n\t\t\tthis.ax = (dx * pd * pid - dy * pb * pid);\n\t\t\tthis.ay = (dy * pa * pid - dx * pc * pid);\n\t\t\tvar ia = pid * pd;\n\t\t\tvar id = pid * pa;\n\t\t\tvar ib = pid * pb;\n\t\t\tvar ic = pid * pc;\n\t\t\tvar ra = ia * this.a - ib * this.c;\n\t\t\tvar rb = ia * this.b - ib * this.d;\n\t\t\tvar rc = id * this.c - ic * this.a;\n\t\t\tvar rd = id * this.d - ic * this.b;\n\t\t\tthis.ashearX = 0;\n\t\t\tthis.ascaleX = Math.sqrt(ra * ra + rc * rc);\n\t\t\tif (this.ascaleX > 0.0001) {\n\t\t\t\tvar det = ra * rd - rb * rc;\n\t\t\t\tthis.ascaleY = det / this.ascaleX;\n\t\t\t\tthis.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg;\n\t\t\t\tthis.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.ascaleX = 0;\n\t\t\t\tthis.ascaleY = Math.sqrt(rb * rb + rd * rd);\n\t\t\t\tthis.ashearY = 0;\n\t\t\t\tthis.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg;\n\t\t\t}\n\t\t};\n\t\tBone.prototype.worldToLocal = function (world) {\n\t\t\tvar a = this.a, b = this.b, c = this.c, d = this.d;\n\t\t\tvar invDet = 1 / (a * d - b * c);\n\t\t\tvar x = world.x - this.worldX, y = world.y - this.worldY;\n\t\t\tworld.x = (x * d * invDet - y * b * invDet);\n\t\t\tworld.y = (y * a * invDet - x * c * invDet);\n\t\t\treturn world;\n\t\t};\n\t\tBone.prototype.localToWorld = function (local) {\n\t\t\tvar x = local.x, y = local.y;\n\t\t\tlocal.x = x * this.a + y * this.b + this.worldX;\n\t\t\tlocal.y = x * this.c + y * this.d + this.worldY;\n\t\t\treturn local;\n\t\t};\n\t\tBone.prototype.worldToLocalRotation = function (worldRotation) {\n\t\t\tvar sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation);\n\t\t\treturn Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg;\n\t\t};\n\t\tBone.prototype.localToWorldRotation = function (localRotation) {\n\t\t\tvar sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation);\n\t\t\treturn Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg;\n\t\t};\n\t\tBone.prototype.rotateWorld = function (degrees) {\n\t\t\tvar a = this.a, b = this.b, c = this.c, d = this.d;\n\t\t\tvar cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees);\n\t\t\tthis.a = cos * a - sin * c;\n\t\t\tthis.b = cos * b - sin * d;\n\t\t\tthis.c = sin * a + cos * c;\n\t\t\tthis.d = sin * b + cos * d;\n\t\t\tthis.appliedValid = false;\n\t\t};\n\t\treturn Bone;\n\t}());\n\tspine.Bone = Bone;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar BoneData = (function () {\n\t\tfunction BoneData(index, name, parent) {\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.rotation = 0;\n\t\t\tthis.scaleX = 1;\n\t\t\tthis.scaleY = 1;\n\t\t\tthis.shearX = 0;\n\t\t\tthis.shearY = 0;\n\t\t\tthis.transformMode = TransformMode.Normal;\n\t\t\tif (index < 0)\n\t\t\t\tthrow new Error(\"index must be >= 0.\");\n\t\t\tif (name == null)\n\t\t\t\tthrow new Error(\"name cannot be null.\");\n\t\t\tthis.index = index;\n\t\t\tthis.name = name;\n\t\t\tthis.parent = parent;\n\t\t}\n\t\treturn BoneData;\n\t}());\n\tspine.BoneData = BoneData;\n\tvar TransformMode;\n\t(function (TransformMode) {\n\t\tTransformMode[TransformMode[\"Normal\"] = 0] = \"Normal\";\n\t\tTransformMode[TransformMode[\"OnlyTranslation\"] = 1] = \"OnlyTranslation\";\n\t\tTransformMode[TransformMode[\"NoRotationOrReflection\"] = 2] = \"NoRotationOrReflection\";\n\t\tTransformMode[TransformMode[\"NoScale\"] = 3] = \"NoScale\";\n\t\tTransformMode[TransformMode[\"NoScaleOrReflection\"] = 4] = \"NoScaleOrReflection\";\n\t})(TransformMode = spine.TransformMode || (spine.TransformMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Event = (function () {\n\t\tfunction Event(time, data) {\n\t\t\tif (data == null)\n\t\t\t\tthrow new Error(\"data cannot be null.\");\n\t\t\tthis.time = time;\n\t\t\tthis.data = data;\n\t\t}\n\t\treturn Event;\n\t}());\n\tspine.Event = Event;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar EventData = (function () {\n\t\tfunction EventData(name) {\n\t\t\tthis.name = name;\n\t\t}\n\t\treturn EventData;\n\t}());\n\tspine.EventData = EventData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar IkConstraint = (function () {\n\t\tfunction IkConstraint(data, skeleton) {\n\t\t\tthis.mix = 1;\n\t\t\tthis.bendDirection = 0;\n\t\t\tif (data == null)\n\t\t\t\tthrow new Error(\"data cannot be null.\");\n\t\t\tif (skeleton == null)\n\t\t\t\tthrow new Error(\"skeleton cannot be null.\");\n\t\t\tthis.data = data;\n\t\t\tthis.mix = data.mix;\n\t\t\tthis.bendDirection = data.bendDirection;\n\t\t\tthis.bones = new Array();\n\t\t\tfor (var i = 0; i < data.bones.length; i++)\n\t\t\t\tthis.bones.push(skeleton.findBone(data.bones[i].name));\n\t\t\tthis.target = skeleton.findBone(data.target.name);\n\t\t}\n\t\tIkConstraint.prototype.getOrder = function () {\n\t\t\treturn this.data.order;\n\t\t};\n\t\tIkConstraint.prototype.apply = function () {\n\t\t\tthis.update();\n\t\t};\n\t\tIkConstraint.prototype.update = function () {\n\t\t\tvar target = this.target;\n\t\t\tvar bones = this.bones;\n\t\t\tswitch (bones.length) {\n\t\t\t\tcase 1:\n\t\t\t\t\tthis.apply1(bones[0], target.worldX, target.worldY, this.mix);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.mix);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tIkConstraint.prototype.apply1 = function (bone, targetX, targetY, alpha) {\n\t\t\tif (!bone.appliedValid)\n\t\t\t\tbone.updateAppliedTransform();\n\t\t\tvar p = bone.parent;\n\t\t\tvar id = 1 / (p.a * p.d - p.b * p.c);\n\t\t\tvar x = targetX - p.worldX, y = targetY - p.worldY;\n\t\t\tvar tx = (x * p.d - y * p.b) * id - bone.ax, ty = (y * p.a - x * p.c) * id - bone.ay;\n\t\t\tvar rotationIK = Math.atan2(ty, tx) * spine.MathUtils.radDeg - bone.ashearX - bone.arotation;\n\t\t\tif (bone.ascaleX < 0)\n\t\t\t\trotationIK += 180;\n\t\t\tif (rotationIK > 180)\n\t\t\t\trotationIK -= 360;\n\t\t\telse if (rotationIK < -180)\n\t\t\t\trotationIK += 360;\n\t\t\tbone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, bone.ascaleX, bone.ascaleY, bone.ashearX, bone.ashearY);\n\t\t};\n\t\tIkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, alpha) {\n\t\t\tif (alpha == 0) {\n\t\t\t\tchild.updateWorldTransform();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!parent.appliedValid)\n\t\t\t\tparent.updateAppliedTransform();\n\t\t\tif (!child.appliedValid)\n\t\t\t\tchild.updateAppliedTransform();\n\t\t\tvar px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, csx = child.ascaleX;\n\t\t\tvar os1 = 0, os2 = 0, s2 = 0;\n\t\t\tif (psx < 0) {\n\t\t\t\tpsx = -psx;\n\t\t\t\tos1 = 180;\n\t\t\t\ts2 = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tos1 = 0;\n\t\t\t\ts2 = 1;\n\t\t\t}\n\t\t\tif (psy < 0) {\n\t\t\t\tpsy = -psy;\n\t\t\t\ts2 = -s2;\n\t\t\t}\n\t\t\tif (csx < 0) {\n\t\t\t\tcsx = -csx;\n\t\t\t\tos2 = 180;\n\t\t\t}\n\t\t\telse\n\t\t\t\tos2 = 0;\n\t\t\tvar cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n\t\t\tvar u = Math.abs(psx - psy) <= 0.0001;\n\t\t\tif (!u) {\n\t\t\t\tcy = 0;\n\t\t\t\tcwx = a * cx + parent.worldX;\n\t\t\t\tcwy = c * cx + parent.worldY;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcy = child.ay;\n\t\t\t\tcwx = a * cx + b * cy + parent.worldX;\n\t\t\t\tcwy = c * cx + d * cy + parent.worldY;\n\t\t\t}\n\t\t\tvar pp = parent.parent;\n\t\t\ta = pp.a;\n\t\t\tb = pp.b;\n\t\t\tc = pp.c;\n\t\t\td = pp.d;\n\t\t\tvar id = 1 / (a * d - b * c), x = targetX - pp.worldX, y = targetY - pp.worldY;\n\t\t\tvar tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;\n\t\t\tx = cwx - pp.worldX;\n\t\t\ty = cwy - pp.worldY;\n\t\t\tvar dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;\n\t\t\tvar l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1 = 0, a2 = 0;\n\t\t\touter: if (u) {\n\t\t\t\tl2 *= psx;\n\t\t\t\tvar cos = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n\t\t\t\tif (cos < -1)\n\t\t\t\t\tcos = -1;\n\t\t\t\telse if (cos > 1)\n\t\t\t\t\tcos = 1;\n\t\t\t\ta2 = Math.acos(cos) * bendDir;\n\t\t\t\ta = l1 + l2 * cos;\n\t\t\t\tb = l2 * Math.sin(a2);\n\t\t\t\ta1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ta = psx * l2;\n\t\t\t\tb = psy * l2;\n\t\t\t\tvar aa = a * a, bb = b * b, dd = tx * tx + ty * ty, ta = Math.atan2(ty, tx);\n\t\t\t\tc = bb * l1 * l1 + aa * dd - aa * bb;\n\t\t\t\tvar c1 = -2 * bb * l1, c2 = bb - aa;\n\t\t\t\td = c1 * c1 - 4 * c2 * c;\n\t\t\t\tif (d >= 0) {\n\t\t\t\t\tvar q = Math.sqrt(d);\n\t\t\t\t\tif (c1 < 0)\n\t\t\t\t\t\tq = -q;\n\t\t\t\t\tq = -(c1 + q) / 2;\n\t\t\t\t\tvar r0 = q / c2, r1 = c / q;\n\t\t\t\t\tvar r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n\t\t\t\t\tif (r * r <= dd) {\n\t\t\t\t\t\ty = Math.sqrt(dd - r * r) * bendDir;\n\t\t\t\t\t\ta1 = ta - Math.atan2(y, r);\n\t\t\t\t\t\ta2 = Math.atan2(y / psy, (r - l1) / psx);\n\t\t\t\t\t\tbreak outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;\n\t\t\t\tvar maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;\n\t\t\t\tc = -a * l1 / (aa - bb);\n\t\t\t\tif (c >= -1 && c <= 1) {\n\t\t\t\t\tc = Math.acos(c);\n\t\t\t\t\tx = a * Math.cos(c) + l1;\n\t\t\t\t\ty = b * Math.sin(c);\n\t\t\t\t\td = x * x + y * y;\n\t\t\t\t\tif (d < minDist) {\n\t\t\t\t\t\tminAngle = c;\n\t\t\t\t\t\tminDist = d;\n\t\t\t\t\t\tminX = x;\n\t\t\t\t\t\tminY = y;\n\t\t\t\t\t}\n\t\t\t\t\tif (d > maxDist) {\n\t\t\t\t\t\tmaxAngle = c;\n\t\t\t\t\t\tmaxDist = d;\n\t\t\t\t\t\tmaxX = x;\n\t\t\t\t\t\tmaxY = y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (dd <= (minDist + maxDist) / 2) {\n\t\t\t\t\ta1 = ta - Math.atan2(minY * bendDir, minX);\n\t\t\t\t\ta2 = minAngle * bendDir;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ta1 = ta - Math.atan2(maxY * bendDir, maxX);\n\t\t\t\t\ta2 = maxAngle * bendDir;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar os = Math.atan2(cy, cx) * s2;\n\t\t\tvar rotation = parent.arotation;\n\t\t\ta1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation;\n\t\t\tif (a1 > 180)\n\t\t\t\ta1 -= 360;\n\t\t\telse if (a1 < -180)\n\t\t\t\ta1 += 360;\n\t\t\tparent.updateWorldTransformWith(px, py, rotation + a1 * alpha, parent.ascaleX, parent.ascaleY, 0, 0);\n\t\t\trotation = child.arotation;\n\t\t\ta2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;\n\t\t\tif (a2 > 180)\n\t\t\t\ta2 -= 360;\n\t\t\telse if (a2 < -180)\n\t\t\t\ta2 += 360;\n\t\t\tchild.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n\t\t};\n\t\treturn IkConstraint;\n\t}());\n\tspine.IkConstraint = IkConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar IkConstraintData = (function () {\n\t\tfunction IkConstraintData(name) {\n\t\t\tthis.order = 0;\n\t\t\tthis.bones = new Array();\n\t\t\tthis.bendDirection = 1;\n\t\t\tthis.mix = 1;\n\t\t\tthis.name = name;\n\t\t}\n\t\treturn IkConstraintData;\n\t}());\n\tspine.IkConstraintData = IkConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar PathConstraint = (function () {\n\t\tfunction PathConstraint(data, skeleton) {\n\t\t\tthis.position = 0;\n\t\t\tthis.spacing = 0;\n\t\t\tthis.rotateMix = 0;\n\t\t\tthis.translateMix = 0;\n\t\t\tthis.spaces = new Array();\n\t\t\tthis.positions = new Array();\n\t\t\tthis.world = new Array();\n\t\t\tthis.curves = new Array();\n\t\t\tthis.lengths = new Array();\n\t\t\tthis.segments = new Array();\n\t\t\tif (data == null)\n\t\t\t\tthrow new Error(\"data cannot be null.\");\n\t\t\tif (skeleton == null)\n\t\t\t\tthrow new Error(\"skeleton cannot be null.\");\n\t\t\tthis.data = data;\n\t\t\tthis.bones = new Array();\n\t\t\tfor (var i = 0, n = data.bones.length; i < n; i++)\n\t\t\t\tthis.bones.push(skeleton.findBone(data.bones[i].name));\n\t\t\tthis.target = skeleton.findSlot(data.target.name);\n\t\t\tthis.position = data.position;\n\t\t\tthis.spacing = data.spacing;\n\t\t\tthis.rotateMix = data.rotateMix;\n\t\t\tthis.translateMix = data.translateMix;\n\t\t}\n\t\tPathConstraint.prototype.apply = function () {\n\t\t\tthis.update();\n\t\t};\n\t\tPathConstraint.prototype.update = function () {\n\t\t\tvar attachment = this.target.getAttachment();\n\t\t\tif (!(attachment instanceof spine.PathAttachment))\n\t\t\t\treturn;\n\t\t\tvar rotateMix = this.rotateMix, translateMix = this.translateMix;\n\t\t\tvar translate = translateMix > 0, rotate = rotateMix > 0;\n\t\t\tif (!translate && !rotate)\n\t\t\t\treturn;\n\t\t\tvar data = this.data;\n\t\t\tvar spacingMode = data.spacingMode;\n\t\t\tvar lengthSpacing = spacingMode == spine.SpacingMode.Length;\n\t\t\tvar rotateMode = data.rotateMode;\n\t\t\tvar tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;\n\t\t\tvar boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n\t\t\tvar bones = this.bones;\n\t\t\tvar spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;\n\t\t\tvar spacing = this.spacing;\n\t\t\tif (scale || lengthSpacing) {\n\t\t\t\tif (scale)\n\t\t\t\t\tlengths = spine.Utils.setArraySize(this.lengths, boneCount);\n\t\t\t\tfor (var i = 0, n = spacesCount - 1; i < n;) {\n\t\t\t\t\tvar bone = bones[i];\n\t\t\t\t\tvar setupLength = bone.data.length;\n\t\t\t\t\tif (setupLength < PathConstraint.epsilon) {\n\t\t\t\t\t\tif (scale)\n\t\t\t\t\t\t\tlengths[i] = 0;\n\t\t\t\t\t\tspaces[++i] = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tvar length_1 = Math.sqrt(x * x + y * y);\n\t\t\t\t\t\tif (scale)\n\t\t\t\t\t\t\tlengths[i] = length_1;\n\t\t\t\t\t\tspaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (var i = 1; i < spacesCount; i++)\n\t\t\t\t\tspaces[i] = spacing;\n\t\t\t}\n\t\t\tvar positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, spacingMode == spine.SpacingMode.Percent);\n\t\t\tvar boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;\n\t\t\tvar tip = false;\n\t\t\tif (offsetRotation == 0)\n\t\t\t\ttip = rotateMode == spine.RotateMode.Chain;\n\t\t\telse {\n\t\t\t\ttip = false;\n\t\t\t\tvar p = this.target.bone;\n\t\t\t\toffsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n\t\t\t}\n\t\t\tfor (var i = 0, p = 3; i < boneCount; i++, p += 3) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tbone.worldX += (boneX - bone.worldX) * translateMix;\n\t\t\t\tbone.worldY += (boneY - bone.worldY) * translateMix;\n\t\t\t\tvar x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY;\n\t\t\t\tif (scale) {\n\t\t\t\t\tvar length_2 = lengths[i];\n\t\t\t\t\tif (length_2 != 0) {\n\t\t\t\t\t\tvar s = (Math.sqrt(dx * dx + dy * dy) / length_2 - 1) * rotateMix + 1;\n\t\t\t\t\t\tbone.a *= s;\n\t\t\t\t\t\tbone.c *= s;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tboneX = x;\n\t\t\t\tboneY = y;\n\t\t\t\tif (rotate) {\n\t\t\t\t\tvar a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;\n\t\t\t\t\tif (tangents)\n\t\t\t\t\t\tr = positions[p - 1];\n\t\t\t\t\telse if (spaces[i + 1] == 0)\n\t\t\t\t\t\tr = positions[p + 2];\n\t\t\t\t\telse\n\t\t\t\t\t\tr = Math.atan2(dy, dx);\n\t\t\t\t\tr -= Math.atan2(c, a);\n\t\t\t\t\tif (tip) {\n\t\t\t\t\t\tcos = Math.cos(r);\n\t\t\t\t\t\tsin = Math.sin(r);\n\t\t\t\t\t\tvar length_3 = bone.data.length;\n\t\t\t\t\t\tboneX += (length_3 * (cos * a - sin * c) - dx) * rotateMix;\n\t\t\t\t\t\tboneY += (length_3 * (sin * a + cos * c) - dy) * rotateMix;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tr += offsetRotation;\n\t\t\t\t\t}\n\t\t\t\t\tif (r > spine.MathUtils.PI)\n\t\t\t\t\t\tr -= spine.MathUtils.PI2;\n\t\t\t\t\telse if (r < -spine.MathUtils.PI)\n\t\t\t\t\t\tr += spine.MathUtils.PI2;\n\t\t\t\t\tr *= rotateMix;\n\t\t\t\t\tcos = Math.cos(r);\n\t\t\t\t\tsin = Math.sin(r);\n\t\t\t\t\tbone.a = cos * a - sin * c;\n\t\t\t\t\tbone.b = cos * b - sin * d;\n\t\t\t\t\tbone.c = sin * a + cos * c;\n\t\t\t\t\tbone.d = sin * b + cos * d;\n\t\t\t\t}\n\t\t\t\tbone.appliedValid = false;\n\t\t\t}\n\t\t};\n\t\tPathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) {\n\t\t\tvar target = this.target;\n\t\t\tvar position = this.position;\n\t\t\tvar spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null;\n\t\t\tvar closed = path.closed;\n\t\t\tvar verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n\t\t\tif (!path.constantSpeed) {\n\t\t\t\tvar lengths = path.lengths;\n\t\t\t\tcurveCount -= closed ? 1 : 2;\n\t\t\t\tvar pathLength_1 = lengths[curveCount];\n\t\t\t\tif (percentPosition)\n\t\t\t\t\tposition *= pathLength_1;\n\t\t\t\tif (percentSpacing) {\n\t\t\t\t\tfor (var i = 0; i < spacesCount; i++)\n\t\t\t\t\t\tspaces[i] *= pathLength_1;\n\t\t\t\t}\n\t\t\t\tworld = spine.Utils.setArraySize(this.world, 8);\n\t\t\t\tfor (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n\t\t\t\t\tvar space = spaces[i];\n\t\t\t\t\tposition += space;\n\t\t\t\t\tvar p = position;\n\t\t\t\t\tif (closed) {\n\t\t\t\t\t\tp %= pathLength_1;\n\t\t\t\t\t\tif (p < 0)\n\t\t\t\t\t\t\tp += pathLength_1;\n\t\t\t\t\t\tcurve = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse if (p < 0) {\n\t\t\t\t\t\tif (prevCurve != PathConstraint.BEFORE) {\n\t\t\t\t\t\t\tprevCurve = PathConstraint.BEFORE;\n\t\t\t\t\t\t\tpath.computeWorldVertices(target, 2, 4, world, 0, 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.addBeforePosition(p, world, 0, out, o);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if (p > pathLength_1) {\n\t\t\t\t\t\tif (prevCurve != PathConstraint.AFTER) {\n\t\t\t\t\t\t\tprevCurve = PathConstraint.AFTER;\n\t\t\t\t\t\t\tpath.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.addAfterPosition(p - pathLength_1, world, 0, out, o);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (;; curve++) {\n\t\t\t\t\t\tvar length_4 = lengths[curve];\n\t\t\t\t\t\tif (p > length_4)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tif (curve == 0)\n\t\t\t\t\t\t\tp /= length_4;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar prev = lengths[curve - 1];\n\t\t\t\t\t\t\tp = (p - prev) / (length_4 - prev);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (curve != prevCurve) {\n\t\t\t\t\t\tprevCurve = curve;\n\t\t\t\t\t\tif (closed && curve == curveCount) {\n\t\t\t\t\t\t\tpath.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n\t\t\t\t\t\t\tpath.computeWorldVertices(target, 0, 4, world, 4, 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpath.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0));\n\t\t\t\t}\n\t\t\t\treturn out;\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tverticesLength += 2;\n\t\t\t\tworld = spine.Utils.setArraySize(this.world, verticesLength);\n\t\t\t\tpath.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n\t\t\t\tpath.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n\t\t\t\tworld[verticesLength - 2] = world[0];\n\t\t\t\tworld[verticesLength - 1] = world[1];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcurveCount--;\n\t\t\t\tverticesLength -= 4;\n\t\t\t\tworld = spine.Utils.setArraySize(this.world, verticesLength);\n\t\t\t\tpath.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n\t\t\t}\n\t\t\tvar curves = spine.Utils.setArraySize(this.curves, curveCount);\n\t\t\tvar pathLength = 0;\n\t\t\tvar x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;\n\t\t\tvar tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;\n\t\t\tfor (var i = 0, w = 2; i < curveCount; i++, w += 6) {\n\t\t\t\tcx1 = world[w];\n\t\t\t\tcy1 = world[w + 1];\n\t\t\t\tcx2 = world[w + 2];\n\t\t\t\tcy2 = world[w + 3];\n\t\t\t\tx2 = world[w + 4];\n\t\t\t\ty2 = world[w + 5];\n\t\t\t\ttmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n\t\t\t\ttmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n\t\t\t\tdddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n\t\t\t\tdddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n\t\t\t\tddfx = tmpx * 2 + dddfx;\n\t\t\t\tddfy = tmpy * 2 + dddfy;\n\t\t\t\tdfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n\t\t\t\tdfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n\t\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tdfx += ddfx;\n\t\t\t\tdfy += ddfy;\n\t\t\t\tddfx += dddfx;\n\t\t\t\tddfy += dddfy;\n\t\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tdfx += ddfx;\n\t\t\t\tdfy += ddfy;\n\t\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tdfx += ddfx + dddfx;\n\t\t\t\tdfy += ddfy + dddfy;\n\t\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tcurves[i] = pathLength;\n\t\t\t\tx1 = x2;\n\t\t\t\ty1 = y2;\n\t\t\t}\n\t\t\tif (percentPosition)\n\t\t\t\tposition *= pathLength;\n\t\t\tif (percentSpacing) {\n\t\t\t\tfor (var i = 0; i < spacesCount; i++)\n\t\t\t\t\tspaces[i] *= pathLength;\n\t\t\t}\n\t\t\tvar segments = this.segments;\n\t\t\tvar curveLength = 0;\n\t\t\tfor (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n\t\t\t\tvar space = spaces[i];\n\t\t\t\tposition += space;\n\t\t\t\tvar p = position;\n\t\t\t\tif (closed) {\n\t\t\t\t\tp %= pathLength;\n\t\t\t\t\tif (p < 0)\n\t\t\t\t\t\tp += pathLength;\n\t\t\t\t\tcurve = 0;\n\t\t\t\t}\n\t\t\t\telse if (p < 0) {\n\t\t\t\t\tthis.addBeforePosition(p, world, 0, out, o);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (p > pathLength) {\n\t\t\t\t\tthis.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (;; curve++) {\n\t\t\t\t\tvar length_5 = curves[curve];\n\t\t\t\t\tif (p > length_5)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (curve == 0)\n\t\t\t\t\t\tp /= length_5;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar prev = curves[curve - 1];\n\t\t\t\t\t\tp = (p - prev) / (length_5 - prev);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (curve != prevCurve) {\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t\tvar ii = curve * 6;\n\t\t\t\t\tx1 = world[ii];\n\t\t\t\t\ty1 = world[ii + 1];\n\t\t\t\t\tcx1 = world[ii + 2];\n\t\t\t\t\tcy1 = world[ii + 3];\n\t\t\t\t\tcx2 = world[ii + 4];\n\t\t\t\t\tcy2 = world[ii + 5];\n\t\t\t\t\tx2 = world[ii + 6];\n\t\t\t\t\ty2 = world[ii + 7];\n\t\t\t\t\ttmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n\t\t\t\t\ttmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n\t\t\t\t\tdddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n\t\t\t\t\tdddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n\t\t\t\t\tddfx = tmpx * 2 + dddfx;\n\t\t\t\t\tddfy = tmpy * 2 + dddfy;\n\t\t\t\t\tdfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n\t\t\t\t\tdfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n\t\t\t\t\tcurveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\t\tsegments[0] = curveLength;\n\t\t\t\t\tfor (ii = 1; ii < 8; ii++) {\n\t\t\t\t\t\tdfx += ddfx;\n\t\t\t\t\t\tdfy += ddfy;\n\t\t\t\t\t\tddfx += dddfx;\n\t\t\t\t\t\tddfy += dddfy;\n\t\t\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\t\t\tsegments[ii] = curveLength;\n\t\t\t\t\t}\n\t\t\t\t\tdfx += ddfx;\n\t\t\t\t\tdfy += ddfy;\n\t\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\t\tsegments[8] = curveLength;\n\t\t\t\t\tdfx += ddfx + dddfx;\n\t\t\t\t\tdfy += ddfy + dddfy;\n\t\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\t\tsegments[9] = curveLength;\n\t\t\t\t\tsegment = 0;\n\t\t\t\t}\n\t\t\t\tp *= curveLength;\n\t\t\t\tfor (;; segment++) {\n\t\t\t\t\tvar length_6 = segments[segment];\n\t\t\t\t\tif (p > length_6)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (segment == 0)\n\t\t\t\t\t\tp /= length_6;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar prev = segments[segment - 1];\n\t\t\t\t\t\tp = segment + (p - prev) / (length_6 - prev);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0));\n\t\t\t}\n\t\t\treturn out;\n\t\t};\n\t\tPathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) {\n\t\t\tvar x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);\n\t\t\tout[o] = x1 + p * Math.cos(r);\n\t\t\tout[o + 1] = y1 + p * Math.sin(r);\n\t\t\tout[o + 2] = r;\n\t\t};\n\t\tPathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) {\n\t\t\tvar x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);\n\t\t\tout[o] = x1 + p * Math.cos(r);\n\t\t\tout[o + 1] = y1 + p * Math.sin(r);\n\t\t\tout[o + 2] = r;\n\t\t};\n\t\tPathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) {\n\t\t\tif (p == 0 || isNaN(p))\n\t\t\t\tp = 0.0001;\n\t\t\tvar tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n\t\t\tvar ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n\t\t\tvar x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n\t\t\tout[o] = x;\n\t\t\tout[o + 1] = y;\n\t\t\tif (tangents)\n\t\t\t\tout[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n\t\t};\n\t\tPathConstraint.prototype.getOrder = function () {\n\t\t\treturn this.data.order;\n\t\t};\n\t\tPathConstraint.NONE = -1;\n\t\tPathConstraint.BEFORE = -2;\n\t\tPathConstraint.AFTER = -3;\n\t\tPathConstraint.epsilon = 0.00001;\n\t\treturn PathConstraint;\n\t}());\n\tspine.PathConstraint = PathConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar PathConstraintData = (function () {\n\t\tfunction PathConstraintData(name) {\n\t\t\tthis.order = 0;\n\t\t\tthis.bones = new Array();\n\t\t\tthis.name = name;\n\t\t}\n\t\treturn PathConstraintData;\n\t}());\n\tspine.PathConstraintData = PathConstraintData;\n\tvar PositionMode;\n\t(function (PositionMode) {\n\t\tPositionMode[PositionMode[\"Fixed\"] = 0] = \"Fixed\";\n\t\tPositionMode[PositionMode[\"Percent\"] = 1] = \"Percent\";\n\t})(PositionMode = spine.PositionMode || (spine.PositionMode = {}));\n\tvar SpacingMode;\n\t(function (SpacingMode) {\n\t\tSpacingMode[SpacingMode[\"Length\"] = 0] = \"Length\";\n\t\tSpacingMode[SpacingMode[\"Fixed\"] = 1] = \"Fixed\";\n\t\tSpacingMode[SpacingMode[\"Percent\"] = 2] = \"Percent\";\n\t})(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {}));\n\tvar RotateMode;\n\t(function (RotateMode) {\n\t\tRotateMode[RotateMode[\"Tangent\"] = 0] = \"Tangent\";\n\t\tRotateMode[RotateMode[\"Chain\"] = 1] = \"Chain\";\n\t\tRotateMode[RotateMode[\"ChainScale\"] = 2] = \"ChainScale\";\n\t})(RotateMode = spine.RotateMode || (spine.RotateMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Assets = (function () {\n\t\tfunction Assets(clientId) {\n\t\t\tthis.toLoad = new Array();\n\t\t\tthis.assets = {};\n\t\t\tthis.clientId = clientId;\n\t\t}\n\t\tAssets.prototype.loaded = function () {\n\t\t\tvar i = 0;\n\t\t\tfor (var v in this.assets)\n\t\t\t\ti++;\n\t\t\treturn i;\n\t\t};\n\t\treturn Assets;\n\t}());\n\tvar SharedAssetManager = (function () {\n\t\tfunction SharedAssetManager(pathPrefix) {\n\t\t\tif (pathPrefix === void 0) { pathPrefix = \"\"; }\n\t\t\tthis.clientAssets = {};\n\t\t\tthis.queuedAssets = {};\n\t\t\tthis.rawAssets = {};\n\t\t\tthis.errors = {};\n\t\t\tthis.pathPrefix = pathPrefix;\n\t\t}\n\t\tSharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) {\n\t\t\tvar clientAssets = this.clientAssets[clientId];\n\t\t\tif (clientAssets === null || clientAssets === undefined) {\n\t\t\t\tclientAssets = new Assets(clientId);\n\t\t\t\tthis.clientAssets[clientId] = clientAssets;\n\t\t\t}\n\t\t\tif (textureLoader !== null)\n\t\t\t\tclientAssets.textureLoader = textureLoader;\n\t\t\tclientAssets.toLoad.push(path);\n\t\t\tif (this.queuedAssets[path] === path) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.queuedAssets[path] = path;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\t\tSharedAssetManager.prototype.loadText = function (clientId, path) {\n\t\t\tvar _this = this;\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tif (!this.queueAsset(clientId, null, path))\n\t\t\t\treturn;\n\t\t\tvar request = new XMLHttpRequest();\n\t\t\trequest.onreadystatechange = function () {\n\t\t\t\tif (request.readyState == XMLHttpRequest.DONE) {\n\t\t\t\t\tif (request.status >= 200 && request.status < 300) {\n\t\t\t\t\t\t_this.rawAssets[path] = request.responseText;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t_this.errors[path] = \"Couldn't load text \" + path + \": status \" + request.status + \", \" + request.responseText;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\trequest.open(\"GET\", path, true);\n\t\t\trequest.send();\n\t\t};\n\t\tSharedAssetManager.prototype.loadJson = function (clientId, path) {\n\t\t\tvar _this = this;\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tif (!this.queueAsset(clientId, null, path))\n\t\t\t\treturn;\n\t\t\tvar request = new XMLHttpRequest();\n\t\t\trequest.onreadystatechange = function () {\n\t\t\t\tif (request.readyState == XMLHttpRequest.DONE) {\n\t\t\t\t\tif (request.status >= 200 && request.status < 300) {\n\t\t\t\t\t\t_this.rawAssets[path] = JSON.parse(request.responseText);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t_this.errors[path] = \"Couldn't load text \" + path + \": status \" + request.status + \", \" + request.responseText;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\trequest.open(\"GET\", path, true);\n\t\t\trequest.send();\n\t\t};\n\t\tSharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) {\n\t\t\tvar _this = this;\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tif (!this.queueAsset(clientId, textureLoader, path))\n\t\t\t\treturn;\n\t\t\tvar img = new Image();\n\t\t\timg.src = path;\n\t\t\timg.crossOrigin = \"anonymous\";\n\t\t\timg.onload = function (ev) {\n\t\t\t\t_this.rawAssets[path] = img;\n\t\t\t};\n\t\t\timg.onerror = function (ev) {\n\t\t\t\t_this.errors[path] = \"Couldn't load image \" + path;\n\t\t\t};\n\t\t};\n\t\tSharedAssetManager.prototype.get = function (clientId, path) {\n\t\t\tpath = this.pathPrefix + path;\n\t\t\tvar clientAssets = this.clientAssets[clientId];\n\t\t\tif (clientAssets === null || clientAssets === undefined)\n\t\t\t\treturn true;\n\t\t\treturn clientAssets.assets[path];\n\t\t};\n\t\tSharedAssetManager.prototype.updateClientAssets = function (clientAssets) {\n\t\t\tfor (var i = 0; i < clientAssets.toLoad.length; i++) {\n\t\t\t\tvar path = clientAssets.toLoad[i];\n\t\t\t\tvar asset = clientAssets.assets[path];\n\t\t\t\tif (asset === null || asset === undefined) {\n\t\t\t\t\tvar rawAsset = this.rawAssets[path];\n\t\t\t\t\tif (rawAsset === null || rawAsset === undefined)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (rawAsset instanceof HTMLImageElement) {\n\t\t\t\t\t\tclientAssets.assets[path] = clientAssets.textureLoader(rawAsset);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tclientAssets.assets[path] = rawAsset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tSharedAssetManager.prototype.isLoadingComplete = function (clientId) {\n\t\t\tvar clientAssets = this.clientAssets[clientId];\n\t\t\tif (clientAssets === null || clientAssets === undefined)\n\t\t\t\treturn true;\n\t\t\tthis.updateClientAssets(clientAssets);\n\t\t\treturn clientAssets.toLoad.length == clientAssets.loaded();\n\t\t};\n\t\tSharedAssetManager.prototype.dispose = function () {\n\t\t};\n\t\tSharedAssetManager.prototype.hasErrors = function () {\n\t\t\treturn Object.keys(this.errors).length > 0;\n\t\t};\n\t\tSharedAssetManager.prototype.getErrors = function () {\n\t\t\treturn this.errors;\n\t\t};\n\t\treturn SharedAssetManager;\n\t}());\n\tspine.SharedAssetManager = SharedAssetManager;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Skeleton = (function () {\n\t\tfunction Skeleton(data) {\n\t\t\tthis._updateCache = new Array();\n\t\t\tthis.updateCacheReset = new Array();\n\t\t\tthis.time = 0;\n\t\t\tthis.flipX = false;\n\t\t\tthis.flipY = false;\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tif (data == null)\n\t\t\t\tthrow new Error(\"data cannot be null.\");\n\t\t\tthis.data = data;\n\t\t\tthis.bones = new Array();\n\t\t\tfor (var i = 0; i < data.bones.length; i++) {\n\t\t\t\tvar boneData = data.bones[i];\n\t\t\t\tvar bone = void 0;\n\t\t\t\tif (boneData.parent == null)\n\t\t\t\t\tbone = new spine.Bone(boneData, this, null);\n\t\t\t\telse {\n\t\t\t\t\tvar parent_1 = this.bones[boneData.parent.index];\n\t\t\t\t\tbone = new spine.Bone(boneData, this, parent_1);\n\t\t\t\t\tparent_1.children.push(bone);\n\t\t\t\t}\n\t\t\t\tthis.bones.push(bone);\n\t\t\t}\n\t\t\tthis.slots = new Array();\n\t\t\tthis.drawOrder = new Array();\n\t\t\tfor (var i = 0; i < data.slots.length; i++) {\n\t\t\t\tvar slotData = data.slots[i];\n\t\t\t\tvar bone = this.bones[slotData.boneData.index];\n\t\t\t\tvar slot = new spine.Slot(slotData, bone);\n\t\t\t\tthis.slots.push(slot);\n\t\t\t\tthis.drawOrder.push(slot);\n\t\t\t}\n\t\t\tthis.ikConstraints = new Array();\n\t\t\tfor (var i = 0; i < data.ikConstraints.length; i++) {\n\t\t\t\tvar ikConstraintData = data.ikConstraints[i];\n\t\t\t\tthis.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this));\n\t\t\t}\n\t\t\tthis.transformConstraints = new Array();\n\t\t\tfor (var i = 0; i < data.transformConstraints.length; i++) {\n\t\t\t\tvar transformConstraintData = data.transformConstraints[i];\n\t\t\t\tthis.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this));\n\t\t\t}\n\t\t\tthis.pathConstraints = new Array();\n\t\t\tfor (var i = 0; i < data.pathConstraints.length; i++) {\n\t\t\t\tvar pathConstraintData = data.pathConstraints[i];\n\t\t\t\tthis.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this));\n\t\t\t}\n\t\t\tthis.color = new spine.Color(1, 1, 1, 1);\n\t\t\tthis.updateCache();\n\t\t}\n\t\tSkeleton.prototype.updateCache = function () {\n\t\t\tvar updateCache = this._updateCache;\n\t\t\tupdateCache.length = 0;\n\t\t\tthis.updateCacheReset.length = 0;\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++)\n\t\t\t\tbones[i].sorted = false;\n\t\t\tvar ikConstraints = this.ikConstraints;\n\t\t\tvar transformConstraints = this.transformConstraints;\n\t\t\tvar pathConstraints = this.pathConstraints;\n\t\t\tvar ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;\n\t\t\tvar constraintCount = ikCount + transformCount + pathCount;\n\t\t\touter: for (var i = 0; i < constraintCount; i++) {\n\t\t\t\tfor (var ii = 0; ii < ikCount; ii++) {\n\t\t\t\t\tvar constraint = ikConstraints[ii];\n\t\t\t\t\tif (constraint.data.order == i) {\n\t\t\t\t\t\tthis.sortIkConstraint(constraint);\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var ii = 0; ii < transformCount; ii++) {\n\t\t\t\t\tvar constraint = transformConstraints[ii];\n\t\t\t\t\tif (constraint.data.order == i) {\n\t\t\t\t\t\tthis.sortTransformConstraint(constraint);\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var ii = 0; ii < pathCount; ii++) {\n\t\t\t\t\tvar constraint = pathConstraints[ii];\n\t\t\t\t\tif (constraint.data.order == i) {\n\t\t\t\t\t\tthis.sortPathConstraint(constraint);\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++)\n\t\t\t\tthis.sortBone(bones[i]);\n\t\t};\n\t\tSkeleton.prototype.sortIkConstraint = function (constraint) {\n\t\t\tvar target = constraint.target;\n\t\t\tthis.sortBone(target);\n\t\t\tvar constrained = constraint.bones;\n\t\t\tvar parent = constrained[0];\n\t\t\tthis.sortBone(parent);\n\t\t\tif (constrained.length > 1) {\n\t\t\t\tvar child = constrained[constrained.length - 1];\n\t\t\t\tif (!(this._updateCache.indexOf(child) > -1))\n\t\t\t\t\tthis.updateCacheReset.push(child);\n\t\t\t}\n\t\t\tthis._updateCache.push(constraint);\n\t\t\tthis.sortReset(parent.children);\n\t\t\tconstrained[constrained.length - 1].sorted = true;\n\t\t};\n\t\tSkeleton.prototype.sortPathConstraint = function (constraint) {\n\t\t\tvar slot = constraint.target;\n\t\t\tvar slotIndex = slot.data.index;\n\t\t\tvar slotBone = slot.bone;\n\t\t\tif (this.skin != null)\n\t\t\t\tthis.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n\t\t\tif (this.data.defaultSkin != null && this.data.defaultSkin != this.skin)\n\t\t\t\tthis.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n\t\t\tfor (var i = 0, n = this.data.skins.length; i < n; i++)\n\t\t\t\tthis.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n\t\t\tvar attachment = slot.getAttachment();\n\t\t\tif (attachment instanceof spine.PathAttachment)\n\t\t\t\tthis.sortPathConstraintAttachmentWith(attachment, slotBone);\n\t\t\tvar constrained = constraint.bones;\n\t\t\tvar boneCount = constrained.length;\n\t\t\tfor (var i = 0; i < boneCount; i++)\n\t\t\t\tthis.sortBone(constrained[i]);\n\t\t\tthis._updateCache.push(constraint);\n\t\t\tfor (var i = 0; i < boneCount; i++)\n\t\t\t\tthis.sortReset(constrained[i].children);\n\t\t\tfor (var i = 0; i < boneCount; i++)\n\t\t\t\tconstrained[i].sorted = true;\n\t\t};\n\t\tSkeleton.prototype.sortTransformConstraint = function (constraint) {\n\t\t\tthis.sortBone(constraint.target);\n\t\t\tvar constrained = constraint.bones;\n\t\t\tvar boneCount = constrained.length;\n\t\t\tif (constraint.data.local) {\n\t\t\t\tfor (var i = 0; i < boneCount; i++) {\n\t\t\t\t\tvar child = constrained[i];\n\t\t\t\t\tthis.sortBone(child.parent);\n\t\t\t\t\tif (!(this._updateCache.indexOf(child) > -1))\n\t\t\t\t\t\tthis.updateCacheReset.push(child);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (var i = 0; i < boneCount; i++) {\n\t\t\t\t\tthis.sortBone(constrained[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._updateCache.push(constraint);\n\t\t\tfor (var ii = 0; ii < boneCount; ii++)\n\t\t\t\tthis.sortReset(constrained[ii].children);\n\t\t\tfor (var ii = 0; ii < boneCount; ii++)\n\t\t\t\tconstrained[ii].sorted = true;\n\t\t};\n\t\tSkeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) {\n\t\t\tvar attachments = skin.attachments[slotIndex];\n\t\t\tif (!attachments)\n\t\t\t\treturn;\n\t\t\tfor (var key in attachments) {\n\t\t\t\tthis.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n\t\t\t}\n\t\t};\n\t\tSkeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) {\n\t\t\tif (!(attachment instanceof spine.PathAttachment))\n\t\t\t\treturn;\n\t\t\tvar pathBones = attachment.bones;\n\t\t\tif (pathBones == null)\n\t\t\t\tthis.sortBone(slotBone);\n\t\t\telse {\n\t\t\t\tvar bones = this.bones;\n\t\t\t\tvar i = 0;\n\t\t\t\twhile (i < pathBones.length) {\n\t\t\t\t\tvar boneCount = pathBones[i++];\n\t\t\t\t\tfor (var n = i + boneCount; i < n; i++) {\n\t\t\t\t\t\tvar boneIndex = pathBones[i];\n\t\t\t\t\t\tthis.sortBone(bones[boneIndex]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tSkeleton.prototype.sortBone = function (bone) {\n\t\t\tif (bone.sorted)\n\t\t\t\treturn;\n\t\t\tvar parent = bone.parent;\n\t\t\tif (parent != null)\n\t\t\t\tthis.sortBone(parent);\n\t\t\tbone.sorted = true;\n\t\t\tthis._updateCache.push(bone);\n\t\t};\n\t\tSkeleton.prototype.sortReset = function (bones) {\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tif (bone.sorted)\n\t\t\t\t\tthis.sortReset(bone.children);\n\t\t\t\tbone.sorted = false;\n\t\t\t}\n\t\t};\n\t\tSkeleton.prototype.updateWorldTransform = function () {\n\t\t\tvar updateCacheReset = this.updateCacheReset;\n\t\t\tfor (var i = 0, n = updateCacheReset.length; i < n; i++) {\n\t\t\t\tvar bone = updateCacheReset[i];\n\t\t\t\tbone.ax = bone.x;\n\t\t\t\tbone.ay = bone.y;\n\t\t\t\tbone.arotation = bone.rotation;\n\t\t\t\tbone.ascaleX = bone.scaleX;\n\t\t\t\tbone.ascaleY = bone.scaleY;\n\t\t\t\tbone.ashearX = bone.shearX;\n\t\t\t\tbone.ashearY = bone.shearY;\n\t\t\t\tbone.appliedValid = true;\n\t\t\t}\n\t\t\tvar updateCache = this._updateCache;\n\t\t\tfor (var i = 0, n = updateCache.length; i < n; i++)\n\t\t\t\tupdateCache[i].update();\n\t\t};\n\t\tSkeleton.prototype.setToSetupPose = function () {\n\t\t\tthis.setBonesToSetupPose();\n\t\t\tthis.setSlotsToSetupPose();\n\t\t};\n\t\tSkeleton.prototype.setBonesToSetupPose = function () {\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++)\n\t\t\t\tbones[i].setToSetupPose();\n\t\t\tvar ikConstraints = this.ikConstraints;\n\t\t\tfor (var i = 0, n = ikConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = ikConstraints[i];\n\t\t\t\tconstraint.bendDirection = constraint.data.bendDirection;\n\t\t\t\tconstraint.mix = constraint.data.mix;\n\t\t\t}\n\t\t\tvar transformConstraints = this.transformConstraints;\n\t\t\tfor (var i = 0, n = transformConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = transformConstraints[i];\n\t\t\t\tvar data = constraint.data;\n\t\t\t\tconstraint.rotateMix = data.rotateMix;\n\t\t\t\tconstraint.translateMix = data.translateMix;\n\t\t\t\tconstraint.scaleMix = data.scaleMix;\n\t\t\t\tconstraint.shearMix = data.shearMix;\n\t\t\t}\n\t\t\tvar pathConstraints = this.pathConstraints;\n\t\t\tfor (var i = 0, n = pathConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = pathConstraints[i];\n\t\t\t\tvar data = constraint.data;\n\t\t\t\tconstraint.position = data.position;\n\t\t\t\tconstraint.spacing = data.spacing;\n\t\t\t\tconstraint.rotateMix = data.rotateMix;\n\t\t\t\tconstraint.translateMix = data.translateMix;\n\t\t\t}\n\t\t};\n\t\tSkeleton.prototype.setSlotsToSetupPose = function () {\n\t\t\tvar slots = this.slots;\n\t\t\tspine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n\t\t\tfor (var i = 0, n = slots.length; i < n; i++)\n\t\t\t\tslots[i].setToSetupPose();\n\t\t};\n\t\tSkeleton.prototype.getRootBone = function () {\n\t\t\tif (this.bones.length == 0)\n\t\t\t\treturn null;\n\t\t\treturn this.bones[0];\n\t\t};\n\t\tSkeleton.prototype.findBone = function (boneName) {\n\t\t\tif (boneName == null)\n\t\t\t\tthrow new Error(\"boneName cannot be null.\");\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tif (bone.data.name == boneName)\n\t\t\t\t\treturn bone;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeleton.prototype.findBoneIndex = function (boneName) {\n\t\t\tif (boneName == null)\n\t\t\t\tthrow new Error(\"boneName cannot be null.\");\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++)\n\t\t\t\tif (bones[i].data.name == boneName)\n\t\t\t\t\treturn i;\n\t\t\treturn -1;\n\t\t};\n\t\tSkeleton.prototype.findSlot = function (slotName) {\n\t\t\tif (slotName == null)\n\t\t\t\tthrow new Error(\"slotName cannot be null.\");\n\t\t\tvar slots = this.slots;\n\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\tvar slot = slots[i];\n\t\t\t\tif (slot.data.name == slotName)\n\t\t\t\t\treturn slot;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeleton.prototype.findSlotIndex = function (slotName) {\n\t\t\tif (slotName == null)\n\t\t\t\tthrow new Error(\"slotName cannot be null.\");\n\t\t\tvar slots = this.slots;\n\t\t\tfor (var i = 0, n = slots.length; i < n; i++)\n\t\t\t\tif (slots[i].data.name == slotName)\n\t\t\t\t\treturn i;\n\t\t\treturn -1;\n\t\t};\n\t\tSkeleton.prototype.setSkinByName = function (skinName) {\n\t\t\tvar skin = this.data.findSkin(skinName);\n\t\t\tif (skin == null)\n\t\t\t\tthrow new Error(\"Skin not found: \" + skinName);\n\t\t\tthis.setSkin(skin);\n\t\t};\n\t\tSkeleton.prototype.setSkin = function (newSkin) {\n\t\t\tif (newSkin != null) {\n\t\t\t\tif (this.skin != null)\n\t\t\t\t\tnewSkin.attachAll(this, this.skin);\n\t\t\t\telse {\n\t\t\t\t\tvar slots = this.slots;\n\t\t\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\t\tvar slot = slots[i];\n\t\t\t\t\t\tvar name_1 = slot.data.attachmentName;\n\t\t\t\t\t\tif (name_1 != null) {\n\t\t\t\t\t\t\tvar attachment = newSkin.getAttachment(i, name_1);\n\t\t\t\t\t\t\tif (attachment != null)\n\t\t\t\t\t\t\t\tslot.setAttachment(attachment);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.skin = newSkin;\n\t\t};\n\t\tSkeleton.prototype.getAttachmentByName = function (slotName, attachmentName) {\n\t\t\treturn this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);\n\t\t};\n\t\tSkeleton.prototype.getAttachment = function (slotIndex, attachmentName) {\n\t\t\tif (attachmentName == null)\n\t\t\t\tthrow new Error(\"attachmentName cannot be null.\");\n\t\t\tif (this.skin != null) {\n\t\t\t\tvar attachment = this.skin.getAttachment(slotIndex, attachmentName);\n\t\t\t\tif (attachment != null)\n\t\t\t\t\treturn attachment;\n\t\t\t}\n\t\t\tif (this.data.defaultSkin != null)\n\t\t\t\treturn this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n\t\t\treturn null;\n\t\t};\n\t\tSkeleton.prototype.setAttachment = function (slotName, attachmentName) {\n\t\t\tif (slotName == null)\n\t\t\t\tthrow new Error(\"slotName cannot be null.\");\n\t\t\tvar slots = this.slots;\n\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\tvar slot = slots[i];\n\t\t\t\tif (slot.data.name == slotName) {\n\t\t\t\t\tvar attachment = null;\n\t\t\t\t\tif (attachmentName != null) {\n\t\t\t\t\t\tattachment = this.getAttachment(i, attachmentName);\n\t\t\t\t\t\tif (attachment == null)\n\t\t\t\t\t\t\tthrow new Error(\"Attachment not found: \" + attachmentName + \", for slot: \" + slotName);\n\t\t\t\t\t}\n\t\t\t\t\tslot.setAttachment(attachment);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new Error(\"Slot not found: \" + slotName);\n\t\t};\n\t\tSkeleton.prototype.findIkConstraint = function (constraintName) {\n\t\t\tif (constraintName == null)\n\t\t\t\tthrow new Error(\"constraintName cannot be null.\");\n\t\t\tvar ikConstraints = this.ikConstraints;\n\t\t\tfor (var i = 0, n = ikConstraints.length; i < n; i++) {\n\t\t\t\tvar ikConstraint = ikConstraints[i];\n\t\t\t\tif (ikConstraint.data.name == constraintName)\n\t\t\t\t\treturn ikConstraint;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeleton.prototype.findTransformConstraint = function (constraintName) {\n\t\t\tif (constraintName == null)\n\t\t\t\tthrow new Error(\"constraintName cannot be null.\");\n\t\t\tvar transformConstraints = this.transformConstraints;\n\t\t\tfor (var i = 0, n = transformConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = transformConstraints[i];\n\t\t\t\tif (constraint.data.name == constraintName)\n\t\t\t\t\treturn constraint;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeleton.prototype.findPathConstraint = function (constraintName) {\n\t\t\tif (constraintName == null)\n\t\t\t\tthrow new Error(\"constraintName cannot be null.\");\n\t\t\tvar pathConstraints = this.pathConstraints;\n\t\t\tfor (var i = 0, n = pathConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = pathConstraints[i];\n\t\t\t\tif (constraint.data.name == constraintName)\n\t\t\t\t\treturn constraint;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeleton.prototype.getBounds = function (offset, size, temp) {\n\t\t\tif (offset == null)\n\t\t\t\tthrow new Error(\"offset cannot be null.\");\n\t\t\tif (size == null)\n\t\t\t\tthrow new Error(\"size cannot be null.\");\n\t\t\tvar drawOrder = this.drawOrder;\n\t\t\tvar minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n\t\t\tfor (var i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\t\tvar slot = drawOrder[i];\n\t\t\t\tvar verticesLength = 0;\n\t\t\t\tvar vertices = null;\n\t\t\t\tvar attachment = slot.getAttachment();\n\t\t\t\tif (attachment instanceof spine.RegionAttachment) {\n\t\t\t\t\tverticesLength = 8;\n\t\t\t\t\tvertices = spine.Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\t\tattachment.computeWorldVertices(slot.bone, vertices, 0, 2);\n\t\t\t\t}\n\t\t\t\telse if (attachment instanceof spine.MeshAttachment) {\n\t\t\t\t\tvar mesh = attachment;\n\t\t\t\t\tverticesLength = mesh.worldVerticesLength;\n\t\t\t\t\tvertices = spine.Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\t\tmesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n\t\t\t\t}\n\t\t\t\tif (vertices != null) {\n\t\t\t\t\tfor (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n\t\t\t\t\t\tvar x = vertices[ii], y = vertices[ii + 1];\n\t\t\t\t\t\tminX = Math.min(minX, x);\n\t\t\t\t\t\tminY = Math.min(minY, y);\n\t\t\t\t\t\tmaxX = Math.max(maxX, x);\n\t\t\t\t\t\tmaxY = Math.max(maxY, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset.set(minX, minY);\n\t\t\tsize.set(maxX - minX, maxY - minY);\n\t\t};\n\t\tSkeleton.prototype.update = function (delta) {\n\t\t\tthis.time += delta;\n\t\t};\n\t\treturn Skeleton;\n\t}());\n\tspine.Skeleton = Skeleton;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar SkeletonBounds = (function () {\n\t\tfunction SkeletonBounds() {\n\t\t\tthis.minX = 0;\n\t\t\tthis.minY = 0;\n\t\t\tthis.maxX = 0;\n\t\t\tthis.maxY = 0;\n\t\t\tthis.boundingBoxes = new Array();\n\t\t\tthis.polygons = new Array();\n\t\t\tthis.polygonPool = new spine.Pool(function () {\n\t\t\t\treturn spine.Utils.newFloatArray(16);\n\t\t\t});\n\t\t}\n\t\tSkeletonBounds.prototype.update = function (skeleton, updateAabb) {\n\t\t\tif (skeleton == null)\n\t\t\t\tthrow new Error(\"skeleton cannot be null.\");\n\t\t\tvar boundingBoxes = this.boundingBoxes;\n\t\t\tvar polygons = this.polygons;\n\t\t\tvar polygonPool = this.polygonPool;\n\t\t\tvar slots = skeleton.slots;\n\t\t\tvar slotCount = slots.length;\n\t\t\tboundingBoxes.length = 0;\n\t\t\tpolygonPool.freeAll(polygons);\n\t\t\tpolygons.length = 0;\n\t\t\tfor (var i = 0; i < slotCount; i++) {\n\t\t\t\tvar slot = slots[i];\n\t\t\t\tvar attachment = slot.getAttachment();\n\t\t\t\tif (attachment instanceof spine.BoundingBoxAttachment) {\n\t\t\t\t\tvar boundingBox = attachment;\n\t\t\t\t\tboundingBoxes.push(boundingBox);\n\t\t\t\t\tvar polygon = polygonPool.obtain();\n\t\t\t\t\tif (polygon.length != boundingBox.worldVerticesLength) {\n\t\t\t\t\t\tpolygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength);\n\t\t\t\t\t}\n\t\t\t\t\tpolygons.push(polygon);\n\t\t\t\t\tboundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (updateAabb) {\n\t\t\t\tthis.aabbCompute();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.minX = Number.POSITIVE_INFINITY;\n\t\t\t\tthis.minY = Number.POSITIVE_INFINITY;\n\t\t\t\tthis.maxX = Number.NEGATIVE_INFINITY;\n\t\t\t\tthis.maxY = Number.NEGATIVE_INFINITY;\n\t\t\t}\n\t\t};\n\t\tSkeletonBounds.prototype.aabbCompute = function () {\n\t\t\tvar minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n\t\t\tvar polygons = this.polygons;\n\t\t\tfor (var i = 0, n = polygons.length; i < n; i++) {\n\t\t\t\tvar polygon = polygons[i];\n\t\t\t\tvar vertices = polygon;\n\t\t\t\tfor (var ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n\t\t\t\t\tvar x = vertices[ii];\n\t\t\t\t\tvar y = vertices[ii + 1];\n\t\t\t\t\tminX = Math.min(minX, x);\n\t\t\t\t\tminY = Math.min(minY, y);\n\t\t\t\t\tmaxX = Math.max(maxX, x);\n\t\t\t\t\tmaxY = Math.max(maxY, y);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.minX = minX;\n\t\t\tthis.minY = minY;\n\t\t\tthis.maxX = maxX;\n\t\t\tthis.maxY = maxY;\n\t\t};\n\t\tSkeletonBounds.prototype.aabbContainsPoint = function (x, y) {\n\t\t\treturn x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n\t\t};\n\t\tSkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) {\n\t\t\tvar minX = this.minX;\n\t\t\tvar minY = this.minY;\n\t\t\tvar maxX = this.maxX;\n\t\t\tvar maxY = this.maxY;\n\t\t\tif ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))\n\t\t\t\treturn false;\n\t\t\tvar m = (y2 - y1) / (x2 - x1);\n\t\t\tvar y = m * (minX - x1) + y1;\n\t\t\tif (y > minY && y < maxY)\n\t\t\t\treturn true;\n\t\t\ty = m * (maxX - x1) + y1;\n\t\t\tif (y > minY && y < maxY)\n\t\t\t\treturn true;\n\t\t\tvar x = (minY - y1) / m + x1;\n\t\t\tif (x > minX && x < maxX)\n\t\t\t\treturn true;\n\t\t\tx = (maxY - y1) / m + x1;\n\t\t\tif (x > minX && x < maxX)\n\t\t\t\treturn true;\n\t\t\treturn false;\n\t\t};\n\t\tSkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) {\n\t\t\treturn this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n\t\t};\n\t\tSkeletonBounds.prototype.containsPoint = function (x, y) {\n\t\t\tvar polygons = this.polygons;\n\t\t\tfor (var i = 0, n = polygons.length; i < n; i++)\n\t\t\t\tif (this.containsPointPolygon(polygons[i], x, y))\n\t\t\t\t\treturn this.boundingBoxes[i];\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) {\n\t\t\tvar vertices = polygon;\n\t\t\tvar nn = polygon.length;\n\t\t\tvar prevIndex = nn - 2;\n\t\t\tvar inside = false;\n\t\t\tfor (var ii = 0; ii < nn; ii += 2) {\n\t\t\t\tvar vertexY = vertices[ii + 1];\n\t\t\t\tvar prevY = vertices[prevIndex + 1];\n\t\t\t\tif ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n\t\t\t\t\tvar vertexX = vertices[ii];\n\t\t\t\t\tif (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)\n\t\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t\tprevIndex = ii;\n\t\t\t}\n\t\t\treturn inside;\n\t\t};\n\t\tSkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) {\n\t\t\tvar polygons = this.polygons;\n\t\t\tfor (var i = 0, n = polygons.length; i < n; i++)\n\t\t\t\tif (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))\n\t\t\t\t\treturn this.boundingBoxes[i];\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) {\n\t\t\tvar vertices = polygon;\n\t\t\tvar nn = polygon.length;\n\t\t\tvar width12 = x1 - x2, height12 = y1 - y2;\n\t\t\tvar det1 = x1 * y2 - y1 * x2;\n\t\t\tvar x3 = vertices[nn - 2], y3 = vertices[nn - 1];\n\t\t\tfor (var ii = 0; ii < nn; ii += 2) {\n\t\t\t\tvar x4 = vertices[ii], y4 = vertices[ii + 1];\n\t\t\t\tvar det2 = x3 * y4 - y3 * x4;\n\t\t\t\tvar width34 = x3 - x4, height34 = y3 - y4;\n\t\t\t\tvar det3 = width12 * height34 - height12 * width34;\n\t\t\t\tvar x = (det1 * width34 - width12 * det2) / det3;\n\t\t\t\tif (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {\n\t\t\t\t\tvar y = (det1 * height34 - height12 * det2) / det3;\n\t\t\t\t\tif (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tx3 = x4;\n\t\t\t\ty3 = y4;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tSkeletonBounds.prototype.getPolygon = function (boundingBox) {\n\t\t\tif (boundingBox == null)\n\t\t\t\tthrow new Error(\"boundingBox cannot be null.\");\n\t\t\tvar index = this.boundingBoxes.indexOf(boundingBox);\n\t\t\treturn index == -1 ? null : this.polygons[index];\n\t\t};\n\t\tSkeletonBounds.prototype.getWidth = function () {\n\t\t\treturn this.maxX - this.minX;\n\t\t};\n\t\tSkeletonBounds.prototype.getHeight = function () {\n\t\t\treturn this.maxY - this.minY;\n\t\t};\n\t\treturn SkeletonBounds;\n\t}());\n\tspine.SkeletonBounds = SkeletonBounds;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar SkeletonClipping = (function () {\n\t\tfunction SkeletonClipping() {\n\t\t\tthis.triangulator = new spine.Triangulator();\n\t\t\tthis.clippingPolygon = new Array();\n\t\t\tthis.clipOutput = new Array();\n\t\t\tthis.clippedVertices = new Array();\n\t\t\tthis.clippedTriangles = new Array();\n\t\t\tthis.scratch = new Array();\n\t\t}\n\t\tSkeletonClipping.prototype.clipStart = function (slot, clip) {\n\t\t\tif (this.clipAttachment != null)\n\t\t\t\treturn 0;\n\t\t\tthis.clipAttachment = clip;\n\t\t\tvar n = clip.worldVerticesLength;\n\t\t\tvar vertices = spine.Utils.setArraySize(this.clippingPolygon, n);\n\t\t\tclip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n\t\t\tvar clippingPolygon = this.clippingPolygon;\n\t\t\tSkeletonClipping.makeClockwise(clippingPolygon);\n\t\t\tvar clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));\n\t\t\tfor (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) {\n\t\t\t\tvar polygon = clippingPolygons[i];\n\t\t\t\tSkeletonClipping.makeClockwise(polygon);\n\t\t\t\tpolygon.push(polygon[0]);\n\t\t\t\tpolygon.push(polygon[1]);\n\t\t\t}\n\t\t\treturn clippingPolygons.length;\n\t\t};\n\t\tSkeletonClipping.prototype.clipEndWithSlot = function (slot) {\n\t\t\tif (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data)\n\t\t\t\tthis.clipEnd();\n\t\t};\n\t\tSkeletonClipping.prototype.clipEnd = function () {\n\t\t\tif (this.clipAttachment == null)\n\t\t\t\treturn;\n\t\t\tthis.clipAttachment = null;\n\t\t\tthis.clippingPolygons = null;\n\t\t\tthis.clippedVertices.length = 0;\n\t\t\tthis.clippedTriangles.length = 0;\n\t\t\tthis.clippingPolygon.length = 0;\n\t\t};\n\t\tSkeletonClipping.prototype.isClipping = function () {\n\t\t\treturn this.clipAttachment != null;\n\t\t};\n\t\tSkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {\n\t\t\tvar clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;\n\t\t\tvar clippedTriangles = this.clippedTriangles;\n\t\t\tvar polygons = this.clippingPolygons;\n\t\t\tvar polygonsCount = this.clippingPolygons.length;\n\t\t\tvar vertexSize = twoColor ? 12 : 8;\n\t\t\tvar index = 0;\n\t\t\tclippedVertices.length = 0;\n\t\t\tclippedTriangles.length = 0;\n\t\t\touter: for (var i = 0; i < trianglesLength; i += 3) {\n\t\t\t\tvar vertexOffset = triangles[i] << 1;\n\t\t\t\tvar x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];\n\t\t\t\tvar u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];\n\t\t\t\tvertexOffset = triangles[i + 1] << 1;\n\t\t\t\tvar x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];\n\t\t\t\tvar u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];\n\t\t\t\tvertexOffset = triangles[i + 2] << 1;\n\t\t\t\tvar x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];\n\t\t\t\tvar u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];\n\t\t\t\tfor (var p = 0; p < polygonsCount; p++) {\n\t\t\t\t\tvar s = clippedVertices.length;\n\t\t\t\t\tif (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {\n\t\t\t\t\t\tvar clipOutputLength = clipOutput.length;\n\t\t\t\t\t\tif (clipOutputLength == 0)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tvar d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;\n\t\t\t\t\t\tvar d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\t\t\t\t\t\tvar clipOutputCount = clipOutputLength >> 1;\n\t\t\t\t\t\tvar clipOutputItems = this.clipOutput;\n\t\t\t\t\t\tvar clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);\n\t\t\t\t\t\tfor (var ii = 0; ii < clipOutputLength; ii += 2) {\n\t\t\t\t\t\t\tvar x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n\t\t\t\t\t\t\tclippedVerticesItems[s] = x;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 1] = y;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 2] = light.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 3] = light.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 4] = light.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 5] = light.a;\n\t\t\t\t\t\t\tvar c0 = x - x3, c1 = y - y3;\n\t\t\t\t\t\t\tvar a = (d0 * c0 + d1 * c1) * d;\n\t\t\t\t\t\t\tvar b = (d4 * c0 + d2 * c1) * d;\n\t\t\t\t\t\t\tvar c = 1 - a - b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t\t\tif (twoColor) {\n\t\t\t\t\t\t\t\tclippedVerticesItems[s + 8] = dark.r;\n\t\t\t\t\t\t\t\tclippedVerticesItems[s + 9] = dark.g;\n\t\t\t\t\t\t\t\tclippedVerticesItems[s + 10] = dark.b;\n\t\t\t\t\t\t\t\tclippedVerticesItems[s + 11] = dark.a;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ts += vertexSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\t\tvar clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n\t\t\t\t\t\tclipOutputCount--;\n\t\t\t\t\t\tfor (var ii = 1; ii < clipOutputCount; ii++) {\n\t\t\t\t\t\t\tclippedTrianglesItems[s] = index;\n\t\t\t\t\t\t\tclippedTrianglesItems[s + 1] = (index + ii);\n\t\t\t\t\t\t\tclippedTrianglesItems[s + 2] = (index + ii + 1);\n\t\t\t\t\t\t\ts += 3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex += clipOutputCount + 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize);\n\t\t\t\t\t\tclippedVerticesItems[s] = x1;\n\t\t\t\t\t\tclippedVerticesItems[s + 1] = y1;\n\t\t\t\t\t\tclippedVerticesItems[s + 2] = light.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 3] = light.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 4] = light.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 5] = light.a;\n\t\t\t\t\t\tif (!twoColor) {\n\t\t\t\t\t\t\tclippedVerticesItems[s + 6] = u1;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 7] = v1;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 8] = x2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 9] = y2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 10] = light.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 11] = light.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 12] = light.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 13] = light.a;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 14] = u2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 15] = v2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 16] = x3;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 17] = y3;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 18] = light.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 19] = light.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 20] = light.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 21] = light.a;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 22] = u3;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 23] = v3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tclippedVerticesItems[s + 6] = u1;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 7] = v1;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 8] = dark.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 9] = dark.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 10] = dark.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 11] = dark.a;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 12] = x2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 13] = y2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 14] = light.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 15] = light.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 16] = light.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 17] = light.a;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 18] = u2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 19] = v2;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 20] = dark.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 21] = dark.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 22] = dark.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 23] = dark.a;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 24] = x3;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 25] = y3;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 26] = light.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 27] = light.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 28] = light.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 29] = light.a;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 30] = u3;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 31] = v3;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 32] = dark.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 33] = dark.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 34] = dark.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 35] = dark.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\t\tvar clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3);\n\t\t\t\t\t\tclippedTrianglesItems[s] = index;\n\t\t\t\t\t\tclippedTrianglesItems[s + 1] = (index + 1);\n\t\t\t\t\t\tclippedTrianglesItems[s + 2] = (index + 2);\n\t\t\t\t\t\tindex += 3;\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tSkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) {\n\t\t\tvar originalOutput = output;\n\t\t\tvar clipped = false;\n\t\t\tvar input = null;\n\t\t\tif (clippingArea.length % 4 >= 2) {\n\t\t\t\tinput = output;\n\t\t\t\toutput = this.scratch;\n\t\t\t}\n\t\t\telse\n\t\t\t\tinput = this.scratch;\n\t\t\tinput.length = 0;\n\t\t\tinput.push(x1);\n\t\t\tinput.push(y1);\n\t\t\tinput.push(x2);\n\t\t\tinput.push(y2);\n\t\t\tinput.push(x3);\n\t\t\tinput.push(y3);\n\t\t\tinput.push(x1);\n\t\t\tinput.push(y1);\n\t\t\toutput.length = 0;\n\t\t\tvar clippingVertices = clippingArea;\n\t\t\tvar clippingVerticesLast = clippingArea.length - 4;\n\t\t\tfor (var i = 0;; i += 2) {\n\t\t\t\tvar edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];\n\t\t\t\tvar edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];\n\t\t\t\tvar deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;\n\t\t\t\tvar inputVertices = input;\n\t\t\t\tvar inputVerticesLength = input.length - 2, outputStart = output.length;\n\t\t\t\tfor (var ii = 0; ii < inputVerticesLength; ii += 2) {\n\t\t\t\t\tvar inputX = inputVertices[ii], inputY = inputVertices[ii + 1];\n\t\t\t\t\tvar inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];\n\t\t\t\t\tvar side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;\n\t\t\t\t\tif (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {\n\t\t\t\t\t\tif (side2) {\n\t\t\t\t\t\t\toutput.push(inputX2);\n\t\t\t\t\t\t\toutput.push(inputY2);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n\t\t\t\t\t\tvar ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / (c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY));\n\t\t\t\t\t\toutput.push(edgeX + (edgeX2 - edgeX) * ua);\n\t\t\t\t\t\toutput.push(edgeY + (edgeY2 - edgeY) * ua);\n\t\t\t\t\t}\n\t\t\t\t\telse if (side2) {\n\t\t\t\t\t\tvar c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n\t\t\t\t\t\tvar ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / (c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY));\n\t\t\t\t\t\toutput.push(edgeX + (edgeX2 - edgeX) * ua);\n\t\t\t\t\t\toutput.push(edgeY + (edgeY2 - edgeY) * ua);\n\t\t\t\t\t\toutput.push(inputX2);\n\t\t\t\t\t\toutput.push(inputY2);\n\t\t\t\t\t}\n\t\t\t\t\tclipped = true;\n\t\t\t\t}\n\t\t\t\tif (outputStart == output.length) {\n\t\t\t\t\toriginalOutput.length = 0;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\toutput.push(output[0]);\n\t\t\t\toutput.push(output[1]);\n\t\t\t\tif (i == clippingVerticesLast)\n\t\t\t\t\tbreak;\n\t\t\t\tvar temp = output;\n\t\t\t\toutput = input;\n\t\t\t\toutput.length = 0;\n\t\t\t\tinput = temp;\n\t\t\t}\n\t\t\tif (originalOutput != output) {\n\t\t\t\toriginalOutput.length = 0;\n\t\t\t\tfor (var i = 0, n = output.length - 2; i < n; i++)\n\t\t\t\t\toriginalOutput[i] = output[i];\n\t\t\t}\n\t\t\telse\n\t\t\t\toriginalOutput.length = originalOutput.length - 2;\n\t\t\treturn clipped;\n\t\t};\n\t\tSkeletonClipping.makeClockwise = function (polygon) {\n\t\t\tvar vertices = polygon;\n\t\t\tvar verticeslength = polygon.length;\n\t\t\tvar area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;\n\t\t\tfor (var i = 0, n = verticeslength - 3; i < n; i += 2) {\n\t\t\t\tp1x = vertices[i];\n\t\t\t\tp1y = vertices[i + 1];\n\t\t\t\tp2x = vertices[i + 2];\n\t\t\t\tp2y = vertices[i + 3];\n\t\t\t\tarea += p1x * p2y - p2x * p1y;\n\t\t\t}\n\t\t\tif (area < 0)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {\n\t\t\t\tvar x = vertices[i], y = vertices[i + 1];\n\t\t\t\tvar other = lastX - i;\n\t\t\t\tvertices[i] = vertices[other];\n\t\t\t\tvertices[i + 1] = vertices[other + 1];\n\t\t\t\tvertices[other] = x;\n\t\t\t\tvertices[other + 1] = y;\n\t\t\t}\n\t\t};\n\t\treturn SkeletonClipping;\n\t}());\n\tspine.SkeletonClipping = SkeletonClipping;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar SkeletonData = (function () {\n\t\tfunction SkeletonData() {\n\t\t\tthis.bones = new Array();\n\t\t\tthis.slots = new Array();\n\t\t\tthis.skins = new Array();\n\t\t\tthis.events = new Array();\n\t\t\tthis.animations = new Array();\n\t\t\tthis.ikConstraints = new Array();\n\t\t\tthis.transformConstraints = new Array();\n\t\t\tthis.pathConstraints = new Array();\n\t\t\tthis.fps = 0;\n\t\t}\n\t\tSkeletonData.prototype.findBone = function (boneName) {\n\t\t\tif (boneName == null)\n\t\t\t\tthrow new Error(\"boneName cannot be null.\");\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tif (bone.name == boneName)\n\t\t\t\t\treturn bone;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findBoneIndex = function (boneName) {\n\t\t\tif (boneName == null)\n\t\t\t\tthrow new Error(\"boneName cannot be null.\");\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++)\n\t\t\t\tif (bones[i].name == boneName)\n\t\t\t\t\treturn i;\n\t\t\treturn -1;\n\t\t};\n\t\tSkeletonData.prototype.findSlot = function (slotName) {\n\t\t\tif (slotName == null)\n\t\t\t\tthrow new Error(\"slotName cannot be null.\");\n\t\t\tvar slots = this.slots;\n\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\tvar slot = slots[i];\n\t\t\t\tif (slot.name == slotName)\n\t\t\t\t\treturn slot;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findSlotIndex = function (slotName) {\n\t\t\tif (slotName == null)\n\t\t\t\tthrow new Error(\"slotName cannot be null.\");\n\t\t\tvar slots = this.slots;\n\t\t\tfor (var i = 0, n = slots.length; i < n; i++)\n\t\t\t\tif (slots[i].name == slotName)\n\t\t\t\t\treturn i;\n\t\t\treturn -1;\n\t\t};\n\t\tSkeletonData.prototype.findSkin = function (skinName) {\n\t\t\tif (skinName == null)\n\t\t\t\tthrow new Error(\"skinName cannot be null.\");\n\t\t\tvar skins = this.skins;\n\t\t\tfor (var i = 0, n = skins.length; i < n; i++) {\n\t\t\t\tvar skin = skins[i];\n\t\t\t\tif (skin.name == skinName)\n\t\t\t\t\treturn skin;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findEvent = function (eventDataName) {\n\t\t\tif (eventDataName == null)\n\t\t\t\tthrow new Error(\"eventDataName cannot be null.\");\n\t\t\tvar events = this.events;\n\t\t\tfor (var i = 0, n = events.length; i < n; i++) {\n\t\t\t\tvar event_4 = events[i];\n\t\t\t\tif (event_4.name == eventDataName)\n\t\t\t\t\treturn event_4;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findAnimation = function (animationName) {\n\t\t\tif (animationName == null)\n\t\t\t\tthrow new Error(\"animationName cannot be null.\");\n\t\t\tvar animations = this.animations;\n\t\t\tfor (var i = 0, n = animations.length; i < n; i++) {\n\t\t\t\tvar animation = animations[i];\n\t\t\t\tif (animation.name == animationName)\n\t\t\t\t\treturn animation;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findIkConstraint = function (constraintName) {\n\t\t\tif (constraintName == null)\n\t\t\t\tthrow new Error(\"constraintName cannot be null.\");\n\t\t\tvar ikConstraints = this.ikConstraints;\n\t\t\tfor (var i = 0, n = ikConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = ikConstraints[i];\n\t\t\t\tif (constraint.name == constraintName)\n\t\t\t\t\treturn constraint;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findTransformConstraint = function (constraintName) {\n\t\t\tif (constraintName == null)\n\t\t\t\tthrow new Error(\"constraintName cannot be null.\");\n\t\t\tvar transformConstraints = this.transformConstraints;\n\t\t\tfor (var i = 0, n = transformConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = transformConstraints[i];\n\t\t\t\tif (constraint.name == constraintName)\n\t\t\t\t\treturn constraint;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findPathConstraint = function (constraintName) {\n\t\t\tif (constraintName == null)\n\t\t\t\tthrow new Error(\"constraintName cannot be null.\");\n\t\t\tvar pathConstraints = this.pathConstraints;\n\t\t\tfor (var i = 0, n = pathConstraints.length; i < n; i++) {\n\t\t\t\tvar constraint = pathConstraints[i];\n\t\t\t\tif (constraint.name == constraintName)\n\t\t\t\t\treturn constraint;\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) {\n\t\t\tif (pathConstraintName == null)\n\t\t\t\tthrow new Error(\"pathConstraintName cannot be null.\");\n\t\t\tvar pathConstraints = this.pathConstraints;\n\t\t\tfor (var i = 0, n = pathConstraints.length; i < n; i++)\n\t\t\t\tif (pathConstraints[i].name == pathConstraintName)\n\t\t\t\t\treturn i;\n\t\t\treturn -1;\n\t\t};\n\t\treturn SkeletonData;\n\t}());\n\tspine.SkeletonData = SkeletonData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar SkeletonJson = (function () {\n\t\tfunction SkeletonJson(attachmentLoader) {\n\t\t\tthis.scale = 1;\n\t\t\tthis.linkedMeshes = new Array();\n\t\t\tthis.attachmentLoader = attachmentLoader;\n\t\t}\n\t\tSkeletonJson.prototype.readSkeletonData = function (json) {\n\t\t\tvar scale = this.scale;\n\t\t\tvar skeletonData = new spine.SkeletonData();\n\t\t\tvar root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n\t\t\tvar skeletonMap = root.skeleton;\n\t\t\tif (skeletonMap != null) {\n\t\t\t\tskeletonData.hash = skeletonMap.hash;\n\t\t\t\tskeletonData.version = skeletonMap.spine;\n\t\t\t\tskeletonData.width = skeletonMap.width;\n\t\t\t\tskeletonData.height = skeletonMap.height;\n\t\t\t\tskeletonData.fps = skeletonMap.fps;\n\t\t\t\tskeletonData.imagesPath = skeletonMap.images;\n\t\t\t}\n\t\t\tif (root.bones) {\n\t\t\t\tfor (var i = 0; i < root.bones.length; i++) {\n\t\t\t\t\tvar boneMap = root.bones[i];\n\t\t\t\t\tvar parent_2 = null;\n\t\t\t\t\tvar parentName = this.getValue(boneMap, \"parent\", null);\n\t\t\t\t\tif (parentName != null) {\n\t\t\t\t\t\tparent_2 = skeletonData.findBone(parentName);\n\t\t\t\t\t\tif (parent_2 == null)\n\t\t\t\t\t\t\tthrow new Error(\"Parent bone not found: \" + parentName);\n\t\t\t\t\t}\n\t\t\t\t\tvar data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_2);\n\t\t\t\t\tdata.length = this.getValue(boneMap, \"length\", 0) * scale;\n\t\t\t\t\tdata.x = this.getValue(boneMap, \"x\", 0) * scale;\n\t\t\t\t\tdata.y = this.getValue(boneMap, \"y\", 0) * scale;\n\t\t\t\t\tdata.rotation = this.getValue(boneMap, \"rotation\", 0);\n\t\t\t\t\tdata.scaleX = this.getValue(boneMap, \"scaleX\", 1);\n\t\t\t\t\tdata.scaleY = this.getValue(boneMap, \"scaleY\", 1);\n\t\t\t\t\tdata.shearX = this.getValue(boneMap, \"shearX\", 0);\n\t\t\t\t\tdata.shearY = this.getValue(boneMap, \"shearY\", 0);\n\t\t\t\t\tdata.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, \"transform\", \"normal\"));\n\t\t\t\t\tskeletonData.bones.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (root.slots) {\n\t\t\t\tfor (var i = 0; i < root.slots.length; i++) {\n\t\t\t\t\tvar slotMap = root.slots[i];\n\t\t\t\t\tvar slotName = slotMap.name;\n\t\t\t\t\tvar boneName = slotMap.bone;\n\t\t\t\t\tvar boneData = skeletonData.findBone(boneName);\n\t\t\t\t\tif (boneData == null)\n\t\t\t\t\t\tthrow new Error(\"Slot bone not found: \" + boneName);\n\t\t\t\t\tvar data = new spine.SlotData(skeletonData.slots.length, slotName, boneData);\n\t\t\t\t\tvar color = this.getValue(slotMap, \"color\", null);\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tdata.color.setFromString(color);\n\t\t\t\t\tvar dark = this.getValue(slotMap, \"dark\", null);\n\t\t\t\t\tif (dark != null) {\n\t\t\t\t\t\tdata.darkColor = new spine.Color(1, 1, 1, 1);\n\t\t\t\t\t\tdata.darkColor.setFromString(dark);\n\t\t\t\t\t}\n\t\t\t\t\tdata.attachmentName = this.getValue(slotMap, \"attachment\", null);\n\t\t\t\t\tdata.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, \"blend\", \"normal\"));\n\t\t\t\t\tskeletonData.slots.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (root.ik) {\n\t\t\t\tfor (var i = 0; i < root.ik.length; i++) {\n\t\t\t\t\tvar constraintMap = root.ik[i];\n\t\t\t\t\tvar data = new spine.IkConstraintData(constraintMap.name);\n\t\t\t\t\tdata.order = this.getValue(constraintMap, \"order\", 0);\n\t\t\t\t\tfor (var j = 0; j < constraintMap.bones.length; j++) {\n\t\t\t\t\t\tvar boneName = constraintMap.bones[j];\n\t\t\t\t\t\tvar bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\tif (bone == null)\n\t\t\t\t\t\t\tthrow new Error(\"IK bone not found: \" + boneName);\n\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t}\n\t\t\t\t\tvar targetName = constraintMap.target;\n\t\t\t\t\tdata.target = skeletonData.findBone(targetName);\n\t\t\t\t\tif (data.target == null)\n\t\t\t\t\t\tthrow new Error(\"IK target bone not found: \" + targetName);\n\t\t\t\t\tdata.bendDirection = this.getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n\t\t\t\t\tdata.mix = this.getValue(constraintMap, \"mix\", 1);\n\t\t\t\t\tskeletonData.ikConstraints.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (root.transform) {\n\t\t\t\tfor (var i = 0; i < root.transform.length; i++) {\n\t\t\t\t\tvar constraintMap = root.transform[i];\n\t\t\t\t\tvar data = new spine.TransformConstraintData(constraintMap.name);\n\t\t\t\t\tdata.order = this.getValue(constraintMap, \"order\", 0);\n\t\t\t\t\tfor (var j = 0; j < constraintMap.bones.length; j++) {\n\t\t\t\t\t\tvar boneName = constraintMap.bones[j];\n\t\t\t\t\t\tvar bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\tif (bone == null)\n\t\t\t\t\t\t\tthrow new Error(\"Transform constraint bone not found: \" + boneName);\n\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t}\n\t\t\t\t\tvar targetName = constraintMap.target;\n\t\t\t\t\tdata.target = skeletonData.findBone(targetName);\n\t\t\t\t\tif (data.target == null)\n\t\t\t\t\t\tthrow new Error(\"Transform constraint target bone not found: \" + targetName);\n\t\t\t\t\tdata.local = this.getValue(constraintMap, \"local\", false);\n\t\t\t\t\tdata.relative = this.getValue(constraintMap, \"relative\", false);\n\t\t\t\t\tdata.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n\t\t\t\t\tdata.offsetX = this.getValue(constraintMap, \"x\", 0) * scale;\n\t\t\t\t\tdata.offsetY = this.getValue(constraintMap, \"y\", 0) * scale;\n\t\t\t\t\tdata.offsetScaleX = this.getValue(constraintMap, \"scaleX\", 0);\n\t\t\t\t\tdata.offsetScaleY = this.getValue(constraintMap, \"scaleY\", 0);\n\t\t\t\t\tdata.offsetShearY = this.getValue(constraintMap, \"shearY\", 0);\n\t\t\t\t\tdata.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n\t\t\t\t\tdata.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n\t\t\t\t\tdata.scaleMix = this.getValue(constraintMap, \"scaleMix\", 1);\n\t\t\t\t\tdata.shearMix = this.getValue(constraintMap, \"shearMix\", 1);\n\t\t\t\t\tskeletonData.transformConstraints.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (root.path) {\n\t\t\t\tfor (var i = 0; i < root.path.length; i++) {\n\t\t\t\t\tvar constraintMap = root.path[i];\n\t\t\t\t\tvar data = new spine.PathConstraintData(constraintMap.name);\n\t\t\t\t\tdata.order = this.getValue(constraintMap, \"order\", 0);\n\t\t\t\t\tfor (var j = 0; j < constraintMap.bones.length; j++) {\n\t\t\t\t\t\tvar boneName = constraintMap.bones[j];\n\t\t\t\t\t\tvar bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\tif (bone == null)\n\t\t\t\t\t\t\tthrow new Error(\"Transform constraint bone not found: \" + boneName);\n\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t}\n\t\t\t\t\tvar targetName = constraintMap.target;\n\t\t\t\t\tdata.target = skeletonData.findSlot(targetName);\n\t\t\t\t\tif (data.target == null)\n\t\t\t\t\t\tthrow new Error(\"Path target slot not found: \" + targetName);\n\t\t\t\t\tdata.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, \"positionMode\", \"percent\"));\n\t\t\t\t\tdata.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, \"spacingMode\", \"length\"));\n\t\t\t\t\tdata.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, \"rotateMode\", \"tangent\"));\n\t\t\t\t\tdata.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n\t\t\t\t\tdata.position = this.getValue(constraintMap, \"position\", 0);\n\t\t\t\t\tif (data.positionMode == spine.PositionMode.Fixed)\n\t\t\t\t\t\tdata.position *= scale;\n\t\t\t\t\tdata.spacing = this.getValue(constraintMap, \"spacing\", 0);\n\t\t\t\t\tif (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n\t\t\t\t\t\tdata.spacing *= scale;\n\t\t\t\t\tdata.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n\t\t\t\t\tdata.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n\t\t\t\t\tskeletonData.pathConstraints.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (root.skins) {\n\t\t\t\tfor (var skinName in root.skins) {\n\t\t\t\t\tvar skinMap = root.skins[skinName];\n\t\t\t\t\tvar skin = new spine.Skin(skinName);\n\t\t\t\t\tfor (var slotName in skinMap) {\n\t\t\t\t\t\tvar slotIndex = skeletonData.findSlotIndex(slotName);\n\t\t\t\t\t\tif (slotIndex == -1)\n\t\t\t\t\t\t\tthrow new Error(\"Slot not found: \" + slotName);\n\t\t\t\t\t\tvar slotMap = skinMap[slotName];\n\t\t\t\t\t\tfor (var entryName in slotMap) {\n\t\t\t\t\t\t\tvar attachment = this.readAttachment(slotMap[entryName], skin, slotIndex, entryName, skeletonData);\n\t\t\t\t\t\t\tif (attachment != null)\n\t\t\t\t\t\t\t\tskin.addAttachment(slotIndex, entryName, attachment);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tskeletonData.skins.push(skin);\n\t\t\t\t\tif (skin.name == \"default\")\n\t\t\t\t\t\tskeletonData.defaultSkin = skin;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i = 0, n = this.linkedMeshes.length; i < n; i++) {\n\t\t\t\tvar linkedMesh = this.linkedMeshes[i];\n\t\t\t\tvar skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n\t\t\t\tif (skin == null)\n\t\t\t\t\tthrow new Error(\"Skin not found: \" + linkedMesh.skin);\n\t\t\t\tvar parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n\t\t\t\tif (parent_3 == null)\n\t\t\t\t\tthrow new Error(\"Parent mesh not found: \" + linkedMesh.parent);\n\t\t\t\tlinkedMesh.mesh.setParentMesh(parent_3);\n\t\t\t\tlinkedMesh.mesh.updateUVs();\n\t\t\t}\n\t\t\tthis.linkedMeshes.length = 0;\n\t\t\tif (root.events) {\n\t\t\t\tfor (var eventName in root.events) {\n\t\t\t\t\tvar eventMap = root.events[eventName];\n\t\t\t\t\tvar data = new spine.EventData(eventName);\n\t\t\t\t\tdata.intValue = this.getValue(eventMap, \"int\", 0);\n\t\t\t\t\tdata.floatValue = this.getValue(eventMap, \"float\", 0);\n\t\t\t\t\tdata.stringValue = this.getValue(eventMap, \"string\", \"\");\n\t\t\t\t\tskeletonData.events.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (root.animations) {\n\t\t\t\tfor (var animationName in root.animations) {\n\t\t\t\t\tvar animationMap = root.animations[animationName];\n\t\t\t\t\tthis.readAnimation(animationMap, animationName, skeletonData);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn skeletonData;\n\t\t};\n\t\tSkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) {\n\t\t\tvar scale = this.scale;\n\t\t\tname = this.getValue(map, \"name\", name);\n\t\t\tvar type = this.getValue(map, \"type\", \"region\");\n\t\t\tswitch (type) {\n\t\t\t\tcase \"region\": {\n\t\t\t\t\tvar path = this.getValue(map, \"path\", name);\n\t\t\t\t\tvar region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n\t\t\t\t\tif (region == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tregion.path = path;\n\t\t\t\t\tregion.x = this.getValue(map, \"x\", 0) * scale;\n\t\t\t\t\tregion.y = this.getValue(map, \"y\", 0) * scale;\n\t\t\t\t\tregion.scaleX = this.getValue(map, \"scaleX\", 1);\n\t\t\t\t\tregion.scaleY = this.getValue(map, \"scaleY\", 1);\n\t\t\t\t\tregion.rotation = this.getValue(map, \"rotation\", 0);\n\t\t\t\t\tregion.width = map.width * scale;\n\t\t\t\t\tregion.height = map.height * scale;\n\t\t\t\t\tvar color = this.getValue(map, \"color\", null);\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tregion.color.setFromString(color);\n\t\t\t\t\tregion.updateOffset();\n\t\t\t\t\treturn region;\n\t\t\t\t}\n\t\t\t\tcase \"boundingbox\": {\n\t\t\t\t\tvar box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n\t\t\t\t\tif (box == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tthis.readVertices(map, box, map.vertexCount << 1);\n\t\t\t\t\tvar color = this.getValue(map, \"color\", null);\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tbox.color.setFromString(color);\n\t\t\t\t\treturn box;\n\t\t\t\t}\n\t\t\t\tcase \"mesh\":\n\t\t\t\tcase \"linkedmesh\": {\n\t\t\t\t\tvar path = this.getValue(map, \"path\", name);\n\t\t\t\t\tvar mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n\t\t\t\t\tif (mesh == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tmesh.path = path;\n\t\t\t\t\tvar color = this.getValue(map, \"color\", null);\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tmesh.color.setFromString(color);\n\t\t\t\t\tvar parent_4 = this.getValue(map, \"parent\", null);\n\t\t\t\t\tif (parent_4 != null) {\n\t\t\t\t\t\tmesh.inheritDeform = this.getValue(map, \"deform\", true);\n\t\t\t\t\t\tthis.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, \"skin\", null), slotIndex, parent_4));\n\t\t\t\t\t\treturn mesh;\n\t\t\t\t\t}\n\t\t\t\t\tvar uvs = map.uvs;\n\t\t\t\t\tthis.readVertices(map, mesh, uvs.length);\n\t\t\t\t\tmesh.triangles = map.triangles;\n\t\t\t\t\tmesh.regionUVs = uvs;\n\t\t\t\t\tmesh.updateUVs();\n\t\t\t\t\tmesh.hullLength = this.getValue(map, \"hull\", 0) * 2;\n\t\t\t\t\treturn mesh;\n\t\t\t\t}\n\t\t\t\tcase \"path\": {\n\t\t\t\t\tvar path = this.attachmentLoader.newPathAttachment(skin, name);\n\t\t\t\t\tif (path == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tpath.closed = this.getValue(map, \"closed\", false);\n\t\t\t\t\tpath.constantSpeed = this.getValue(map, \"constantSpeed\", true);\n\t\t\t\t\tvar vertexCount = map.vertexCount;\n\t\t\t\t\tthis.readVertices(map, path, vertexCount << 1);\n\t\t\t\t\tvar lengths = spine.Utils.newArray(vertexCount / 3, 0);\n\t\t\t\t\tfor (var i = 0; i < map.lengths.length; i++)\n\t\t\t\t\t\tlengths[i] = map.lengths[i] * scale;\n\t\t\t\t\tpath.lengths = lengths;\n\t\t\t\t\tvar color = this.getValue(map, \"color\", null);\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tpath.color.setFromString(color);\n\t\t\t\t\treturn path;\n\t\t\t\t}\n\t\t\t\tcase \"point\": {\n\t\t\t\t\tvar point = this.attachmentLoader.newPointAttachment(skin, name);\n\t\t\t\t\tif (point == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tpoint.x = this.getValue(map, \"x\", 0) * scale;\n\t\t\t\t\tpoint.y = this.getValue(map, \"y\", 0) * scale;\n\t\t\t\t\tpoint.rotation = this.getValue(map, \"rotation\", 0);\n\t\t\t\t\tvar color = this.getValue(map, \"color\", null);\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tpoint.color.setFromString(color);\n\t\t\t\t\treturn point;\n\t\t\t\t}\n\t\t\t\tcase \"clipping\": {\n\t\t\t\t\tvar clip = this.attachmentLoader.newClippingAttachment(skin, name);\n\t\t\t\t\tif (clip == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tvar end = this.getValue(map, \"end\", null);\n\t\t\t\t\tif (end != null) {\n\t\t\t\t\t\tvar slot = skeletonData.findSlot(end);\n\t\t\t\t\t\tif (slot == null)\n\t\t\t\t\t\t\tthrow new Error(\"Clipping end slot not found: \" + end);\n\t\t\t\t\t\tclip.endSlot = slot;\n\t\t\t\t\t}\n\t\t\t\t\tvar vertexCount = map.vertexCount;\n\t\t\t\t\tthis.readVertices(map, clip, vertexCount << 1);\n\t\t\t\t\tvar color = this.getValue(map, \"color\", null);\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tclip.color.setFromString(color);\n\t\t\t\t\treturn clip;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tSkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) {\n\t\t\tvar scale = this.scale;\n\t\t\tattachment.worldVerticesLength = verticesLength;\n\t\t\tvar vertices = map.vertices;\n\t\t\tif (verticesLength == vertices.length) {\n\t\t\t\tvar scaledVertices = spine.Utils.toFloatArray(vertices);\n\t\t\t\tif (scale != 1) {\n\t\t\t\t\tfor (var i = 0, n = vertices.length; i < n; i++)\n\t\t\t\t\t\tscaledVertices[i] *= scale;\n\t\t\t\t}\n\t\t\t\tattachment.vertices = scaledVertices;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar weights = new Array();\n\t\t\tvar bones = new Array();\n\t\t\tfor (var i = 0, n = vertices.length; i < n;) {\n\t\t\t\tvar boneCount = vertices[i++];\n\t\t\t\tbones.push(boneCount);\n\t\t\t\tfor (var nn = i + boneCount * 4; i < nn; i += 4) {\n\t\t\t\t\tbones.push(vertices[i]);\n\t\t\t\t\tweights.push(vertices[i + 1] * scale);\n\t\t\t\t\tweights.push(vertices[i + 2] * scale);\n\t\t\t\t\tweights.push(vertices[i + 3]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tattachment.bones = bones;\n\t\t\tattachment.vertices = spine.Utils.toFloatArray(weights);\n\t\t};\n\t\tSkeletonJson.prototype.readAnimation = function (map, name, skeletonData) {\n\t\t\tvar scale = this.scale;\n\t\t\tvar timelines = new Array();\n\t\t\tvar duration = 0;\n\t\t\tif (map.slots) {\n\t\t\t\tfor (var slotName in map.slots) {\n\t\t\t\t\tvar slotMap = map.slots[slotName];\n\t\t\t\t\tvar slotIndex = skeletonData.findSlotIndex(slotName);\n\t\t\t\t\tif (slotIndex == -1)\n\t\t\t\t\t\tthrow new Error(\"Slot not found: \" + slotName);\n\t\t\t\t\tfor (var timelineName in slotMap) {\n\t\t\t\t\t\tvar timelineMap = slotMap[timelineName];\n\t\t\t\t\t\tif (timelineName == \"attachment\") {\n\t\t\t\t\t\t\tvar timeline = new spine.AttachmentTimeline(timelineMap.length);\n\t\t\t\t\t\t\ttimeline.slotIndex = slotIndex;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < timelineMap.length; i++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[i];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex++, valueMap.time, valueMap.name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (timelineName == \"color\") {\n\t\t\t\t\t\t\tvar timeline = new spine.ColorTimeline(timelineMap.length);\n\t\t\t\t\t\t\ttimeline.slotIndex = slotIndex;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < timelineMap.length; i++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[i];\n\t\t\t\t\t\t\t\tvar color = new spine.Color();\n\t\t\t\t\t\t\t\tcolor.setFromString(valueMap.color);\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, color.r, color.g, color.b, color.a);\n\t\t\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (timelineName == \"twoColor\") {\n\t\t\t\t\t\t\tvar timeline = new spine.TwoColorTimeline(timelineMap.length);\n\t\t\t\t\t\t\ttimeline.slotIndex = slotIndex;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < timelineMap.length; i++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[i];\n\t\t\t\t\t\t\t\tvar light = new spine.Color();\n\t\t\t\t\t\t\t\tvar dark = new spine.Color();\n\t\t\t\t\t\t\t\tlight.setFromString(valueMap.light);\n\t\t\t\t\t\t\t\tdark.setFromString(valueMap.dark);\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);\n\t\t\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(\"Invalid timeline type for a slot: \" + timelineName + \" (\" + slotName + \")\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (map.bones) {\n\t\t\t\tfor (var boneName in map.bones) {\n\t\t\t\t\tvar boneMap = map.bones[boneName];\n\t\t\t\t\tvar boneIndex = skeletonData.findBoneIndex(boneName);\n\t\t\t\t\tif (boneIndex == -1)\n\t\t\t\t\t\tthrow new Error(\"Bone not found: \" + boneName);\n\t\t\t\t\tfor (var timelineName in boneMap) {\n\t\t\t\t\t\tvar timelineMap = boneMap[timelineName];\n\t\t\t\t\t\tif (timelineName === \"rotate\") {\n\t\t\t\t\t\t\tvar timeline = new spine.RotateTimeline(timelineMap.length);\n\t\t\t\t\t\t\ttimeline.boneIndex = boneIndex;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < timelineMap.length; i++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[i];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, valueMap.angle);\n\t\t\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (timelineName === \"translate\" || timelineName === \"scale\" || timelineName === \"shear\") {\n\t\t\t\t\t\t\tvar timeline = null;\n\t\t\t\t\t\t\tvar timelineScale = 1;\n\t\t\t\t\t\t\tif (timelineName === \"scale\")\n\t\t\t\t\t\t\t\ttimeline = new spine.ScaleTimeline(timelineMap.length);\n\t\t\t\t\t\t\telse if (timelineName === \"shear\")\n\t\t\t\t\t\t\t\ttimeline = new spine.ShearTimeline(timelineMap.length);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\ttimeline = new spine.TranslateTimeline(timelineMap.length);\n\t\t\t\t\t\t\t\ttimelineScale = scale;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeline.boneIndex = boneIndex;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < timelineMap.length; i++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[i];\n\t\t\t\t\t\t\t\tvar x = this.getValue(valueMap, \"x\", 0), y = this.getValue(valueMap, \"y\", 0);\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, x * timelineScale, y * timelineScale);\n\t\t\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(\"Invalid timeline type for a bone: \" + timelineName + \" (\" + boneName + \")\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (map.ik) {\n\t\t\t\tfor (var constraintName in map.ik) {\n\t\t\t\t\tvar constraintMap = map.ik[constraintName];\n\t\t\t\t\tvar constraint = skeletonData.findIkConstraint(constraintName);\n\t\t\t\t\tvar timeline = new spine.IkConstraintTimeline(constraintMap.length);\n\t\t\t\t\ttimeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\tfor (var i = 0; i < constraintMap.length; i++) {\n\t\t\t\t\t\tvar valueMap = constraintMap[i];\n\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, this.getValue(valueMap, \"mix\", 1), this.getValue(valueMap, \"bendPositive\", true) ? 1 : -1);\n\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t}\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (map.transform) {\n\t\t\t\tfor (var constraintName in map.transform) {\n\t\t\t\t\tvar constraintMap = map.transform[constraintName];\n\t\t\t\t\tvar constraint = skeletonData.findTransformConstraint(constraintName);\n\t\t\t\t\tvar timeline = new spine.TransformConstraintTimeline(constraintMap.length);\n\t\t\t\t\ttimeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\tfor (var i = 0; i < constraintMap.length; i++) {\n\t\t\t\t\t\tvar valueMap = constraintMap[i];\n\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, this.getValue(valueMap, \"rotateMix\", 1), this.getValue(valueMap, \"translateMix\", 1), this.getValue(valueMap, \"scaleMix\", 1), this.getValue(valueMap, \"shearMix\", 1));\n\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t}\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (map.paths) {\n\t\t\t\tfor (var constraintName in map.paths) {\n\t\t\t\t\tvar constraintMap = map.paths[constraintName];\n\t\t\t\t\tvar index = skeletonData.findPathConstraintIndex(constraintName);\n\t\t\t\t\tif (index == -1)\n\t\t\t\t\t\tthrow new Error(\"Path constraint not found: \" + constraintName);\n\t\t\t\t\tvar data = skeletonData.pathConstraints[index];\n\t\t\t\t\tfor (var timelineName in constraintMap) {\n\t\t\t\t\t\tvar timelineMap = constraintMap[timelineName];\n\t\t\t\t\t\tif (timelineName === \"position\" || timelineName === \"spacing\") {\n\t\t\t\t\t\t\tvar timeline = null;\n\t\t\t\t\t\t\tvar timelineScale = 1;\n\t\t\t\t\t\t\tif (timelineName === \"spacing\") {\n\t\t\t\t\t\t\t\ttimeline = new spine.PathConstraintSpacingTimeline(timelineMap.length);\n\t\t\t\t\t\t\t\tif (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n\t\t\t\t\t\t\t\t\ttimelineScale = scale;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\ttimeline = new spine.PathConstraintPositionTimeline(timelineMap.length);\n\t\t\t\t\t\t\t\tif (data.positionMode == spine.PositionMode.Fixed)\n\t\t\t\t\t\t\t\t\ttimelineScale = scale;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeline.pathConstraintIndex = index;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < timelineMap.length; i++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[i];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, this.getValue(valueMap, timelineName, 0) * timelineScale);\n\t\t\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (timelineName === \"mix\") {\n\t\t\t\t\t\t\tvar timeline = new spine.PathConstraintMixTimeline(timelineMap.length);\n\t\t\t\t\t\t\ttimeline.pathConstraintIndex = index;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < timelineMap.length; i++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[i];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, this.getValue(valueMap, \"rotateMix\", 1), this.getValue(valueMap, \"translateMix\", 1));\n\t\t\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (map.deform) {\n\t\t\t\tfor (var deformName in map.deform) {\n\t\t\t\t\tvar deformMap = map.deform[deformName];\n\t\t\t\t\tvar skin = skeletonData.findSkin(deformName);\n\t\t\t\t\tif (skin == null)\n\t\t\t\t\t\tthrow new Error(\"Skin not found: \" + deformName);\n\t\t\t\t\tfor (var slotName in deformMap) {\n\t\t\t\t\t\tvar slotMap = deformMap[slotName];\n\t\t\t\t\t\tvar slotIndex = skeletonData.findSlotIndex(slotName);\n\t\t\t\t\t\tif (slotIndex == -1)\n\t\t\t\t\t\t\tthrow new Error(\"Slot not found: \" + slotMap.name);\n\t\t\t\t\t\tfor (var timelineName in slotMap) {\n\t\t\t\t\t\t\tvar timelineMap = slotMap[timelineName];\n\t\t\t\t\t\t\tvar attachment = skin.getAttachment(slotIndex, timelineName);\n\t\t\t\t\t\t\tif (attachment == null)\n\t\t\t\t\t\t\t\tthrow new Error(\"Deform attachment not found: \" + timelineMap.name);\n\t\t\t\t\t\t\tvar weighted = attachment.bones != null;\n\t\t\t\t\t\t\tvar vertices = attachment.vertices;\n\t\t\t\t\t\t\tvar deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n\t\t\t\t\t\t\tvar timeline = new spine.DeformTimeline(timelineMap.length);\n\t\t\t\t\t\t\ttimeline.slotIndex = slotIndex;\n\t\t\t\t\t\t\ttimeline.attachment = attachment;\n\t\t\t\t\t\t\tvar frameIndex = 0;\n\t\t\t\t\t\t\tfor (var j = 0; j < timelineMap.length; j++) {\n\t\t\t\t\t\t\t\tvar valueMap = timelineMap[j];\n\t\t\t\t\t\t\t\tvar deform = void 0;\n\t\t\t\t\t\t\t\tvar verticesValue = this.getValue(valueMap, \"vertices\", null);\n\t\t\t\t\t\t\t\tif (verticesValue == null)\n\t\t\t\t\t\t\t\t\tdeform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices;\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdeform = spine.Utils.newFloatArray(deformLength);\n\t\t\t\t\t\t\t\t\tvar start = this.getValue(valueMap, \"offset\", 0);\n\t\t\t\t\t\t\t\t\tspine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n\t\t\t\t\t\t\t\t\tif (scale != 1) {\n\t\t\t\t\t\t\t\t\t\tfor (var i = start, n = i + verticesValue.length; i < n; i++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[i] *= scale;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!weighted) {\n\t\t\t\t\t\t\t\t\t\tfor (var i = 0; i < deformLength; i++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[i] += vertices[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimeline.setFrame(frameIndex, valueMap.time, deform);\n\t\t\t\t\t\t\t\tthis.readCurve(valueMap, timeline, frameIndex);\n\t\t\t\t\t\t\t\tframeIndex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tduration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar drawOrderNode = map.drawOrder;\n\t\t\tif (drawOrderNode == null)\n\t\t\t\tdrawOrderNode = map.draworder;\n\t\t\tif (drawOrderNode != null) {\n\t\t\t\tvar timeline = new spine.DrawOrderTimeline(drawOrderNode.length);\n\t\t\t\tvar slotCount = skeletonData.slots.length;\n\t\t\t\tvar frameIndex = 0;\n\t\t\t\tfor (var j = 0; j < drawOrderNode.length; j++) {\n\t\t\t\t\tvar drawOrderMap = drawOrderNode[j];\n\t\t\t\t\tvar drawOrder = null;\n\t\t\t\t\tvar offsets = this.getValue(drawOrderMap, \"offsets\", null);\n\t\t\t\t\tif (offsets != null) {\n\t\t\t\t\t\tdrawOrder = spine.Utils.newArray(slotCount, -1);\n\t\t\t\t\t\tvar unchanged = spine.Utils.newArray(slotCount - offsets.length, 0);\n\t\t\t\t\t\tvar originalIndex = 0, unchangedIndex = 0;\n\t\t\t\t\t\tfor (var i = 0; i < offsets.length; i++) {\n\t\t\t\t\t\t\tvar offsetMap = offsets[i];\n\t\t\t\t\t\t\tvar slotIndex = skeletonData.findSlotIndex(offsetMap.slot);\n\t\t\t\t\t\t\tif (slotIndex == -1)\n\t\t\t\t\t\t\t\tthrow new Error(\"Slot not found: \" + offsetMap.slot);\n\t\t\t\t\t\t\twhile (originalIndex != slotIndex)\n\t\t\t\t\t\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t\t\t\t\t\tdrawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (originalIndex < slotCount)\n\t\t\t\t\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t\t\t\t\tfor (var i = slotCount - 1; i >= 0; i--)\n\t\t\t\t\t\t\tif (drawOrder[i] == -1)\n\t\t\t\t\t\t\t\tdrawOrder[i] = unchanged[--unchangedIndex];\n\t\t\t\t\t}\n\t\t\t\t\ttimeline.setFrame(frameIndex++, drawOrderMap.time, drawOrder);\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t\tduration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n\t\t\t}\n\t\t\tif (map.events) {\n\t\t\t\tvar timeline = new spine.EventTimeline(map.events.length);\n\t\t\t\tvar frameIndex = 0;\n\t\t\t\tfor (var i = 0; i < map.events.length; i++) {\n\t\t\t\t\tvar eventMap = map.events[i];\n\t\t\t\t\tvar eventData = skeletonData.findEvent(eventMap.name);\n\t\t\t\t\tif (eventData == null)\n\t\t\t\t\t\tthrow new Error(\"Event not found: \" + eventMap.name);\n\t\t\t\t\tvar event_5 = new spine.Event(spine.Utils.toSinglePrecision(eventMap.time), eventData);\n\t\t\t\t\tevent_5.intValue = this.getValue(eventMap, \"int\", eventData.intValue);\n\t\t\t\t\tevent_5.floatValue = this.getValue(eventMap, \"float\", eventData.floatValue);\n\t\t\t\t\tevent_5.stringValue = this.getValue(eventMap, \"string\", eventData.stringValue);\n\t\t\t\t\ttimeline.setFrame(frameIndex++, event_5);\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t\tduration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n\t\t\t}\n\t\t\tif (isNaN(duration)) {\n\t\t\t\tthrow new Error(\"Error while parsing animation, duration is NaN\");\n\t\t\t}\n\t\t\tskeletonData.animations.push(new spine.Animation(name, timelines, duration));\n\t\t};\n\t\tSkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) {\n\t\t\tif (!map.curve)\n\t\t\t\treturn;\n\t\t\tif (map.curve === \"stepped\")\n\t\t\t\ttimeline.setStepped(frameIndex);\n\t\t\telse if (Object.prototype.toString.call(map.curve) === '[object Array]') {\n\t\t\t\tvar curve = map.curve;\n\t\t\t\ttimeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);\n\t\t\t}\n\t\t};\n\t\tSkeletonJson.prototype.getValue = function (map, prop, defaultValue) {\n\t\t\treturn map[prop] !== undefined ? map[prop] : defaultValue;\n\t\t};\n\t\tSkeletonJson.blendModeFromString = function (str) {\n\t\t\tstr = str.toLowerCase();\n\t\t\tif (str == \"normal\")\n\t\t\t\treturn spine.BlendMode.Normal;\n\t\t\tif (str == \"additive\")\n\t\t\t\treturn spine.BlendMode.Additive;\n\t\t\tif (str == \"multiply\")\n\t\t\t\treturn spine.BlendMode.Multiply;\n\t\t\tif (str == \"screen\")\n\t\t\t\treturn spine.BlendMode.Screen;\n\t\t\tthrow new Error(\"Unknown blend mode: \" + str);\n\t\t};\n\t\tSkeletonJson.positionModeFromString = function (str) {\n\t\t\tstr = str.toLowerCase();\n\t\t\tif (str == \"fixed\")\n\t\t\t\treturn spine.PositionMode.Fixed;\n\t\t\tif (str == \"percent\")\n\t\t\t\treturn spine.PositionMode.Percent;\n\t\t\tthrow new Error(\"Unknown position mode: \" + str);\n\t\t};\n\t\tSkeletonJson.spacingModeFromString = function (str) {\n\t\t\tstr = str.toLowerCase();\n\t\t\tif (str == \"length\")\n\t\t\t\treturn spine.SpacingMode.Length;\n\t\t\tif (str == \"fixed\")\n\t\t\t\treturn spine.SpacingMode.Fixed;\n\t\t\tif (str == \"percent\")\n\t\t\t\treturn spine.SpacingMode.Percent;\n\t\t\tthrow new Error(\"Unknown position mode: \" + str);\n\t\t};\n\t\tSkeletonJson.rotateModeFromString = function (str) {\n\t\t\tstr = str.toLowerCase();\n\t\t\tif (str == \"tangent\")\n\t\t\t\treturn spine.RotateMode.Tangent;\n\t\t\tif (str == \"chain\")\n\t\t\t\treturn spine.RotateMode.Chain;\n\t\t\tif (str == \"chainscale\")\n\t\t\t\treturn spine.RotateMode.ChainScale;\n\t\t\tthrow new Error(\"Unknown rotate mode: \" + str);\n\t\t};\n\t\tSkeletonJson.transformModeFromString = function (str) {\n\t\t\tstr = str.toLowerCase();\n\t\t\tif (str == \"normal\")\n\t\t\t\treturn spine.TransformMode.Normal;\n\t\t\tif (str == \"onlytranslation\")\n\t\t\t\treturn spine.TransformMode.OnlyTranslation;\n\t\t\tif (str == \"norotationorreflection\")\n\t\t\t\treturn spine.TransformMode.NoRotationOrReflection;\n\t\t\tif (str == \"noscale\")\n\t\t\t\treturn spine.TransformMode.NoScale;\n\t\t\tif (str == \"noscaleorreflection\")\n\t\t\t\treturn spine.TransformMode.NoScaleOrReflection;\n\t\t\tthrow new Error(\"Unknown transform mode: \" + str);\n\t\t};\n\t\treturn SkeletonJson;\n\t}());\n\tspine.SkeletonJson = SkeletonJson;\n\tvar LinkedMesh = (function () {\n\t\tfunction LinkedMesh(mesh, skin, slotIndex, parent) {\n\t\t\tthis.mesh = mesh;\n\t\t\tthis.skin = skin;\n\t\t\tthis.slotIndex = slotIndex;\n\t\t\tthis.parent = parent;\n\t\t}\n\t\treturn LinkedMesh;\n\t}());\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Skin = (function () {\n\t\tfunction Skin(name) {\n\t\t\tthis.attachments = new Array();\n\t\t\tif (name == null)\n\t\t\t\tthrow new Error(\"name cannot be null.\");\n\t\t\tthis.name = name;\n\t\t}\n\t\tSkin.prototype.addAttachment = function (slotIndex, name, attachment) {\n\t\t\tif (attachment == null)\n\t\t\t\tthrow new Error(\"attachment cannot be null.\");\n\t\t\tvar attachments = this.attachments;\n\t\t\tif (slotIndex >= attachments.length)\n\t\t\t\tattachments.length = slotIndex + 1;\n\t\t\tif (!attachments[slotIndex])\n\t\t\t\tattachments[slotIndex] = {};\n\t\t\tattachments[slotIndex][name] = attachment;\n\t\t};\n\t\tSkin.prototype.getAttachment = function (slotIndex, name) {\n\t\t\tvar dictionary = this.attachments[slotIndex];\n\t\t\treturn dictionary ? dictionary[name] : null;\n\t\t};\n\t\tSkin.prototype.attachAll = function (skeleton, oldSkin) {\n\t\t\tvar slotIndex = 0;\n\t\t\tfor (var i = 0; i < skeleton.slots.length; i++) {\n\t\t\t\tvar slot = skeleton.slots[i];\n\t\t\t\tvar slotAttachment = slot.getAttachment();\n\t\t\t\tif (slotAttachment && slotIndex < oldSkin.attachments.length) {\n\t\t\t\t\tvar dictionary = oldSkin.attachments[slotIndex];\n\t\t\t\t\tfor (var key in dictionary) {\n\t\t\t\t\t\tvar skinAttachment = dictionary[key];\n\t\t\t\t\t\tif (slotAttachment == skinAttachment) {\n\t\t\t\t\t\t\tvar attachment = this.getAttachment(slotIndex, key);\n\t\t\t\t\t\t\tif (attachment != null)\n\t\t\t\t\t\t\t\tslot.setAttachment(attachment);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tslotIndex++;\n\t\t\t}\n\t\t};\n\t\treturn Skin;\n\t}());\n\tspine.Skin = Skin;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Slot = (function () {\n\t\tfunction Slot(data, bone) {\n\t\t\tthis.attachmentVertices = new Array();\n\t\t\tif (data == null)\n\t\t\t\tthrow new Error(\"data cannot be null.\");\n\t\t\tif (bone == null)\n\t\t\t\tthrow new Error(\"bone cannot be null.\");\n\t\t\tthis.data = data;\n\t\t\tthis.bone = bone;\n\t\t\tthis.color = new spine.Color();\n\t\t\tthis.darkColor = data.darkColor == null ? null : new spine.Color();\n\t\t\tthis.setToSetupPose();\n\t\t}\n\t\tSlot.prototype.getAttachment = function () {\n\t\t\treturn this.attachment;\n\t\t};\n\t\tSlot.prototype.setAttachment = function (attachment) {\n\t\t\tif (this.attachment == attachment)\n\t\t\t\treturn;\n\t\t\tthis.attachment = attachment;\n\t\t\tthis.attachmentTime = this.bone.skeleton.time;\n\t\t\tthis.attachmentVertices.length = 0;\n\t\t};\n\t\tSlot.prototype.setAttachmentTime = function (time) {\n\t\t\tthis.attachmentTime = this.bone.skeleton.time - time;\n\t\t};\n\t\tSlot.prototype.getAttachmentTime = function () {\n\t\t\treturn this.bone.skeleton.time - this.attachmentTime;\n\t\t};\n\t\tSlot.prototype.setToSetupPose = function () {\n\t\t\tthis.color.setFromColor(this.data.color);\n\t\t\tif (this.darkColor != null)\n\t\t\t\tthis.darkColor.setFromColor(this.data.darkColor);\n\t\t\tif (this.data.attachmentName == null)\n\t\t\t\tthis.attachment = null;\n\t\t\telse {\n\t\t\t\tthis.attachment = null;\n\t\t\t\tthis.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n\t\t\t}\n\t\t};\n\t\treturn Slot;\n\t}());\n\tspine.Slot = Slot;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar SlotData = (function () {\n\t\tfunction SlotData(index, name, boneData) {\n\t\t\tthis.color = new spine.Color(1, 1, 1, 1);\n\t\t\tif (index < 0)\n\t\t\t\tthrow new Error(\"index must be >= 0.\");\n\t\t\tif (name == null)\n\t\t\t\tthrow new Error(\"name cannot be null.\");\n\t\t\tif (boneData == null)\n\t\t\t\tthrow new Error(\"boneData cannot be null.\");\n\t\t\tthis.index = index;\n\t\t\tthis.name = name;\n\t\t\tthis.boneData = boneData;\n\t\t}\n\t\treturn SlotData;\n\t}());\n\tspine.SlotData = SlotData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Texture = (function () {\n\t\tfunction Texture(image) {\n\t\t\tthis._image = image;\n\t\t}\n\t\tTexture.prototype.getImage = function () {\n\t\t\treturn this._image;\n\t\t};\n\t\tTexture.filterFromString = function (text) {\n\t\t\tswitch (text.toLowerCase()) {\n\t\t\t\tcase \"nearest\": return TextureFilter.Nearest;\n\t\t\t\tcase \"linear\": return TextureFilter.Linear;\n\t\t\t\tcase \"mipmap\": return TextureFilter.MipMap;\n\t\t\t\tcase \"mipmapnearestnearest\": return TextureFilter.MipMapNearestNearest;\n\t\t\t\tcase \"mipmaplinearnearest\": return TextureFilter.MipMapLinearNearest;\n\t\t\t\tcase \"mipmapnearestlinear\": return TextureFilter.MipMapNearestLinear;\n\t\t\t\tcase \"mipmaplinearlinear\": return TextureFilter.MipMapLinearLinear;\n\t\t\t\tdefault: throw new Error(\"Unknown texture filter \" + text);\n\t\t\t}\n\t\t};\n\t\tTexture.wrapFromString = function (text) {\n\t\t\tswitch (text.toLowerCase()) {\n\t\t\t\tcase \"mirroredtepeat\": return TextureWrap.MirroredRepeat;\n\t\t\t\tcase \"clamptoedge\": return TextureWrap.ClampToEdge;\n\t\t\t\tcase \"repeat\": return TextureWrap.Repeat;\n\t\t\t\tdefault: throw new Error(\"Unknown texture wrap \" + text);\n\t\t\t}\n\t\t};\n\t\treturn Texture;\n\t}());\n\tspine.Texture = Texture;\n\tvar TextureFilter;\n\t(function (TextureFilter) {\n\t\tTextureFilter[TextureFilter[\"Nearest\"] = 9728] = \"Nearest\";\n\t\tTextureFilter[TextureFilter[\"Linear\"] = 9729] = \"Linear\";\n\t\tTextureFilter[TextureFilter[\"MipMap\"] = 9987] = \"MipMap\";\n\t\tTextureFilter[TextureFilter[\"MipMapNearestNearest\"] = 9984] = \"MipMapNearestNearest\";\n\t\tTextureFilter[TextureFilter[\"MipMapLinearNearest\"] = 9985] = \"MipMapLinearNearest\";\n\t\tTextureFilter[TextureFilter[\"MipMapNearestLinear\"] = 9986] = \"MipMapNearestLinear\";\n\t\tTextureFilter[TextureFilter[\"MipMapLinearLinear\"] = 9987] = \"MipMapLinearLinear\";\n\t})(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {}));\n\tvar TextureWrap;\n\t(function (TextureWrap) {\n\t\tTextureWrap[TextureWrap[\"MirroredRepeat\"] = 33648] = \"MirroredRepeat\";\n\t\tTextureWrap[TextureWrap[\"ClampToEdge\"] = 33071] = \"ClampToEdge\";\n\t\tTextureWrap[TextureWrap[\"Repeat\"] = 10497] = \"Repeat\";\n\t})(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {}));\n\tvar TextureRegion = (function () {\n\t\tfunction TextureRegion() {\n\t\t\tthis.u = 0;\n\t\t\tthis.v = 0;\n\t\t\tthis.u2 = 0;\n\t\t\tthis.v2 = 0;\n\t\t\tthis.width = 0;\n\t\t\tthis.height = 0;\n\t\t\tthis.rotate = false;\n\t\t\tthis.offsetX = 0;\n\t\t\tthis.offsetY = 0;\n\t\t\tthis.originalWidth = 0;\n\t\t\tthis.originalHeight = 0;\n\t\t}\n\t\treturn TextureRegion;\n\t}());\n\tspine.TextureRegion = TextureRegion;\n\tvar FakeTexture = (function (_super) {\n\t\t__extends(FakeTexture, _super);\n\t\tfunction FakeTexture() {\n\t\t\treturn _super !== null && _super.apply(this, arguments) || this;\n\t\t}\n\t\tFakeTexture.prototype.setFilters = function (minFilter, magFilter) { };\n\t\tFakeTexture.prototype.setWraps = function (uWrap, vWrap) { };\n\t\tFakeTexture.prototype.dispose = function () { };\n\t\treturn FakeTexture;\n\t}(spine.Texture));\n\tspine.FakeTexture = FakeTexture;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar TextureAtlas = (function () {\n\t\tfunction TextureAtlas(atlasText, textureLoader) {\n\t\t\tthis.pages = new Array();\n\t\t\tthis.regions = new Array();\n\t\t\tthis.load(atlasText, textureLoader);\n\t\t}\n\t\tTextureAtlas.prototype.load = function (atlasText, textureLoader) {\n\t\t\tif (textureLoader == null)\n\t\t\t\tthrow new Error(\"textureLoader cannot be null.\");\n\t\t\tvar reader = new TextureAtlasReader(atlasText);\n\t\t\tvar tuple = new Array(4);\n\t\t\tvar page = null;\n\t\t\twhile (true) {\n\t\t\t\tvar line = reader.readLine();\n\t\t\t\tif (line == null)\n\t\t\t\t\tbreak;\n\t\t\t\tline = line.trim();\n\t\t\t\tif (line.length == 0)\n\t\t\t\t\tpage = null;\n\t\t\t\telse if (!page) {\n\t\t\t\t\tpage = new TextureAtlasPage();\n\t\t\t\t\tpage.name = line;\n\t\t\t\t\tif (reader.readTuple(tuple) == 2) {\n\t\t\t\t\t\tpage.width = parseInt(tuple[0]);\n\t\t\t\t\t\tpage.height = parseInt(tuple[1]);\n\t\t\t\t\t\treader.readTuple(tuple);\n\t\t\t\t\t}\n\t\t\t\t\treader.readTuple(tuple);\n\t\t\t\t\tpage.minFilter = spine.Texture.filterFromString(tuple[0]);\n\t\t\t\t\tpage.magFilter = spine.Texture.filterFromString(tuple[1]);\n\t\t\t\t\tvar direction = reader.readValue();\n\t\t\t\t\tpage.uWrap = spine.TextureWrap.ClampToEdge;\n\t\t\t\t\tpage.vWrap = spine.TextureWrap.ClampToEdge;\n\t\t\t\t\tif (direction == \"x\")\n\t\t\t\t\t\tpage.uWrap = spine.TextureWrap.Repeat;\n\t\t\t\t\telse if (direction == \"y\")\n\t\t\t\t\t\tpage.vWrap = spine.TextureWrap.Repeat;\n\t\t\t\t\telse if (direction == \"xy\")\n\t\t\t\t\t\tpage.uWrap = page.vWrap = spine.TextureWrap.Repeat;\n\t\t\t\t\tpage.texture = textureLoader(line);\n\t\t\t\t\tpage.texture.setFilters(page.minFilter, page.magFilter);\n\t\t\t\t\tpage.texture.setWraps(page.uWrap, page.vWrap);\n\t\t\t\t\tpage.width = page.texture.getImage().width;\n\t\t\t\t\tpage.height = page.texture.getImage().height;\n\t\t\t\t\tthis.pages.push(page);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar region = new TextureAtlasRegion();\n\t\t\t\t\tregion.name = line;\n\t\t\t\t\tregion.page = page;\n\t\t\t\t\tregion.rotate = reader.readValue() == \"true\";\n\t\t\t\t\treader.readTuple(tuple);\n\t\t\t\t\tvar x = parseInt(tuple[0]);\n\t\t\t\t\tvar y = parseInt(tuple[1]);\n\t\t\t\t\treader.readTuple(tuple);\n\t\t\t\t\tvar width = parseInt(tuple[0]);\n\t\t\t\t\tvar height = parseInt(tuple[1]);\n\t\t\t\t\tregion.u = x / page.width;\n\t\t\t\t\tregion.v = y / page.height;\n\t\t\t\t\tif (region.rotate) {\n\t\t\t\t\t\tregion.u2 = (x + height) / page.width;\n\t\t\t\t\t\tregion.v2 = (y + width) / page.height;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tregion.u2 = (x + width) / page.width;\n\t\t\t\t\t\tregion.v2 = (y + height) / page.height;\n\t\t\t\t\t}\n\t\t\t\t\tregion.x = x;\n\t\t\t\t\tregion.y = y;\n\t\t\t\t\tregion.width = Math.abs(width);\n\t\t\t\t\tregion.height = Math.abs(height);\n\t\t\t\t\tif (reader.readTuple(tuple) == 4) {\n\t\t\t\t\t\tif (reader.readTuple(tuple) == 4) {\n\t\t\t\t\t\t\treader.readTuple(tuple);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tregion.originalWidth = parseInt(tuple[0]);\n\t\t\t\t\tregion.originalHeight = parseInt(tuple[1]);\n\t\t\t\t\treader.readTuple(tuple);\n\t\t\t\t\tregion.offsetX = parseInt(tuple[0]);\n\t\t\t\t\tregion.offsetY = parseInt(tuple[1]);\n\t\t\t\t\tregion.index = parseInt(reader.readValue());\n\t\t\t\t\tregion.texture = page.texture;\n\t\t\t\t\tthis.regions.push(region);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tTextureAtlas.prototype.findRegion = function (name) {\n\t\t\tfor (var i = 0; i < this.regions.length; i++) {\n\t\t\t\tif (this.regions[i].name == name) {\n\t\t\t\t\treturn this.regions[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\tTextureAtlas.prototype.dispose = function () {\n\t\t\tfor (var i = 0; i < this.pages.length; i++) {\n\t\t\t\tthis.pages[i].texture.dispose();\n\t\t\t}\n\t\t};\n\t\treturn TextureAtlas;\n\t}());\n\tspine.TextureAtlas = TextureAtlas;\n\tvar TextureAtlasReader = (function () {\n\t\tfunction TextureAtlasReader(text) {\n\t\t\tthis.index = 0;\n\t\t\tthis.lines = text.split(/\\r\\n|\\r|\\n/);\n\t\t}\n\t\tTextureAtlasReader.prototype.readLine = function () {\n\t\t\tif (this.index >= this.lines.length)\n\t\t\t\treturn null;\n\t\t\treturn this.lines[this.index++];\n\t\t};\n\t\tTextureAtlasReader.prototype.readValue = function () {\n\t\t\tvar line = this.readLine();\n\t\t\tvar colon = line.indexOf(\":\");\n\t\t\tif (colon == -1)\n\t\t\t\tthrow new Error(\"Invalid line: \" + line);\n\t\t\treturn line.substring(colon + 1).trim();\n\t\t};\n\t\tTextureAtlasReader.prototype.readTuple = function (tuple) {\n\t\t\tvar line = this.readLine();\n\t\t\tvar colon = line.indexOf(\":\");\n\t\t\tif (colon == -1)\n\t\t\t\tthrow new Error(\"Invalid line: \" + line);\n\t\t\tvar i = 0, lastMatch = colon + 1;\n\t\t\tfor (; i < 3; i++) {\n\t\t\t\tvar comma = line.indexOf(\",\", lastMatch);\n\t\t\t\tif (comma == -1)\n\t\t\t\t\tbreak;\n\t\t\t\ttuple[i] = line.substr(lastMatch, comma - lastMatch).trim();\n\t\t\t\tlastMatch = comma + 1;\n\t\t\t}\n\t\t\ttuple[i] = line.substring(lastMatch).trim();\n\t\t\treturn i + 1;\n\t\t};\n\t\treturn TextureAtlasReader;\n\t}());\n\tvar TextureAtlasPage = (function () {\n\t\tfunction TextureAtlasPage() {\n\t\t}\n\t\treturn TextureAtlasPage;\n\t}());\n\tspine.TextureAtlasPage = TextureAtlasPage;\n\tvar TextureAtlasRegion = (function (_super) {\n\t\t__extends(TextureAtlasRegion, _super);\n\t\tfunction TextureAtlasRegion() {\n\t\t\treturn _super !== null && _super.apply(this, arguments) || this;\n\t\t}\n\t\treturn TextureAtlasRegion;\n\t}(spine.TextureRegion));\n\tspine.TextureAtlasRegion = TextureAtlasRegion;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar TransformConstraint = (function () {\n\t\tfunction TransformConstraint(data, skeleton) {\n\t\t\tthis.rotateMix = 0;\n\t\t\tthis.translateMix = 0;\n\t\t\tthis.scaleMix = 0;\n\t\t\tthis.shearMix = 0;\n\t\t\tthis.temp = new spine.Vector2();\n\t\t\tif (data == null)\n\t\t\t\tthrow new Error(\"data cannot be null.\");\n\t\t\tif (skeleton == null)\n\t\t\t\tthrow new Error(\"skeleton cannot be null.\");\n\t\t\tthis.data = data;\n\t\t\tthis.rotateMix = data.rotateMix;\n\t\t\tthis.translateMix = data.translateMix;\n\t\t\tthis.scaleMix = data.scaleMix;\n\t\t\tthis.shearMix = data.shearMix;\n\t\t\tthis.bones = new Array();\n\t\t\tfor (var i = 0; i < data.bones.length; i++)\n\t\t\t\tthis.bones.push(skeleton.findBone(data.bones[i].name));\n\t\t\tthis.target = skeleton.findBone(data.target.name);\n\t\t}\n\t\tTransformConstraint.prototype.apply = function () {\n\t\t\tthis.update();\n\t\t};\n\t\tTransformConstraint.prototype.update = function () {\n\t\t\tif (this.data.local) {\n\t\t\t\tif (this.data.relative)\n\t\t\t\t\tthis.applyRelativeLocal();\n\t\t\t\telse\n\t\t\t\t\tthis.applyAbsoluteLocal();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this.data.relative)\n\t\t\t\t\tthis.applyRelativeWorld();\n\t\t\t\telse\n\t\t\t\t\tthis.applyAbsoluteWorld();\n\t\t\t}\n\t\t};\n\t\tTransformConstraint.prototype.applyAbsoluteWorld = function () {\n\t\t\tvar rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n\t\t\tvar target = this.target;\n\t\t\tvar ta = target.a, tb = target.b, tc = target.c, td = target.d;\n\t\t\tvar degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n\t\t\tvar offsetRotation = this.data.offsetRotation * degRadReflect;\n\t\t\tvar offsetShearY = this.data.offsetShearY * degRadReflect;\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tvar modified = false;\n\t\t\t\tif (rotateMix != 0) {\n\t\t\t\t\tvar a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\t\t\tvar r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n\t\t\t\t\tif (r > spine.MathUtils.PI)\n\t\t\t\t\t\tr -= spine.MathUtils.PI2;\n\t\t\t\t\telse if (r < -spine.MathUtils.PI)\n\t\t\t\t\t\tr += spine.MathUtils.PI2;\n\t\t\t\t\tr *= rotateMix;\n\t\t\t\t\tvar cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\t\tbone.a = cos * a - sin * c;\n\t\t\t\t\tbone.b = cos * b - sin * d;\n\t\t\t\t\tbone.c = sin * a + cos * c;\n\t\t\t\t\tbone.d = sin * b + cos * d;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (translateMix != 0) {\n\t\t\t\t\tvar temp = this.temp;\n\t\t\t\t\ttarget.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n\t\t\t\t\tbone.worldX += (temp.x - bone.worldX) * translateMix;\n\t\t\t\t\tbone.worldY += (temp.y - bone.worldY) * translateMix;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (scaleMix > 0) {\n\t\t\t\t\tvar s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);\n\t\t\t\t\tvar ts = Math.sqrt(ta * ta + tc * tc);\n\t\t\t\t\tif (s > 0.00001)\n\t\t\t\t\t\ts = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s;\n\t\t\t\t\tbone.a *= s;\n\t\t\t\t\tbone.c *= s;\n\t\t\t\t\ts = Math.sqrt(bone.b * bone.b + bone.d * bone.d);\n\t\t\t\t\tts = Math.sqrt(tb * tb + td * td);\n\t\t\t\t\tif (s > 0.00001)\n\t\t\t\t\t\ts = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s;\n\t\t\t\t\tbone.b *= s;\n\t\t\t\t\tbone.d *= s;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (shearMix > 0) {\n\t\t\t\t\tvar b = bone.b, d = bone.d;\n\t\t\t\t\tvar by = Math.atan2(d, b);\n\t\t\t\t\tvar r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));\n\t\t\t\t\tif (r > spine.MathUtils.PI)\n\t\t\t\t\t\tr -= spine.MathUtils.PI2;\n\t\t\t\t\telse if (r < -spine.MathUtils.PI)\n\t\t\t\t\t\tr += spine.MathUtils.PI2;\n\t\t\t\t\tr = by + (r + offsetShearY) * shearMix;\n\t\t\t\t\tvar s = Math.sqrt(b * b + d * d);\n\t\t\t\t\tbone.b = Math.cos(r) * s;\n\t\t\t\t\tbone.d = Math.sin(r) * s;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (modified)\n\t\t\t\t\tbone.appliedValid = false;\n\t\t\t}\n\t\t};\n\t\tTransformConstraint.prototype.applyRelativeWorld = function () {\n\t\t\tvar rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n\t\t\tvar target = this.target;\n\t\t\tvar ta = target.a, tb = target.b, tc = target.c, td = target.d;\n\t\t\tvar degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n\t\t\tvar offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect;\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tvar modified = false;\n\t\t\t\tif (rotateMix != 0) {\n\t\t\t\t\tvar a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\t\t\tvar r = Math.atan2(tc, ta) + offsetRotation;\n\t\t\t\t\tif (r > spine.MathUtils.PI)\n\t\t\t\t\t\tr -= spine.MathUtils.PI2;\n\t\t\t\t\telse if (r < -spine.MathUtils.PI)\n\t\t\t\t\t\tr += spine.MathUtils.PI2;\n\t\t\t\t\tr *= rotateMix;\n\t\t\t\t\tvar cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\t\tbone.a = cos * a - sin * c;\n\t\t\t\t\tbone.b = cos * b - sin * d;\n\t\t\t\t\tbone.c = sin * a + cos * c;\n\t\t\t\t\tbone.d = sin * b + cos * d;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (translateMix != 0) {\n\t\t\t\t\tvar temp = this.temp;\n\t\t\t\t\ttarget.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n\t\t\t\t\tbone.worldX += temp.x * translateMix;\n\t\t\t\t\tbone.worldY += temp.y * translateMix;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (scaleMix > 0) {\n\t\t\t\t\tvar s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1;\n\t\t\t\t\tbone.a *= s;\n\t\t\t\t\tbone.c *= s;\n\t\t\t\t\ts = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1;\n\t\t\t\t\tbone.b *= s;\n\t\t\t\t\tbone.d *= s;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (shearMix > 0) {\n\t\t\t\t\tvar r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n\t\t\t\t\tif (r > spine.MathUtils.PI)\n\t\t\t\t\t\tr -= spine.MathUtils.PI2;\n\t\t\t\t\telse if (r < -spine.MathUtils.PI)\n\t\t\t\t\t\tr += spine.MathUtils.PI2;\n\t\t\t\t\tvar b = bone.b, d = bone.d;\n\t\t\t\t\tr = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix;\n\t\t\t\t\tvar s = Math.sqrt(b * b + d * d);\n\t\t\t\t\tbone.b = Math.cos(r) * s;\n\t\t\t\t\tbone.d = Math.sin(r) * s;\n\t\t\t\t\tmodified = true;\n\t\t\t\t}\n\t\t\t\tif (modified)\n\t\t\t\t\tbone.appliedValid = false;\n\t\t\t}\n\t\t};\n\t\tTransformConstraint.prototype.applyAbsoluteLocal = function () {\n\t\t\tvar rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n\t\t\tvar target = this.target;\n\t\t\tif (!target.appliedValid)\n\t\t\t\ttarget.updateAppliedTransform();\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tif (!bone.appliedValid)\n\t\t\t\t\tbone.updateAppliedTransform();\n\t\t\t\tvar rotation = bone.arotation;\n\t\t\t\tif (rotateMix != 0) {\n\t\t\t\t\tvar r = target.arotation - rotation + this.data.offsetRotation;\n\t\t\t\t\tr -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n\t\t\t\t\trotation += r * rotateMix;\n\t\t\t\t}\n\t\t\t\tvar x = bone.ax, y = bone.ay;\n\t\t\t\tif (translateMix != 0) {\n\t\t\t\t\tx += (target.ax - x + this.data.offsetX) * translateMix;\n\t\t\t\t\ty += (target.ay - y + this.data.offsetY) * translateMix;\n\t\t\t\t}\n\t\t\t\tvar scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n\t\t\t\tif (scaleMix > 0) {\n\t\t\t\t\tif (scaleX > 0.00001)\n\t\t\t\t\t\tscaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX;\n\t\t\t\t\tif (scaleY > 0.00001)\n\t\t\t\t\t\tscaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY;\n\t\t\t\t}\n\t\t\t\tvar shearY = bone.ashearY;\n\t\t\t\tif (shearMix > 0) {\n\t\t\t\t\tvar r = target.ashearY - shearY + this.data.offsetShearY;\n\t\t\t\t\tr -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n\t\t\t\t\tbone.shearY += r * shearMix;\n\t\t\t\t}\n\t\t\t\tbone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n\t\t\t}\n\t\t};\n\t\tTransformConstraint.prototype.applyRelativeLocal = function () {\n\t\t\tvar rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n\t\t\tvar target = this.target;\n\t\t\tif (!target.appliedValid)\n\t\t\t\ttarget.updateAppliedTransform();\n\t\t\tvar bones = this.bones;\n\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tif (!bone.appliedValid)\n\t\t\t\t\tbone.updateAppliedTransform();\n\t\t\t\tvar rotation = bone.arotation;\n\t\t\t\tif (rotateMix != 0)\n\t\t\t\t\trotation += (target.arotation + this.data.offsetRotation) * rotateMix;\n\t\t\t\tvar x = bone.ax, y = bone.ay;\n\t\t\t\tif (translateMix != 0) {\n\t\t\t\t\tx += (target.ax + this.data.offsetX) * translateMix;\n\t\t\t\t\ty += (target.ay + this.data.offsetY) * translateMix;\n\t\t\t\t}\n\t\t\t\tvar scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n\t\t\t\tif (scaleMix > 0) {\n\t\t\t\t\tif (scaleX > 0.00001)\n\t\t\t\t\t\tscaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1;\n\t\t\t\t\tif (scaleY > 0.00001)\n\t\t\t\t\t\tscaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1;\n\t\t\t\t}\n\t\t\t\tvar shearY = bone.ashearY;\n\t\t\t\tif (shearMix > 0)\n\t\t\t\t\tshearY += (target.ashearY + this.data.offsetShearY) * shearMix;\n\t\t\t\tbone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n\t\t\t}\n\t\t};\n\t\tTransformConstraint.prototype.getOrder = function () {\n\t\t\treturn this.data.order;\n\t\t};\n\t\treturn TransformConstraint;\n\t}());\n\tspine.TransformConstraint = TransformConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar TransformConstraintData = (function () {\n\t\tfunction TransformConstraintData(name) {\n\t\t\tthis.order = 0;\n\t\t\tthis.bones = new Array();\n\t\t\tthis.rotateMix = 0;\n\t\t\tthis.translateMix = 0;\n\t\t\tthis.scaleMix = 0;\n\t\t\tthis.shearMix = 0;\n\t\t\tthis.offsetRotation = 0;\n\t\t\tthis.offsetX = 0;\n\t\t\tthis.offsetY = 0;\n\t\t\tthis.offsetScaleX = 0;\n\t\t\tthis.offsetScaleY = 0;\n\t\t\tthis.offsetShearY = 0;\n\t\t\tthis.relative = false;\n\t\t\tthis.local = false;\n\t\t\tif (name == null)\n\t\t\t\tthrow new Error(\"name cannot be null.\");\n\t\t\tthis.name = name;\n\t\t}\n\t\treturn TransformConstraintData;\n\t}());\n\tspine.TransformConstraintData = TransformConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar Triangulator = (function () {\n\t\tfunction Triangulator() {\n\t\t\tthis.convexPolygons = new Array();\n\t\t\tthis.convexPolygonsIndices = new Array();\n\t\t\tthis.indicesArray = new Array();\n\t\t\tthis.isConcaveArray = new Array();\n\t\t\tthis.triangles = new Array();\n\t\t\tthis.polygonPool = new spine.Pool(function () {\n\t\t\t\treturn new Array();\n\t\t\t});\n\t\t\tthis.polygonIndicesPool = new spine.Pool(function () {\n\t\t\t\treturn new Array();\n\t\t\t});\n\t\t}\n\t\tTriangulator.prototype.triangulate = function (verticesArray) {\n\t\t\tvar vertices = verticesArray;\n\t\t\tvar vertexCount = verticesArray.length >> 1;\n\t\t\tvar indices = this.indicesArray;\n\t\t\tindices.length = 0;\n\t\t\tfor (var i = 0; i < vertexCount; i++)\n\t\t\t\tindices[i] = i;\n\t\t\tvar isConcave = this.isConcaveArray;\n\t\t\tisConcave.length = 0;\n\t\t\tfor (var i = 0, n = vertexCount; i < n; ++i)\n\t\t\t\tisConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n\t\t\tvar triangles = this.triangles;\n\t\t\ttriangles.length = 0;\n\t\t\twhile (vertexCount > 3) {\n\t\t\t\tvar previous = vertexCount - 1, i = 0, next = 1;\n\t\t\t\twhile (true) {\n\t\t\t\t\touter: if (!isConcave[i]) {\n\t\t\t\t\t\tvar p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n\t\t\t\t\t\tvar p1x = vertices[p1], p1y = vertices[p1 + 1];\n\t\t\t\t\t\tvar p2x = vertices[p2], p2y = vertices[p2 + 1];\n\t\t\t\t\t\tvar p3x = vertices[p3], p3y = vertices[p3 + 1];\n\t\t\t\t\t\tfor (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {\n\t\t\t\t\t\t\tif (!isConcave[ii])\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\tvar v = indices[ii] << 1;\n\t\t\t\t\t\t\tvar vx = vertices[v], vy = vertices[v + 1];\n\t\t\t\t\t\t\tif (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {\n\t\t\t\t\t\t\t\tif (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {\n\t\t\t\t\t\t\t\t\tif (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy))\n\t\t\t\t\t\t\t\t\t\tbreak outer;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (next == 0) {\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif (!isConcave[i])\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t} while (i > 0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tprevious = i;\n\t\t\t\t\ti = next;\n\t\t\t\t\tnext = (next + 1) % vertexCount;\n\t\t\t\t}\n\t\t\t\ttriangles.push(indices[(vertexCount + i - 1) % vertexCount]);\n\t\t\t\ttriangles.push(indices[i]);\n\t\t\t\ttriangles.push(indices[(i + 1) % vertexCount]);\n\t\t\t\tindices.splice(i, 1);\n\t\t\t\tisConcave.splice(i, 1);\n\t\t\t\tvertexCount--;\n\t\t\t\tvar previousIndex = (vertexCount + i - 1) % vertexCount;\n\t\t\t\tvar nextIndex = i == vertexCount ? 0 : i;\n\t\t\t\tisConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);\n\t\t\t\tisConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);\n\t\t\t}\n\t\t\tif (vertexCount == 3) {\n\t\t\t\ttriangles.push(indices[2]);\n\t\t\t\ttriangles.push(indices[0]);\n\t\t\t\ttriangles.push(indices[1]);\n\t\t\t}\n\t\t\treturn triangles;\n\t\t};\n\t\tTriangulator.prototype.decompose = function (verticesArray, triangles) {\n\t\t\tvar vertices = verticesArray;\n\t\t\tvar convexPolygons = this.convexPolygons;\n\t\t\tthis.polygonPool.freeAll(convexPolygons);\n\t\t\tconvexPolygons.length = 0;\n\t\t\tvar convexPolygonsIndices = this.convexPolygonsIndices;\n\t\t\tthis.polygonIndicesPool.freeAll(convexPolygonsIndices);\n\t\t\tconvexPolygonsIndices.length = 0;\n\t\t\tvar polygonIndices = this.polygonIndicesPool.obtain();\n\t\t\tpolygonIndices.length = 0;\n\t\t\tvar polygon = this.polygonPool.obtain();\n\t\t\tpolygon.length = 0;\n\t\t\tvar fanBaseIndex = -1, lastWinding = 0;\n\t\t\tfor (var i = 0, n = triangles.length; i < n; i += 3) {\n\t\t\t\tvar t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n\t\t\t\tvar x1 = vertices[t1], y1 = vertices[t1 + 1];\n\t\t\t\tvar x2 = vertices[t2], y2 = vertices[t2 + 1];\n\t\t\t\tvar x3 = vertices[t3], y3 = vertices[t3 + 1];\n\t\t\t\tvar merged = false;\n\t\t\t\tif (fanBaseIndex == t1) {\n\t\t\t\t\tvar o = polygon.length - 4;\n\t\t\t\t\tvar winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);\n\t\t\t\t\tvar winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);\n\t\t\t\t\tif (winding1 == lastWinding && winding2 == lastWinding) {\n\t\t\t\t\t\tpolygon.push(x3);\n\t\t\t\t\t\tpolygon.push(y3);\n\t\t\t\t\t\tpolygonIndices.push(t3);\n\t\t\t\t\t\tmerged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!merged) {\n\t\t\t\t\tif (polygon.length > 0) {\n\t\t\t\t\t\tconvexPolygons.push(polygon);\n\t\t\t\t\t\tconvexPolygonsIndices.push(polygonIndices);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.polygonPool.free(polygon);\n\t\t\t\t\t\tthis.polygonIndicesPool.free(polygonIndices);\n\t\t\t\t\t}\n\t\t\t\t\tpolygon = this.polygonPool.obtain();\n\t\t\t\t\tpolygon.length = 0;\n\t\t\t\t\tpolygon.push(x1);\n\t\t\t\t\tpolygon.push(y1);\n\t\t\t\t\tpolygon.push(x2);\n\t\t\t\t\tpolygon.push(y2);\n\t\t\t\t\tpolygon.push(x3);\n\t\t\t\t\tpolygon.push(y3);\n\t\t\t\t\tpolygonIndices = this.polygonIndicesPool.obtain();\n\t\t\t\t\tpolygonIndices.length = 0;\n\t\t\t\t\tpolygonIndices.push(t1);\n\t\t\t\t\tpolygonIndices.push(t2);\n\t\t\t\t\tpolygonIndices.push(t3);\n\t\t\t\t\tlastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n\t\t\t\t\tfanBaseIndex = t1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (polygon.length > 0) {\n\t\t\t\tconvexPolygons.push(polygon);\n\t\t\t\tconvexPolygonsIndices.push(polygonIndices);\n\t\t\t}\n\t\t\tfor (var i = 0, n = convexPolygons.length; i < n; i++) {\n\t\t\t\tpolygonIndices = convexPolygonsIndices[i];\n\t\t\t\tif (polygonIndices.length == 0)\n\t\t\t\t\tcontinue;\n\t\t\t\tvar firstIndex = polygonIndices[0];\n\t\t\t\tvar lastIndex = polygonIndices[polygonIndices.length - 1];\n\t\t\t\tpolygon = convexPolygons[i];\n\t\t\t\tvar o = polygon.length - 4;\n\t\t\t\tvar prevPrevX = polygon[o], prevPrevY = polygon[o + 1];\n\t\t\t\tvar prevX = polygon[o + 2], prevY = polygon[o + 3];\n\t\t\t\tvar firstX = polygon[0], firstY = polygon[1];\n\t\t\t\tvar secondX = polygon[2], secondY = polygon[3];\n\t\t\t\tvar winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);\n\t\t\t\tfor (var ii = 0; ii < n; ii++) {\n\t\t\t\t\tif (ii == i)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar otherIndices = convexPolygonsIndices[ii];\n\t\t\t\t\tif (otherIndices.length != 3)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar otherFirstIndex = otherIndices[0];\n\t\t\t\t\tvar otherSecondIndex = otherIndices[1];\n\t\t\t\t\tvar otherLastIndex = otherIndices[2];\n\t\t\t\t\tvar otherPoly = convexPolygons[ii];\n\t\t\t\t\tvar x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];\n\t\t\t\t\tif (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);\n\t\t\t\t\tvar winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);\n\t\t\t\t\tif (winding1 == winding && winding2 == winding) {\n\t\t\t\t\t\totherPoly.length = 0;\n\t\t\t\t\t\totherIndices.length = 0;\n\t\t\t\t\t\tpolygon.push(x3);\n\t\t\t\t\t\tpolygon.push(y3);\n\t\t\t\t\t\tpolygonIndices.push(otherLastIndex);\n\t\t\t\t\t\tprevPrevX = prevX;\n\t\t\t\t\t\tprevPrevY = prevY;\n\t\t\t\t\t\tprevX = x3;\n\t\t\t\t\t\tprevY = y3;\n\t\t\t\t\t\tii = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i = convexPolygons.length - 1; i >= 0; i--) {\n\t\t\t\tpolygon = convexPolygons[i];\n\t\t\t\tif (polygon.length == 0) {\n\t\t\t\t\tconvexPolygons.splice(i, 1);\n\t\t\t\t\tthis.polygonPool.free(polygon);\n\t\t\t\t\tpolygonIndices = convexPolygonsIndices[i];\n\t\t\t\t\tconvexPolygonsIndices.splice(i, 1);\n\t\t\t\t\tthis.polygonIndicesPool.free(polygonIndices);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convexPolygons;\n\t\t};\n\t\tTriangulator.isConcave = function (index, vertexCount, vertices, indices) {\n\t\t\tvar previous = indices[(vertexCount + index - 1) % vertexCount] << 1;\n\t\t\tvar current = indices[index] << 1;\n\t\t\tvar next = indices[(index + 1) % vertexCount] << 1;\n\t\t\treturn !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);\n\t\t};\n\t\tTriangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n\t\t\treturn p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;\n\t\t};\n\t\tTriangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n\t\t\tvar px = p2x - p1x, py = p2y - p1y;\n\t\t\treturn p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;\n\t\t};\n\t\treturn Triangulator;\n\t}());\n\tspine.Triangulator = Triangulator;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar IntSet = (function () {\n\t\tfunction IntSet() {\n\t\t\tthis.array = new Array();\n\t\t}\n\t\tIntSet.prototype.add = function (value) {\n\t\t\tvar contains = this.contains(value);\n\t\t\tthis.array[value | 0] = value | 0;\n\t\t\treturn !contains;\n\t\t};\n\t\tIntSet.prototype.contains = function (value) {\n\t\t\treturn this.array[value | 0] != undefined;\n\t\t};\n\t\tIntSet.prototype.remove = function (value) {\n\t\t\tthis.array[value | 0] = undefined;\n\t\t};\n\t\tIntSet.prototype.clear = function () {\n\t\t\tthis.array.length = 0;\n\t\t};\n\t\treturn IntSet;\n\t}());\n\tspine.IntSet = IntSet;\n\tvar Color = (function () {\n\t\tfunction Color(r, g, b, a) {\n\t\t\tif (r === void 0) { r = 0; }\n\t\t\tif (g === void 0) { g = 0; }\n\t\t\tif (b === void 0) { b = 0; }\n\t\t\tif (a === void 0) { a = 0; }\n\t\t\tthis.r = r;\n\t\t\tthis.g = g;\n\t\t\tthis.b = b;\n\t\t\tthis.a = a;\n\t\t}\n\t\tColor.prototype.set = function (r, g, b, a) {\n\t\t\tthis.r = r;\n\t\t\tthis.g = g;\n\t\t\tthis.b = b;\n\t\t\tthis.a = a;\n\t\t\tthis.clamp();\n\t\t\treturn this;\n\t\t};\n\t\tColor.prototype.setFromColor = function (c) {\n\t\t\tthis.r = c.r;\n\t\t\tthis.g = c.g;\n\t\t\tthis.b = c.b;\n\t\t\tthis.a = c.a;\n\t\t\treturn this;\n\t\t};\n\t\tColor.prototype.setFromString = function (hex) {\n\t\t\thex = hex.charAt(0) == '#' ? hex.substr(1) : hex;\n\t\t\tthis.r = parseInt(hex.substr(0, 2), 16) / 255.0;\n\t\t\tthis.g = parseInt(hex.substr(2, 2), 16) / 255.0;\n\t\t\tthis.b = parseInt(hex.substr(4, 2), 16) / 255.0;\n\t\t\tthis.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0;\n\t\t\treturn this;\n\t\t};\n\t\tColor.prototype.add = function (r, g, b, a) {\n\t\t\tthis.r += r;\n\t\t\tthis.g += g;\n\t\t\tthis.b += b;\n\t\t\tthis.a += a;\n\t\t\tthis.clamp();\n\t\t\treturn this;\n\t\t};\n\t\tColor.prototype.clamp = function () {\n\t\t\tif (this.r < 0)\n\t\t\t\tthis.r = 0;\n\t\t\telse if (this.r > 1)\n\t\t\t\tthis.r = 1;\n\t\t\tif (this.g < 0)\n\t\t\t\tthis.g = 0;\n\t\t\telse if (this.g > 1)\n\t\t\t\tthis.g = 1;\n\t\t\tif (this.b < 0)\n\t\t\t\tthis.b = 0;\n\t\t\telse if (this.b > 1)\n\t\t\t\tthis.b = 1;\n\t\t\tif (this.a < 0)\n\t\t\t\tthis.a = 0;\n\t\t\telse if (this.a > 1)\n\t\t\t\tthis.a = 1;\n\t\t\treturn this;\n\t\t};\n\t\tColor.WHITE = new Color(1, 1, 1, 1);\n\t\tColor.RED = new Color(1, 0, 0, 1);\n\t\tColor.GREEN = new Color(0, 1, 0, 1);\n\t\tColor.BLUE = new Color(0, 0, 1, 1);\n\t\tColor.MAGENTA = new Color(1, 0, 1, 1);\n\t\treturn Color;\n\t}());\n\tspine.Color = Color;\n\tvar MathUtils = (function () {\n\t\tfunction MathUtils() {\n\t\t}\n\t\tMathUtils.clamp = function (value, min, max) {\n\t\t\tif (value < min)\n\t\t\t\treturn min;\n\t\t\tif (value > max)\n\t\t\t\treturn max;\n\t\t\treturn value;\n\t\t};\n\t\tMathUtils.cosDeg = function (degrees) {\n\t\t\treturn Math.cos(degrees * MathUtils.degRad);\n\t\t};\n\t\tMathUtils.sinDeg = function (degrees) {\n\t\t\treturn Math.sin(degrees * MathUtils.degRad);\n\t\t};\n\t\tMathUtils.signum = function (value) {\n\t\t\treturn value > 0 ? 1 : value < 0 ? -1 : 0;\n\t\t};\n\t\tMathUtils.toInt = function (x) {\n\t\t\treturn x > 0 ? Math.floor(x) : Math.ceil(x);\n\t\t};\n\t\tMathUtils.cbrt = function (x) {\n\t\t\tvar y = Math.pow(Math.abs(x), 1 / 3);\n\t\t\treturn x < 0 ? -y : y;\n\t\t};\n\t\tMathUtils.randomTriangular = function (min, max) {\n\t\t\treturn MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n\t\t};\n\t\tMathUtils.randomTriangularWith = function (min, max, mode) {\n\t\t\tvar u = Math.random();\n\t\t\tvar d = max - min;\n\t\t\tif (u <= (mode - min) / d)\n\t\t\t\treturn min + Math.sqrt(u * d * (mode - min));\n\t\t\treturn max - Math.sqrt((1 - u) * d * (max - mode));\n\t\t};\n\t\tMathUtils.PI = 3.1415927;\n\t\tMathUtils.PI2 = MathUtils.PI * 2;\n\t\tMathUtils.radiansToDegrees = 180 / MathUtils.PI;\n\t\tMathUtils.radDeg = MathUtils.radiansToDegrees;\n\t\tMathUtils.degreesToRadians = MathUtils.PI / 180;\n\t\tMathUtils.degRad = MathUtils.degreesToRadians;\n\t\treturn MathUtils;\n\t}());\n\tspine.MathUtils = MathUtils;\n\tvar Interpolation = (function () {\n\t\tfunction Interpolation() {\n\t\t}\n\t\tInterpolation.prototype.apply = function (start, end, a) {\n\t\t\treturn start + (end - start) * this.applyInternal(a);\n\t\t};\n\t\treturn Interpolation;\n\t}());\n\tspine.Interpolation = Interpolation;\n\tvar Pow = (function (_super) {\n\t\t__extends(Pow, _super);\n\t\tfunction Pow(power) {\n\t\t\tvar _this = _super.call(this) || this;\n\t\t\t_this.power = 2;\n\t\t\t_this.power = power;\n\t\t\treturn _this;\n\t\t}\n\t\tPow.prototype.applyInternal = function (a) {\n\t\t\tif (a <= 0.5)\n\t\t\t\treturn Math.pow(a * 2, this.power) / 2;\n\t\t\treturn Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n\t\t};\n\t\treturn Pow;\n\t}(Interpolation));\n\tspine.Pow = Pow;\n\tvar PowOut = (function (_super) {\n\t\t__extends(PowOut, _super);\n\t\tfunction PowOut(power) {\n\t\t\treturn _super.call(this, power) || this;\n\t\t}\n\t\tPowOut.prototype.applyInternal = function (a) {\n\t\t\treturn Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n\t\t};\n\t\treturn PowOut;\n\t}(Pow));\n\tspine.PowOut = PowOut;\n\tvar Utils = (function () {\n\t\tfunction Utils() {\n\t\t}\n\t\tUtils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) {\n\t\t\tfor (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n\t\t\t\tdest[j] = source[i];\n\t\t\t}\n\t\t};\n\t\tUtils.setArraySize = function (array, size, value) {\n\t\t\tif (value === void 0) { value = 0; }\n\t\t\tvar oldSize = array.length;\n\t\t\tif (oldSize == size)\n\t\t\t\treturn array;\n\t\t\tarray.length = size;\n\t\t\tif (oldSize < size) {\n\t\t\t\tfor (var i = oldSize; i < size; i++)\n\t\t\t\t\tarray[i] = value;\n\t\t\t}\n\t\t\treturn array;\n\t\t};\n\t\tUtils.ensureArrayCapacity = function (array, size, value) {\n\t\t\tif (value === void 0) { value = 0; }\n\t\t\tif (array.length >= size)\n\t\t\t\treturn array;\n\t\t\treturn Utils.setArraySize(array, size, value);\n\t\t};\n\t\tUtils.newArray = function (size, defaultValue) {\n\t\t\tvar array = new Array(size);\n\t\t\tfor (var i = 0; i < size; i++)\n\t\t\t\tarray[i] = defaultValue;\n\t\t\treturn array;\n\t\t};\n\t\tUtils.newFloatArray = function (size) {\n\t\t\tif (Utils.SUPPORTS_TYPED_ARRAYS) {\n\t\t\t\treturn new Float32Array(size);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar array = new Array(size);\n\t\t\t\tfor (var i = 0; i < array.length; i++)\n\t\t\t\t\tarray[i] = 0;\n\t\t\t\treturn array;\n\t\t\t}\n\t\t};\n\t\tUtils.newShortArray = function (size) {\n\t\t\tif (Utils.SUPPORTS_TYPED_ARRAYS) {\n\t\t\t\treturn new Int16Array(size);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar array = new Array(size);\n\t\t\t\tfor (var i = 0; i < array.length; i++)\n\t\t\t\t\tarray[i] = 0;\n\t\t\t\treturn array;\n\t\t\t}\n\t\t};\n\t\tUtils.toFloatArray = function (array) {\n\t\t\treturn Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n\t\t};\n\t\tUtils.toSinglePrecision = function (value) {\n\t\t\treturn Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n\t\t};\n\t\tUtils.webkit602BugfixHelper = function (alpha, pose) {\n\t\t};\n\t\tUtils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== \"undefined\";\n\t\treturn Utils;\n\t}());\n\tspine.Utils = Utils;\n\tvar DebugUtils = (function () {\n\t\tfunction DebugUtils() {\n\t\t}\n\t\tDebugUtils.logBones = function (skeleton) {\n\t\t\tfor (var i = 0; i < skeleton.bones.length; i++) {\n\t\t\t\tvar bone = skeleton.bones[i];\n\t\t\t\tconsole.log(bone.data.name + \", \" + bone.a + \", \" + bone.b + \", \" + bone.c + \", \" + bone.d + \", \" + bone.worldX + \", \" + bone.worldY);\n\t\t\t}\n\t\t};\n\t\treturn DebugUtils;\n\t}());\n\tspine.DebugUtils = DebugUtils;\n\tvar Pool = (function () {\n\t\tfunction Pool(instantiator) {\n\t\t\tthis.items = new Array();\n\t\t\tthis.instantiator = instantiator;\n\t\t}\n\t\tPool.prototype.obtain = function () {\n\t\t\treturn this.items.length > 0 ? this.items.pop() : this.instantiator();\n\t\t};\n\t\tPool.prototype.free = function (item) {\n\t\t\tif (item.reset)\n\t\t\t\titem.reset();\n\t\t\tthis.items.push(item);\n\t\t};\n\t\tPool.prototype.freeAll = function (items) {\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tif (items[i].reset)\n\t\t\t\t\titems[i].reset();\n\t\t\t\tthis.items[i] = items[i];\n\t\t\t}\n\t\t};\n\t\tPool.prototype.clear = function () {\n\t\t\tthis.items.length = 0;\n\t\t};\n\t\treturn Pool;\n\t}());\n\tspine.Pool = Pool;\n\tvar Vector2 = (function () {\n\t\tfunction Vector2(x, y) {\n\t\t\tif (x === void 0) { x = 0; }\n\t\t\tif (y === void 0) { y = 0; }\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t}\n\t\tVector2.prototype.set = function (x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\treturn this;\n\t\t};\n\t\tVector2.prototype.length = function () {\n\t\t\tvar x = this.x;\n\t\t\tvar y = this.y;\n\t\t\treturn Math.sqrt(x * x + y * y);\n\t\t};\n\t\tVector2.prototype.normalize = function () {\n\t\t\tvar len = this.length();\n\t\t\tif (len != 0) {\n\t\t\t\tthis.x /= len;\n\t\t\t\tthis.y /= len;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\t\treturn Vector2;\n\t}());\n\tspine.Vector2 = Vector2;\n\tvar TimeKeeper = (function () {\n\t\tfunction TimeKeeper() {\n\t\t\tthis.maxDelta = 0.064;\n\t\t\tthis.framesPerSecond = 0;\n\t\t\tthis.delta = 0;\n\t\t\tthis.totalTime = 0;\n\t\t\tthis.lastTime = Date.now() / 1000;\n\t\t\tthis.frameCount = 0;\n\t\t\tthis.frameTime = 0;\n\t\t}\n\t\tTimeKeeper.prototype.update = function () {\n\t\t\tvar now = Date.now() / 1000;\n\t\t\tthis.delta = now - this.lastTime;\n\t\t\tthis.frameTime += this.delta;\n\t\t\tthis.totalTime += this.delta;\n\t\t\tif (this.delta > this.maxDelta)\n\t\t\t\tthis.delta = this.maxDelta;\n\t\t\tthis.lastTime = now;\n\t\t\tthis.frameCount++;\n\t\t\tif (this.frameTime > 1) {\n\t\t\t\tthis.framesPerSecond = this.frameCount / this.frameTime;\n\t\t\t\tthis.frameTime = 0;\n\t\t\t\tthis.frameCount = 0;\n\t\t\t}\n\t\t};\n\t\treturn TimeKeeper;\n\t}());\n\tspine.TimeKeeper = TimeKeeper;\n\tvar WindowedMean = (function () {\n\t\tfunction WindowedMean(windowSize) {\n\t\t\tif (windowSize === void 0) { windowSize = 32; }\n\t\t\tthis.addedValues = 0;\n\t\t\tthis.lastValue = 0;\n\t\t\tthis.mean = 0;\n\t\t\tthis.dirty = true;\n\t\t\tthis.values = new Array(windowSize);\n\t\t}\n\t\tWindowedMean.prototype.hasEnoughData = function () {\n\t\t\treturn this.addedValues >= this.values.length;\n\t\t};\n\t\tWindowedMean.prototype.addValue = function (value) {\n\t\t\tif (this.addedValues < this.values.length)\n\t\t\t\tthis.addedValues++;\n\t\t\tthis.values[this.lastValue++] = value;\n\t\t\tif (this.lastValue > this.values.length - 1)\n\t\t\t\tthis.lastValue = 0;\n\t\t\tthis.dirty = true;\n\t\t};\n\t\tWindowedMean.prototype.getMean = function () {\n\t\t\tif (this.hasEnoughData()) {\n\t\t\t\tif (this.dirty) {\n\t\t\t\t\tvar mean = 0;\n\t\t\t\t\tfor (var i = 0; i < this.values.length; i++) {\n\t\t\t\t\t\tmean += this.values[i];\n\t\t\t\t\t}\n\t\t\t\t\tthis.mean = mean / this.values.length;\n\t\t\t\t\tthis.dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this.mean;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t};\n\t\treturn WindowedMean;\n\t}());\n\tspine.WindowedMean = WindowedMean;\n})(spine || (spine = {}));\n(function () {\n\tif (!Math.fround) {\n\t\tMath.fround = (function (array) {\n\t\t\treturn function (x) {\n\t\t\t\treturn array[0] = x, array[0];\n\t\t\t};\n\t\t})(new Float32Array(1));\n\t}\n})();\nvar spine;\n(function (spine) {\n\tvar Attachment = (function () {\n\t\tfunction Attachment(name) {\n\t\t\tif (name == null)\n\t\t\t\tthrow new Error(\"name cannot be null.\");\n\t\t\tthis.name = name;\n\t\t}\n\t\treturn Attachment;\n\t}());\n\tspine.Attachment = Attachment;\n\tvar VertexAttachment = (function (_super) {\n\t\t__extends(VertexAttachment, _super);\n\t\tfunction VertexAttachment(name) {\n\t\t\tvar _this = _super.call(this, name) || this;\n\t\t\t_this.id = (VertexAttachment.nextID++ & 65535) << 11;\n\t\t\t_this.worldVerticesLength = 0;\n\t\t\treturn _this;\n\t\t}\n\t\tVertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) {\n\t\t\tcount = offset + (count >> 1) * stride;\n\t\t\tvar skeleton = slot.bone.skeleton;\n\t\t\tvar deformArray = slot.attachmentVertices;\n\t\t\tvar vertices = this.vertices;\n\t\t\tvar bones = this.bones;\n\t\t\tif (bones == null) {\n\t\t\t\tif (deformArray.length > 0)\n\t\t\t\t\tvertices = deformArray;\n\t\t\t\tvar bone = slot.bone;\n\t\t\t\tvar x = bone.worldX;\n\t\t\t\tvar y = bone.worldY;\n\t\t\t\tvar a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\t\tfor (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) {\n\t\t\t\t\tvar vx = vertices[v_1], vy = vertices[v_1 + 1];\n\t\t\t\t\tworldVertices[w] = vx * a + vy * b + x;\n\t\t\t\t\tworldVertices[w + 1] = vx * c + vy * d + y;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar v = 0, skip = 0;\n\t\t\tfor (var i = 0; i < start; i += 2) {\n\t\t\t\tvar n = bones[v];\n\t\t\t\tv += n + 1;\n\t\t\t\tskip += n;\n\t\t\t}\n\t\t\tvar skeletonBones = skeleton.bones;\n\t\t\tif (deformArray.length == 0) {\n\t\t\t\tfor (var w = offset, b = skip * 3; w < count; w += stride) {\n\t\t\t\t\tvar wx = 0, wy = 0;\n\t\t\t\t\tvar n = bones[v++];\n\t\t\t\t\tn += v;\n\t\t\t\t\tfor (; v < n; v++, b += 3) {\n\t\t\t\t\t\tvar bone = skeletonBones[bones[v]];\n\t\t\t\t\t\tvar vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];\n\t\t\t\t\t\twx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n\t\t\t\t\t\twy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n\t\t\t\t\t}\n\t\t\t\t\tworldVertices[w] = wx;\n\t\t\t\t\tworldVertices[w + 1] = wy;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar deform = deformArray;\n\t\t\t\tfor (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n\t\t\t\t\tvar wx = 0, wy = 0;\n\t\t\t\t\tvar n = bones[v++];\n\t\t\t\t\tn += v;\n\t\t\t\t\tfor (; v < n; v++, b += 3, f += 2) {\n\t\t\t\t\t\tvar bone = skeletonBones[bones[v]];\n\t\t\t\t\t\tvar vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];\n\t\t\t\t\t\twx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n\t\t\t\t\t\twy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n\t\t\t\t\t}\n\t\t\t\t\tworldVertices[w] = wx;\n\t\t\t\t\tworldVertices[w + 1] = wy;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tVertexAttachment.prototype.applyDeform = function (sourceAttachment) {\n\t\t\treturn this == sourceAttachment;\n\t\t};\n\t\tVertexAttachment.nextID = 0;\n\t\treturn VertexAttachment;\n\t}(Attachment));\n\tspine.VertexAttachment = VertexAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar AttachmentType;\n\t(function (AttachmentType) {\n\t\tAttachmentType[AttachmentType[\"Region\"] = 0] = \"Region\";\n\t\tAttachmentType[AttachmentType[\"BoundingBox\"] = 1] = \"BoundingBox\";\n\t\tAttachmentType[AttachmentType[\"Mesh\"] = 2] = \"Mesh\";\n\t\tAttachmentType[AttachmentType[\"LinkedMesh\"] = 3] = \"LinkedMesh\";\n\t\tAttachmentType[AttachmentType[\"Path\"] = 4] = \"Path\";\n\t\tAttachmentType[AttachmentType[\"Point\"] = 5] = \"Point\";\n\t})(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar BoundingBoxAttachment = (function (_super) {\n\t\t__extends(BoundingBoxAttachment, _super);\n\t\tfunction BoundingBoxAttachment(name) {\n\t\t\tvar _this = _super.call(this, name) || this;\n\t\t\t_this.color = new spine.Color(1, 1, 1, 1);\n\t\t\treturn _this;\n\t\t}\n\t\treturn BoundingBoxAttachment;\n\t}(spine.VertexAttachment));\n\tspine.BoundingBoxAttachment = BoundingBoxAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar ClippingAttachment = (function (_super) {\n\t\t__extends(ClippingAttachment, _super);\n\t\tfunction ClippingAttachment(name) {\n\t\t\tvar _this = _super.call(this, name) || this;\n\t\t\t_this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1);\n\t\t\treturn _this;\n\t\t}\n\t\treturn ClippingAttachment;\n\t}(spine.VertexAttachment));\n\tspine.ClippingAttachment = ClippingAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar MeshAttachment = (function (_super) {\n\t\t__extends(MeshAttachment, _super);\n\t\tfunction MeshAttachment(name) {\n\t\t\tvar _this = _super.call(this, name) || this;\n\t\t\t_this.color = new spine.Color(1, 1, 1, 1);\n\t\t\t_this.inheritDeform = false;\n\t\t\t_this.tempColor = new spine.Color(0, 0, 0, 0);\n\t\t\treturn _this;\n\t\t}\n\t\tMeshAttachment.prototype.updateUVs = function () {\n\t\t\tvar u = 0, v = 0, width = 0, height = 0;\n\t\t\tif (this.region == null) {\n\t\t\t\tu = v = 0;\n\t\t\t\twidth = height = 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tu = this.region.u;\n\t\t\t\tv = this.region.v;\n\t\t\t\twidth = this.region.u2 - u;\n\t\t\t\theight = this.region.v2 - v;\n\t\t\t}\n\t\t\tvar regionUVs = this.regionUVs;\n\t\t\tif (this.uvs == null || this.uvs.length != regionUVs.length)\n\t\t\t\tthis.uvs = spine.Utils.newFloatArray(regionUVs.length);\n\t\t\tvar uvs = this.uvs;\n\t\t\tif (this.region.rotate) {\n\t\t\t\tfor (var i = 0, n = uvs.length; i < n; i += 2) {\n\t\t\t\t\tuvs[i] = u + regionUVs[i + 1] * width;\n\t\t\t\t\tuvs[i + 1] = v + height - regionUVs[i] * height;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (var i = 0, n = uvs.length; i < n; i += 2) {\n\t\t\t\t\tuvs[i] = u + regionUVs[i] * width;\n\t\t\t\t\tuvs[i + 1] = v + regionUVs[i + 1] * height;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tMeshAttachment.prototype.applyDeform = function (sourceAttachment) {\n\t\t\treturn this == sourceAttachment || (this.inheritDeform && this.parentMesh == sourceAttachment);\n\t\t};\n\t\tMeshAttachment.prototype.getParentMesh = function () {\n\t\t\treturn this.parentMesh;\n\t\t};\n\t\tMeshAttachment.prototype.setParentMesh = function (parentMesh) {\n\t\t\tthis.parentMesh = parentMesh;\n\t\t\tif (parentMesh != null) {\n\t\t\t\tthis.bones = parentMesh.bones;\n\t\t\t\tthis.vertices = parentMesh.vertices;\n\t\t\t\tthis.worldVerticesLength = parentMesh.worldVerticesLength;\n\t\t\t\tthis.regionUVs = parentMesh.regionUVs;\n\t\t\t\tthis.triangles = parentMesh.triangles;\n\t\t\t\tthis.hullLength = parentMesh.hullLength;\n\t\t\t\tthis.worldVerticesLength = parentMesh.worldVerticesLength;\n\t\t\t}\n\t\t};\n\t\treturn MeshAttachment;\n\t}(spine.VertexAttachment));\n\tspine.MeshAttachment = MeshAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar PathAttachment = (function (_super) {\n\t\t__extends(PathAttachment, _super);\n\t\tfunction PathAttachment(name) {\n\t\t\tvar _this = _super.call(this, name) || this;\n\t\t\t_this.closed = false;\n\t\t\t_this.constantSpeed = false;\n\t\t\t_this.color = new spine.Color(1, 1, 1, 1);\n\t\t\treturn _this;\n\t\t}\n\t\treturn PathAttachment;\n\t}(spine.VertexAttachment));\n\tspine.PathAttachment = PathAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar PointAttachment = (function (_super) {\n\t\t__extends(PointAttachment, _super);\n\t\tfunction PointAttachment(name) {\n\t\t\tvar _this = _super.call(this, name) || this;\n\t\t\t_this.color = new spine.Color(0.38, 0.94, 0, 1);\n\t\t\treturn _this;\n\t\t}\n\t\tPointAttachment.prototype.computeWorldPosition = function (bone, point) {\n\t\t\tpoint.x = this.x * bone.a + this.y * bone.b + bone.worldX;\n\t\t\tpoint.y = this.x * bone.c + this.y * bone.d + bone.worldY;\n\t\t\treturn point;\n\t\t};\n\t\tPointAttachment.prototype.computeWorldRotation = function (bone) {\n\t\t\tvar cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation);\n\t\t\tvar x = cos * bone.a + sin * bone.b;\n\t\t\tvar y = cos * bone.c + sin * bone.d;\n\t\t\treturn Math.atan2(y, x) * spine.MathUtils.radDeg;\n\t\t};\n\t\treturn PointAttachment;\n\t}(spine.VertexAttachment));\n\tspine.PointAttachment = PointAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar RegionAttachment = (function (_super) {\n\t\t__extends(RegionAttachment, _super);\n\t\tfunction RegionAttachment(name) {\n\t\t\tvar _this = _super.call(this, name) || this;\n\t\t\t_this.x = 0;\n\t\t\t_this.y = 0;\n\t\t\t_this.scaleX = 1;\n\t\t\t_this.scaleY = 1;\n\t\t\t_this.rotation = 0;\n\t\t\t_this.width = 0;\n\t\t\t_this.height = 0;\n\t\t\t_this.color = new spine.Color(1, 1, 1, 1);\n\t\t\t_this.offset = spine.Utils.newFloatArray(8);\n\t\t\t_this.uvs = spine.Utils.newFloatArray(8);\n\t\t\t_this.tempColor = new spine.Color(1, 1, 1, 1);\n\t\t\treturn _this;\n\t\t}\n\t\tRegionAttachment.prototype.updateOffset = function () {\n\t\t\tvar regionScaleX = this.width / this.region.originalWidth * this.scaleX;\n\t\t\tvar regionScaleY = this.height / this.region.originalHeight * this.scaleY;\n\t\t\tvar localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;\n\t\t\tvar localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;\n\t\t\tvar localX2 = localX + this.region.width * regionScaleX;\n\t\t\tvar localY2 = localY + this.region.height * regionScaleY;\n\t\t\tvar radians = this.rotation * Math.PI / 180;\n\t\t\tvar cos = Math.cos(radians);\n\t\t\tvar sin = Math.sin(radians);\n\t\t\tvar localXCos = localX * cos + this.x;\n\t\t\tvar localXSin = localX * sin;\n\t\t\tvar localYCos = localY * cos + this.y;\n\t\t\tvar localYSin = localY * sin;\n\t\t\tvar localX2Cos = localX2 * cos + this.x;\n\t\t\tvar localX2Sin = localX2 * sin;\n\t\t\tvar localY2Cos = localY2 * cos + this.y;\n\t\t\tvar localY2Sin = localY2 * sin;\n\t\t\tvar offset = this.offset;\n\t\t\toffset[RegionAttachment.OX1] = localXCos - localYSin;\n\t\t\toffset[RegionAttachment.OY1] = localYCos + localXSin;\n\t\t\toffset[RegionAttachment.OX2] = localXCos - localY2Sin;\n\t\t\toffset[RegionAttachment.OY2] = localY2Cos + localXSin;\n\t\t\toffset[RegionAttachment.OX3] = localX2Cos - localY2Sin;\n\t\t\toffset[RegionAttachment.OY3] = localY2Cos + localX2Sin;\n\t\t\toffset[RegionAttachment.OX4] = localX2Cos - localYSin;\n\t\t\toffset[RegionAttachment.OY4] = localYCos + localX2Sin;\n\t\t};\n\t\tRegionAttachment.prototype.setRegion = function (region) {\n\t\t\tthis.region = region;\n\t\t\tvar uvs = this.uvs;\n\t\t\tif (region.rotate) {\n\t\t\t\tuvs[2] = region.u;\n\t\t\t\tuvs[3] = region.v2;\n\t\t\t\tuvs[4] = region.u;\n\t\t\t\tuvs[5] = region.v;\n\t\t\t\tuvs[6] = region.u2;\n\t\t\t\tuvs[7] = region.v;\n\t\t\t\tuvs[0] = region.u2;\n\t\t\t\tuvs[1] = region.v2;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuvs[0] = region.u;\n\t\t\t\tuvs[1] = region.v2;\n\t\t\t\tuvs[2] = region.u;\n\t\t\t\tuvs[3] = region.v;\n\t\t\t\tuvs[4] = region.u2;\n\t\t\t\tuvs[5] = region.v;\n\t\t\t\tuvs[6] = region.u2;\n\t\t\t\tuvs[7] = region.v2;\n\t\t\t}\n\t\t};\n\t\tRegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) {\n\t\t\tvar vertexOffset = this.offset;\n\t\t\tvar x = bone.worldX, y = bone.worldY;\n\t\t\tvar a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\tvar offsetX = 0, offsetY = 0;\n\t\t\toffsetX = vertexOffset[RegionAttachment.OX1];\n\t\t\toffsetY = vertexOffset[RegionAttachment.OY1];\n\t\t\tworldVertices[offset] = offsetX * a + offsetY * b + x;\n\t\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\t\toffset += stride;\n\t\t\toffsetX = vertexOffset[RegionAttachment.OX2];\n\t\t\toffsetY = vertexOffset[RegionAttachment.OY2];\n\t\t\tworldVertices[offset] = offsetX * a + offsetY * b + x;\n\t\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\t\toffset += stride;\n\t\t\toffsetX = vertexOffset[RegionAttachment.OX3];\n\t\t\toffsetY = vertexOffset[RegionAttachment.OY3];\n\t\t\tworldVertices[offset] = offsetX * a + offsetY * b + x;\n\t\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\t\toffset += stride;\n\t\t\toffsetX = vertexOffset[RegionAttachment.OX4];\n\t\t\toffsetY = vertexOffset[RegionAttachment.OY4];\n\t\t\tworldVertices[offset] = offsetX * a + offsetY * b + x;\n\t\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\t};\n\t\tRegionAttachment.OX1 = 0;\n\t\tRegionAttachment.OY1 = 1;\n\t\tRegionAttachment.OX2 = 2;\n\t\tRegionAttachment.OY2 = 3;\n\t\tRegionAttachment.OX3 = 4;\n\t\tRegionAttachment.OY3 = 5;\n\t\tRegionAttachment.OX4 = 6;\n\t\tRegionAttachment.OY4 = 7;\n\t\tRegionAttachment.X1 = 0;\n\t\tRegionAttachment.Y1 = 1;\n\t\tRegionAttachment.C1R = 2;\n\t\tRegionAttachment.C1G = 3;\n\t\tRegionAttachment.C1B = 4;\n\t\tRegionAttachment.C1A = 5;\n\t\tRegionAttachment.U1 = 6;\n\t\tRegionAttachment.V1 = 7;\n\t\tRegionAttachment.X2 = 8;\n\t\tRegionAttachment.Y2 = 9;\n\t\tRegionAttachment.C2R = 10;\n\t\tRegionAttachment.C2G = 11;\n\t\tRegionAttachment.C2B = 12;\n\t\tRegionAttachment.C2A = 13;\n\t\tRegionAttachment.U2 = 14;\n\t\tRegionAttachment.V2 = 15;\n\t\tRegionAttachment.X3 = 16;\n\t\tRegionAttachment.Y3 = 17;\n\t\tRegionAttachment.C3R = 18;\n\t\tRegionAttachment.C3G = 19;\n\t\tRegionAttachment.C3B = 20;\n\t\tRegionAttachment.C3A = 21;\n\t\tRegionAttachment.U3 = 22;\n\t\tRegionAttachment.V3 = 23;\n\t\tRegionAttachment.X4 = 24;\n\t\tRegionAttachment.Y4 = 25;\n\t\tRegionAttachment.C4R = 26;\n\t\tRegionAttachment.C4G = 27;\n\t\tRegionAttachment.C4B = 28;\n\t\tRegionAttachment.C4A = 29;\n\t\tRegionAttachment.U4 = 30;\n\t\tRegionAttachment.V4 = 31;\n\t\treturn RegionAttachment;\n\t}(spine.Attachment));\n\tspine.RegionAttachment = RegionAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar JitterEffect = (function () {\n\t\tfunction JitterEffect(jitterX, jitterY) {\n\t\t\tthis.jitterX = 0;\n\t\t\tthis.jitterY = 0;\n\t\t\tthis.jitterX = jitterX;\n\t\t\tthis.jitterY = jitterY;\n\t\t}\n\t\tJitterEffect.prototype.begin = function (skeleton) {\n\t\t};\n\t\tJitterEffect.prototype.transform = function (position, uv, light, dark) {\n\t\t\tposition.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n\t\t\tposition.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n\t\t};\n\t\tJitterEffect.prototype.end = function () {\n\t\t};\n\t\treturn JitterEffect;\n\t}());\n\tspine.JitterEffect = JitterEffect;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar SwirlEffect = (function () {\n\t\tfunction SwirlEffect(radius) {\n\t\t\tthis.centerX = 0;\n\t\t\tthis.centerY = 0;\n\t\t\tthis.radius = 0;\n\t\t\tthis.angle = 0;\n\t\t\tthis.worldX = 0;\n\t\t\tthis.worldY = 0;\n\t\t\tthis.radius = radius;\n\t\t}\n\t\tSwirlEffect.prototype.begin = function (skeleton) {\n\t\t\tthis.worldX = skeleton.x + this.centerX;\n\t\t\tthis.worldY = skeleton.y + this.centerY;\n\t\t};\n\t\tSwirlEffect.prototype.transform = function (position, uv, light, dark) {\n\t\t\tvar radAngle = this.angle * spine.MathUtils.degreesToRadians;\n\t\t\tvar x = position.x - this.worldX;\n\t\t\tvar y = position.y - this.worldY;\n\t\t\tvar dist = Math.sqrt(x * x + y * y);\n\t\t\tif (dist < this.radius) {\n\t\t\t\tvar theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);\n\t\t\t\tvar cos = Math.cos(theta);\n\t\t\t\tvar sin = Math.sin(theta);\n\t\t\t\tposition.x = cos * x - sin * y + this.worldX;\n\t\t\t\tposition.y = sin * x + cos * y + this.worldY;\n\t\t\t}\n\t\t};\n\t\tSwirlEffect.prototype.end = function () {\n\t\t};\n\t\tSwirlEffect.interpolation = new spine.PowOut(2);\n\t\treturn SwirlEffect;\n\t}());\n\tspine.SwirlEffect = SwirlEffect;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar AssetManager = (function (_super) {\n\t\t\t__extends(AssetManager, _super);\n\t\t\tfunction AssetManager(context, pathPrefix) {\n\t\t\t\tif (pathPrefix === void 0) { pathPrefix = \"\"; }\n\t\t\t\treturn _super.call(this, function (image) {\n\t\t\t\t\treturn new spine.webgl.GLTexture(context, image);\n\t\t\t\t}, pathPrefix) || this;\n\t\t\t}\n\t\t\treturn AssetManager;\n\t\t}(spine.AssetManager));\n\t\twebgl.AssetManager = AssetManager;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar OrthoCamera = (function () {\n\t\t\tfunction OrthoCamera(viewportWidth, viewportHeight) {\n\t\t\t\tthis.position = new webgl.Vector3(0, 0, 0);\n\t\t\t\tthis.direction = new webgl.Vector3(0, 0, -1);\n\t\t\t\tthis.up = new webgl.Vector3(0, 1, 0);\n\t\t\t\tthis.near = 0;\n\t\t\t\tthis.far = 100;\n\t\t\t\tthis.zoom = 1;\n\t\t\t\tthis.viewportWidth = 0;\n\t\t\t\tthis.viewportHeight = 0;\n\t\t\t\tthis.projectionView = new webgl.Matrix4();\n\t\t\t\tthis.inverseProjectionView = new webgl.Matrix4();\n\t\t\t\tthis.projection = new webgl.Matrix4();\n\t\t\t\tthis.view = new webgl.Matrix4();\n\t\t\t\tthis.tmp = new webgl.Vector3();\n\t\t\t\tthis.viewportWidth = viewportWidth;\n\t\t\t\tthis.viewportHeight = viewportHeight;\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t\tOrthoCamera.prototype.update = function () {\n\t\t\t\tvar projection = this.projection;\n\t\t\t\tvar view = this.view;\n\t\t\t\tvar projectionView = this.projectionView;\n\t\t\t\tvar inverseProjectionView = this.inverseProjectionView;\n\t\t\t\tvar zoom = this.zoom, viewportWidth = this.viewportWidth, viewportHeight = this.viewportHeight;\n\t\t\t\tprojection.ortho(zoom * (-viewportWidth / 2), zoom * (viewportWidth / 2), zoom * (-viewportHeight / 2), zoom * (viewportHeight / 2), this.near, this.far);\n\t\t\t\tview.lookAt(this.position, this.direction, this.up);\n\t\t\t\tprojectionView.set(projection.values);\n\t\t\t\tprojectionView.multiply(view);\n\t\t\t\tinverseProjectionView.set(projectionView.values).invert();\n\t\t\t};\n\t\t\tOrthoCamera.prototype.screenToWorld = function (screenCoords, screenWidth, screenHeight) {\n\t\t\t\tvar x = screenCoords.x, y = screenHeight - screenCoords.y - 1;\n\t\t\t\tvar tmp = this.tmp;\n\t\t\t\ttmp.x = (2 * x) / screenWidth - 1;\n\t\t\t\ttmp.y = (2 * y) / screenHeight - 1;\n\t\t\t\ttmp.z = (2 * screenCoords.z) - 1;\n\t\t\t\ttmp.project(this.inverseProjectionView);\n\t\t\t\tscreenCoords.set(tmp.x, tmp.y, tmp.z);\n\t\t\t\treturn screenCoords;\n\t\t\t};\n\t\t\tOrthoCamera.prototype.setViewport = function (viewportWidth, viewportHeight) {\n\t\t\t\tthis.viewportWidth = viewportWidth;\n\t\t\t\tthis.viewportHeight = viewportHeight;\n\t\t\t};\n\t\t\treturn OrthoCamera;\n\t\t}());\n\t\twebgl.OrthoCamera = OrthoCamera;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar GLTexture = (function (_super) {\n\t\t\t__extends(GLTexture, _super);\n\t\t\tfunction GLTexture(context, image, useMipMaps) {\n\t\t\t\tif (useMipMaps === void 0) { useMipMaps = false; }\n\t\t\t\tvar _this = _super.call(this, image) || this;\n\t\t\t\t_this.texture = null;\n\t\t\t\t_this.boundUnit = 0;\n\t\t\t\t_this.useMipMaps = false;\n\t\t\t\t_this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context);\n\t\t\t\t_this.useMipMaps = useMipMaps;\n\t\t\t\t_this.restore();\n\t\t\t\t_this.context.addRestorable(_this);\n\t\t\t\treturn _this;\n\t\t\t}\n\t\t\tGLTexture.prototype.setFilters = function (minFilter, magFilter) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.bind();\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);\n\t\t\t};\n\t\t\tGLTexture.prototype.setWraps = function (uWrap, vWrap) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.bind();\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, uWrap);\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, vWrap);\n\t\t\t};\n\t\t\tGLTexture.prototype.update = function (useMipMaps) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tif (!this.texture) {\n\t\t\t\t\tthis.texture = this.context.gl.createTexture();\n\t\t\t\t}\n\t\t\t\tthis.bind();\n\t\t\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, useMipMaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR);\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\t\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\t\t\tif (useMipMaps)\n\t\t\t\t\tgl.generateMipmap(gl.TEXTURE_2D);\n\t\t\t};\n\t\t\tGLTexture.prototype.restore = function () {\n\t\t\t\tthis.texture = null;\n\t\t\t\tthis.update(this.useMipMaps);\n\t\t\t};\n\t\t\tGLTexture.prototype.bind = function (unit) {\n\t\t\t\tif (unit === void 0) { unit = 0; }\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.boundUnit = unit;\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + unit);\n\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\t\t};\n\t\t\tGLTexture.prototype.unbind = function () {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + this.boundUnit);\n\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, null);\n\t\t\t};\n\t\t\tGLTexture.prototype.dispose = function () {\n\t\t\t\tthis.context.removeRestorable(this);\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tgl.deleteTexture(this.texture);\n\t\t\t};\n\t\t\treturn GLTexture;\n\t\t}(spine.Texture));\n\t\twebgl.GLTexture = GLTexture;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar Input = (function () {\n\t\t\tfunction Input(element) {\n\t\t\t\tthis.lastX = 0;\n\t\t\t\tthis.lastY = 0;\n\t\t\t\tthis.buttonDown = false;\n\t\t\t\tthis.currTouch = null;\n\t\t\t\tthis.touchesPool = new spine.Pool(function () {\n\t\t\t\t\treturn new spine.webgl.Touch(0, 0, 0);\n\t\t\t\t});\n\t\t\t\tthis.listeners = new Array();\n\t\t\t\tthis.element = element;\n\t\t\t\tthis.setupCallbacks(element);\n\t\t\t}\n\t\t\tInput.prototype.setupCallbacks = function (element) {\n\t\t\t\tvar _this = this;\n\t\t\t\telement.addEventListener(\"mousedown\", function (ev) {\n\t\t\t\t\tif (ev instanceof MouseEvent) {\n\t\t\t\t\t\tvar rect = element.getBoundingClientRect();\n\t\t\t\t\t\tvar x = ev.clientX - rect.left;\n\t\t\t\t\t\tvar y = ev.clientY - rect.top;\n\t\t\t\t\t\tvar listeners = _this.listeners;\n\t\t\t\t\t\tfor (var i = 0; i < listeners.length; i++) {\n\t\t\t\t\t\t\tlisteners[i].down(x, y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this.lastX = x;\n\t\t\t\t\t\t_this.lastY = y;\n\t\t\t\t\t\t_this.buttonDown = true;\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t\telement.addEventListener(\"mousemove\", function (ev) {\n\t\t\t\t\tif (ev instanceof MouseEvent) {\n\t\t\t\t\t\tvar rect = element.getBoundingClientRect();\n\t\t\t\t\t\tvar x = ev.clientX - rect.left;\n\t\t\t\t\t\tvar y = ev.clientY - rect.top;\n\t\t\t\t\t\tvar listeners = _this.listeners;\n\t\t\t\t\t\tfor (var i = 0; i < listeners.length; i++) {\n\t\t\t\t\t\t\tif (_this.buttonDown) {\n\t\t\t\t\t\t\t\tlisteners[i].dragged(x, y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlisteners[i].moved(x, y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this.lastX = x;\n\t\t\t\t\t\t_this.lastY = y;\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t\telement.addEventListener(\"mouseup\", function (ev) {\n\t\t\t\t\tif (ev instanceof MouseEvent) {\n\t\t\t\t\t\tvar rect = element.getBoundingClientRect();\n\t\t\t\t\t\tvar x = ev.clientX - rect.left;\n\t\t\t\t\t\tvar y = ev.clientY - rect.top;\n\t\t\t\t\t\tvar listeners = _this.listeners;\n\t\t\t\t\t\tfor (var i = 0; i < listeners.length; i++) {\n\t\t\t\t\t\t\tlisteners[i].up(x, y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this.lastX = x;\n\t\t\t\t\t\t_this.lastY = y;\n\t\t\t\t\t\t_this.buttonDown = false;\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t\telement.addEventListener(\"touchstart\", function (ev) {\n\t\t\t\t\tif (_this.currTouch != null)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tvar touches = ev.changedTouches;\n\t\t\t\t\tfor (var i = 0; i < touches.length; i++) {\n\t\t\t\t\t\tvar touch = touches[i];\n\t\t\t\t\t\tvar rect = element.getBoundingClientRect();\n\t\t\t\t\t\tvar x = touch.clientX - rect.left;\n\t\t\t\t\t\tvar y = touch.clientY - rect.top;\n\t\t\t\t\t\t_this.currTouch = _this.touchesPool.obtain();\n\t\t\t\t\t\t_this.currTouch.identifier = touch.identifier;\n\t\t\t\t\t\t_this.currTouch.x = x;\n\t\t\t\t\t\t_this.currTouch.y = y;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvar listeners = _this.listeners;\n\t\t\t\t\tfor (var i_8 = 0; i_8 < listeners.length; i_8++) {\n\t\t\t\t\t\tlisteners[i_8].down(_this.currTouch.x, _this.currTouch.y);\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(\"Start \" + _this.currTouch.x + \", \" + _this.currTouch.y);\n\t\t\t\t\t_this.lastX = _this.currTouch.x;\n\t\t\t\t\t_this.lastY = _this.currTouch.y;\n\t\t\t\t\t_this.buttonDown = true;\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}, false);\n\t\t\t\telement.addEventListener(\"touchend\", function (ev) {\n\t\t\t\t\tvar touches = ev.changedTouches;\n\t\t\t\t\tfor (var i = 0; i < touches.length; i++) {\n\t\t\t\t\t\tvar touch = touches[i];\n\t\t\t\t\t\tif (_this.currTouch.identifier === touch.identifier) {\n\t\t\t\t\t\t\tvar rect = element.getBoundingClientRect();\n\t\t\t\t\t\t\tvar x = _this.currTouch.x = touch.clientX - rect.left;\n\t\t\t\t\t\t\tvar y = _this.currTouch.y = touch.clientY - rect.top;\n\t\t\t\t\t\t\t_this.touchesPool.free(_this.currTouch);\n\t\t\t\t\t\t\tvar listeners = _this.listeners;\n\t\t\t\t\t\t\tfor (var i_9 = 0; i_9 < listeners.length; i_9++) {\n\t\t\t\t\t\t\t\tlisteners[i_9].up(x, y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconsole.log(\"End \" + x + \", \" + y);\n\t\t\t\t\t\t\t_this.lastX = x;\n\t\t\t\t\t\t\t_this.lastY = y;\n\t\t\t\t\t\t\t_this.buttonDown = false;\n\t\t\t\t\t\t\t_this.currTouch = null;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}, false);\n\t\t\t\telement.addEventListener(\"touchcancel\", function (ev) {\n\t\t\t\t\tvar touches = ev.changedTouches;\n\t\t\t\t\tfor (var i = 0; i < touches.length; i++) {\n\t\t\t\t\t\tvar touch = touches[i];\n\t\t\t\t\t\tif (_this.currTouch.identifier === touch.identifier) {\n\t\t\t\t\t\t\tvar rect = element.getBoundingClientRect();\n\t\t\t\t\t\t\tvar x = _this.currTouch.x = touch.clientX - rect.left;\n\t\t\t\t\t\t\tvar y = _this.currTouch.y = touch.clientY - rect.top;\n\t\t\t\t\t\t\t_this.touchesPool.free(_this.currTouch);\n\t\t\t\t\t\t\tvar listeners = _this.listeners;\n\t\t\t\t\t\t\tfor (var i_10 = 0; i_10 < listeners.length; i_10++) {\n\t\t\t\t\t\t\t\tlisteners[i_10].up(x, y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconsole.log(\"End \" + x + \", \" + y);\n\t\t\t\t\t\t\t_this.lastX = x;\n\t\t\t\t\t\t\t_this.lastY = y;\n\t\t\t\t\t\t\t_this.buttonDown = false;\n\t\t\t\t\t\t\t_this.currTouch = null;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}, false);\n\t\t\t\telement.addEventListener(\"touchmove\", function (ev) {\n\t\t\t\t\tif (_this.currTouch == null)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tvar touches = ev.changedTouches;\n\t\t\t\t\tfor (var i = 0; i < touches.length; i++) {\n\t\t\t\t\t\tvar touch = touches[i];\n\t\t\t\t\t\tif (_this.currTouch.identifier === touch.identifier) {\n\t\t\t\t\t\t\tvar rect = element.getBoundingClientRect();\n\t\t\t\t\t\t\tvar x = touch.clientX - rect.left;\n\t\t\t\t\t\t\tvar y = touch.clientY - rect.top;\n\t\t\t\t\t\t\tvar listeners = _this.listeners;\n\t\t\t\t\t\t\tfor (var i_11 = 0; i_11 < listeners.length; i_11++) {\n\t\t\t\t\t\t\t\tlisteners[i_11].dragged(x, y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconsole.log(\"Drag \" + x + \", \" + y);\n\t\t\t\t\t\t\t_this.lastX = _this.currTouch.x = x;\n\t\t\t\t\t\t\t_this.lastY = _this.currTouch.y = y;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}, false);\n\t\t\t};\n\t\t\tInput.prototype.addListener = function (listener) {\n\t\t\t\tthis.listeners.push(listener);\n\t\t\t};\n\t\t\tInput.prototype.removeListener = function (listener) {\n\t\t\t\tvar idx = this.listeners.indexOf(listener);\n\t\t\t\tif (idx > -1) {\n\t\t\t\t\tthis.listeners.splice(idx, 1);\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn Input;\n\t\t}());\n\t\twebgl.Input = Input;\n\t\tvar Touch = (function () {\n\t\t\tfunction Touch(identifier, x, y) {\n\t\t\t\tthis.identifier = identifier;\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\t\t\t}\n\t\t\treturn Touch;\n\t\t}());\n\t\twebgl.Touch = Touch;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar LoadingScreen = (function () {\n\t\t\tfunction LoadingScreen(renderer) {\n\t\t\t\tthis.logo = null;\n\t\t\t\tthis.spinner = null;\n\t\t\t\tthis.angle = 0;\n\t\t\t\tthis.fadeOut = 0;\n\t\t\t\tthis.timeKeeper = new spine.TimeKeeper();\n\t\t\t\tthis.backgroundColor = new spine.Color(0.135, 0.135, 0.135, 1);\n\t\t\t\tthis.tempColor = new spine.Color();\n\t\t\t\tthis.firstDraw = 0;\n\t\t\t\tthis.renderer = renderer;\n\t\t\t\tthis.timeKeeper.maxDelta = 9;\n\t\t\t\tif (LoadingScreen.logoImg === null) {\n\t\t\t\t\tvar isSafari = navigator.userAgent.indexOf(\"Safari\") > -1;\n\t\t\t\t\tLoadingScreen.logoImg = new Image();\n\t\t\t\t\tLoadingScreen.logoImg.src = LoadingScreen.SPINE_LOGO_DATA;\n\t\t\t\t\tif (!isSafari)\n\t\t\t\t\t\tLoadingScreen.logoImg.crossOrigin = \"anonymous\";\n\t\t\t\t\tLoadingScreen.logoImg.onload = function (ev) {\n\t\t\t\t\t\tLoadingScreen.loaded++;\n\t\t\t\t\t};\n\t\t\t\t\tLoadingScreen.spinnerImg = new Image();\n\t\t\t\t\tLoadingScreen.spinnerImg.src = LoadingScreen.SPINNER_DATA;\n\t\t\t\t\tif (!isSafari)\n\t\t\t\t\t\tLoadingScreen.spinnerImg.crossOrigin = \"anonymous\";\n\t\t\t\t\tLoadingScreen.spinnerImg.onload = function (ev) {\n\t\t\t\t\t\tLoadingScreen.loaded++;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tLoadingScreen.prototype.draw = function (complete) {\n\t\t\t\tif (complete === void 0) { complete = false; }\n\t\t\t\tif (complete && this.fadeOut > LoadingScreen.FADE_SECONDS)\n\t\t\t\t\treturn;\n\t\t\t\tthis.timeKeeper.update();\n\t\t\t\tvar a = Math.abs(Math.sin(this.timeKeeper.totalTime + 0.75));\n\t\t\t\tthis.angle -= this.timeKeeper.delta * 360 * (1 + 1.5 * Math.pow(a, 5));\n\t\t\t\tvar renderer = this.renderer;\n\t\t\t\tvar canvas = renderer.canvas;\n\t\t\t\tvar gl = renderer.context.gl;\n\t\t\t\tvar oldX = renderer.camera.position.x, oldY = renderer.camera.position.y;\n\t\t\t\trenderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0);\n\t\t\t\trenderer.camera.viewportWidth = canvas.width;\n\t\t\t\trenderer.camera.viewportHeight = canvas.height;\n\t\t\t\trenderer.resize(webgl.ResizeMode.Stretch);\n\t\t\t\tif (!complete) {\n\t\t\t\t\tgl.clearColor(this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a);\n\t\t\t\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\t\t\t\tthis.tempColor.a = 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1);\n\t\t\t\t\tif (this.fadeOut > LoadingScreen.FADE_SECONDS) {\n\t\t\t\t\t\trenderer.camera.position.set(oldX, oldY, 0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ta = 1 - this.fadeOut / LoadingScreen.FADE_SECONDS;\n\t\t\t\t\tthis.tempColor.setFromColor(this.backgroundColor);\n\t\t\t\t\tthis.tempColor.a = 1 - (a - 1) * (a - 1);\n\t\t\t\t\trenderer.begin();\n\t\t\t\t\trenderer.quad(true, 0, 0, canvas.width, 0, canvas.width, canvas.height, 0, canvas.height, this.tempColor, this.tempColor, this.tempColor, this.tempColor);\n\t\t\t\t\trenderer.end();\n\t\t\t\t}\n\t\t\t\tthis.tempColor.set(1, 1, 1, this.tempColor.a);\n\t\t\t\tif (LoadingScreen.loaded != 2)\n\t\t\t\t\treturn;\n\t\t\t\tif (this.logo === null) {\n\t\t\t\t\tthis.logo = new webgl.GLTexture(renderer.context, LoadingScreen.logoImg);\n\t\t\t\t\tthis.spinner = new webgl.GLTexture(renderer.context, LoadingScreen.spinnerImg);\n\t\t\t\t}\n\t\t\t\tthis.logo.update(false);\n\t\t\t\tthis.spinner.update(false);\n\t\t\t\tvar logoWidth = this.logo.getImage().width;\n\t\t\t\tvar logoHeight = this.logo.getImage().height;\n\t\t\t\tvar spinnerWidth = this.spinner.getImage().width;\n\t\t\t\tvar spinnerHeight = this.spinner.getImage().height;\n\t\t\t\trenderer.batcher.setBlendMode(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\t\t\t\trenderer.begin();\n\t\t\t\trenderer.drawTexture(this.logo, (canvas.width - logoWidth) / 2, (canvas.height - logoHeight) / 2, logoWidth, logoHeight, this.tempColor);\n\t\t\t\trenderer.drawTextureRotated(this.spinner, (canvas.width - spinnerWidth) / 2, (canvas.height - spinnerHeight) / 2, spinnerWidth, spinnerHeight, spinnerWidth / 2, spinnerHeight / 2, this.angle, this.tempColor);\n\t\t\t\trenderer.end();\n\t\t\t\trenderer.camera.position.set(oldX, oldY, 0);\n\t\t\t};\n\t\t\tLoadingScreen.FADE_SECONDS = 1;\n\t\t\tLoadingScreen.loaded = 0;\n\t\t\tLoadingScreen.spinnerImg = null;\n\t\t\tLoadingScreen.logoImg = null;\n\t\t\tLoadingScreen.SPINNER_DATA = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAChCAMAAAB3TUS6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYNQTFRFAAAA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AA/0AAkTDRyAAAAIB0Uk5TAAABAgMEBQYHCAkKCwwODxAREhMUFRYXGBkaHB0eICEiIyQlJicoKSorLC0uLzAxMjM0Nzg5Ojs8PT4/QEFDRUlKS0xNTk9QUlRWWFlbXF1eYWJjZmhscHF0d3h5e3x+f4CIiYuMj5GSlJWXm56io6arr7rAxcjO0dXe6Onr8fmb5sOOAAADuElEQVQYGe3B+3vTVBwH4M/3nCRt13br2Lozhug2q25gYQubcxqVKYoMCYoKjEsUdSpeiBc0Kl7yp9t2za39pely7PF5zvuiQKc+/e2f8K+f9g2oyQ77Ag4VGX+HketQ0XYYe0JQ0CdhogwF+WFiBgr6JkxUoKCDMMGgoP0w9gdUtB3GfoCKVsPYAVQ0H8YuQUWVMHYGKuJhrAklPQkjJpT0bdj3O9S0FfZ9ADXxP8MjVSiqFfa8B2VVV8+df14QtB4iwn+BpuZEgyM38WMQHDYhnbkgukrIh5ygZ48glyn6KshlL+jbhVRcxCzk0ApiC5CI5kVsgTAy9jiI/WxBGmqIFBMjqwYphwRZaiLNwsjqQdoVSFISGRwjM4OMFUjBRcYCYWT0XZD2SwUS0LzIKCGH2SDja0LxKiJjCrm0gowVFI6aIs1CTouPg5QvUTgSKXMMuVUeBSmEopFITBPGwO8HCYbCTYtImTAWejuI3CMUjmZFT5NjbM/9GvQcMkhADdFRIxxD7aug4wGDFGSVTcLx0MzutQ2CpmmapmmapmmapmmapmmaphWBmGFV6rNNcaLC0GUuv3LROftUo8wJk0a10207sVED6IIf+9673LIwQeW2PaCEJX/A+xYmhTbtQUu46g96SJgQZg9Zwxf+EAMTwuwhm3jkD7EwIdweBn+YhQlh9pA2HvpDTEwIs4es4GN/CMekNOxBJ9D2B10nTAyfW7fT1hjYgZ/xYIUwUcycaiwuv2h3tOcZADr7ud/12c0ru2cWSwQ1UAcixIgImqZpmqZpmqZpmqZpmqZp2v8HMSIcF186t8oghbnlOJt1wnHwl7yOGxwSlHacrjWG8dVuej03OApn7jhHtiyMiZa9yD6haLYTebWOsbDXvQRHwchJWSTkV/rQS+EoWttJaTHkJe56KXcJRZt20jY48nnBy9hE4WjLSbvAkIfwMm5zFG/KyWgRRke3vYwGZDjpZHCMruJltCAFrTtpVYxu1ktzCHKwbSdlGqOreynXGGQpOylljI5uebFbBuSZc2IbhBxmvcj9GiSiZ52+HQO5nPb6TkIqajs9L5eQk7jnddxZgGT0jNOxYSI36+Kdj9oG5OPV6QpB6yJuGAYnqIrecLveYlDUKffIOtREl90+BiWV3cgMlNR0I09DSS030oaSttzILpT0phu5BBWRmyAoiLkJgoIMN8GgoJKb4FBQzU0YUFDdTRhQUNVNcCjIdBMEBdE7buQ8lFRz+97lUFN5fe+qu//aMkeB/gU2ae9y2HgbngAAAABJRU5ErkJggg==\";\n\t\t\tLoadingScreen.SPINE_LOGO_DATA = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAAAZCAYAAACis3k0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtNJREFUaN7tmT2I1EAUxwN+oWgRT0HFKo0WCkJ6ObmAWFwZbCxsXGysLNJaiCyIoDaSwk4ETzvhmnBaCRbBWoQ01ho4PwotjP8cE337mMy8TLK757mBH3fLTWbe/PbN53neNniqZW8FvAVvQAqugwvgDDgO9niLRyTyJagM/ACPF6bsIl9ZRDac/Cc6tLn5xQdRQ496QlKPLxD5QCDxO9jtGM8QfYoIgUlgCipGCRJL5VvlyOdCU09iEXkCfLSIfCrs7Fab6nOsiafu06iDwES9w/uU1QnDC+ekkVS9vEaDsgVeB0d+z1VDtOGxRaYPboP3Gokb4GgXkZp4chZPJKgvZ3U0XkriK/TIt9YUDllFgTAjGwoaoHqfBhMI58yD4BQ4V6/aHYdfxToftvw9F2SiVroawU2/Cv5C4Thv0KB9S5nxlOd4STxjwUjzSdYlgrYijw2BsEfgsaFcM09lhiys94xXQQwugcvgJrgFLjrEE7WUiTuWCQzt/ZXN7FfqGwuGClyVy2xZAFmfDQvNtwFFSspMDGsD+UTWqu1KoVmVooFEJgKRXw0if85RpISEzwsjzeqWzkjkC4PIJ3MUmQgITAHlQwTFhnZhELkEntfZRwR+AvfAgXmJHOqU02XligWT8ppg67NXbdCXeq7afUQ6L8C2DalEZNt2YyQ94Qy8/ekjMpBMbfyl5iTjG7YAI8cNecROAb4kJmTjaXAF3AGvwQewOiuRxEtlSaT4j2h2lMsUueQEoMlIKpTvAmKhxPMtC876jEX6rE8l8TNx/KVbn6xlWU9NWcSDUsO4NGWpQOTZFpHPOooMXcswmW2XFk3ixb2v0Nq+XVKP00QNaffBLyWwBI/AkTlfMYZDXMf12kc6yjwEjoFdO/5me5oi/6tnyhlZX6OtgmX1c2Uh0k3khmbB2b9TRfpd/jfTUeRDJvHdYg5wE7kPXAN3wQ1weDvH+xufEgpi5qIl3QAAAABJRU5ErkJggg==\";\n\t\t\treturn LoadingScreen;\n\t\t}());\n\t\twebgl.LoadingScreen = LoadingScreen;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\twebgl.M00 = 0;\n\t\twebgl.M01 = 4;\n\t\twebgl.M02 = 8;\n\t\twebgl.M03 = 12;\n\t\twebgl.M10 = 1;\n\t\twebgl.M11 = 5;\n\t\twebgl.M12 = 9;\n\t\twebgl.M13 = 13;\n\t\twebgl.M20 = 2;\n\t\twebgl.M21 = 6;\n\t\twebgl.M22 = 10;\n\t\twebgl.M23 = 14;\n\t\twebgl.M30 = 3;\n\t\twebgl.M31 = 7;\n\t\twebgl.M32 = 11;\n\t\twebgl.M33 = 15;\n\t\tvar Matrix4 = (function () {\n\t\t\tfunction Matrix4() {\n\t\t\t\tthis.temp = new Float32Array(16);\n\t\t\t\tthis.values = new Float32Array(16);\n\t\t\t\tvar v = this.values;\n\t\t\t\tv[webgl.M00] = 1;\n\t\t\t\tv[webgl.M11] = 1;\n\t\t\t\tv[webgl.M22] = 1;\n\t\t\t\tv[webgl.M33] = 1;\n\t\t\t}\n\t\t\tMatrix4.prototype.set = function (values) {\n\t\t\t\tthis.values.set(values);\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tMatrix4.prototype.transpose = function () {\n\t\t\t\tvar t = this.temp;\n\t\t\t\tvar v = this.values;\n\t\t\t\tt[webgl.M00] = v[webgl.M00];\n\t\t\t\tt[webgl.M01] = v[webgl.M10];\n\t\t\t\tt[webgl.M02] = v[webgl.M20];\n\t\t\t\tt[webgl.M03] = v[webgl.M30];\n\t\t\t\tt[webgl.M10] = v[webgl.M01];\n\t\t\t\tt[webgl.M11] = v[webgl.M11];\n\t\t\t\tt[webgl.M12] = v[webgl.M21];\n\t\t\t\tt[webgl.M13] = v[webgl.M31];\n\t\t\t\tt[webgl.M20] = v[webgl.M02];\n\t\t\t\tt[webgl.M21] = v[webgl.M12];\n\t\t\t\tt[webgl.M22] = v[webgl.M22];\n\t\t\t\tt[webgl.M23] = v[webgl.M32];\n\t\t\t\tt[webgl.M30] = v[webgl.M03];\n\t\t\t\tt[webgl.M31] = v[webgl.M13];\n\t\t\t\tt[webgl.M32] = v[webgl.M23];\n\t\t\t\tt[webgl.M33] = v[webgl.M33];\n\t\t\t\treturn this.set(t);\n\t\t\t};\n\t\t\tMatrix4.prototype.identity = function () {\n\t\t\t\tvar v = this.values;\n\t\t\t\tv[webgl.M00] = 1;\n\t\t\t\tv[webgl.M01] = 0;\n\t\t\t\tv[webgl.M02] = 0;\n\t\t\t\tv[webgl.M03] = 0;\n\t\t\t\tv[webgl.M10] = 0;\n\t\t\t\tv[webgl.M11] = 1;\n\t\t\t\tv[webgl.M12] = 0;\n\t\t\t\tv[webgl.M13] = 0;\n\t\t\t\tv[webgl.M20] = 0;\n\t\t\t\tv[webgl.M21] = 0;\n\t\t\t\tv[webgl.M22] = 1;\n\t\t\t\tv[webgl.M23] = 0;\n\t\t\t\tv[webgl.M30] = 0;\n\t\t\t\tv[webgl.M31] = 0;\n\t\t\t\tv[webgl.M32] = 0;\n\t\t\t\tv[webgl.M33] = 1;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tMatrix4.prototype.invert = function () {\n\t\t\t\tvar v = this.values;\n\t\t\t\tvar t = this.temp;\n\t\t\t\tvar l_det = v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03]\n\t\t\t\t\t+ v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03]\n\t\t\t\t\t- v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13]\n\t\t\t\t\t+ v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23]\n\t\t\t\t\t+ v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23]\n\t\t\t\t\t- v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33];\n\t\t\t\tif (l_det == 0)\n\t\t\t\t\tthrow new Error(\"non-invertible matrix\");\n\t\t\t\tvar inv_det = 1.0 / l_det;\n\t\t\t\tt[webgl.M00] = v[webgl.M12] * v[webgl.M23] * v[webgl.M31] - v[webgl.M13] * v[webgl.M22] * v[webgl.M31] + v[webgl.M13] * v[webgl.M21] * v[webgl.M32]\n\t\t\t\t\t- v[webgl.M11] * v[webgl.M23] * v[webgl.M32] - v[webgl.M12] * v[webgl.M21] * v[webgl.M33] + v[webgl.M11] * v[webgl.M22] * v[webgl.M33];\n\t\t\t\tt[webgl.M01] = v[webgl.M03] * v[webgl.M22] * v[webgl.M31] - v[webgl.M02] * v[webgl.M23] * v[webgl.M31] - v[webgl.M03] * v[webgl.M21] * v[webgl.M32]\n\t\t\t\t\t+ v[webgl.M01] * v[webgl.M23] * v[webgl.M32] + v[webgl.M02] * v[webgl.M21] * v[webgl.M33] - v[webgl.M01] * v[webgl.M22] * v[webgl.M33];\n\t\t\t\tt[webgl.M02] = v[webgl.M02] * v[webgl.M13] * v[webgl.M31] - v[webgl.M03] * v[webgl.M12] * v[webgl.M31] + v[webgl.M03] * v[webgl.M11] * v[webgl.M32]\n\t\t\t\t\t- v[webgl.M01] * v[webgl.M13] * v[webgl.M32] - v[webgl.M02] * v[webgl.M11] * v[webgl.M33] + v[webgl.M01] * v[webgl.M12] * v[webgl.M33];\n\t\t\t\tt[webgl.M03] = v[webgl.M03] * v[webgl.M12] * v[webgl.M21] - v[webgl.M02] * v[webgl.M13] * v[webgl.M21] - v[webgl.M03] * v[webgl.M11] * v[webgl.M22]\n\t\t\t\t\t+ v[webgl.M01] * v[webgl.M13] * v[webgl.M22] + v[webgl.M02] * v[webgl.M11] * v[webgl.M23] - v[webgl.M01] * v[webgl.M12] * v[webgl.M23];\n\t\t\t\tt[webgl.M10] = v[webgl.M13] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M20] * v[webgl.M32]\n\t\t\t\t\t+ v[webgl.M10] * v[webgl.M23] * v[webgl.M32] + v[webgl.M12] * v[webgl.M20] * v[webgl.M33] - v[webgl.M10] * v[webgl.M22] * v[webgl.M33];\n\t\t\t\tt[webgl.M11] = v[webgl.M02] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M22] * v[webgl.M30] + v[webgl.M03] * v[webgl.M20] * v[webgl.M32]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M23] * v[webgl.M32] - v[webgl.M02] * v[webgl.M20] * v[webgl.M33] + v[webgl.M00] * v[webgl.M22] * v[webgl.M33];\n\t\t\t\tt[webgl.M12] = v[webgl.M03] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M10] * v[webgl.M32]\n\t\t\t\t\t+ v[webgl.M00] * v[webgl.M13] * v[webgl.M32] + v[webgl.M02] * v[webgl.M10] * v[webgl.M33] - v[webgl.M00] * v[webgl.M12] * v[webgl.M33];\n\t\t\t\tt[webgl.M13] = v[webgl.M02] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M12] * v[webgl.M20] + v[webgl.M03] * v[webgl.M10] * v[webgl.M22]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M13] * v[webgl.M22] - v[webgl.M02] * v[webgl.M10] * v[webgl.M23] + v[webgl.M00] * v[webgl.M12] * v[webgl.M23];\n\t\t\t\tt[webgl.M20] = v[webgl.M11] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M21] * v[webgl.M30] + v[webgl.M13] * v[webgl.M20] * v[webgl.M31]\n\t\t\t\t\t- v[webgl.M10] * v[webgl.M23] * v[webgl.M31] - v[webgl.M11] * v[webgl.M20] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M33];\n\t\t\t\tt[webgl.M21] = v[webgl.M03] * v[webgl.M21] * v[webgl.M30] - v[webgl.M01] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M20] * v[webgl.M31]\n\t\t\t\t\t+ v[webgl.M00] * v[webgl.M23] * v[webgl.M31] + v[webgl.M01] * v[webgl.M20] * v[webgl.M33] - v[webgl.M00] * v[webgl.M21] * v[webgl.M33];\n\t\t\t\tt[webgl.M22] = v[webgl.M01] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M11] * v[webgl.M30] + v[webgl.M03] * v[webgl.M10] * v[webgl.M31]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M13] * v[webgl.M31] - v[webgl.M01] * v[webgl.M10] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M33];\n\t\t\t\tt[webgl.M23] = v[webgl.M03] * v[webgl.M11] * v[webgl.M20] - v[webgl.M01] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M10] * v[webgl.M21]\n\t\t\t\t\t+ v[webgl.M00] * v[webgl.M13] * v[webgl.M21] + v[webgl.M01] * v[webgl.M10] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M23];\n\t\t\t\tt[webgl.M30] = v[webgl.M12] * v[webgl.M21] * v[webgl.M30] - v[webgl.M11] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M20] * v[webgl.M31]\n\t\t\t\t\t+ v[webgl.M10] * v[webgl.M22] * v[webgl.M31] + v[webgl.M11] * v[webgl.M20] * v[webgl.M32] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32];\n\t\t\t\tt[webgl.M31] = v[webgl.M01] * v[webgl.M22] * v[webgl.M30] - v[webgl.M02] * v[webgl.M21] * v[webgl.M30] + v[webgl.M02] * v[webgl.M20] * v[webgl.M31]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M22] * v[webgl.M31] - v[webgl.M01] * v[webgl.M20] * v[webgl.M32] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32];\n\t\t\t\tt[webgl.M32] = v[webgl.M02] * v[webgl.M11] * v[webgl.M30] - v[webgl.M01] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M10] * v[webgl.M31]\n\t\t\t\t\t+ v[webgl.M00] * v[webgl.M12] * v[webgl.M31] + v[webgl.M01] * v[webgl.M10] * v[webgl.M32] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32];\n\t\t\t\tt[webgl.M33] = v[webgl.M01] * v[webgl.M12] * v[webgl.M20] - v[webgl.M02] * v[webgl.M11] * v[webgl.M20] + v[webgl.M02] * v[webgl.M10] * v[webgl.M21]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M12] * v[webgl.M21] - v[webgl.M01] * v[webgl.M10] * v[webgl.M22] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22];\n\t\t\t\tv[webgl.M00] = t[webgl.M00] * inv_det;\n\t\t\t\tv[webgl.M01] = t[webgl.M01] * inv_det;\n\t\t\t\tv[webgl.M02] = t[webgl.M02] * inv_det;\n\t\t\t\tv[webgl.M03] = t[webgl.M03] * inv_det;\n\t\t\t\tv[webgl.M10] = t[webgl.M10] * inv_det;\n\t\t\t\tv[webgl.M11] = t[webgl.M11] * inv_det;\n\t\t\t\tv[webgl.M12] = t[webgl.M12] * inv_det;\n\t\t\t\tv[webgl.M13] = t[webgl.M13] * inv_det;\n\t\t\t\tv[webgl.M20] = t[webgl.M20] * inv_det;\n\t\t\t\tv[webgl.M21] = t[webgl.M21] * inv_det;\n\t\t\t\tv[webgl.M22] = t[webgl.M22] * inv_det;\n\t\t\t\tv[webgl.M23] = t[webgl.M23] * inv_det;\n\t\t\t\tv[webgl.M30] = t[webgl.M30] * inv_det;\n\t\t\t\tv[webgl.M31] = t[webgl.M31] * inv_det;\n\t\t\t\tv[webgl.M32] = t[webgl.M32] * inv_det;\n\t\t\t\tv[webgl.M33] = t[webgl.M33] * inv_det;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tMatrix4.prototype.determinant = function () {\n\t\t\t\tvar v = this.values;\n\t\t\t\treturn v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03]\n\t\t\t\t\t+ v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03]\n\t\t\t\t\t- v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13]\n\t\t\t\t\t+ v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23]\n\t\t\t\t\t+ v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23]\n\t\t\t\t\t- v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33]\n\t\t\t\t\t- v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33];\n\t\t\t};\n\t\t\tMatrix4.prototype.translate = function (x, y, z) {\n\t\t\t\tvar v = this.values;\n\t\t\t\tv[webgl.M03] += x;\n\t\t\t\tv[webgl.M13] += y;\n\t\t\t\tv[webgl.M23] += z;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tMatrix4.prototype.copy = function () {\n\t\t\t\treturn new Matrix4().set(this.values);\n\t\t\t};\n\t\t\tMatrix4.prototype.projection = function (near, far, fovy, aspectRatio) {\n\t\t\t\tthis.identity();\n\t\t\t\tvar l_fd = (1.0 / Math.tan((fovy * (Math.PI / 180)) / 2.0));\n\t\t\t\tvar l_a1 = (far + near) / (near - far);\n\t\t\t\tvar l_a2 = (2 * far * near) / (near - far);\n\t\t\t\tvar v = this.values;\n\t\t\t\tv[webgl.M00] = l_fd / aspectRatio;\n\t\t\t\tv[webgl.M10] = 0;\n\t\t\t\tv[webgl.M20] = 0;\n\t\t\t\tv[webgl.M30] = 0;\n\t\t\t\tv[webgl.M01] = 0;\n\t\t\t\tv[webgl.M11] = l_fd;\n\t\t\t\tv[webgl.M21] = 0;\n\t\t\t\tv[webgl.M31] = 0;\n\t\t\t\tv[webgl.M02] = 0;\n\t\t\t\tv[webgl.M12] = 0;\n\t\t\t\tv[webgl.M22] = l_a1;\n\t\t\t\tv[webgl.M32] = -1;\n\t\t\t\tv[webgl.M03] = 0;\n\t\t\t\tv[webgl.M13] = 0;\n\t\t\t\tv[webgl.M23] = l_a2;\n\t\t\t\tv[webgl.M33] = 0;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tMatrix4.prototype.ortho2d = function (x, y, width, height) {\n\t\t\t\treturn this.ortho(x, x + width, y, y + height, 0, 1);\n\t\t\t};\n\t\t\tMatrix4.prototype.ortho = function (left, right, bottom, top, near, far) {\n\t\t\t\tthis.identity();\n\t\t\t\tvar x_orth = 2 / (right - left);\n\t\t\t\tvar y_orth = 2 / (top - bottom);\n\t\t\t\tvar z_orth = -2 / (far - near);\n\t\t\t\tvar tx = -(right + left) / (right - left);\n\t\t\t\tvar ty = -(top + bottom) / (top - bottom);\n\t\t\t\tvar tz = -(far + near) / (far - near);\n\t\t\t\tvar v = this.values;\n\t\t\t\tv[webgl.M00] = x_orth;\n\t\t\t\tv[webgl.M10] = 0;\n\t\t\t\tv[webgl.M20] = 0;\n\t\t\t\tv[webgl.M30] = 0;\n\t\t\t\tv[webgl.M01] = 0;\n\t\t\t\tv[webgl.M11] = y_orth;\n\t\t\t\tv[webgl.M21] = 0;\n\t\t\t\tv[webgl.M31] = 0;\n\t\t\t\tv[webgl.M02] = 0;\n\t\t\t\tv[webgl.M12] = 0;\n\t\t\t\tv[webgl.M22] = z_orth;\n\t\t\t\tv[webgl.M32] = 0;\n\t\t\t\tv[webgl.M03] = tx;\n\t\t\t\tv[webgl.M13] = ty;\n\t\t\t\tv[webgl.M23] = tz;\n\t\t\t\tv[webgl.M33] = 1;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tMatrix4.prototype.multiply = function (matrix) {\n\t\t\t\tvar t = this.temp;\n\t\t\t\tvar v = this.values;\n\t\t\t\tvar m = matrix.values;\n\t\t\t\tt[webgl.M00] = v[webgl.M00] * m[webgl.M00] + v[webgl.M01] * m[webgl.M10] + v[webgl.M02] * m[webgl.M20] + v[webgl.M03] * m[webgl.M30];\n\t\t\t\tt[webgl.M01] = v[webgl.M00] * m[webgl.M01] + v[webgl.M01] * m[webgl.M11] + v[webgl.M02] * m[webgl.M21] + v[webgl.M03] * m[webgl.M31];\n\t\t\t\tt[webgl.M02] = v[webgl.M00] * m[webgl.M02] + v[webgl.M01] * m[webgl.M12] + v[webgl.M02] * m[webgl.M22] + v[webgl.M03] * m[webgl.M32];\n\t\t\t\tt[webgl.M03] = v[webgl.M00] * m[webgl.M03] + v[webgl.M01] * m[webgl.M13] + v[webgl.M02] * m[webgl.M23] + v[webgl.M03] * m[webgl.M33];\n\t\t\t\tt[webgl.M10] = v[webgl.M10] * m[webgl.M00] + v[webgl.M11] * m[webgl.M10] + v[webgl.M12] * m[webgl.M20] + v[webgl.M13] * m[webgl.M30];\n\t\t\t\tt[webgl.M11] = v[webgl.M10] * m[webgl.M01] + v[webgl.M11] * m[webgl.M11] + v[webgl.M12] * m[webgl.M21] + v[webgl.M13] * m[webgl.M31];\n\t\t\t\tt[webgl.M12] = v[webgl.M10] * m[webgl.M02] + v[webgl.M11] * m[webgl.M12] + v[webgl.M12] * m[webgl.M22] + v[webgl.M13] * m[webgl.M32];\n\t\t\t\tt[webgl.M13] = v[webgl.M10] * m[webgl.M03] + v[webgl.M11] * m[webgl.M13] + v[webgl.M12] * m[webgl.M23] + v[webgl.M13] * m[webgl.M33];\n\t\t\t\tt[webgl.M20] = v[webgl.M20] * m[webgl.M00] + v[webgl.M21] * m[webgl.M10] + v[webgl.M22] * m[webgl.M20] + v[webgl.M23] * m[webgl.M30];\n\t\t\t\tt[webgl.M21] = v[webgl.M20] * m[webgl.M01] + v[webgl.M21] * m[webgl.M11] + v[webgl.M22] * m[webgl.M21] + v[webgl.M23] * m[webgl.M31];\n\t\t\t\tt[webgl.M22] = v[webgl.M20] * m[webgl.M02] + v[webgl.M21] * m[webgl.M12] + v[webgl.M22] * m[webgl.M22] + v[webgl.M23] * m[webgl.M32];\n\t\t\t\tt[webgl.M23] = v[webgl.M20] * m[webgl.M03] + v[webgl.M21] * m[webgl.M13] + v[webgl.M22] * m[webgl.M23] + v[webgl.M23] * m[webgl.M33];\n\t\t\t\tt[webgl.M30] = v[webgl.M30] * m[webgl.M00] + v[webgl.M31] * m[webgl.M10] + v[webgl.M32] * m[webgl.M20] + v[webgl.M33] * m[webgl.M30];\n\t\t\t\tt[webgl.M31] = v[webgl.M30] * m[webgl.M01] + v[webgl.M31] * m[webgl.M11] + v[webgl.M32] * m[webgl.M21] + v[webgl.M33] * m[webgl.M31];\n\t\t\t\tt[webgl.M32] = v[webgl.M30] * m[webgl.M02] + v[webgl.M31] * m[webgl.M12] + v[webgl.M32] * m[webgl.M22] + v[webgl.M33] * m[webgl.M32];\n\t\t\t\tt[webgl.M33] = v[webgl.M30] * m[webgl.M03] + v[webgl.M31] * m[webgl.M13] + v[webgl.M32] * m[webgl.M23] + v[webgl.M33] * m[webgl.M33];\n\t\t\t\treturn this.set(this.temp);\n\t\t\t};\n\t\t\tMatrix4.prototype.multiplyLeft = function (matrix) {\n\t\t\t\tvar t = this.temp;\n\t\t\t\tvar v = this.values;\n\t\t\t\tvar m = matrix.values;\n\t\t\t\tt[webgl.M00] = m[webgl.M00] * v[webgl.M00] + m[webgl.M01] * v[webgl.M10] + m[webgl.M02] * v[webgl.M20] + m[webgl.M03] * v[webgl.M30];\n\t\t\t\tt[webgl.M01] = m[webgl.M00] * v[webgl.M01] + m[webgl.M01] * v[webgl.M11] + m[webgl.M02] * v[webgl.M21] + m[webgl.M03] * v[webgl.M31];\n\t\t\t\tt[webgl.M02] = m[webgl.M00] * v[webgl.M02] + m[webgl.M01] * v[webgl.M12] + m[webgl.M02] * v[webgl.M22] + m[webgl.M03] * v[webgl.M32];\n\t\t\t\tt[webgl.M03] = m[webgl.M00] * v[webgl.M03] + m[webgl.M01] * v[webgl.M13] + m[webgl.M02] * v[webgl.M23] + m[webgl.M03] * v[webgl.M33];\n\t\t\t\tt[webgl.M10] = m[webgl.M10] * v[webgl.M00] + m[webgl.M11] * v[webgl.M10] + m[webgl.M12] * v[webgl.M20] + m[webgl.M13] * v[webgl.M30];\n\t\t\t\tt[webgl.M11] = m[webgl.M10] * v[webgl.M01] + m[webgl.M11] * v[webgl.M11] + m[webgl.M12] * v[webgl.M21] + m[webgl.M13] * v[webgl.M31];\n\t\t\t\tt[webgl.M12] = m[webgl.M10] * v[webgl.M02] + m[webgl.M11] * v[webgl.M12] + m[webgl.M12] * v[webgl.M22] + m[webgl.M13] * v[webgl.M32];\n\t\t\t\tt[webgl.M13] = m[webgl.M10] * v[webgl.M03] + m[webgl.M11] * v[webgl.M13] + m[webgl.M12] * v[webgl.M23] + m[webgl.M13] * v[webgl.M33];\n\t\t\t\tt[webgl.M20] = m[webgl.M20] * v[webgl.M00] + m[webgl.M21] * v[webgl.M10] + m[webgl.M22] * v[webgl.M20] + m[webgl.M23] * v[webgl.M30];\n\t\t\t\tt[webgl.M21] = m[webgl.M20] * v[webgl.M01] + m[webgl.M21] * v[webgl.M11] + m[webgl.M22] * v[webgl.M21] + m[webgl.M23] * v[webgl.M31];\n\t\t\t\tt[webgl.M22] = m[webgl.M20] * v[webgl.M02] + m[webgl.M21] * v[webgl.M12] + m[webgl.M22] * v[webgl.M22] + m[webgl.M23] * v[webgl.M32];\n\t\t\t\tt[webgl.M23] = m[webgl.M20] * v[webgl.M03] + m[webgl.M21] * v[webgl.M13] + m[webgl.M22] * v[webgl.M23] + m[webgl.M23] * v[webgl.M33];\n\t\t\t\tt[webgl.M30] = m[webgl.M30] * v[webgl.M00] + m[webgl.M31] * v[webgl.M10] + m[webgl.M32] * v[webgl.M20] + m[webgl.M33] * v[webgl.M30];\n\t\t\t\tt[webgl.M31] = m[webgl.M30] * v[webgl.M01] + m[webgl.M31] * v[webgl.M11] + m[webgl.M32] * v[webgl.M21] + m[webgl.M33] * v[webgl.M31];\n\t\t\t\tt[webgl.M32] = m[webgl.M30] * v[webgl.M02] + m[webgl.M31] * v[webgl.M12] + m[webgl.M32] * v[webgl.M22] + m[webgl.M33] * v[webgl.M32];\n\t\t\t\tt[webgl.M33] = m[webgl.M30] * v[webgl.M03] + m[webgl.M31] * v[webgl.M13] + m[webgl.M32] * v[webgl.M23] + m[webgl.M33] * v[webgl.M33];\n\t\t\t\treturn this.set(this.temp);\n\t\t\t};\n\t\t\tMatrix4.prototype.lookAt = function (position, direction, up) {\n\t\t\t\tMatrix4.initTemps();\n\t\t\t\tvar xAxis = Matrix4.xAxis, yAxis = Matrix4.yAxis, zAxis = Matrix4.zAxis;\n\t\t\t\tzAxis.setFrom(direction).normalize();\n\t\t\t\txAxis.setFrom(direction).normalize();\n\t\t\t\txAxis.cross(up).normalize();\n\t\t\t\tyAxis.setFrom(xAxis).cross(zAxis).normalize();\n\t\t\t\tthis.identity();\n\t\t\t\tvar val = this.values;\n\t\t\t\tval[webgl.M00] = xAxis.x;\n\t\t\t\tval[webgl.M01] = xAxis.y;\n\t\t\t\tval[webgl.M02] = xAxis.z;\n\t\t\t\tval[webgl.M10] = yAxis.x;\n\t\t\t\tval[webgl.M11] = yAxis.y;\n\t\t\t\tval[webgl.M12] = yAxis.z;\n\t\t\t\tval[webgl.M20] = -zAxis.x;\n\t\t\t\tval[webgl.M21] = -zAxis.y;\n\t\t\t\tval[webgl.M22] = -zAxis.z;\n\t\t\t\tMatrix4.tmpMatrix.identity();\n\t\t\t\tMatrix4.tmpMatrix.values[webgl.M03] = -position.x;\n\t\t\t\tMatrix4.tmpMatrix.values[webgl.M13] = -position.y;\n\t\t\t\tMatrix4.tmpMatrix.values[webgl.M23] = -position.z;\n\t\t\t\tthis.multiply(Matrix4.tmpMatrix);\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tMatrix4.initTemps = function () {\n\t\t\t\tif (Matrix4.xAxis === null)\n\t\t\t\t\tMatrix4.xAxis = new webgl.Vector3();\n\t\t\t\tif (Matrix4.yAxis === null)\n\t\t\t\t\tMatrix4.yAxis = new webgl.Vector3();\n\t\t\t\tif (Matrix4.zAxis === null)\n\t\t\t\t\tMatrix4.zAxis = new webgl.Vector3();\n\t\t\t};\n\t\t\tMatrix4.xAxis = null;\n\t\t\tMatrix4.yAxis = null;\n\t\t\tMatrix4.zAxis = null;\n\t\t\tMatrix4.tmpMatrix = new Matrix4();\n\t\t\treturn Matrix4;\n\t\t}());\n\t\twebgl.Matrix4 = Matrix4;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar Mesh = (function () {\n\t\t\tfunction Mesh(context, attributes, maxVertices, maxIndices) {\n\t\t\t\tthis.attributes = attributes;\n\t\t\t\tthis.verticesLength = 0;\n\t\t\t\tthis.dirtyVertices = false;\n\t\t\t\tthis.indicesLength = 0;\n\t\t\t\tthis.dirtyIndices = false;\n\t\t\t\tthis.elementsPerVertex = 0;\n\t\t\t\tthis.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context);\n\t\t\t\tthis.elementsPerVertex = 0;\n\t\t\t\tfor (var i = 0; i < attributes.length; i++) {\n\t\t\t\t\tthis.elementsPerVertex += attributes[i].numElements;\n\t\t\t\t}\n\t\t\t\tthis.vertices = new Float32Array(maxVertices * this.elementsPerVertex);\n\t\t\t\tthis.indices = new Uint16Array(maxIndices);\n\t\t\t\tthis.context.addRestorable(this);\n\t\t\t}\n\t\t\tMesh.prototype.getAttributes = function () { return this.attributes; };\n\t\t\tMesh.prototype.maxVertices = function () { return this.vertices.length / this.elementsPerVertex; };\n\t\t\tMesh.prototype.numVertices = function () { return this.verticesLength / this.elementsPerVertex; };\n\t\t\tMesh.prototype.setVerticesLength = function (length) {\n\t\t\t\tthis.dirtyVertices = true;\n\t\t\t\tthis.verticesLength = length;\n\t\t\t};\n\t\t\tMesh.prototype.getVertices = function () { return this.vertices; };\n\t\t\tMesh.prototype.maxIndices = function () { return this.indices.length; };\n\t\t\tMesh.prototype.numIndices = function () { return this.indicesLength; };\n\t\t\tMesh.prototype.setIndicesLength = function (length) {\n\t\t\t\tthis.dirtyIndices = true;\n\t\t\t\tthis.indicesLength = length;\n\t\t\t};\n\t\t\tMesh.prototype.getIndices = function () { return this.indices; };\n\t\t\t;\n\t\t\tMesh.prototype.getVertexSizeInFloats = function () {\n\t\t\t\tvar size = 0;\n\t\t\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\t\t\tvar attribute = this.attributes[i];\n\t\t\t\t\tsize += attribute.numElements;\n\t\t\t\t}\n\t\t\t\treturn size;\n\t\t\t};\n\t\t\tMesh.prototype.setVertices = function (vertices) {\n\t\t\t\tthis.dirtyVertices = true;\n\t\t\t\tif (vertices.length > this.vertices.length)\n\t\t\t\t\tthrow Error(\"Mesh can't store more than \" + this.maxVertices() + \" vertices\");\n\t\t\t\tthis.vertices.set(vertices, 0);\n\t\t\t\tthis.verticesLength = vertices.length;\n\t\t\t};\n\t\t\tMesh.prototype.setIndices = function (indices) {\n\t\t\t\tthis.dirtyIndices = true;\n\t\t\t\tif (indices.length > this.indices.length)\n\t\t\t\t\tthrow Error(\"Mesh can't store more than \" + this.maxIndices() + \" indices\");\n\t\t\t\tthis.indices.set(indices, 0);\n\t\t\t\tthis.indicesLength = indices.length;\n\t\t\t};\n\t\t\tMesh.prototype.draw = function (shader, primitiveType) {\n\t\t\t\tthis.drawWithOffset(shader, primitiveType, 0, this.indicesLength > 0 ? this.indicesLength : this.verticesLength / this.elementsPerVertex);\n\t\t\t};\n\t\t\tMesh.prototype.drawWithOffset = function (shader, primitiveType, offset, count) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tif (this.dirtyVertices || this.dirtyIndices)\n\t\t\t\t\tthis.update();\n\t\t\t\tthis.bind(shader);\n\t\t\t\tif (this.indicesLength > 0) {\n\t\t\t\t\tgl.drawElements(primitiveType, count, gl.UNSIGNED_SHORT, offset * 2);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tgl.drawArrays(primitiveType, offset, count);\n\t\t\t\t}\n\t\t\t\tthis.unbind(shader);\n\t\t\t};\n\t\t\tMesh.prototype.bind = function (shader) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer);\n\t\t\t\tvar offset = 0;\n\t\t\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\t\t\tvar attrib = this.attributes[i];\n\t\t\t\t\tvar location_1 = shader.getAttributeLocation(attrib.name);\n\t\t\t\t\tgl.enableVertexAttribArray(location_1);\n\t\t\t\t\tgl.vertexAttribPointer(location_1, attrib.numElements, gl.FLOAT, false, this.elementsPerVertex * 4, offset * 4);\n\t\t\t\t\toffset += attrib.numElements;\n\t\t\t\t}\n\t\t\t\tif (this.indicesLength > 0)\n\t\t\t\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n\t\t\t};\n\t\t\tMesh.prototype.unbind = function (shader) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\t\t\tvar attrib = this.attributes[i];\n\t\t\t\t\tvar location_2 = shader.getAttributeLocation(attrib.name);\n\t\t\t\t\tgl.disableVertexAttribArray(location_2);\n\t\t\t\t}\n\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\t\t\tif (this.indicesLength > 0)\n\t\t\t\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n\t\t\t};\n\t\t\tMesh.prototype.update = function () {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tif (this.dirtyVertices) {\n\t\t\t\t\tif (!this.verticesBuffer) {\n\t\t\t\t\t\tthis.verticesBuffer = gl.createBuffer();\n\t\t\t\t\t}\n\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer);\n\t\t\t\t\tgl.bufferData(gl.ARRAY_BUFFER, this.vertices.subarray(0, this.verticesLength), gl.DYNAMIC_DRAW);\n\t\t\t\t\tthis.dirtyVertices = false;\n\t\t\t\t}\n\t\t\t\tif (this.dirtyIndices) {\n\t\t\t\t\tif (!this.indicesBuffer) {\n\t\t\t\t\t\tthis.indicesBuffer = gl.createBuffer();\n\t\t\t\t\t}\n\t\t\t\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n\t\t\t\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices.subarray(0, this.indicesLength), gl.DYNAMIC_DRAW);\n\t\t\t\t\tthis.dirtyIndices = false;\n\t\t\t\t}\n\t\t\t};\n\t\t\tMesh.prototype.restore = function () {\n\t\t\t\tthis.verticesBuffer = null;\n\t\t\t\tthis.indicesBuffer = null;\n\t\t\t\tthis.update();\n\t\t\t};\n\t\t\tMesh.prototype.dispose = function () {\n\t\t\t\tthis.context.removeRestorable(this);\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tgl.deleteBuffer(this.verticesBuffer);\n\t\t\t\tgl.deleteBuffer(this.indicesBuffer);\n\t\t\t};\n\t\t\treturn Mesh;\n\t\t}());\n\t\twebgl.Mesh = Mesh;\n\t\tvar VertexAttribute = (function () {\n\t\t\tfunction VertexAttribute(name, type, numElements) {\n\t\t\t\tthis.name = name;\n\t\t\t\tthis.type = type;\n\t\t\t\tthis.numElements = numElements;\n\t\t\t}\n\t\t\treturn VertexAttribute;\n\t\t}());\n\t\twebgl.VertexAttribute = VertexAttribute;\n\t\tvar Position2Attribute = (function (_super) {\n\t\t\t__extends(Position2Attribute, _super);\n\t\t\tfunction Position2Attribute() {\n\t\t\t\treturn _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 2) || this;\n\t\t\t}\n\t\t\treturn Position2Attribute;\n\t\t}(VertexAttribute));\n\t\twebgl.Position2Attribute = Position2Attribute;\n\t\tvar Position3Attribute = (function (_super) {\n\t\t\t__extends(Position3Attribute, _super);\n\t\t\tfunction Position3Attribute() {\n\t\t\t\treturn _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 3) || this;\n\t\t\t}\n\t\t\treturn Position3Attribute;\n\t\t}(VertexAttribute));\n\t\twebgl.Position3Attribute = Position3Attribute;\n\t\tvar TexCoordAttribute = (function (_super) {\n\t\t\t__extends(TexCoordAttribute, _super);\n\t\t\tfunction TexCoordAttribute(unit) {\n\t\t\t\tif (unit === void 0) { unit = 0; }\n\t\t\t\treturn _super.call(this, webgl.Shader.TEXCOORDS + (unit == 0 ? \"\" : unit), VertexAttributeType.Float, 2) || this;\n\t\t\t}\n\t\t\treturn TexCoordAttribute;\n\t\t}(VertexAttribute));\n\t\twebgl.TexCoordAttribute = TexCoordAttribute;\n\t\tvar ColorAttribute = (function (_super) {\n\t\t\t__extends(ColorAttribute, _super);\n\t\t\tfunction ColorAttribute() {\n\t\t\t\treturn _super.call(this, webgl.Shader.COLOR, VertexAttributeType.Float, 4) || this;\n\t\t\t}\n\t\t\treturn ColorAttribute;\n\t\t}(VertexAttribute));\n\t\twebgl.ColorAttribute = ColorAttribute;\n\t\tvar Color2Attribute = (function (_super) {\n\t\t\t__extends(Color2Attribute, _super);\n\t\t\tfunction Color2Attribute() {\n\t\t\t\treturn _super.call(this, webgl.Shader.COLOR2, VertexAttributeType.Float, 4) || this;\n\t\t\t}\n\t\t\treturn Color2Attribute;\n\t\t}(VertexAttribute));\n\t\twebgl.Color2Attribute = Color2Attribute;\n\t\tvar VertexAttributeType;\n\t\t(function (VertexAttributeType) {\n\t\t\tVertexAttributeType[VertexAttributeType[\"Float\"] = 0] = \"Float\";\n\t\t})(VertexAttributeType = webgl.VertexAttributeType || (webgl.VertexAttributeType = {}));\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar PolygonBatcher = (function () {\n\t\t\tfunction PolygonBatcher(context, twoColorTint, maxVertices) {\n\t\t\t\tif (twoColorTint === void 0) { twoColorTint = true; }\n\t\t\t\tif (maxVertices === void 0) { maxVertices = 10920; }\n\t\t\t\tthis.isDrawing = false;\n\t\t\t\tthis.shader = null;\n\t\t\t\tthis.lastTexture = null;\n\t\t\t\tthis.verticesLength = 0;\n\t\t\t\tthis.indicesLength = 0;\n\t\t\t\tif (maxVertices > 10920)\n\t\t\t\t\tthrow new Error(\"Can't have more than 10920 triangles per batch: \" + maxVertices);\n\t\t\t\tthis.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context);\n\t\t\t\tvar attributes = twoColorTint ?\n\t\t\t\t\t[new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute(), new webgl.Color2Attribute()] :\n\t\t\t\t\t[new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute()];\n\t\t\t\tthis.mesh = new webgl.Mesh(context, attributes, maxVertices, maxVertices * 3);\n\t\t\t\tthis.srcBlend = this.context.gl.SRC_ALPHA;\n\t\t\t\tthis.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA;\n\t\t\t}\n\t\t\tPolygonBatcher.prototype.begin = function (shader) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tif (this.isDrawing)\n\t\t\t\t\tthrow new Error(\"PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()\");\n\t\t\t\tthis.drawCalls = 0;\n\t\t\t\tthis.shader = shader;\n\t\t\t\tthis.lastTexture = null;\n\t\t\t\tthis.isDrawing = true;\n\t\t\t\tgl.enable(gl.BLEND);\n\t\t\t\tgl.blendFunc(this.srcBlend, this.dstBlend);\n\t\t\t};\n\t\t\tPolygonBatcher.prototype.setBlendMode = function (srcBlend, dstBlend) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.srcBlend = srcBlend;\n\t\t\t\tthis.dstBlend = dstBlend;\n\t\t\t\tif (this.isDrawing) {\n\t\t\t\t\tthis.flush();\n\t\t\t\t\tgl.blendFunc(this.srcBlend, this.dstBlend);\n\t\t\t\t}\n\t\t\t};\n\t\t\tPolygonBatcher.prototype.draw = function (texture, vertices, indices) {\n\t\t\t\tif (texture != this.lastTexture) {\n\t\t\t\t\tthis.flush();\n\t\t\t\t\tthis.lastTexture = texture;\n\t\t\t\t}\n\t\t\t\telse if (this.verticesLength + vertices.length > this.mesh.getVertices().length ||\n\t\t\t\t\tthis.indicesLength + indices.length > this.mesh.getIndices().length) {\n\t\t\t\t\tthis.flush();\n\t\t\t\t}\n\t\t\t\tvar indexStart = this.mesh.numVertices();\n\t\t\t\tthis.mesh.getVertices().set(vertices, this.verticesLength);\n\t\t\t\tthis.verticesLength += vertices.length;\n\t\t\t\tthis.mesh.setVerticesLength(this.verticesLength);\n\t\t\t\tvar indicesArray = this.mesh.getIndices();\n\t\t\t\tfor (var i = this.indicesLength, j = 0; j < indices.length; i++, j++)\n\t\t\t\t\tindicesArray[i] = indices[j] + indexStart;\n\t\t\t\tthis.indicesLength += indices.length;\n\t\t\t\tthis.mesh.setIndicesLength(this.indicesLength);\n\t\t\t};\n\t\t\tPolygonBatcher.prototype.flush = function () {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tif (this.verticesLength == 0)\n\t\t\t\t\treturn;\n\t\t\t\tthis.lastTexture.bind();\n\t\t\t\tthis.mesh.draw(this.shader, gl.TRIANGLES);\n\t\t\t\tthis.verticesLength = 0;\n\t\t\t\tthis.indicesLength = 0;\n\t\t\t\tthis.mesh.setVerticesLength(0);\n\t\t\t\tthis.mesh.setIndicesLength(0);\n\t\t\t\tthis.drawCalls++;\n\t\t\t};\n\t\t\tPolygonBatcher.prototype.end = function () {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tif (!this.isDrawing)\n\t\t\t\t\tthrow new Error(\"PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()\");\n\t\t\t\tif (this.verticesLength > 0 || this.indicesLength > 0)\n\t\t\t\t\tthis.flush();\n\t\t\t\tthis.shader = null;\n\t\t\t\tthis.lastTexture = null;\n\t\t\t\tthis.isDrawing = false;\n\t\t\t\tgl.disable(gl.BLEND);\n\t\t\t};\n\t\t\tPolygonBatcher.prototype.getDrawCalls = function () { return this.drawCalls; };\n\t\t\tPolygonBatcher.prototype.dispose = function () {\n\t\t\t\tthis.mesh.dispose();\n\t\t\t};\n\t\t\treturn PolygonBatcher;\n\t\t}());\n\t\twebgl.PolygonBatcher = PolygonBatcher;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar SceneRenderer = (function () {\n\t\t\tfunction SceneRenderer(canvas, context, twoColorTint) {\n\t\t\t\tif (twoColorTint === void 0) { twoColorTint = true; }\n\t\t\t\tthis.twoColorTint = false;\n\t\t\t\tthis.activeRenderer = null;\n\t\t\t\tthis.QUAD = [\n\t\t\t\t\t0, 0, 1, 1, 1, 1, 0, 0,\n\t\t\t\t\t0, 0, 1, 1, 1, 1, 0, 0,\n\t\t\t\t\t0, 0, 1, 1, 1, 1, 0, 0,\n\t\t\t\t\t0, 0, 1, 1, 1, 1, 0, 0,\n\t\t\t\t];\n\t\t\t\tthis.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\n\t\t\t\tthis.WHITE = new spine.Color(1, 1, 1, 1);\n\t\t\t\tthis.canvas = canvas;\n\t\t\t\tthis.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context);\n\t\t\t\tthis.twoColorTint = twoColorTint;\n\t\t\t\tthis.camera = new webgl.OrthoCamera(canvas.width, canvas.height);\n\t\t\t\tthis.batcherShader = twoColorTint ? webgl.Shader.newTwoColoredTextured(this.context) : webgl.Shader.newColoredTextured(this.context);\n\t\t\t\tthis.batcher = new webgl.PolygonBatcher(this.context, twoColorTint);\n\t\t\t\tthis.shapesShader = webgl.Shader.newColored(this.context);\n\t\t\t\tthis.shapes = new webgl.ShapeRenderer(this.context);\n\t\t\t\tthis.skeletonRenderer = new webgl.SkeletonRenderer(this.context, twoColorTint);\n\t\t\t\tthis.skeletonDebugRenderer = new webgl.SkeletonDebugRenderer(this.context);\n\t\t\t}\n\t\t\tSceneRenderer.prototype.begin = function () {\n\t\t\t\tthis.camera.update();\n\t\t\t\tthis.enableRenderer(this.batcher);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha, slotRangeStart, slotRangeEnd) {\n\t\t\t\tif (premultipliedAlpha === void 0) { premultipliedAlpha = false; }\n\t\t\t\tif (slotRangeStart === void 0) { slotRangeStart = -1; }\n\t\t\t\tif (slotRangeEnd === void 0) { slotRangeEnd = -1; }\n\t\t\t\tthis.enableRenderer(this.batcher);\n\t\t\t\tthis.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;\n\t\t\t\tthis.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) {\n\t\t\t\tif (premultipliedAlpha === void 0) { premultipliedAlpha = false; }\n\t\t\t\tif (ignoredBones === void 0) { ignoredBones = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.skeletonDebugRenderer.premultipliedAlpha = premultipliedAlpha;\n\t\t\t\tthis.skeletonDebugRenderer.draw(this.shapes, skeleton, ignoredBones);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.drawTexture = function (texture, x, y, width, height, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.enableRenderer(this.batcher);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.WHITE;\n\t\t\t\tvar quad = this.QUAD;\n\t\t\t\tvar i = 0;\n\t\t\t\tquad[i++] = x;\n\t\t\t\tquad[i++] = y;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x + width;\n\t\t\t\tquad[i++] = y;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x + width;\n\t\t\t\tquad[i++] = y + height;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x;\n\t\t\t\tquad[i++] = y + height;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tthis.batcher.draw(texture, quad, this.QUAD_TRIANGLES);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.drawTextureUV = function (texture, x, y, width, height, u, v, u2, v2, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.enableRenderer(this.batcher);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.WHITE;\n\t\t\t\tvar quad = this.QUAD;\n\t\t\t\tvar i = 0;\n\t\t\t\tquad[i++] = x;\n\t\t\t\tquad[i++] = y;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = u;\n\t\t\t\tquad[i++] = v;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x + width;\n\t\t\t\tquad[i++] = y;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = u2;\n\t\t\t\tquad[i++] = v;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x + width;\n\t\t\t\tquad[i++] = y + height;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = u2;\n\t\t\t\tquad[i++] = v2;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x;\n\t\t\t\tquad[i++] = y + height;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = u;\n\t\t\t\tquad[i++] = v2;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tthis.batcher.draw(texture, quad, this.QUAD_TRIANGLES);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.drawTextureRotated = function (texture, x, y, width, height, pivotX, pivotY, angle, color, premultipliedAlpha) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (premultipliedAlpha === void 0) { premultipliedAlpha = false; }\n\t\t\t\tthis.enableRenderer(this.batcher);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.WHITE;\n\t\t\t\tvar quad = this.QUAD;\n\t\t\t\tvar worldOriginX = x + pivotX;\n\t\t\t\tvar worldOriginY = y + pivotY;\n\t\t\t\tvar fx = -pivotX;\n\t\t\t\tvar fy = -pivotY;\n\t\t\t\tvar fx2 = width - pivotX;\n\t\t\t\tvar fy2 = height - pivotY;\n\t\t\t\tvar p1x = fx;\n\t\t\t\tvar p1y = fy;\n\t\t\t\tvar p2x = fx;\n\t\t\t\tvar p2y = fy2;\n\t\t\t\tvar p3x = fx2;\n\t\t\t\tvar p3y = fy2;\n\t\t\t\tvar p4x = fx2;\n\t\t\t\tvar p4y = fy;\n\t\t\t\tvar x1 = 0;\n\t\t\t\tvar y1 = 0;\n\t\t\t\tvar x2 = 0;\n\t\t\t\tvar y2 = 0;\n\t\t\t\tvar x3 = 0;\n\t\t\t\tvar y3 = 0;\n\t\t\t\tvar x4 = 0;\n\t\t\t\tvar y4 = 0;\n\t\t\t\tif (angle != 0) {\n\t\t\t\t\tvar cos = spine.MathUtils.cosDeg(angle);\n\t\t\t\t\tvar sin = spine.MathUtils.sinDeg(angle);\n\t\t\t\t\tx1 = cos * p1x - sin * p1y;\n\t\t\t\t\ty1 = sin * p1x + cos * p1y;\n\t\t\t\t\tx4 = cos * p2x - sin * p2y;\n\t\t\t\t\ty4 = sin * p2x + cos * p2y;\n\t\t\t\t\tx3 = cos * p3x - sin * p3y;\n\t\t\t\t\ty3 = sin * p3x + cos * p3y;\n\t\t\t\t\tx2 = x3 + (x1 - x4);\n\t\t\t\t\ty2 = y3 + (y1 - y4);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tx1 = p1x;\n\t\t\t\t\ty1 = p1y;\n\t\t\t\t\tx4 = p2x;\n\t\t\t\t\ty4 = p2y;\n\t\t\t\t\tx3 = p3x;\n\t\t\t\t\ty3 = p3y;\n\t\t\t\t\tx2 = p4x;\n\t\t\t\t\ty2 = p4y;\n\t\t\t\t}\n\t\t\t\tx1 += worldOriginX;\n\t\t\t\ty1 += worldOriginY;\n\t\t\t\tx2 += worldOriginX;\n\t\t\t\ty2 += worldOriginY;\n\t\t\t\tx3 += worldOriginX;\n\t\t\t\ty3 += worldOriginY;\n\t\t\t\tx4 += worldOriginX;\n\t\t\t\ty4 += worldOriginY;\n\t\t\t\tvar i = 0;\n\t\t\t\tquad[i++] = x1;\n\t\t\t\tquad[i++] = y1;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x2;\n\t\t\t\tquad[i++] = y2;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x3;\n\t\t\t\tquad[i++] = y3;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 1;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x4;\n\t\t\t\tquad[i++] = y4;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tquad[i++] = 0;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tthis.batcher.draw(texture, quad, this.QUAD_TRIANGLES);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.drawRegion = function (region, x, y, width, height, color, premultipliedAlpha) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (premultipliedAlpha === void 0) { premultipliedAlpha = false; }\n\t\t\t\tthis.enableRenderer(this.batcher);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.WHITE;\n\t\t\t\tvar quad = this.QUAD;\n\t\t\t\tvar i = 0;\n\t\t\t\tquad[i++] = x;\n\t\t\t\tquad[i++] = y;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = region.u;\n\t\t\t\tquad[i++] = region.v2;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x + width;\n\t\t\t\tquad[i++] = y;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = region.u2;\n\t\t\t\tquad[i++] = region.v2;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x + width;\n\t\t\t\tquad[i++] = y + height;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = region.u2;\n\t\t\t\tquad[i++] = region.v;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tquad[i++] = x;\n\t\t\t\tquad[i++] = y + height;\n\t\t\t\tquad[i++] = color.r;\n\t\t\t\tquad[i++] = color.g;\n\t\t\t\tquad[i++] = color.b;\n\t\t\t\tquad[i++] = color.a;\n\t\t\t\tquad[i++] = region.u;\n\t\t\t\tquad[i++] = region.v;\n\t\t\t\tif (this.twoColorTint) {\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t\tquad[i++] = 0;\n\t\t\t\t}\n\t\t\t\tthis.batcher.draw(region.texture, quad, this.QUAD_TRIANGLES);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.line = function (x, y, x2, y2, color, color2) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (color2 === void 0) { color2 = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.line(x, y, x2, y2, color);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (color2 === void 0) { color2 = null; }\n\t\t\t\tif (color3 === void 0) { color3 = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (color2 === void 0) { color2 = null; }\n\t\t\t\tif (color3 === void 0) { color3 = null; }\n\t\t\t\tif (color4 === void 0) { color4 = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.rect = function (filled, x, y, width, height, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.rect(filled, x, y, width, height, color);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.rectLine(filled, x1, y1, x2, y2, width, color);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.polygon = function (polygonVertices, offset, count, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.polygon(polygonVertices, offset, count, color);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.circle = function (filled, x, y, radius, color, segments) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (segments === void 0) { segments = 0; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.circle(filled, x, y, radius, color, segments);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.enableRenderer(this.shapes);\n\t\t\t\tthis.shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color);\n\t\t\t};\n\t\t\tSceneRenderer.prototype.end = function () {\n\t\t\t\tif (this.activeRenderer === this.batcher)\n\t\t\t\t\tthis.batcher.end();\n\t\t\t\telse if (this.activeRenderer === this.shapes)\n\t\t\t\t\tthis.shapes.end();\n\t\t\t\tthis.activeRenderer = null;\n\t\t\t};\n\t\t\tSceneRenderer.prototype.resize = function (resizeMode) {\n\t\t\t\tvar canvas = this.canvas;\n\t\t\t\tvar w = canvas.clientWidth;\n\t\t\t\tvar h = canvas.clientHeight;\n\t\t\t\tif (canvas.width != w || canvas.height != h) {\n\t\t\t\t\tcanvas.width = w;\n\t\t\t\t\tcanvas.height = h;\n\t\t\t\t}\n\t\t\t\tthis.context.gl.viewport(0, 0, canvas.width, canvas.height);\n\t\t\t\tif (resizeMode === ResizeMode.Stretch) {\n\t\t\t\t}\n\t\t\t\telse if (resizeMode === ResizeMode.Expand) {\n\t\t\t\t\tthis.camera.setViewport(w, h);\n\t\t\t\t}\n\t\t\t\telse if (resizeMode === ResizeMode.Fit) {\n\t\t\t\t\tvar sourceWidth = canvas.width, sourceHeight = canvas.height;\n\t\t\t\t\tvar targetWidth = this.camera.viewportWidth, targetHeight = this.camera.viewportHeight;\n\t\t\t\t\tvar targetRatio = targetHeight / targetWidth;\n\t\t\t\t\tvar sourceRatio = sourceHeight / sourceWidth;\n\t\t\t\t\tvar scale = targetRatio < sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight;\n\t\t\t\t\tthis.camera.viewportWidth = sourceWidth * scale;\n\t\t\t\t\tthis.camera.viewportHeight = sourceHeight * scale;\n\t\t\t\t}\n\t\t\t\tthis.camera.update();\n\t\t\t};\n\t\t\tSceneRenderer.prototype.enableRenderer = function (renderer) {\n\t\t\t\tif (this.activeRenderer === renderer)\n\t\t\t\t\treturn;\n\t\t\t\tthis.end();\n\t\t\t\tif (renderer instanceof webgl.PolygonBatcher) {\n\t\t\t\t\tthis.batcherShader.bind();\n\t\t\t\t\tthis.batcherShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values);\n\t\t\t\t\tthis.batcherShader.setUniformi(\"u_texture\", 0);\n\t\t\t\t\tthis.batcher.begin(this.batcherShader);\n\t\t\t\t\tthis.activeRenderer = this.batcher;\n\t\t\t\t}\n\t\t\t\telse if (renderer instanceof webgl.ShapeRenderer) {\n\t\t\t\t\tthis.shapesShader.bind();\n\t\t\t\t\tthis.shapesShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values);\n\t\t\t\t\tthis.shapes.begin(this.shapesShader);\n\t\t\t\t\tthis.activeRenderer = this.shapes;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.activeRenderer = this.skeletonDebugRenderer;\n\t\t\t\t}\n\t\t\t};\n\t\t\tSceneRenderer.prototype.dispose = function () {\n\t\t\t\tthis.batcher.dispose();\n\t\t\t\tthis.batcherShader.dispose();\n\t\t\t\tthis.shapes.dispose();\n\t\t\t\tthis.shapesShader.dispose();\n\t\t\t\tthis.skeletonDebugRenderer.dispose();\n\t\t\t};\n\t\t\treturn SceneRenderer;\n\t\t}());\n\t\twebgl.SceneRenderer = SceneRenderer;\n\t\tvar ResizeMode;\n\t\t(function (ResizeMode) {\n\t\t\tResizeMode[ResizeMode[\"Stretch\"] = 0] = \"Stretch\";\n\t\t\tResizeMode[ResizeMode[\"Expand\"] = 1] = \"Expand\";\n\t\t\tResizeMode[ResizeMode[\"Fit\"] = 2] = \"Fit\";\n\t\t})(ResizeMode = webgl.ResizeMode || (webgl.ResizeMode = {}));\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar Shader = (function () {\n\t\t\tfunction Shader(context, vertexShader, fragmentShader) {\n\t\t\t\tthis.vertexShader = vertexShader;\n\t\t\t\tthis.fragmentShader = fragmentShader;\n\t\t\t\tthis.vs = null;\n\t\t\t\tthis.fs = null;\n\t\t\t\tthis.program = null;\n\t\t\t\tthis.tmp2x2 = new Float32Array(2 * 2);\n\t\t\t\tthis.tmp3x3 = new Float32Array(3 * 3);\n\t\t\t\tthis.tmp4x4 = new Float32Array(4 * 4);\n\t\t\t\tthis.vsSource = vertexShader;\n\t\t\t\tthis.fsSource = fragmentShader;\n\t\t\t\tthis.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context);\n\t\t\t\tthis.context.addRestorable(this);\n\t\t\t\tthis.compile();\n\t\t\t}\n\t\t\tShader.prototype.getProgram = function () { return this.program; };\n\t\t\tShader.prototype.getVertexShader = function () { return this.vertexShader; };\n\t\t\tShader.prototype.getFragmentShader = function () { return this.fragmentShader; };\n\t\t\tShader.prototype.getVertexShaderSource = function () { return this.vsSource; };\n\t\t\tShader.prototype.getFragmentSource = function () { return this.fsSource; };\n\t\t\tShader.prototype.compile = function () {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\ttry {\n\t\t\t\t\tthis.vs = this.compileShader(gl.VERTEX_SHADER, this.vertexShader);\n\t\t\t\t\tthis.fs = this.compileShader(gl.FRAGMENT_SHADER, this.fragmentShader);\n\t\t\t\t\tthis.program = this.compileProgram(this.vs, this.fs);\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tthis.dispose();\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t};\n\t\t\tShader.prototype.compileShader = function (type, source) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tvar shader = gl.createShader(type);\n\t\t\t\tgl.shaderSource(shader, source);\n\t\t\t\tgl.compileShader(shader);\n\t\t\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\t\t\tvar error = \"Couldn't compile shader: \" + gl.getShaderInfoLog(shader);\n\t\t\t\t\tgl.deleteShader(shader);\n\t\t\t\t\tif (!gl.isContextLost())\n\t\t\t\t\t\tthrow new Error(error);\n\t\t\t\t}\n\t\t\t\treturn shader;\n\t\t\t};\n\t\t\tShader.prototype.compileProgram = function (vs, fs) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tvar program = gl.createProgram();\n\t\t\t\tgl.attachShader(program, vs);\n\t\t\t\tgl.attachShader(program, fs);\n\t\t\t\tgl.linkProgram(program);\n\t\t\t\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\t\t\t\tvar error = \"Couldn't compile shader program: \" + gl.getProgramInfoLog(program);\n\t\t\t\t\tgl.deleteProgram(program);\n\t\t\t\t\tif (!gl.isContextLost())\n\t\t\t\t\t\tthrow new Error(error);\n\t\t\t\t}\n\t\t\t\treturn program;\n\t\t\t};\n\t\t\tShader.prototype.restore = function () {\n\t\t\t\tthis.compile();\n\t\t\t};\n\t\t\tShader.prototype.bind = function () {\n\t\t\t\tthis.context.gl.useProgram(this.program);\n\t\t\t};\n\t\t\tShader.prototype.unbind = function () {\n\t\t\t\tthis.context.gl.useProgram(null);\n\t\t\t};\n\t\t\tShader.prototype.setUniformi = function (uniform, value) {\n\t\t\t\tthis.context.gl.uniform1i(this.getUniformLocation(uniform), value);\n\t\t\t};\n\t\t\tShader.prototype.setUniformf = function (uniform, value) {\n\t\t\t\tthis.context.gl.uniform1f(this.getUniformLocation(uniform), value);\n\t\t\t};\n\t\t\tShader.prototype.setUniform2f = function (uniform, value, value2) {\n\t\t\t\tthis.context.gl.uniform2f(this.getUniformLocation(uniform), value, value2);\n\t\t\t};\n\t\t\tShader.prototype.setUniform3f = function (uniform, value, value2, value3) {\n\t\t\t\tthis.context.gl.uniform3f(this.getUniformLocation(uniform), value, value2, value3);\n\t\t\t};\n\t\t\tShader.prototype.setUniform4f = function (uniform, value, value2, value3, value4) {\n\t\t\t\tthis.context.gl.uniform4f(this.getUniformLocation(uniform), value, value2, value3, value4);\n\t\t\t};\n\t\t\tShader.prototype.setUniform2x2f = function (uniform, value) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.tmp2x2.set(value);\n\t\t\t\tgl.uniformMatrix2fv(this.getUniformLocation(uniform), false, this.tmp2x2);\n\t\t\t};\n\t\t\tShader.prototype.setUniform3x3f = function (uniform, value) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.tmp3x3.set(value);\n\t\t\t\tgl.uniformMatrix3fv(this.getUniformLocation(uniform), false, this.tmp3x3);\n\t\t\t};\n\t\t\tShader.prototype.setUniform4x4f = function (uniform, value) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.tmp4x4.set(value);\n\t\t\t\tgl.uniformMatrix4fv(this.getUniformLocation(uniform), false, this.tmp4x4);\n\t\t\t};\n\t\t\tShader.prototype.getUniformLocation = function (uniform) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tvar location = gl.getUniformLocation(this.program, uniform);\n\t\t\t\tif (!location && !gl.isContextLost())\n\t\t\t\t\tthrow new Error(\"Couldn't find location for uniform \" + uniform);\n\t\t\t\treturn location;\n\t\t\t};\n\t\t\tShader.prototype.getAttributeLocation = function (attribute) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tvar location = gl.getAttribLocation(this.program, attribute);\n\t\t\t\tif (location == -1 && !gl.isContextLost())\n\t\t\t\t\tthrow new Error(\"Couldn't find location for attribute \" + attribute);\n\t\t\t\treturn location;\n\t\t\t};\n\t\t\tShader.prototype.dispose = function () {\n\t\t\t\tthis.context.removeRestorable(this);\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tif (this.vs) {\n\t\t\t\t\tgl.deleteShader(this.vs);\n\t\t\t\t\tthis.vs = null;\n\t\t\t\t}\n\t\t\t\tif (this.fs) {\n\t\t\t\t\tgl.deleteShader(this.fs);\n\t\t\t\t\tthis.fs = null;\n\t\t\t\t}\n\t\t\t\tif (this.program) {\n\t\t\t\t\tgl.deleteProgram(this.program);\n\t\t\t\t\tthis.program = null;\n\t\t\t\t}\n\t\t\t};\n\t\t\tShader.newColoredTextured = function (context) {\n\t\t\t\tvar vs = \"\\n\\t\\t\\t\\tattribute vec4 \" + Shader.POSITION + \";\\n\\t\\t\\t\\tattribute vec4 \" + Shader.COLOR + \";\\n\\t\\t\\t\\tattribute vec2 \" + Shader.TEXCOORDS + \";\\n\\t\\t\\t\\tuniform mat4 \" + Shader.MVP_MATRIX + \";\\n\\t\\t\\t\\tvarying vec4 v_color;\\n\\t\\t\\t\\tvarying vec2 v_texCoords;\\n\\n\\t\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\\tv_color = \" + Shader.COLOR + \";\\n\\t\\t\\t\\t\\tv_texCoords = \" + Shader.TEXCOORDS + \";\\n\\t\\t\\t\\t\\tgl_Position = \" + Shader.MVP_MATRIX + \" * \" + Shader.POSITION + \";\\n\\t\\t\\t\\t}\\n\\t\\t\\t\";\n\t\t\t\tvar fs = \"\\n\\t\\t\\t\\t#ifdef GL_ES\\n\\t\\t\\t\\t\\t#define LOWP lowp\\n\\t\\t\\t\\t\\tprecision mediump float;\\n\\t\\t\\t\\t#else\\n\\t\\t\\t\\t\\t#define LOWP\\n\\t\\t\\t\\t#endif\\n\\t\\t\\t\\tvarying LOWP vec4 v_color;\\n\\t\\t\\t\\tvarying vec2 v_texCoords;\\n\\t\\t\\t\\tuniform sampler2D u_texture;\\n\\n\\t\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\\tgl_FragColor = v_color * texture2D(u_texture, v_texCoords);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\";\n\t\t\t\treturn new Shader(context, vs, fs);\n\t\t\t};\n\t\t\tShader.newTwoColoredTextured = function (context) {\n\t\t\t\tvar vs = \"\\n\\t\\t\\t\\tattribute vec4 \" + Shader.POSITION + \";\\n\\t\\t\\t\\tattribute vec4 \" + Shader.COLOR + \";\\n\\t\\t\\t\\tattribute vec4 \" + Shader.COLOR2 + \";\\n\\t\\t\\t\\tattribute vec2 \" + Shader.TEXCOORDS + \";\\n\\t\\t\\t\\tuniform mat4 \" + Shader.MVP_MATRIX + \";\\n\\t\\t\\t\\tvarying vec4 v_light;\\n\\t\\t\\t\\tvarying vec4 v_dark;\\n\\t\\t\\t\\tvarying vec2 v_texCoords;\\n\\n\\t\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\\tv_light = \" + Shader.COLOR + \";\\n\\t\\t\\t\\t\\tv_dark = \" + Shader.COLOR2 + \";\\n\\t\\t\\t\\t\\tv_texCoords = \" + Shader.TEXCOORDS + \";\\n\\t\\t\\t\\t\\tgl_Position = \" + Shader.MVP_MATRIX + \" * \" + Shader.POSITION + \";\\n\\t\\t\\t\\t}\\n\\t\\t\\t\";\n\t\t\t\tvar fs = \"\\n\\t\\t\\t\\t#ifdef GL_ES\\n\\t\\t\\t\\t\\t#define LOWP lowp\\n\\t\\t\\t\\t\\tprecision mediump float;\\n\\t\\t\\t\\t#else\\n\\t\\t\\t\\t\\t#define LOWP\\n\\t\\t\\t\\t#endif\\n\\t\\t\\t\\tvarying LOWP vec4 v_light;\\n\\t\\t\\t\\tvarying LOWP vec4 v_dark;\\n\\t\\t\\t\\tvarying vec2 v_texCoords;\\n\\t\\t\\t\\tuniform sampler2D u_texture;\\n\\n\\t\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\\tvec4 texColor = texture2D(u_texture, v_texCoords);\\n\\t\\t\\t\\t\\tgl_FragColor.a = texColor.a * v_light.a;\\n\\t\\t\\t\\t\\tgl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\";\n\t\t\t\treturn new Shader(context, vs, fs);\n\t\t\t};\n\t\t\tShader.newColored = function (context) {\n\t\t\t\tvar vs = \"\\n\\t\\t\\t\\tattribute vec4 \" + Shader.POSITION + \";\\n\\t\\t\\t\\tattribute vec4 \" + Shader.COLOR + \";\\n\\t\\t\\t\\tuniform mat4 \" + Shader.MVP_MATRIX + \";\\n\\t\\t\\t\\tvarying vec4 v_color;\\n\\n\\t\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\\tv_color = \" + Shader.COLOR + \";\\n\\t\\t\\t\\t\\tgl_Position = \" + Shader.MVP_MATRIX + \" * \" + Shader.POSITION + \";\\n\\t\\t\\t\\t}\\n\\t\\t\\t\";\n\t\t\t\tvar fs = \"\\n\\t\\t\\t\\t#ifdef GL_ES\\n\\t\\t\\t\\t\\t#define LOWP lowp\\n\\t\\t\\t\\t\\tprecision mediump float;\\n\\t\\t\\t\\t#else\\n\\t\\t\\t\\t\\t#define LOWP\\n\\t\\t\\t\\t#endif\\n\\t\\t\\t\\tvarying LOWP vec4 v_color;\\n\\n\\t\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\\tgl_FragColor = v_color;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\";\n\t\t\t\treturn new Shader(context, vs, fs);\n\t\t\t};\n\t\t\tShader.MVP_MATRIX = \"u_projTrans\";\n\t\t\tShader.POSITION = \"a_position\";\n\t\t\tShader.COLOR = \"a_color\";\n\t\t\tShader.COLOR2 = \"a_color2\";\n\t\t\tShader.TEXCOORDS = \"a_texCoords\";\n\t\t\tShader.SAMPLER = \"u_texture\";\n\t\t\treturn Shader;\n\t\t}());\n\t\twebgl.Shader = Shader;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar ShapeRenderer = (function () {\n\t\t\tfunction ShapeRenderer(context, maxVertices) {\n\t\t\t\tif (maxVertices === void 0) { maxVertices = 10920; }\n\t\t\t\tthis.isDrawing = false;\n\t\t\t\tthis.shapeType = ShapeType.Filled;\n\t\t\t\tthis.color = new spine.Color(1, 1, 1, 1);\n\t\t\t\tthis.vertexIndex = 0;\n\t\t\t\tthis.tmp = new spine.Vector2();\n\t\t\t\tif (maxVertices > 10920)\n\t\t\t\t\tthrow new Error(\"Can't have more than 10920 triangles per batch: \" + maxVertices);\n\t\t\t\tthis.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context);\n\t\t\t\tthis.mesh = new webgl.Mesh(context, [new webgl.Position2Attribute(), new webgl.ColorAttribute()], maxVertices, 0);\n\t\t\t\tthis.srcBlend = this.context.gl.SRC_ALPHA;\n\t\t\t\tthis.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA;\n\t\t\t}\n\t\t\tShapeRenderer.prototype.begin = function (shader) {\n\t\t\t\tif (this.isDrawing)\n\t\t\t\t\tthrow new Error(\"ShapeRenderer.begin() has already been called\");\n\t\t\t\tthis.shader = shader;\n\t\t\t\tthis.vertexIndex = 0;\n\t\t\t\tthis.isDrawing = true;\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tgl.enable(gl.BLEND);\n\t\t\t\tgl.blendFunc(this.srcBlend, this.dstBlend);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.setBlendMode = function (srcBlend, dstBlend) {\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tthis.srcBlend = srcBlend;\n\t\t\t\tthis.dstBlend = dstBlend;\n\t\t\t\tif (this.isDrawing) {\n\t\t\t\t\tthis.flush();\n\t\t\t\t\tgl.blendFunc(this.srcBlend, this.dstBlend);\n\t\t\t\t}\n\t\t\t};\n\t\t\tShapeRenderer.prototype.setColor = function (color) {\n\t\t\t\tthis.color.setFromColor(color);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.setColorWith = function (r, g, b, a) {\n\t\t\t\tthis.color.set(r, g, b, a);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.point = function (x, y, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.check(ShapeType.Point, 1);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tthis.vertex(x, y, color);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.line = function (x, y, x2, y2, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.check(ShapeType.Line, 2);\n\t\t\t\tvar vertices = this.mesh.getVertices();\n\t\t\t\tvar idx = this.vertexIndex;\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\tthis.vertex(x2, y2, color);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (color2 === void 0) { color2 = null; }\n\t\t\t\tif (color3 === void 0) { color3 = null; }\n\t\t\t\tthis.check(filled ? ShapeType.Filled : ShapeType.Line, 3);\n\t\t\t\tvar vertices = this.mesh.getVertices();\n\t\t\t\tvar idx = this.vertexIndex;\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tif (color2 === null)\n\t\t\t\t\tcolor2 = this.color;\n\t\t\t\tif (color3 === null)\n\t\t\t\t\tcolor3 = this.color;\n\t\t\t\tif (filled) {\n\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t\tthis.vertex(x2, y2, color2);\n\t\t\t\t\tthis.vertex(x3, y3, color3);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t\tthis.vertex(x2, y2, color2);\n\t\t\t\t\tthis.vertex(x2, y2, color);\n\t\t\t\t\tthis.vertex(x3, y3, color2);\n\t\t\t\t\tthis.vertex(x3, y3, color);\n\t\t\t\t\tthis.vertex(x, y, color2);\n\t\t\t\t}\n\t\t\t};\n\t\t\tShapeRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (color2 === void 0) { color2 = null; }\n\t\t\t\tif (color3 === void 0) { color3 = null; }\n\t\t\t\tif (color4 === void 0) { color4 = null; }\n\t\t\t\tthis.check(filled ? ShapeType.Filled : ShapeType.Line, 3);\n\t\t\t\tvar vertices = this.mesh.getVertices();\n\t\t\t\tvar idx = this.vertexIndex;\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tif (color2 === null)\n\t\t\t\t\tcolor2 = this.color;\n\t\t\t\tif (color3 === null)\n\t\t\t\t\tcolor3 = this.color;\n\t\t\t\tif (color4 === null)\n\t\t\t\t\tcolor4 = this.color;\n\t\t\t\tif (filled) {\n\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t\tthis.vertex(x2, y2, color2);\n\t\t\t\t\tthis.vertex(x3, y3, color3);\n\t\t\t\t\tthis.vertex(x3, y3, color3);\n\t\t\t\t\tthis.vertex(x4, y4, color4);\n\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t\tthis.vertex(x2, y2, color2);\n\t\t\t\t\tthis.vertex(x2, y2, color2);\n\t\t\t\t\tthis.vertex(x3, y3, color3);\n\t\t\t\t\tthis.vertex(x3, y3, color3);\n\t\t\t\t\tthis.vertex(x4, y4, color4);\n\t\t\t\t\tthis.vertex(x4, y4, color4);\n\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t}\n\t\t\t};\n\t\t\tShapeRenderer.prototype.rect = function (filled, x, y, width, height, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.quad(filled, x, y, x + width, y, x + width, y + height, x, y + height, color, color, color, color);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.check(filled ? ShapeType.Filled : ShapeType.Line, 8);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tvar t = this.tmp.set(y2 - y1, x1 - x2);\n\t\t\t\tt.normalize();\n\t\t\t\twidth *= 0.5;\n\t\t\t\tvar tx = t.x * width;\n\t\t\t\tvar ty = t.y * width;\n\t\t\t\tif (!filled) {\n\t\t\t\t\tthis.vertex(x1 + tx, y1 + ty, color);\n\t\t\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\t\t\t\t\tthis.vertex(x2 - tx, y2 - ty, color);\n\t\t\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\t\t\t\t\tthis.vertex(x1 + tx, y1 + ty, color);\n\t\t\t\t\tthis.vertex(x2 - tx, y2 - ty, color);\n\t\t\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.vertex(x1 + tx, y1 + ty, color);\n\t\t\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\t\t\t\t\tthis.vertex(x2 - tx, y2 - ty, color);\n\t\t\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\t\t\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t\t\t}\n\t\t\t};\n\t\t\tShapeRenderer.prototype.x = function (x, y, size) {\n\t\t\t\tthis.line(x - size, y - size, x + size, y + size);\n\t\t\t\tthis.line(x - size, y + size, x + size, y - size);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.polygon = function (polygonVertices, offset, count, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (count < 3)\n\t\t\t\t\tthrow new Error(\"Polygon must contain at least 3 vertices\");\n\t\t\t\tthis.check(ShapeType.Line, count * 2);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tvar vertices = this.mesh.getVertices();\n\t\t\t\tvar idx = this.vertexIndex;\n\t\t\t\toffset <<= 1;\n\t\t\t\tcount <<= 1;\n\t\t\t\tvar firstX = polygonVertices[offset];\n\t\t\t\tvar firstY = polygonVertices[offset + 1];\n\t\t\t\tvar last = offset + count;\n\t\t\t\tfor (var i = offset, n = offset + count - 2; i < n; i += 2) {\n\t\t\t\t\tvar x1 = polygonVertices[i];\n\t\t\t\t\tvar y1 = polygonVertices[i + 1];\n\t\t\t\t\tvar x2 = 0;\n\t\t\t\t\tvar y2 = 0;\n\t\t\t\t\tif (i + 2 >= last) {\n\t\t\t\t\t\tx2 = firstX;\n\t\t\t\t\t\ty2 = firstY;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tx2 = polygonVertices[i + 2];\n\t\t\t\t\t\ty2 = polygonVertices[i + 3];\n\t\t\t\t\t}\n\t\t\t\t\tthis.vertex(x1, y1, color);\n\t\t\t\t\tthis.vertex(x2, y2, color);\n\t\t\t\t}\n\t\t\t};\n\t\t\tShapeRenderer.prototype.circle = function (filled, x, y, radius, color, segments) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tif (segments === void 0) { segments = 0; }\n\t\t\t\tif (segments === 0)\n\t\t\t\t\tsegments = Math.max(1, (6 * spine.MathUtils.cbrt(radius)) | 0);\n\t\t\t\tif (segments <= 0)\n\t\t\t\t\tthrow new Error(\"segments must be > 0.\");\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tvar angle = 2 * spine.MathUtils.PI / segments;\n\t\t\t\tvar cos = Math.cos(angle);\n\t\t\t\tvar sin = Math.sin(angle);\n\t\t\t\tvar cx = radius, cy = 0;\n\t\t\t\tif (!filled) {\n\t\t\t\t\tthis.check(ShapeType.Line, segments * 2 + 2);\n\t\t\t\t\tfor (var i = 0; i < segments; i++) {\n\t\t\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\t\t\tvar temp_1 = cx;\n\t\t\t\t\t\tcx = cos * cx - sin * cy;\n\t\t\t\t\t\tcy = sin * temp_1 + cos * cy;\n\t\t\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\t\t}\n\t\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.check(ShapeType.Filled, segments * 3 + 3);\n\t\t\t\t\tsegments--;\n\t\t\t\t\tfor (var i = 0; i < segments; i++) {\n\t\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\t\t\tvar temp_2 = cx;\n\t\t\t\t\t\tcx = cos * cx - sin * cy;\n\t\t\t\t\t\tcy = sin * temp_2 + cos * cy;\n\t\t\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\t\t}\n\t\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\t}\n\t\t\t\tvar temp = cx;\n\t\t\t\tcx = radius;\n\t\t\t\tcy = 0;\n\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) {\n\t\t\t\tif (color === void 0) { color = null; }\n\t\t\t\tthis.check(ShapeType.Line, segments * 2 + 2);\n\t\t\t\tif (color === null)\n\t\t\t\t\tcolor = this.color;\n\t\t\t\tvar subdiv_step = 1 / segments;\n\t\t\t\tvar subdiv_step2 = subdiv_step * subdiv_step;\n\t\t\t\tvar subdiv_step3 = subdiv_step * subdiv_step * subdiv_step;\n\t\t\t\tvar pre1 = 3 * subdiv_step;\n\t\t\t\tvar pre2 = 3 * subdiv_step2;\n\t\t\t\tvar pre4 = 6 * subdiv_step2;\n\t\t\t\tvar pre5 = 6 * subdiv_step3;\n\t\t\t\tvar tmp1x = x1 - cx1 * 2 + cx2;\n\t\t\t\tvar tmp1y = y1 - cy1 * 2 + cy2;\n\t\t\t\tvar tmp2x = (cx1 - cx2) * 3 - x1 + x2;\n\t\t\t\tvar tmp2y = (cy1 - cy2) * 3 - y1 + y2;\n\t\t\t\tvar fx = x1;\n\t\t\t\tvar fy = y1;\n\t\t\t\tvar dfx = (cx1 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;\n\t\t\t\tvar dfy = (cy1 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;\n\t\t\t\tvar ddfx = tmp1x * pre4 + tmp2x * pre5;\n\t\t\t\tvar ddfy = tmp1y * pre4 + tmp2y * pre5;\n\t\t\t\tvar dddfx = tmp2x * pre5;\n\t\t\t\tvar dddfy = tmp2y * pre5;\n\t\t\t\twhile (segments-- > 0) {\n\t\t\t\t\tthis.vertex(fx, fy, color);\n\t\t\t\t\tfx += dfx;\n\t\t\t\t\tfy += dfy;\n\t\t\t\t\tdfx += ddfx;\n\t\t\t\t\tdfy += ddfy;\n\t\t\t\t\tddfx += dddfx;\n\t\t\t\t\tddfy += dddfy;\n\t\t\t\t\tthis.vertex(fx, fy, color);\n\t\t\t\t}\n\t\t\t\tthis.vertex(fx, fy, color);\n\t\t\t\tthis.vertex(x2, y2, color);\n\t\t\t};\n\t\t\tShapeRenderer.prototype.vertex = function (x, y, color) {\n\t\t\t\tvar idx = this.vertexIndex;\n\t\t\t\tvar vertices = this.mesh.getVertices();\n\t\t\t\tvertices[idx++] = x;\n\t\t\t\tvertices[idx++] = y;\n\t\t\t\tvertices[idx++] = color.r;\n\t\t\t\tvertices[idx++] = color.g;\n\t\t\t\tvertices[idx++] = color.b;\n\t\t\t\tvertices[idx++] = color.a;\n\t\t\t\tthis.vertexIndex = idx;\n\t\t\t};\n\t\t\tShapeRenderer.prototype.end = function () {\n\t\t\t\tif (!this.isDrawing)\n\t\t\t\t\tthrow new Error(\"ShapeRenderer.begin() has not been called\");\n\t\t\t\tthis.flush();\n\t\t\t\tthis.context.gl.disable(this.context.gl.BLEND);\n\t\t\t\tthis.isDrawing = false;\n\t\t\t};\n\t\t\tShapeRenderer.prototype.flush = function () {\n\t\t\t\tif (this.vertexIndex == 0)\n\t\t\t\t\treturn;\n\t\t\t\tthis.mesh.setVerticesLength(this.vertexIndex);\n\t\t\t\tthis.mesh.draw(this.shader, this.shapeType);\n\t\t\t\tthis.vertexIndex = 0;\n\t\t\t};\n\t\t\tShapeRenderer.prototype.check = function (shapeType, numVertices) {\n\t\t\t\tif (!this.isDrawing)\n\t\t\t\t\tthrow new Error(\"ShapeRenderer.begin() has not been called\");\n\t\t\t\tif (this.shapeType == shapeType) {\n\t\t\t\t\tif (this.mesh.maxVertices() - this.mesh.numVertices() < numVertices)\n\t\t\t\t\t\tthis.flush();\n\t\t\t\t\telse\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.flush();\n\t\t\t\t\tthis.shapeType = shapeType;\n\t\t\t\t}\n\t\t\t};\n\t\t\tShapeRenderer.prototype.dispose = function () {\n\t\t\t\tthis.mesh.dispose();\n\t\t\t};\n\t\t\treturn ShapeRenderer;\n\t\t}());\n\t\twebgl.ShapeRenderer = ShapeRenderer;\n\t\tvar ShapeType;\n\t\t(function (ShapeType) {\n\t\t\tShapeType[ShapeType[\"Point\"] = 0] = \"Point\";\n\t\t\tShapeType[ShapeType[\"Line\"] = 1] = \"Line\";\n\t\t\tShapeType[ShapeType[\"Filled\"] = 4] = \"Filled\";\n\t\t})(ShapeType = webgl.ShapeType || (webgl.ShapeType = {}));\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar SkeletonDebugRenderer = (function () {\n\t\t\tfunction SkeletonDebugRenderer(context) {\n\t\t\t\tthis.boneLineColor = new spine.Color(1, 0, 0, 1);\n\t\t\t\tthis.boneOriginColor = new spine.Color(0, 1, 0, 1);\n\t\t\t\tthis.attachmentLineColor = new spine.Color(0, 0, 1, 0.5);\n\t\t\t\tthis.triangleLineColor = new spine.Color(1, 0.64, 0, 0.5);\n\t\t\t\tthis.pathColor = new spine.Color().setFromString(\"FF7F00\");\n\t\t\t\tthis.clipColor = new spine.Color(0.8, 0, 0, 2);\n\t\t\t\tthis.aabbColor = new spine.Color(0, 1, 0, 0.5);\n\t\t\t\tthis.drawBones = true;\n\t\t\t\tthis.drawRegionAttachments = true;\n\t\t\t\tthis.drawBoundingBoxes = true;\n\t\t\t\tthis.drawMeshHull = true;\n\t\t\t\tthis.drawMeshTriangles = true;\n\t\t\t\tthis.drawPaths = true;\n\t\t\t\tthis.drawSkeletonXY = false;\n\t\t\t\tthis.drawClipping = true;\n\t\t\t\tthis.premultipliedAlpha = false;\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis.boneWidth = 2;\n\t\t\t\tthis.bounds = new spine.SkeletonBounds();\n\t\t\t\tthis.temp = new Array();\n\t\t\t\tthis.vertices = spine.Utils.newFloatArray(2 * 1024);\n\t\t\t\tthis.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context);\n\t\t\t}\n\t\t\tSkeletonDebugRenderer.prototype.draw = function (shapes, skeleton, ignoredBones) {\n\t\t\t\tif (ignoredBones === void 0) { ignoredBones = null; }\n\t\t\t\tvar skeletonX = skeleton.x;\n\t\t\t\tvar skeletonY = skeleton.y;\n\t\t\t\tvar gl = this.context.gl;\n\t\t\t\tvar srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA;\n\t\t\t\tshapes.setBlendMode(srcFunc, gl.ONE_MINUS_SRC_ALPHA);\n\t\t\t\tvar bones = skeleton.bones;\n\t\t\t\tif (this.drawBones) {\n\t\t\t\t\tshapes.setColor(this.boneLineColor);\n\t\t\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\t\t\tvar bone = bones[i];\n\t\t\t\t\t\tif (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tif (bone.parent == null)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tvar x = skeletonX + bone.data.length * bone.a + bone.worldX;\n\t\t\t\t\t\tvar y = skeletonY + bone.data.length * bone.c + bone.worldY;\n\t\t\t\t\t\tshapes.rectLine(true, skeletonX + bone.worldX, skeletonY + bone.worldY, x, y, this.boneWidth * this.scale);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.drawSkeletonXY)\n\t\t\t\t\t\tshapes.x(skeletonX, skeletonY, 4 * this.scale);\n\t\t\t\t}\n\t\t\t\tif (this.drawRegionAttachments) {\n\t\t\t\t\tshapes.setColor(this.attachmentLineColor);\n\t\t\t\t\tvar slots = skeleton.slots;\n\t\t\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\t\tvar slot = slots[i];\n\t\t\t\t\t\tvar attachment = slot.getAttachment();\n\t\t\t\t\t\tif (attachment instanceof spine.RegionAttachment) {\n\t\t\t\t\t\t\tvar regionAttachment = attachment;\n\t\t\t\t\t\t\tvar vertices = this.vertices;\n\t\t\t\t\t\t\tregionAttachment.computeWorldVertices(slot.bone, vertices, 0, 2);\n\t\t\t\t\t\t\tshapes.line(vertices[0], vertices[1], vertices[2], vertices[3]);\n\t\t\t\t\t\t\tshapes.line(vertices[2], vertices[3], vertices[4], vertices[5]);\n\t\t\t\t\t\t\tshapes.line(vertices[4], vertices[5], vertices[6], vertices[7]);\n\t\t\t\t\t\t\tshapes.line(vertices[6], vertices[7], vertices[0], vertices[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.drawMeshHull || this.drawMeshTriangles) {\n\t\t\t\t\tvar slots = skeleton.slots;\n\t\t\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\t\tvar slot = slots[i];\n\t\t\t\t\t\tvar attachment = slot.getAttachment();\n\t\t\t\t\t\tif (!(attachment instanceof spine.MeshAttachment))\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tvar mesh = attachment;\n\t\t\t\t\t\tvar vertices = this.vertices;\n\t\t\t\t\t\tmesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, 2);\n\t\t\t\t\t\tvar triangles = mesh.triangles;\n\t\t\t\t\t\tvar hullLength = mesh.hullLength;\n\t\t\t\t\t\tif (this.drawMeshTriangles) {\n\t\t\t\t\t\t\tshapes.setColor(this.triangleLineColor);\n\t\t\t\t\t\t\tfor (var ii = 0, nn = triangles.length; ii < nn; ii += 3) {\n\t\t\t\t\t\t\t\tvar v1 = triangles[ii] * 2, v2 = triangles[ii + 1] * 2, v3 = triangles[ii + 2] * 2;\n\t\t\t\t\t\t\t\tshapes.triangle(false, vertices[v1], vertices[v1 + 1], vertices[v2], vertices[v2 + 1], vertices[v3], vertices[v3 + 1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.drawMeshHull && hullLength > 0) {\n\t\t\t\t\t\t\tshapes.setColor(this.attachmentLineColor);\n\t\t\t\t\t\t\thullLength = (hullLength >> 1) * 2;\n\t\t\t\t\t\t\tvar lastX = vertices[hullLength - 2], lastY = vertices[hullLength - 1];\n\t\t\t\t\t\t\tfor (var ii = 0, nn = hullLength; ii < nn; ii += 2) {\n\t\t\t\t\t\t\t\tvar x = vertices[ii], y = vertices[ii + 1];\n\t\t\t\t\t\t\t\tshapes.line(x, y, lastX, lastY);\n\t\t\t\t\t\t\t\tlastX = x;\n\t\t\t\t\t\t\t\tlastY = y;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.drawBoundingBoxes) {\n\t\t\t\t\tvar bounds = this.bounds;\n\t\t\t\t\tbounds.update(skeleton, true);\n\t\t\t\t\tshapes.setColor(this.aabbColor);\n\t\t\t\t\tshapes.rect(false, bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight());\n\t\t\t\t\tvar polygons = bounds.polygons;\n\t\t\t\t\tvar boxes = bounds.boundingBoxes;\n\t\t\t\t\tfor (var i = 0, n = polygons.length; i < n; i++) {\n\t\t\t\t\t\tvar polygon = polygons[i];\n\t\t\t\t\t\tshapes.setColor(boxes[i].color);\n\t\t\t\t\t\tshapes.polygon(polygon, 0, polygon.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.drawPaths) {\n\t\t\t\t\tvar slots = skeleton.slots;\n\t\t\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\t\tvar slot = slots[i];\n\t\t\t\t\t\tvar attachment = slot.getAttachment();\n\t\t\t\t\t\tif (!(attachment instanceof spine.PathAttachment))\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tvar path = attachment;\n\t\t\t\t\t\tvar nn = path.worldVerticesLength;\n\t\t\t\t\t\tvar world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0);\n\t\t\t\t\t\tpath.computeWorldVertices(slot, 0, nn, world, 0, 2);\n\t\t\t\t\t\tvar color = this.pathColor;\n\t\t\t\t\t\tvar x1 = world[2], y1 = world[3], x2 = 0, y2 = 0;\n\t\t\t\t\t\tif (path.closed) {\n\t\t\t\t\t\t\tshapes.setColor(color);\n\t\t\t\t\t\t\tvar cx1 = world[0], cy1 = world[1], cx2 = world[nn - 2], cy2 = world[nn - 1];\n\t\t\t\t\t\t\tx2 = world[nn - 4];\n\t\t\t\t\t\t\ty2 = world[nn - 3];\n\t\t\t\t\t\t\tshapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32);\n\t\t\t\t\t\t\tshapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY);\n\t\t\t\t\t\t\tshapes.line(x1, y1, cx1, cy1);\n\t\t\t\t\t\t\tshapes.line(x2, y2, cx2, cy2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnn -= 4;\n\t\t\t\t\t\tfor (var ii = 4; ii < nn; ii += 6) {\n\t\t\t\t\t\t\tvar cx1 = world[ii], cy1 = world[ii + 1], cx2 = world[ii + 2], cy2 = world[ii + 3];\n\t\t\t\t\t\t\tx2 = world[ii + 4];\n\t\t\t\t\t\t\ty2 = world[ii + 5];\n\t\t\t\t\t\t\tshapes.setColor(color);\n\t\t\t\t\t\t\tshapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32);\n\t\t\t\t\t\t\tshapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY);\n\t\t\t\t\t\t\tshapes.line(x1, y1, cx1, cy1);\n\t\t\t\t\t\t\tshapes.line(x2, y2, cx2, cy2);\n\t\t\t\t\t\t\tx1 = x2;\n\t\t\t\t\t\t\ty1 = y2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.drawBones) {\n\t\t\t\t\tshapes.setColor(this.boneOriginColor);\n\t\t\t\t\tfor (var i = 0, n = bones.length; i < n; i++) {\n\t\t\t\t\t\tvar bone = bones[i];\n\t\t\t\t\t\tif (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tshapes.circle(true, skeletonX + bone.worldX, skeletonY + bone.worldY, 3 * this.scale, SkeletonDebugRenderer.GREEN, 8);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.drawClipping) {\n\t\t\t\t\tvar slots = skeleton.slots;\n\t\t\t\t\tshapes.setColor(this.clipColor);\n\t\t\t\t\tfor (var i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\t\tvar slot = slots[i];\n\t\t\t\t\t\tvar attachment = slot.getAttachment();\n\t\t\t\t\t\tif (!(attachment instanceof spine.ClippingAttachment))\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tvar clip = attachment;\n\t\t\t\t\t\tvar nn = clip.worldVerticesLength;\n\t\t\t\t\t\tvar world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0);\n\t\t\t\t\t\tclip.computeWorldVertices(slot, 0, nn, world, 0, 2);\n\t\t\t\t\t\tfor (var i_12 = 0, n_2 = world.length; i_12 < n_2; i_12 += 2) {\n\t\t\t\t\t\t\tvar x = world[i_12];\n\t\t\t\t\t\t\tvar y = world[i_12 + 1];\n\t\t\t\t\t\t\tvar x2 = world[(i_12 + 2) % world.length];\n\t\t\t\t\t\t\tvar y2 = world[(i_12 + 3) % world.length];\n\t\t\t\t\t\t\tshapes.line(x, y, x2, y2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tSkeletonDebugRenderer.prototype.dispose = function () {\n\t\t\t};\n\t\t\tSkeletonDebugRenderer.LIGHT_GRAY = new spine.Color(192 / 255, 192 / 255, 192 / 255, 1);\n\t\t\tSkeletonDebugRenderer.GREEN = new spine.Color(0, 1, 0, 1);\n\t\t\treturn SkeletonDebugRenderer;\n\t\t}());\n\t\twebgl.SkeletonDebugRenderer = SkeletonDebugRenderer;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar Renderable = (function () {\n\t\t\tfunction Renderable(vertices, numVertices, numFloats) {\n\t\t\t\tthis.vertices = vertices;\n\t\t\t\tthis.numVertices = numVertices;\n\t\t\t\tthis.numFloats = numFloats;\n\t\t\t}\n\t\t\treturn Renderable;\n\t\t}());\n\t\t;\n\t\tvar SkeletonRenderer = (function () {\n\t\t\tfunction SkeletonRenderer(context, twoColorTint) {\n\t\t\t\tif (twoColorTint === void 0) { twoColorTint = true; }\n\t\t\t\tthis.premultipliedAlpha = false;\n\t\t\t\tthis.vertexEffect = null;\n\t\t\t\tthis.tempColor = new spine.Color();\n\t\t\t\tthis.tempColor2 = new spine.Color();\n\t\t\t\tthis.vertexSize = 2 + 2 + 4;\n\t\t\t\tthis.twoColorTint = false;\n\t\t\t\tthis.renderable = new Renderable(null, 0, 0);\n\t\t\t\tthis.clipper = new spine.SkeletonClipping();\n\t\t\t\tthis.temp = new spine.Vector2();\n\t\t\t\tthis.temp2 = new spine.Vector2();\n\t\t\t\tthis.temp3 = new spine.Color();\n\t\t\t\tthis.temp4 = new spine.Color();\n\t\t\t\tthis.twoColorTint = twoColorTint;\n\t\t\t\tif (twoColorTint)\n\t\t\t\t\tthis.vertexSize += 4;\n\t\t\t\tthis.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024);\n\t\t\t}\n\t\t\tSkeletonRenderer.prototype.draw = function (batcher, skeleton, slotRangeStart, slotRangeEnd) {\n\t\t\t\tif (slotRangeStart === void 0) { slotRangeStart = -1; }\n\t\t\t\tif (slotRangeEnd === void 0) { slotRangeEnd = -1; }\n\t\t\t\tvar clipper = this.clipper;\n\t\t\t\tvar premultipliedAlpha = this.premultipliedAlpha;\n\t\t\t\tvar twoColorTint = this.twoColorTint;\n\t\t\t\tvar blendMode = null;\n\t\t\t\tvar tempPos = this.temp;\n\t\t\t\tvar tempUv = this.temp2;\n\t\t\t\tvar tempLight = this.temp3;\n\t\t\t\tvar tempDark = this.temp4;\n\t\t\t\tvar renderable = this.renderable;\n\t\t\t\tvar uvs = null;\n\t\t\t\tvar triangles = null;\n\t\t\t\tvar drawOrder = skeleton.drawOrder;\n\t\t\t\tvar attachmentColor = null;\n\t\t\t\tvar skeletonColor = skeleton.color;\n\t\t\t\tvar vertexSize = twoColorTint ? 12 : 8;\n\t\t\t\tvar inRange = false;\n\t\t\t\tif (slotRangeStart == -1)\n\t\t\t\t\tinRange = true;\n\t\t\t\tfor (var i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\t\t\tvar clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;\n\t\t\t\t\tvar slot = drawOrder[i];\n\t\t\t\t\tif (slotRangeStart >= 0 && slotRangeStart == slot.data.index) {\n\t\t\t\t\t\tinRange = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!inRange) {\n\t\t\t\t\t\tclipper.clipEndWithSlot(slot);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) {\n\t\t\t\t\t\tinRange = false;\n\t\t\t\t\t}\n\t\t\t\t\tvar attachment = slot.getAttachment();\n\t\t\t\t\tvar texture = null;\n\t\t\t\t\tif (attachment instanceof spine.RegionAttachment) {\n\t\t\t\t\t\tvar region = attachment;\n\t\t\t\t\t\trenderable.vertices = this.vertices;\n\t\t\t\t\t\trenderable.numVertices = 4;\n\t\t\t\t\t\trenderable.numFloats = clippedVertexSize << 2;\n\t\t\t\t\t\tregion.computeWorldVertices(slot.bone, renderable.vertices, 0, clippedVertexSize);\n\t\t\t\t\t\ttriangles = SkeletonRenderer.QUAD_TRIANGLES;\n\t\t\t\t\t\tuvs = region.uvs;\n\t\t\t\t\t\ttexture = region.region.renderObject.texture;\n\t\t\t\t\t\tattachmentColor = region.color;\n\t\t\t\t\t}\n\t\t\t\t\telse if (attachment instanceof spine.MeshAttachment) {\n\t\t\t\t\t\tvar mesh = attachment;\n\t\t\t\t\t\trenderable.vertices = this.vertices;\n\t\t\t\t\t\trenderable.numVertices = (mesh.worldVerticesLength >> 1);\n\t\t\t\t\t\trenderable.numFloats = renderable.numVertices * clippedVertexSize;\n\t\t\t\t\t\tif (renderable.numFloats > renderable.vertices.length) {\n\t\t\t\t\t\t\trenderable.vertices = this.vertices = spine.Utils.newFloatArray(renderable.numFloats);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize);\n\t\t\t\t\t\ttriangles = mesh.triangles;\n\t\t\t\t\t\ttexture = mesh.region.renderObject.texture;\n\t\t\t\t\t\tuvs = mesh.uvs;\n\t\t\t\t\t\tattachmentColor = mesh.color;\n\t\t\t\t\t}\n\t\t\t\t\telse if (attachment instanceof spine.ClippingAttachment) {\n\t\t\t\t\t\tvar clip = (attachment);\n\t\t\t\t\t\tclipper.clipStart(slot, clip);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (texture != null) {\n\t\t\t\t\t\tvar slotColor = slot.color;\n\t\t\t\t\t\tvar finalColor = this.tempColor;\n\t\t\t\t\t\tfinalColor.r = skeletonColor.r * slotColor.r * attachmentColor.r;\n\t\t\t\t\t\tfinalColor.g = skeletonColor.g * slotColor.g * attachmentColor.g;\n\t\t\t\t\t\tfinalColor.b = skeletonColor.b * slotColor.b * attachmentColor.b;\n\t\t\t\t\t\tfinalColor.a = skeletonColor.a * slotColor.a * attachmentColor.a;\n\t\t\t\t\t\tif (premultipliedAlpha) {\n\t\t\t\t\t\t\tfinalColor.r *= finalColor.a;\n\t\t\t\t\t\t\tfinalColor.g *= finalColor.a;\n\t\t\t\t\t\t\tfinalColor.b *= finalColor.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar darkColor = this.tempColor2;\n\t\t\t\t\t\tif (slot.darkColor == null)\n\t\t\t\t\t\t\tdarkColor.set(0, 0, 0, 1.0);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (premultipliedAlpha) {\n\t\t\t\t\t\t\t\tdarkColor.r = slot.darkColor.r * finalColor.a;\n\t\t\t\t\t\t\t\tdarkColor.g = slot.darkColor.g * finalColor.a;\n\t\t\t\t\t\t\t\tdarkColor.b = slot.darkColor.b * finalColor.a;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdarkColor.setFromColor(slot.darkColor);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdarkColor.a = premultipliedAlpha ? 1.0 : 0.0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar slotBlendMode = slot.data.blendMode;\n\t\t\t\t\t\tif (slotBlendMode != blendMode) {\n\t\t\t\t\t\t\tblendMode = slotBlendMode;\n\t\t\t\t\t\t\tbatcher.setBlendMode(webgl.WebGLBlendModeConverter.getSourceGLBlendMode(blendMode, premultipliedAlpha), webgl.WebGLBlendModeConverter.getDestGLBlendMode(blendMode));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (clipper.isClipping()) {\n\t\t\t\t\t\t\tclipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint);\n\t\t\t\t\t\t\tvar clippedVertices = new Float32Array(clipper.clippedVertices);\n\t\t\t\t\t\t\tvar clippedTriangles = clipper.clippedTriangles;\n\t\t\t\t\t\t\tif (this.vertexEffect != null) {\n\t\t\t\t\t\t\t\tvar vertexEffect = this.vertexEffect;\n\t\t\t\t\t\t\t\tvar verts = clippedVertices;\n\t\t\t\t\t\t\t\tif (!twoColorTint) {\n\t\t\t\t\t\t\t\t\tfor (var v = 0, n_3 = clippedVertices.length; v < n_3; v += vertexSize) {\n\t\t\t\t\t\t\t\t\t\ttempPos.x = verts[v];\n\t\t\t\t\t\t\t\t\t\ttempPos.y = verts[v + 1];\n\t\t\t\t\t\t\t\t\t\ttempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]);\n\t\t\t\t\t\t\t\t\t\ttempUv.x = verts[v + 6];\n\t\t\t\t\t\t\t\t\t\ttempUv.y = verts[v + 7];\n\t\t\t\t\t\t\t\t\t\ttempDark.set(0, 0, 0, 0);\n\t\t\t\t\t\t\t\t\t\tvertexEffect.transform(tempPos, tempUv, tempLight, tempDark);\n\t\t\t\t\t\t\t\t\t\tverts[v] = tempPos.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 1] = tempPos.y;\n\t\t\t\t\t\t\t\t\t\tverts[v + 2] = tempLight.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 3] = tempLight.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 4] = tempLight.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 5] = tempLight.a;\n\t\t\t\t\t\t\t\t\t\tverts[v + 6] = tempUv.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 7] = tempUv.y;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tfor (var v = 0, n_4 = clippedVertices.length; v < n_4; v += vertexSize) {\n\t\t\t\t\t\t\t\t\t\ttempPos.x = verts[v];\n\t\t\t\t\t\t\t\t\t\ttempPos.y = verts[v + 1];\n\t\t\t\t\t\t\t\t\t\ttempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]);\n\t\t\t\t\t\t\t\t\t\ttempUv.x = verts[v + 6];\n\t\t\t\t\t\t\t\t\t\ttempUv.y = verts[v + 7];\n\t\t\t\t\t\t\t\t\t\ttempDark.set(verts[v + 8], verts[v + 9], verts[v + 10], verts[v + 11]);\n\t\t\t\t\t\t\t\t\t\tvertexEffect.transform(tempPos, tempUv, tempLight, tempDark);\n\t\t\t\t\t\t\t\t\t\tverts[v] = tempPos.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 1] = tempPos.y;\n\t\t\t\t\t\t\t\t\t\tverts[v + 2] = tempLight.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 3] = tempLight.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 4] = tempLight.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 5] = tempLight.a;\n\t\t\t\t\t\t\t\t\t\tverts[v + 6] = tempUv.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 7] = tempUv.y;\n\t\t\t\t\t\t\t\t\t\tverts[v + 8] = tempDark.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 9] = tempDark.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 10] = tempDark.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 11] = tempDark.a;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbatcher.draw(texture, clippedVertices, clippedTriangles);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar verts = renderable.vertices;\n\t\t\t\t\t\t\tif (this.vertexEffect != null) {\n\t\t\t\t\t\t\t\tvar vertexEffect = this.vertexEffect;\n\t\t\t\t\t\t\t\tif (!twoColorTint) {\n\t\t\t\t\t\t\t\t\tfor (var v = 0, u = 0, n_5 = renderable.numFloats; v < n_5; v += vertexSize, u += 2) {\n\t\t\t\t\t\t\t\t\t\ttempPos.x = verts[v];\n\t\t\t\t\t\t\t\t\t\ttempPos.y = verts[v + 1];\n\t\t\t\t\t\t\t\t\t\ttempUv.x = uvs[u];\n\t\t\t\t\t\t\t\t\t\ttempUv.y = uvs[u + 1];\n\t\t\t\t\t\t\t\t\t\ttempLight.setFromColor(finalColor);\n\t\t\t\t\t\t\t\t\t\ttempDark.set(0, 0, 0, 0);\n\t\t\t\t\t\t\t\t\t\tvertexEffect.transform(tempPos, tempUv, tempLight, tempDark);\n\t\t\t\t\t\t\t\t\t\tverts[v] = tempPos.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 1] = tempPos.y;\n\t\t\t\t\t\t\t\t\t\tverts[v + 2] = tempLight.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 3] = tempLight.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 4] = tempLight.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 5] = tempLight.a;\n\t\t\t\t\t\t\t\t\t\tverts[v + 6] = tempUv.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 7] = tempUv.y;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tfor (var v = 0, u = 0, n_6 = renderable.numFloats; v < n_6; v += vertexSize, u += 2) {\n\t\t\t\t\t\t\t\t\t\ttempPos.x = verts[v];\n\t\t\t\t\t\t\t\t\t\ttempPos.y = verts[v + 1];\n\t\t\t\t\t\t\t\t\t\ttempUv.x = uvs[u];\n\t\t\t\t\t\t\t\t\t\ttempUv.y = uvs[u + 1];\n\t\t\t\t\t\t\t\t\t\ttempLight.setFromColor(finalColor);\n\t\t\t\t\t\t\t\t\t\ttempDark.setFromColor(darkColor);\n\t\t\t\t\t\t\t\t\t\tvertexEffect.transform(tempPos, tempUv, tempLight, tempDark);\n\t\t\t\t\t\t\t\t\t\tverts[v] = tempPos.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 1] = tempPos.y;\n\t\t\t\t\t\t\t\t\t\tverts[v + 2] = tempLight.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 3] = tempLight.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 4] = tempLight.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 5] = tempLight.a;\n\t\t\t\t\t\t\t\t\t\tverts[v + 6] = tempUv.x;\n\t\t\t\t\t\t\t\t\t\tverts[v + 7] = tempUv.y;\n\t\t\t\t\t\t\t\t\t\tverts[v + 8] = tempDark.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 9] = tempDark.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 10] = tempDark.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 11] = tempDark.a;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!twoColorTint) {\n\t\t\t\t\t\t\t\t\tfor (var v = 2, u = 0, n_7 = renderable.numFloats; v < n_7; v += vertexSize, u += 2) {\n\t\t\t\t\t\t\t\t\t\tverts[v] = finalColor.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 1] = finalColor.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 2] = finalColor.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 3] = finalColor.a;\n\t\t\t\t\t\t\t\t\t\tverts[v + 4] = uvs[u];\n\t\t\t\t\t\t\t\t\t\tverts[v + 5] = uvs[u + 1];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tfor (var v = 2, u = 0, n_8 = renderable.numFloats; v < n_8; v += vertexSize, u += 2) {\n\t\t\t\t\t\t\t\t\t\tverts[v] = finalColor.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 1] = finalColor.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 2] = finalColor.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 3] = finalColor.a;\n\t\t\t\t\t\t\t\t\t\tverts[v + 4] = uvs[u];\n\t\t\t\t\t\t\t\t\t\tverts[v + 5] = uvs[u + 1];\n\t\t\t\t\t\t\t\t\t\tverts[v + 6] = darkColor.r;\n\t\t\t\t\t\t\t\t\t\tverts[v + 7] = darkColor.g;\n\t\t\t\t\t\t\t\t\t\tverts[v + 8] = darkColor.b;\n\t\t\t\t\t\t\t\t\t\tverts[v + 9] = darkColor.a;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar view = renderable.vertices.subarray(0, renderable.numFloats);\n\t\t\t\t\t\t\tbatcher.draw(texture, view, triangles);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tclipper.clipEndWithSlot(slot);\n\t\t\t\t}\n\t\t\t\tclipper.clipEnd();\n\t\t\t};\n\t\t\tSkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\n\t\t\treturn SkeletonRenderer;\n\t\t}());\n\t\twebgl.SkeletonRenderer = SkeletonRenderer;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar Vector3 = (function () {\n\t\t\tfunction Vector3(x, y, z) {\n\t\t\t\tif (x === void 0) { x = 0; }\n\t\t\t\tif (y === void 0) { y = 0; }\n\t\t\t\tif (z === void 0) { z = 0; }\n\t\t\t\tthis.x = 0;\n\t\t\t\tthis.y = 0;\n\t\t\t\tthis.z = 0;\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\t\t\t\tthis.z = z;\n\t\t\t}\n\t\t\tVector3.prototype.setFrom = function (v) {\n\t\t\t\tthis.x = v.x;\n\t\t\t\tthis.y = v.y;\n\t\t\t\tthis.z = v.z;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tVector3.prototype.set = function (x, y, z) {\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\t\t\t\tthis.z = z;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tVector3.prototype.add = function (v) {\n\t\t\t\tthis.x += v.x;\n\t\t\t\tthis.y += v.y;\n\t\t\t\tthis.z += v.z;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tVector3.prototype.sub = function (v) {\n\t\t\t\tthis.x -= v.x;\n\t\t\t\tthis.y -= v.y;\n\t\t\t\tthis.z -= v.z;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tVector3.prototype.scale = function (s) {\n\t\t\t\tthis.x *= s;\n\t\t\t\tthis.y *= s;\n\t\t\t\tthis.z *= s;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tVector3.prototype.normalize = function () {\n\t\t\t\tvar len = this.length();\n\t\t\t\tif (len == 0)\n\t\t\t\t\treturn this;\n\t\t\t\tlen = 1 / len;\n\t\t\t\tthis.x *= len;\n\t\t\t\tthis.y *= len;\n\t\t\t\tthis.z *= len;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tVector3.prototype.cross = function (v) {\n\t\t\t\treturn this.set(this.y * v.z - this.z * v.y, this.z * v.x - this.x * v.z, this.x * v.y - this.y * v.x);\n\t\t\t};\n\t\t\tVector3.prototype.multiply = function (matrix) {\n\t\t\t\tvar l_mat = matrix.values;\n\t\t\t\treturn this.set(this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03], this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13], this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]);\n\t\t\t};\n\t\t\tVector3.prototype.project = function (matrix) {\n\t\t\t\tvar l_mat = matrix.values;\n\t\t\t\tvar l_w = 1 / (this.x * l_mat[webgl.M30] + this.y * l_mat[webgl.M31] + this.z * l_mat[webgl.M32] + l_mat[webgl.M33]);\n\t\t\t\treturn this.set((this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03]) * l_w, (this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13]) * l_w, (this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]) * l_w);\n\t\t\t};\n\t\t\tVector3.prototype.dot = function (v) {\n\t\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\t\t\t};\n\t\t\tVector3.prototype.length = function () {\n\t\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\t\t\t};\n\t\t\tVector3.prototype.distance = function (v) {\n\t\t\t\tvar a = v.x - this.x;\n\t\t\t\tvar b = v.y - this.y;\n\t\t\t\tvar c = v.z - this.z;\n\t\t\t\treturn Math.sqrt(a * a + b * b + c * c);\n\t\t\t};\n\t\t\treturn Vector3;\n\t\t}());\n\t\twebgl.Vector3 = Vector3;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n\tvar webgl;\n\t(function (webgl) {\n\t\tvar ManagedWebGLRenderingContext = (function () {\n\t\t\tfunction ManagedWebGLRenderingContext(canvasOrContext, contextConfig) {\n\t\t\t\tif (contextConfig === void 0) { contextConfig = { alpha: \"true\" }; }\n\t\t\t\tvar _this = this;\n\t\t\t\tthis.restorables = new Array();\n\t\t\t\tif (canvasOrContext instanceof HTMLCanvasElement) {\n\t\t\t\t\tvar canvas = canvasOrContext;\n\t\t\t\t\tthis.gl = (canvas.getContext(\"webgl\", contextConfig) || canvas.getContext(\"experimental-webgl\", contextConfig));\n\t\t\t\t\tthis.canvas = canvas;\n\t\t\t\t\tcanvas.addEventListener(\"webglcontextlost\", function (e) {\n\t\t\t\t\t\tvar event = e;\n\t\t\t\t\t\tif (e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcanvas.addEventListener(\"webglcontextrestored\", function (e) {\n\t\t\t\t\t\tfor (var i = 0, n = _this.restorables.length; i < n; i++) {\n\t\t\t\t\t\t\t_this.restorables[i].restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.gl = canvasOrContext;\n\t\t\t\t\tthis.canvas = this.gl.canvas;\n\t\t\t\t}\n\t\t\t}\n\t\t\tManagedWebGLRenderingContext.prototype.addRestorable = function (restorable) {\n\t\t\t\tthis.restorables.push(restorable);\n\t\t\t};\n\t\t\tManagedWebGLRenderingContext.prototype.removeRestorable = function (restorable) {\n\t\t\t\tvar index = this.restorables.indexOf(restorable);\n\t\t\t\tif (index > -1)\n\t\t\t\t\tthis.restorables.splice(index, 1);\n\t\t\t};\n\t\t\treturn ManagedWebGLRenderingContext;\n\t\t}());\n\t\twebgl.ManagedWebGLRenderingContext = ManagedWebGLRenderingContext;\n\t\tvar WebGLBlendModeConverter = (function () {\n\t\t\tfunction WebGLBlendModeConverter() {\n\t\t\t}\n\t\t\tWebGLBlendModeConverter.getDestGLBlendMode = function (blendMode) {\n\t\t\t\tswitch (blendMode) {\n\t\t\t\t\tcase spine.BlendMode.Normal: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;\n\t\t\t\t\tcase spine.BlendMode.Additive: return WebGLBlendModeConverter.ONE;\n\t\t\t\t\tcase spine.BlendMode.Multiply: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;\n\t\t\t\t\tcase spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;\n\t\t\t\t\tdefault: throw new Error(\"Unknown blend mode: \" + blendMode);\n\t\t\t\t}\n\t\t\t};\n\t\t\tWebGLBlendModeConverter.getSourceGLBlendMode = function (blendMode, premultipliedAlpha) {\n\t\t\t\tif (premultipliedAlpha === void 0) { premultipliedAlpha = false; }\n\t\t\t\tswitch (blendMode) {\n\t\t\t\t\tcase spine.BlendMode.Normal: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA;\n\t\t\t\t\tcase spine.BlendMode.Additive: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA;\n\t\t\t\t\tcase spine.BlendMode.Multiply: return WebGLBlendModeConverter.DST_COLOR;\n\t\t\t\t\tcase spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE;\n\t\t\t\t\tdefault: throw new Error(\"Unknown blend mode: \" + blendMode);\n\t\t\t\t}\n\t\t\t};\n\t\t\tWebGLBlendModeConverter.ZERO = 0;\n\t\t\tWebGLBlendModeConverter.ONE = 1;\n\t\t\tWebGLBlendModeConverter.SRC_COLOR = 0x0300;\n\t\t\tWebGLBlendModeConverter.ONE_MINUS_SRC_COLOR = 0x0301;\n\t\t\tWebGLBlendModeConverter.SRC_ALPHA = 0x0302;\n\t\t\tWebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA = 0x0303;\n\t\t\tWebGLBlendModeConverter.DST_ALPHA = 0x0304;\n\t\t\tWebGLBlendModeConverter.ONE_MINUS_DST_ALPHA = 0x0305;\n\t\t\tWebGLBlendModeConverter.DST_COLOR = 0x0306;\n\t\t\treturn WebGLBlendModeConverter;\n\t\t}());\n\t\twebgl.WebGLBlendModeConverter = WebGLBlendModeConverter;\n\t})(webgl = spine.webgl || (spine.webgl = {}));\n})(spine || (spine = {}));\n//# sourceMappingURL=spine-webgl.js.map\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = spine;\n}.call(window));"],"sourceRoot":""} |