UNPKG

ngx-spine

Version:

[![Build Status](https://travis-ci.org/PoiScript/ngx-spine.svg?branch=master)](https://travis-ci.org/PoiScript/ngx-spine)

322 lines 29 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /****************************************************************************** * Spine Runtimes License Agreement * Last updated May 1, 2019. Replaces all prior versions. * * Copyright (c) 2013-2019, Esoteric Software LLC * * Integration of the Spine Runtimes into software or otherwise creating * derivative works of the Spine Runtimes is permitted under the terms and * conditions of Section 2 of the Spine Editor License Agreement: * http://esotericsoftware.com/spine-editor-license * * Otherwise, it is permitted to integrate the Spine Runtimes into software * or otherwise create derivative works of the Spine Runtimes (collectively, * "Products"), provided that each user of the Products must obtain their own * Spine Editor license and redistribution of the Products in any form must * include this license and copyright notice. * * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ import { MeshAttachment } from "./attachments/MeshAttachment"; var SkinEntry = /** @class */ (function () { function SkinEntry(slotIndex, name, attachment) { this.slotIndex = slotIndex; this.name = name; this.attachment = attachment; } return SkinEntry; }()); export { SkinEntry }; if (false) { /** @type {?} */ SkinEntry.prototype.slotIndex; /** @type {?} */ SkinEntry.prototype.name; /** @type {?} */ SkinEntry.prototype.attachment; } var Skin = /** @class */ (function () { function Skin(name) { this.attachments = new Array(); this.bones = Array(); this.constraints = new Array(); if (name == null) throw new Error("name cannot be null."); this.name = name; } /** * @param {?} slotIndex * @param {?} name * @param {?} attachment * @return {?} */ Skin.prototype.setAttachment = /** * @param {?} slotIndex * @param {?} name * @param {?} attachment * @return {?} */ function (slotIndex, name, attachment) { if (attachment == null) throw new Error("attachment cannot be null."); /** @type {?} */ var attachments = this.attachments; if (slotIndex >= attachments.length) attachments.length = slotIndex + 1; if (!attachments[slotIndex]) attachments[slotIndex] = {}; attachments[slotIndex][name] = attachment; }; /** * @param {?} skin * @return {?} */ Skin.prototype.addSkin = /** * @param {?} skin * @return {?} */ function (skin) { for (var i = 0; i < skin.bones.length; i++) { /** @type {?} */ var bone = skin.bones[i]; /** @type {?} */ var contained = false; for (var j = 0; j < this.bones.length; j++) { if (this.bones[j] == bone) { contained = true; break; } } if (!contained) this.bones.push(bone); } for (var i = 0; i < skin.constraints.length; i++) { /** @type {?} */ var constraint = skin.constraints[i]; /** @type {?} */ var contained = false; for (var j = 0; j < this.constraints.length; j++) { if (this.constraints[j] == constraint) { contained = true; break; } } if (!contained) this.constraints.push(constraint); } /** @type {?} */ var attachments = skin.getAttachments(); for (var i = 0; i < attachments.length; i++) { /** @type {?} */ var attachment = attachments[i]; this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); } }; /** * @param {?} skin * @return {?} */ Skin.prototype.copySkin = /** * @param {?} skin * @return {?} */ function (skin) { for (var i = 0; i < skin.bones.length; i++) { /** @type {?} */ var bone = skin.bones[i]; /** @type {?} */ var contained = false; for (var j = 0; j < this.bones.length; j++) { if (this.bones[j] == bone) { contained = true; break; } } if (!contained) this.bones.push(bone); } for (var i = 0; i < skin.constraints.length; i++) { /** @type {?} */ var constraint = skin.constraints[i]; /** @type {?} */ var contained = false; for (var j = 0; j < this.constraints.length; j++) { if (this.constraints[j] == constraint) { contained = true; break; } } if (!contained) this.constraints.push(constraint); } /** @type {?} */ var attachments = skin.getAttachments(); for (var i = 0; i < attachments.length; i++) { /** @type {?} */ var attachment = attachments[i]; if (attachment.attachment == null) continue; if (attachment.attachment instanceof MeshAttachment) { attachment.attachment = attachment.attachment.newLinkedMesh(); this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); } else { attachment.attachment = attachment.attachment.copy(); this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); } } }; /** @return May be null. */ /** * @param {?} slotIndex * @param {?} name * @return {?} May be null. */ Skin.prototype.getAttachment = /** * @param {?} slotIndex * @param {?} name * @return {?} May be null. */ function (slotIndex, name) { /** @type {?} */ var dictionary = this.attachments[slotIndex]; return dictionary ? dictionary[name] : null; }; /** * @param {?} slotIndex * @param {?} name * @return {?} */ Skin.prototype.removeAttachment = /** * @param {?} slotIndex * @param {?} name * @return {?} */ function (slotIndex, name) { /** @type {?} */ var dictionary = this.attachments[slotIndex]; if (dictionary) dictionary[name] = null; }; /** * @return {?} */ Skin.prototype.getAttachments = /** * @return {?} */ function () { /** @type {?} */ var entries = new Array(); for (var i = 0; i < this.attachments.length; i++) { /** @type {?} */ var slotAttachments = this.attachments[i]; if (slotAttachments) { for (var name_1 in slotAttachments) { /** @type {?} */ var attachment = slotAttachments[name_1]; if (attachment) entries.push(new SkinEntry(i, name_1, attachment)); } } } return entries; }; /** * @param {?} slotIndex * @param {?} attachments * @return {?} */ Skin.prototype.getAttachmentsForSlot = /** * @param {?} slotIndex * @param {?} attachments * @return {?} */ function (slotIndex, attachments) { /** @type {?} */ var slotAttachments = this.attachments[slotIndex]; if (slotAttachments) { for (var name_2 in slotAttachments) { /** @type {?} */ var attachment = slotAttachments[name_2]; if (attachment) attachments.push(new SkinEntry(slotIndex, name_2, attachment)); } } }; /** * @return {?} */ Skin.prototype.clear = /** * @return {?} */ function () { this.attachments.length = 0; this.bones.length = 0; this.constraints.length = 0; }; /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */ /** * Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. * @param {?} skeleton * @param {?} oldSkin * @return {?} */ Skin.prototype.attachAll = /** * Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. * @param {?} skeleton * @param {?} oldSkin * @return {?} */ function (skeleton, oldSkin) { /** @type {?} */ var slotIndex = 0; for (var i = 0; i < skeleton.slots.length; i++) { /** @type {?} */ var slot = skeleton.slots[i]; /** @type {?} */ var slotAttachment = slot.getAttachment(); if (slotAttachment && slotIndex < oldSkin.attachments.length) { /** @type {?} */ var dictionary = oldSkin.attachments[slotIndex]; for (var key in dictionary) { /** @type {?} */ var skinAttachment = dictionary[key]; if (slotAttachment == skinAttachment) { /** @type {?} */ var attachment = this.getAttachment(slotIndex, key); if (attachment != null) slot.setAttachment(attachment); break; } } } slotIndex++; } }; return Skin; }()); export { Skin }; if (false) { /** @type {?} */ Skin.prototype.name; /** @type {?} */ Skin.prototype.attachments; /** @type {?} */ Skin.prototype.bones; /** @type {?} */ Skin.prototype.constraints; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zcGluZS8iLCJzb3VyY2VzIjpbImxpYi9zcGluZS10cy9jb3JlL1NraW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQkEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSzlEO0lBQ0UsbUJBQ1MsU0FBaUIsRUFDakIsSUFBWSxFQUNaLFVBQXNCO1FBRnRCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDNUIsQ0FBQztJQUNOLGdCQUFDO0FBQUQsQ0FBQyxBQU5ELElBTUM7Ozs7SUFKRyw4QkFBd0I7O0lBQ3hCLHlCQUFtQjs7SUFDbkIsK0JBQTZCOztBQUdqQztJQUtFLGNBQVksSUFBWTtRQUh4QixnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFtQixDQUFDO1FBQzNDLFVBQUssR0FBRyxLQUFLLEVBQVksQ0FBQztRQUMxQixnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFrQixDQUFDO1FBRXhDLElBQUksSUFBSSxJQUFJLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQzs7Ozs7OztJQUNELDRCQUFhOzs7Ozs7SUFBYixVQUFjLFNBQWlCLEVBQUUsSUFBWSxFQUFFLFVBQXNCO1FBQ25FLElBQUksVUFBVSxJQUFJLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7O1lBQ2xFLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVztRQUNsQyxJQUFJLFNBQVMsSUFBSSxXQUFXLENBQUMsTUFBTTtZQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUN4RSxJQUFJ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QUFHLENBQUM7b0JBQ2hELElBQUksY0FBYyxJQUFJLGNBQWMsRUFBRTs7NEJBQ2hDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7d0JBQ25ELElBQUksVUFBVSxJQUFJLElBQUk7NEJBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDdkQsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1lBQ0QsU0FBUyxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFDSCxXQUFDO0FBQUQsQ0FBQyxBQXRKRCxJQXNKQzs7OztJQXJKQyxvQkFBYTs7SUFDYiwyQkFBMkM7O0lBQzNDLHFCQUEwQjs7SUFDMUIsMkJBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxyXG4gKiBMYXN0IHVwZGF0ZWQgTWF5IDEsIDIwMTkuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTksIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xyXG4gKlxyXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcclxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcclxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcclxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXHJcbiAqXHJcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxyXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXHJcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cclxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XHJcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTXHJcbiAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcclxuICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU5cclxuICogTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsXHJcbiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXHJcbiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgQlVTSU5FU1NcclxuICogSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxyXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcclxuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxyXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5pbXBvcnQgeyBNYXAgfSBmcm9tIFwiLi9VdGlsc1wiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50IH0gZnJvbSBcIi4vYXR0YWNobWVudHMvQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBNZXNoQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL01lc2hBdHRhY2htZW50XCI7XHJcbmltcG9ydCB7IEJvbmVEYXRhIH0gZnJvbSBcIi4vQm9uZURhdGFcIjtcclxuaW1wb3J0IHsgQ29uc3RyYWludERhdGEgfSBmcm9tIFwiLi9Db25zdHJhaW50XCI7XHJcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTa2luRW50cnkge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNsb3RJbmRleDogbnVtYmVyLFxyXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgIHB1YmxpYyBhdHRhY2htZW50OiBBdHRhY2htZW50XHJcbiAgKSB7fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTa2luIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYXR0YWNobWVudHMgPSBuZXcgQXJyYXk8TWFwPEF0dGFjaG1lbnQ+PigpO1xyXG4gIGJvbmVzID0gQXJyYXk8Qm9uZURhdGE+KCk7XHJcbiAgY29uc3RyYWludHMgPSBuZXcgQXJyYXk8Q29uc3RyYWludERhdGE+KCk7XHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAobmFtZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgfVxyXG4gIHNldEF0dGFjaG1lbnQoc2xvdEluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZywgYXR0YWNobWVudDogQXR0YWNobWVudCkge1xyXG4gICAgaWYgKGF0dGFjaG1lbnQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiYXR0YWNobWVudCBjYW5ub3QgYmUgbnVsbC5cIik7XHJcbiAgICBsZXQgYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzO1xyXG4gICAgaWYgKHNsb3RJbmRleCA+PSBhdHRhY2htZW50cy5sZW5ndGgpIGF0dGFjaG1lbnRzLmxlbmd0aCA9IHNsb3RJbmRleCArIDE7XHJcbiAgICBpZiAoIWF0dGFjaG1lbnRzW3Nsb3RJbmRleF0pIGF0dGFjaG1lbnRzW3Nsb3RJbmRleF0gPSB7fTtcclxuICAgIGF0dGFjaG1lbnRzW3Nsb3RJbmRleF1bbmFtZV0gPSBhdHRhY2htZW50O1xyXG4gIH1cclxuICBhZGRTa2luKHNraW46IFNraW4pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2tpbi5ib25lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYm9uZSA9IHNraW4uYm9uZXNbaV07XHJcbiAgICAgIGxldCBjb250YWluZWQgPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmJvbmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYm9uZXNbal0gPT0gYm9uZSkge1xyXG4gICAgICAgICAgY29udGFpbmVkID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNvbnRhaW5lZCkgdGhpcy5ib25lcy5wdXNoKGJvbmUpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBza2luLmNvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjb25zdHJhaW50ID0gc2tpbi5jb25zdHJhaW50c1tpXTtcclxuICAgICAgbGV0IGNvbnRhaW5lZCA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29uc3RyYWludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5jb25zdHJhaW50c1tqXSA9PSBjb25zdHJhaW50KSB7XHJcbiAgICAgICAgICBjb250YWluZWQgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghY29udGFpbmVkKSB0aGlzLmNvbnN0cmFpbnRzLnB1c2goY29uc3RyYWludCk7XHJcbiAgICB9XHJcbiAgICBsZXQgYXR0YWNobWVudHMgPSBza2luLmdldEF0dGFjaG1lbnRzKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBhdHRhY2htZW50ID0gYXR0YWNobWVudHNbaV07XHJcbiAgICAgIHRoaXMuc2V0QXR0YWNobWVudChcclxuICAgICAgICBhdHRhY2htZW50LnNsb3RJbmRleCxcclxuICAgICAgICBhdHRhY2htZW50Lm5hbWUsXHJcbiAgICAgICAgYXR0YWNobWVudC5hdHRhY2htZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvcHlTa2luKHNraW46IFNraW4pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2tpbi5ib25lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgYm9uZSA9IHNraW4uYm9uZXNbaV07XHJcbiAgICAgIGxldCBjb250YWluZWQgPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmJvbmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYm9uZXNbal0gPT0gYm9uZSkge1xyXG4gICAgICAgICAgY29udGFpbmVkID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNvbnRhaW5lZCkgdGhpcy5ib25lcy5wdXNoKGJvbmUpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBza2luLmNvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjb25zdHJhaW50ID0gc2tpbi5jb25zdHJhaW50c1tpXTtcclxuICAgICAgbGV0IGNvbnRhaW5lZCA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29uc3RyYWludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5jb25zdHJhaW50c1tqXSA9PSBjb25zdHJhaW50KSB7XHJcbiAgICAgICAgICBjb250YWluZWQgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghY29udGFpbmVkKSB0aGlzLmNvbnN0cmFpbnRzLnB1c2goY29uc3RyYWludCk7XHJcbiAgICB9XHJcbiAgICBsZXQgYXR0YWNobWVudHMgPSBza2luLmdldEF0dGFjaG1lbnRzKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBhdHRhY2htZW50ID0gYXR0YWNobWVudHNbaV07XHJcbiAgICAgIGlmIChhdHRhY2htZW50LmF0dGFjaG1lbnQgPT0gbnVsbCkgY29udGludWU7XHJcbiAgICAgIGlmIChhdHRhY2htZW50LmF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xyXG4gICAgICAgIGF0dGFjaG1lbnQuYXR0YWNobWVudCA9IGF0dGFjaG1lbnQuYXR0YWNobWVudC5uZXdMaW5rZWRNZXNoKCk7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRhY2htZW50KFxyXG4gICAgICAgICAgYXR0YWNobWVudC5zbG90SW5kZXgsXHJcbiAgICAgICAgICBhdHRhY2htZW50Lm5hbWUsXHJcbiAgICAgICAgICBhdHRhY2htZW50LmF0dGFjaG1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF0dGFjaG1lbnQuYXR0YWNobWVudCA9IGF0dGFjaG1lbnQuYXR0YWNobWVudC5jb3B5KCk7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRhY2htZW50KFxyXG4gICAgICAgICAgYXR0YWNobWVudC5zbG90SW5kZXgsXHJcbiAgICAgICAgICBhdHRhY2htZW50Lm5hbWUsXHJcbiAgICAgICAgICBhdHRhY2htZW50LmF0dGFjaG1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKiBAcmV0dXJuIE1heSBiZSBudWxsLiAqL1xyXG4gIGdldEF0dGFjaG1lbnQoc2xvdEluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IEF0dGFjaG1lbnQge1xyXG4gICAgbGV0IGRpY3Rpb25hcnkgPSB0aGlzLmF0dGFjaG1lbnRzW3Nsb3RJbmRleF07XHJcbiAgICByZXR1cm4gZGljdGlvbmFyeSA/IGRpY3Rpb25hcnlbbmFtZV0gOiBudWxsO1xyXG4gIH1cclxuICByZW1vdmVBdHRhY2htZW50KHNsb3RJbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCBkaWN0aW9uYXJ5ID0gdGhpcy5hdHRhY2htZW50c1tzbG90SW5kZXhdO1xyXG4gICAgaWYgKGRpY3Rpb25hcnkpIGRpY3Rpb25hcnlbbmFtZV0gPSBudWxsO1xyXG4gIH1cclxuICBnZXRBdHRhY2htZW50cygpOiBBcnJheTxTa2luRW50cnk+IHtcclxuICAgIGxldCBlbnRyaWVzID0gbmV3IEFycmF5PFNraW5FbnRyeT4oKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgc2xvdEF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c1tpXTtcclxuICAgICAgaWYgKHNsb3RBdHRhY2htZW50cykge1xyXG4gICAgICAgIGZvciAobGV0IG5hbWUgaW4gc2xvdEF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICBsZXQgYXR0YWNobWVudCA9IHNsb3RBdHRhY2htZW50c1tuYW1lXTtcclxuICAgICAgICAgIGlmIChhdHRhY2htZW50KSBlbnRyaWVzLnB1c2gobmV3IFNraW5FbnRyeShpLCBuYW1lLCBhdHRhY2htZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW50cmllcztcclxuICB9XHJcbiAgZ2V0QXR0YWNobWVudHNGb3JTbG90KHNsb3RJbmRleDogbnVtYmVyLCBhdHRhY2htZW50czogQXJyYXk8U2tpbkVudHJ5Pikge1xyXG4gICAgbGV0IHNsb3RBdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHNbc2xvdEluZGV4XTtcclxuICAgIGlmIChzbG90QXR0YWNobWVudHMpIHtcclxuICAgICAgZm9yIChsZXQgbmFtZSBpbiBzbG90QXR0YWNobWVudHMpIHtcclxuICAgICAgICBsZXQgYXR0YWNobWVudCA9IHNsb3RBdHRhY2htZW50c1tuYW1lXTtcclxuICAgICAgICBpZiAoYXR0YWNobWVudClcclxuICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2gobmV3IFNraW5FbnRyeShzbG90SW5kZXgsIG5hbWUsIGF0dGFjaG1lbnQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuYm9uZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuY29uc3RyYWludHMubGVuZ3RoID0gMDtcclxuICB9XHJcbiAgLyoqIEF0dGFjaCBlYWNoIGF0dGFjaG1lbnQgaW4gdGhpcyBza2luIGlmIHRoZSBjb3JyZXNwb25kaW5nIGF0dGFjaG1lbnQgaW4gdGhlIG9sZCBza2luIGlzIGN1cnJlbnRseSBhdHRhY2hlZC4gKi9cclxuICBhdHRhY2hBbGwoc2tlbGV0b246IFNrZWxldG9uLCBvbGRTa2luOiBTa2luKSB7XHJcbiAgICBsZXQgc2xvdEluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2tlbGV0b24uc2xvdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHNsb3QgPSBza2VsZXRvbi5zbG90c1tpXTtcclxuICAgICAgbGV0IHNsb3RBdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XHJcbiAgICAgIGlmIChzbG90QXR0YWNobWVudCAmJiBzbG90SW5kZXggPCBvbGRTa2luLmF0dGFjaG1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBkaWN0aW9uYXJ5ID0gb2xkU2tpbi5hdHRhY2htZW50c1tzbG90SW5kZXhdO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkaWN0aW9uYXJ5KSB7XHJcbiAgICAgICAgICBsZXQgc2tpbkF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSBkaWN0aW9uYXJ5W2tleV07XHJcbiAgICAgICAgICBpZiAoc2xvdEF0dGFjaG1lbnQgPT0gc2tpbkF0dGFjaG1lbnQpIHtcclxuICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnQgPSB0aGlzLmdldEF0dGFjaG1lbnQoc2xvdEluZGV4LCBrZXkpO1xyXG4gICAgICAgICAgICBpZiAoYXR0YWNobWVudCAhPSBudWxsKSBzbG90LnNldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBzbG90SW5kZXgrKztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19