projen
Version:
CDK for software projects
83 lines • 13.2 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Stale = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const stale_util_1 = require("./stale-util");
const workflows_model_1 = require("./workflows-model");
const component_1 = require("../component");
const runner_options_1 = require("../runner-options");
/**
* Warns and then closes issues and PRs that have had no activity for a specified amount of time.
*
* The default configuration will:
*
* * Add a "Stale" label to pull requests after 14 days and closed after 2 days
* * Add a "Stale" label to issues after 60 days and closed after 7 days
* * If a comment is added, the label will be removed and timer is restarted.
*
* @see https://github.com/actions/stale
*/
class Stale extends component_1.Component {
constructor(github, options = {}) {
super(github.project);
const stale = github.addWorkflow("stale");
stale.on({
schedule: [{ cron: "0 1 * * *" }], // at 1am every day
workflowDispatch: {},
});
const pullRequests = (0, stale_util_1.renderBehavior)(options.pullRequest, {
stale: 14,
close: 2,
type: "pull request",
});
const issues = (0, stale_util_1.renderBehavior)(options.issues, {
stale: 60,
close: 7,
type: "issue",
});
const renderExemptLabels = (exemptLabels) => {
if (!exemptLabels || exemptLabels.length === 0) {
return undefined;
}
return exemptLabels.join(",");
};
stale.addJobs({
stale: {
...(0, runner_options_1.filteredRunsOnOptions)(options.runsOn, options.runsOnGroup),
permissions: {
issues: workflows_model_1.JobPermission.WRITE,
pullRequests: workflows_model_1.JobPermission.WRITE,
},
steps: [
{
uses: "actions/stale@v10",
with: {
// disable global
"days-before-stale": -1,
"days-before-close": -1,
// pull requests
"days-before-pr-stale": pullRequests.daysBeforeStale,
"days-before-pr-close": pullRequests.daysBeforeClose,
"stale-pr-message": pullRequests.staleMessage,
"close-pr-message": pullRequests.closeMessage,
"stale-pr-label": pullRequests.staleLabel,
"exempt-pr-labels": renderExemptLabels(pullRequests.exemptLabels),
// issues
"days-before-issue-stale": issues.daysBeforeStale,
"days-before-issue-close": issues.daysBeforeClose,
"stale-issue-message": issues.staleMessage,
"close-issue-message": issues.closeMessage,
"stale-issue-label": issues.staleLabel,
"exempt-issue-labels": renderExemptLabels(issues.exemptLabels),
},
},
],
},
});
}
}
exports.Stale = Stale;
_a = JSII_RTTI_SYMBOL_1;
Stale[_a] = { fqn: "projen.github.Stale", version: "0.99.51" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0aHViL3N0YWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsNkNBQThDO0FBQzlDLHVEQUFrRDtBQUNsRCw0Q0FBeUM7QUFFekMsc0RBQTBEO0FBMEYxRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSxLQUFNLFNBQVEscUJBQVM7SUFDbEMsWUFBWSxNQUFjLEVBQUUsVUFBd0IsRUFBRTtRQUNwRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsbUJBQW1CO1lBQ3RELGdCQUFnQixFQUFFLEVBQUU7U0FDckIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBYyxFQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDdkQsS0FBSyxFQUFFLEVBQUU7WUFDVCxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUEsMkJBQWMsRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQzVDLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLENBQUM7WUFDUixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUVILE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxZQUF1QixFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUVGLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDWixLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxJQUFBLHNDQUFxQixFQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDN0QsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSwrQkFBYSxDQUFDLEtBQUs7b0JBQzNCLFlBQVksRUFBRSwrQkFBYSxDQUFDLEtBQUs7aUJBQ2xDO2dCQUNELEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsbUJBQW1CO3dCQUN6QixJQUFJLEVBQUU7NEJBQ0osaUJBQWlCOzRCQUNqQixtQkFBbUIsRUFBRSxDQUFDLENBQUM7NEJBQ3ZCLG1CQUFtQixFQUFFLENBQUMsQ0FBQzs0QkFFdkIsZ0JBQWdCOzRCQUNoQixzQkFBc0IsRUFBRSxZQUFZLENBQUMsZUFBZTs0QkFDcEQsc0JBQXNCLEVBQUUsWUFBWSxDQUFDLGVBQWU7NEJBQ3BELGtCQUFrQixFQUFFLFlBQVksQ0FBQyxZQUFZOzRCQUM3QyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsWUFBWTs0QkFDN0MsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLFVBQVU7NEJBQ3pDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7NEJBRWpFLFNBQVM7NEJBQ1QseUJBQXlCLEVBQUUsTUFBTSxDQUFDLGVBQWU7NEJBQ2pELHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxlQUFlOzRCQUNqRCxxQkFBcUIsRUFBRSxNQUFNLENBQUMsWUFBWTs0QkFDMUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLFlBQVk7NEJBQzFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxVQUFVOzRCQUN0QyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO3lCQUMvRDtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvREgsc0JBZ0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHaXRIdWIgfSBmcm9tIFwiLi9naXRodWJcIjtcbmltcG9ydCB7IHJlbmRlckJlaGF2aW9yIH0gZnJvbSBcIi4vc3RhbGUtdXRpbFwiO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiB9IGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBHcm91cFJ1bm5lck9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IGZpbHRlcmVkUnVuc09uT3B0aW9ucyB9IGZyb20gXCIuLi9ydW5uZXItb3B0aW9uc1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBTdGFsZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvdyB0byBoYW5kbGUgc3RhbGUgcHVsbCByZXF1ZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBCeSBkZWZhdWx0LCBwdWxsIHJlcXVlc3RzIHdpdGggbm8gYWN0aXZpdHkgd2lsbCBiZSBtYXJrZWQgYXNcbiAgICogc3RhbGUgYWZ0ZXIgMTQgZGF5cyBhbmQgY2xvc2VkIHdpdGhpbiAyIGRheXMgd2l0aCByZWxldmFudCBjb21tZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0PzogU3RhbGVCZWhhdmlvcjtcblxuICAvKipcbiAgICogSG93IHRvIGhhbmRsZSBzdGFsZSBpc3N1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnkgZGVmYXVsdCwgc3RhbGUgaXNzdWVzIHdpdGggbm8gYWN0aXZpdHkgd2lsbCBiZSBtYXJrZWQgYXNcbiAgICogc3RhbGUgYWZ0ZXIgNjAgZGF5cyBhbmQgY2xvc2VkIHdpdGhpbiA3IGRheXMuXG4gICAqL1xuICByZWFkb25seSBpc3N1ZXM/OiBTdGFsZUJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIHNlbGVjdGlvbiBsYWJlbHNcbiAgICogQGRlZmF1bHQgW1widWJ1bnR1LWxhdGVzdFwiXVxuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgYnkgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnNPbj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIEdyb3VwIHNlbGVjdGlvbiBvcHRpb25zXG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgdGFyZ2V0IFJ1bm5lciBHcm91cCBieSBuYW1lIGFuZC9vciBsYWJlbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGJvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgYXJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uR3JvdXA/OiBHcm91cFJ1bm5lck9wdGlvbnM7XG59XG5cbi8qKlxuICogU3RhbGUgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbGVCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgYmVoYXZpb3IgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogU2FtZSBhcyBzZXR0aW5nIGBkYXlzQmVmb3JlU3RhbGVgIGFuZCBgZGF5c0JlZm9yZUNsb3NlYCB0byBgLTFgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSG93IG1hbnkgZGF5cyB1bnRpbCB0aGUgaXNzdWUgb3IgcHVsbCByZXF1ZXN0IGlzIG1hcmtlZCBhcyBcIlN0YWxlXCIuIFNldCB0byAtMSB0byBkaXNhYmxlLlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBkYXlzQmVmb3JlU3RhbGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERheXMgdW50aWwgdGhlIGlzc3VlL1BSIGlzIGNsb3NlZCBhZnRlciBpdCBpcyBtYXJrZWQgYXMgXCJTdGFsZVwiLiBTZXQgdG8gLTEgdG8gZGlzYWJsZS5cbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgcmVhZG9ubHkgZGF5c0JlZm9yZUNsb3NlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWVudCB0byBhZGQgdG8gdGhlIGlzc3VlL1BSIHdoZW4gaXQgYmVjb21lcyBzdGFsZS5cbiAgICogQGRlZmF1bHQgXCJUaGlzIHB1bGwgcmVxdWVzdCBpcyBub3cgbWFya2VkIGFzIHN0YWxlIGJlY2F1c2UgaGFzblxcJ3Qgc2VlbiBhY3Rpdml0eSBmb3IgYSB3aGlsZS4gQWRkIGEgY29tbWVudCBvciBpdCB3aWxsIGJlIGNsb3NlZCBzb29uLlwiXG4gICAqL1xuICByZWFkb25seSBzdGFsZU1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgaXNzdWUvUFIgd2hlbiBpdCdzIGNsb3NlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkNsb3NpbmcgdGhpcyBwdWxsIHJlcXVlc3QgYXMgaXQgaGFzblxcJ3Qgc2VlbiBhY3Rpdml0eSBmb3IgYSB3aGlsZS4gUGxlYXNlIGFkZCBhIGNvbW1lbnQgQG1lbnRpb25pbmcgYSBtYWludGFpbmVyIHdoZW4geW91IGFyZSByZWFkeSB0byBjb250aW51ZS5cIlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvc2VNZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGlzc3VlL1BSIHdoZW4gaXQgYmVjb21lcyBzdGFsZS5cbiAgICogQGRlZmF1bHQgXCJzdGFsZVwiXG4gICAqL1xuICByZWFkb25seSBzdGFsZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB3aGljaCBleGVtcHQgYW4gaXNzdWUvUFIgZnJvbSBiZWNvbWluZyBzdGFsZS4gU2V0IHRvIGBbXWAgdG8gZGlzYWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbXCJiYWNrbG9nXCJdXG4gICAqL1xuICByZWFkb25seSBleGVtcHRMYWJlbHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBXYXJucyBhbmQgdGhlbiBjbG9zZXMgaXNzdWVzIGFuZCBQUnMgdGhhdCBoYXZlIGhhZCBubyBhY3Rpdml0eSBmb3IgYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUuXG4gKlxuICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsOlxuICpcbiAqICAqIEFkZCBhIFwiU3RhbGVcIiBsYWJlbCB0byBwdWxsIHJlcXVlc3RzIGFmdGVyIDE0IGRheXMgYW5kIGNsb3NlZCBhZnRlciAyIGRheXNcbiAqICAqIEFkZCBhIFwiU3RhbGVcIiBsYWJlbCB0byBpc3N1ZXMgYWZ0ZXIgNjAgZGF5cyBhbmQgY2xvc2VkIGFmdGVyIDcgZGF5c1xuICogICogSWYgYSBjb21tZW50IGlzIGFkZGVkLCB0aGUgbGFiZWwgd2lsbCBiZSByZW1vdmVkIGFuZCB0aW1lciBpcyByZXN0YXJ0ZWQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9zdGFsZVxuICovXG5leHBvcnQgY2xhc3MgU3RhbGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihnaXRodWI6IEdpdEh1Yiwgb3B0aW9uczogU3RhbGVPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihnaXRodWIucHJvamVjdCk7XG5cbiAgICBjb25zdCBzdGFsZSA9IGdpdGh1Yi5hZGRXb3JrZmxvdyhcInN0YWxlXCIpO1xuICAgIHN0YWxlLm9uKHtcbiAgICAgIHNjaGVkdWxlOiBbeyBjcm9uOiBcIjAgMSAqICogKlwiIH1dLCAvLyBhdCAxYW0gZXZlcnkgZGF5XG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHB1bGxSZXF1ZXN0cyA9IHJlbmRlckJlaGF2aW9yKG9wdGlvbnMucHVsbFJlcXVlc3QsIHtcbiAgICAgIHN0YWxlOiAxNCxcbiAgICAgIGNsb3NlOiAyLFxuICAgICAgdHlwZTogXCJwdWxsIHJlcXVlc3RcIixcbiAgICB9KTtcbiAgICBjb25zdCBpc3N1ZXMgPSByZW5kZXJCZWhhdmlvcihvcHRpb25zLmlzc3Vlcywge1xuICAgICAgc3RhbGU6IDYwLFxuICAgICAgY2xvc2U6IDcsXG4gICAgICB0eXBlOiBcImlzc3VlXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZW5kZXJFeGVtcHRMYWJlbHMgPSAoZXhlbXB0TGFiZWxzPzogc3RyaW5nW10pID0+IHtcbiAgICAgIGlmICghZXhlbXB0TGFiZWxzIHx8IGV4ZW1wdExhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleGVtcHRMYWJlbHMuam9pbihcIixcIik7XG4gICAgfTtcblxuICAgIHN0YWxlLmFkZEpvYnMoe1xuICAgICAgc3RhbGU6IHtcbiAgICAgICAgLi4uZmlsdGVyZWRSdW5zT25PcHRpb25zKG9wdGlvbnMucnVuc09uLCBvcHRpb25zLnJ1bnNPbkdyb3VwKSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBpc3N1ZXM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICB9LFxuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVzZXM6IFwiYWN0aW9ucy9zdGFsZUB2MTBcIixcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgLy8gZGlzYWJsZSBnbG9iYWxcbiAgICAgICAgICAgICAgXCJkYXlzLWJlZm9yZS1zdGFsZVwiOiAtMSxcbiAgICAgICAgICAgICAgXCJkYXlzLWJlZm9yZS1jbG9zZVwiOiAtMSxcblxuICAgICAgICAgICAgICAvLyBwdWxsIHJlcXVlc3RzXG4gICAgICAgICAgICAgIFwiZGF5cy1iZWZvcmUtcHItc3RhbGVcIjogcHVsbFJlcXVlc3RzLmRheXNCZWZvcmVTdGFsZSxcbiAgICAgICAgICAgICAgXCJkYXlzLWJlZm9yZS1wci1jbG9zZVwiOiBwdWxsUmVxdWVzdHMuZGF5c0JlZm9yZUNsb3NlLFxuICAgICAgICAgICAgICBcInN0YWxlLXByLW1lc3NhZ2VcIjogcHVsbFJlcXVlc3RzLnN0YWxlTWVzc2FnZSxcbiAgICAgICAgICAgICAgXCJjbG9zZS1wci1tZXNzYWdlXCI6IHB1bGxSZXF1ZXN0cy5jbG9zZU1lc3NhZ2UsXG4gICAgICAgICAgICAgIFwic3RhbGUtcHItbGFiZWxcIjogcHVsbFJlcXVlc3RzLnN0YWxlTGFiZWwsXG4gICAgICAgICAgICAgIFwiZXhlbXB0LXByLWxhYmVsc1wiOiByZW5kZXJFeGVtcHRMYWJlbHMocHVsbFJlcXVlc3RzLmV4ZW1wdExhYmVscyksXG5cbiAgICAgICAgICAgICAgLy8gaXNzdWVzXG4gICAgICAgICAgICAgIFwiZGF5cy1iZWZvcmUtaXNzdWUtc3RhbGVcIjogaXNzdWVzLmRheXNCZWZvcmVTdGFsZSxcbiAgICAgICAgICAgICAgXCJkYXlzLWJlZm9yZS1pc3N1ZS1jbG9zZVwiOiBpc3N1ZXMuZGF5c0JlZm9yZUNsb3NlLFxuICAgICAgICAgICAgICBcInN0YWxlLWlzc3VlLW1lc3NhZ2VcIjogaXNzdWVzLnN0YWxlTWVzc2FnZSxcbiAgICAgICAgICAgICAgXCJjbG9zZS1pc3N1ZS1tZXNzYWdlXCI6IGlzc3Vlcy5jbG9zZU1lc3NhZ2UsXG4gICAgICAgICAgICAgIFwic3RhbGUtaXNzdWUtbGFiZWxcIjogaXNzdWVzLnN0YWxlTGFiZWwsXG4gICAgICAgICAgICAgIFwiZXhlbXB0LWlzc3VlLWxhYmVsc1wiOiByZW5kZXJFeGVtcHRMYWJlbHMoaXNzdWVzLmV4ZW1wdExhYmVscyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=