UNPKG

@esotericsoftware/spine-core

Version:
82 lines 13.2 kB
/****************************************************************************** * Spine Runtimes License Agreement * Last updated April 5, 2025. Replaces all prior versions. * * Copyright (c) 2013-2025, 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. * * THE SPINE RUNTIMES ARE 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 * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ import { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment.js"; import { ClippingAttachment } from "./attachments/ClippingAttachment.js"; import { MeshAttachment } from "./attachments/MeshAttachment.js"; import { PathAttachment } from "./attachments/PathAttachment.js"; import { PointAttachment } from "./attachments/PointAttachment.js"; import { RegionAttachment } from "./attachments/RegionAttachment.js"; /** An {@link AttachmentLoader} that configures attachments using texture regions from an {@link TextureAtlas}. * * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the * Spine Runtimes Guide. */ export class AtlasAttachmentLoader { atlas; allowMissingRegions; constructor(atlas, allowMissingRegions = false) { this.atlas = atlas; this.allowMissingRegions = allowMissingRegions; } /** Sets each {@link Sequence.regions} by calling {@link findRegion} for each texture region using * {@link Sequence.getPath}. */ findRegions(name, basePath, sequence) { const regions = sequence.regions; for (let i = 0, n = regions.length; i < n; i++) regions[i] = this.findRegion(name, sequence.getPath(basePath, i)); } /** Looks for the region with the specified path. If not found and {@link allowMissingRegions} is false, an error is * raised. */ findRegion(name, path) { const region = this.atlas.findRegion(path); if (!region && !this.allowMissingRegions) throw new Error(`Region not found in atlas: ${path} (attachment: ${name})`); return region; } newRegionAttachment(skin, placeholder, name, path, sequence) { this.findRegions(name, path, sequence); return new RegionAttachment(name, sequence); } newMeshAttachment(skin, placeholder, name, path, sequence) { this.findRegions(name, path, sequence); return new MeshAttachment(name, sequence); } newBoundingBoxAttachment(skin, placeholder, name) { return new BoundingBoxAttachment(name); } newPathAttachment(skin, placeholder, name) { return new PathAttachment(name); } newPointAttachment(skin, placeholder, name) { return new PointAttachment(name); } newClippingAttachment(skin, placeholder, name) { return new ClippingAttachment(name); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRsYXNBdHRhY2htZW50TG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0F0bGFzQXR0YWNobWVudExvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFLckU7OzsyQkFHMkI7QUFDM0IsTUFBTSxPQUFPLHFCQUFxQjtJQUNqQyxLQUFLLENBQWU7SUFDcEIsbUJBQW1CLENBQVU7SUFFN0IsWUFBYSxLQUFtQixFQUFFLG1CQUFtQixHQUFHLEtBQUs7UUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0lBQ2hELENBQUM7SUFFRDttQ0FDK0I7SUFDckIsV0FBVyxDQUFFLElBQVksRUFBRSxRQUFnQixFQUFFLFFBQWtCO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVEO2lCQUNhO0lBQ0gsVUFBVSxDQUFFLElBQVksRUFBRSxJQUFZO1FBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLElBQUksaUJBQWlCLElBQUksR0FBRyxDQUFDLENBQUM7UUFDN0UsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBRUQsbUJBQW1CLENBQUUsSUFBVSxFQUFFLFdBQW1CLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxRQUFrQjtRQUNuRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsaUJBQWlCLENBQUUsSUFBVSxFQUFFLFdBQW1CLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxRQUFrQjtRQUNqRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHdCQUF3QixDQUFFLElBQVUsRUFBRSxXQUFtQixFQUFFLElBQVk7UUFDdEUsT0FBTyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxpQkFBaUIsQ0FBRSxJQUFVLEVBQUUsV0FBbUIsRUFBRSxJQUFZO1FBQy9ELE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGtCQUFrQixDQUFFLElBQVUsRUFBRSxXQUFtQixFQUFFLElBQVk7UUFDaEUsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQscUJBQXFCLENBQUUsSUFBVSxFQUFFLFdBQW1CLEVBQUUsSUFBWTtRQUNuRSxPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEF0dGFjaG1lbnRMb2FkZXIgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9BdHRhY2htZW50TG9hZGVyLmpzXCI7XG5pbXBvcnQgeyBCb3VuZGluZ0JveEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9Cb3VuZGluZ0JveEF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IENsaXBwaW5nQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0NsaXBwaW5nQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgTWVzaEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9NZXNoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgUGF0aEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9QYXRoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgUG9pbnRBdHRhY2htZW50IH0gZnJvbSBcIi4vYXR0YWNobWVudHMvUG9pbnRBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgeyBSZWdpb25BdHRhY2htZW50IH0gZnJvbSBcIi4vYXR0YWNobWVudHMvUmVnaW9uQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXF1ZW5jZSB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL1NlcXVlbmNlLmpzXCJcbmltcG9ydCB0eXBlIHsgU2tpbiB9IGZyb20gXCIuL1NraW4uanNcIjtcbmltcG9ydCB0eXBlIHsgVGV4dHVyZUF0bGFzIH0gZnJvbSBcIi4vVGV4dHVyZUF0bGFzLmpzXCI7XG5cbi8qKiBBbiB7QGxpbmsgQXR0YWNobWVudExvYWRlcn0gdGhhdCBjb25maWd1cmVzIGF0dGFjaG1lbnRzIHVzaW5nIHRleHR1cmUgcmVnaW9ucyBmcm9tIGFuIHtAbGluayBUZXh0dXJlQXRsYXN9LlxuICpcbiAqIFNlZSBbTG9hZGluZyBza2VsZXRvbiBkYXRhXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtbG9hZGluZy1za2VsZXRvbi1kYXRhI0pTT04tYW5kLWJpbmFyeS1kYXRhKSBpbiB0aGVcbiAqIFNwaW5lIFJ1bnRpbWVzIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIEF0bGFzQXR0YWNobWVudExvYWRlciBpbXBsZW1lbnRzIEF0dGFjaG1lbnRMb2FkZXIge1xuXHRhdGxhczogVGV4dHVyZUF0bGFzO1xuXHRhbGxvd01pc3NpbmdSZWdpb25zOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yIChhdGxhczogVGV4dHVyZUF0bGFzLCBhbGxvd01pc3NpbmdSZWdpb25zID0gZmFsc2UpIHtcblx0XHR0aGlzLmF0bGFzID0gYXRsYXM7XG5cdFx0dGhpcy5hbGxvd01pc3NpbmdSZWdpb25zID0gYWxsb3dNaXNzaW5nUmVnaW9ucztcblx0fVxuXG5cdC8qKiBTZXRzIGVhY2gge0BsaW5rIFNlcXVlbmNlLnJlZ2lvbnN9IGJ5IGNhbGxpbmcge0BsaW5rIGZpbmRSZWdpb259IGZvciBlYWNoIHRleHR1cmUgcmVnaW9uIHVzaW5nXG5cdCAqIHtAbGluayBTZXF1ZW5jZS5nZXRQYXRofS4gKi9cblx0cHJvdGVjdGVkIGZpbmRSZWdpb25zIChuYW1lOiBzdHJpbmcsIGJhc2VQYXRoOiBzdHJpbmcsIHNlcXVlbmNlOiBTZXF1ZW5jZSkge1xuXHRcdGNvbnN0IHJlZ2lvbnMgPSBzZXF1ZW5jZS5yZWdpb25zO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gcmVnaW9ucy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRyZWdpb25zW2ldID0gdGhpcy5maW5kUmVnaW9uKG5hbWUsIHNlcXVlbmNlLmdldFBhdGgoYmFzZVBhdGgsIGkpKTtcblx0fVxuXG5cdC8qKiBMb29rcyBmb3IgdGhlIHJlZ2lvbiB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4gSWYgbm90IGZvdW5kIGFuZCB7QGxpbmsgYWxsb3dNaXNzaW5nUmVnaW9uc30gaXMgZmFsc2UsIGFuIGVycm9yIGlzXG5cdCAqIHJhaXNlZC4gKi9cblx0cHJvdGVjdGVkIGZpbmRSZWdpb24gKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcmVnaW9uID0gdGhpcy5hdGxhcy5maW5kUmVnaW9uKHBhdGgpO1xuXHRcdGlmICghcmVnaW9uICYmICF0aGlzLmFsbG93TWlzc2luZ1JlZ2lvbnMpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFJlZ2lvbiBub3QgZm91bmQgaW4gYXRsYXM6ICR7cGF0aH0gKGF0dGFjaG1lbnQ6ICR7bmFtZX0pYCk7XG5cdFx0cmV0dXJuIHJlZ2lvbjtcblx0fVxuXG5cdG5ld1JlZ2lvbkF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzZXF1ZW5jZTogU2VxdWVuY2UpOiBSZWdpb25BdHRhY2htZW50IHtcblx0XHR0aGlzLmZpbmRSZWdpb25zKG5hbWUsIHBhdGgsIHNlcXVlbmNlKTtcblx0XHRyZXR1cm4gbmV3IFJlZ2lvbkF0dGFjaG1lbnQobmFtZSwgc2VxdWVuY2UpO1xuXHR9XG5cblx0bmV3TWVzaEF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzZXF1ZW5jZTogU2VxdWVuY2UpOiBNZXNoQXR0YWNobWVudCB7XG5cdFx0dGhpcy5maW5kUmVnaW9ucyhuYW1lLCBwYXRoLCBzZXF1ZW5jZSk7XG5cdFx0cmV0dXJuIG5ldyBNZXNoQXR0YWNobWVudChuYW1lLCBzZXF1ZW5jZSk7XG5cdH1cblxuXHRuZXdCb3VuZGluZ0JveEF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IEJvdW5kaW5nQm94QXR0YWNobWVudCB7XG5cdFx0cmV0dXJuIG5ldyBCb3VuZGluZ0JveEF0dGFjaG1lbnQobmFtZSk7XG5cdH1cblxuXHRuZXdQYXRoQXR0YWNobWVudCAoc2tpbjogU2tpbiwgcGxhY2Vob2xkZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUGF0aEF0dGFjaG1lbnQge1xuXHRcdHJldHVybiBuZXcgUGF0aEF0dGFjaG1lbnQobmFtZSk7XG5cdH1cblxuXHRuZXdQb2ludEF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFBvaW50QXR0YWNobWVudCB7XG5cdFx0cmV0dXJuIG5ldyBQb2ludEF0dGFjaG1lbnQobmFtZSk7XG5cdH1cblxuXHRuZXdDbGlwcGluZ0F0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IENsaXBwaW5nQXR0YWNobWVudCB7XG5cdFx0cmV0dXJuIG5ldyBDbGlwcGluZ0F0dGFjaG1lbnQobmFtZSk7XG5cdH1cbn1cbiJdfQ==