@libs-ui/services-grid-layout 0.2.357-22 → 0.2.357-24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -1
- package/canvas/grid-layout-canvas.component.d.ts +5 -0
- package/defines/collision.define.d.ts +1 -1
- package/drag-controller.d.ts +1 -1
- package/esm2022/canvas/grid-layout-canvas.component.mjs +25 -7
- package/esm2022/defines/collision.define.mjs +5 -3
- package/esm2022/drag-controller.mjs +5 -3
- package/esm2022/grid-layout.service.mjs +49 -1
- package/esm2022/interfaces/grid-layout.interface.mjs +1 -1
- package/esm2022/tree.service.mjs +15 -2
- package/fesm2022/libs-ui-services-grid-layout.mjs +94 -11
- package/fesm2022/libs-ui-services-grid-layout.mjs.map +1 -1
- package/grid-layout.service.d.ts +32 -0
- package/interfaces/grid-layout.interface.d.ts +20 -0
- package/package.json +3 -3
|
@@ -484,6 +484,22 @@ export class LibsUiGridLayoutService {
|
|
|
484
484
|
get totalColumns() {
|
|
485
485
|
return this.config?.cols ?? gridLayoutRootConfig().maxCols ?? 12;
|
|
486
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* Chiều cao một hàng lưới (pixel) dùng để tính khung xem trước lúc kéo thả.
|
|
489
|
+
*
|
|
490
|
+
* 🔴 Phải đọc từ `config.rowHeight` của nơi dùng. Trước đây `calculateDropGhost` đóng cứng 68, nên
|
|
491
|
+
* mặt phẳng khai hàng thấp thì khung xem trước cao gấp nhiều lần khối thật — nơi dùng phải ẩn khung
|
|
492
|
+
* của thư viện đi rồi tự vẽ lại.
|
|
493
|
+
*/
|
|
494
|
+
get rowStepPx() {
|
|
495
|
+
return this.config?.rowHeight ?? gridLayoutRootConfig().fixedRowHeight ?? 68;
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Khe NHÌN THẤY giữa hai khối cấp gốc (px). `0` = không áp, giữ đúng hành vi cũ.
|
|
499
|
+
*/
|
|
500
|
+
get visualGapPx() {
|
|
501
|
+
return this.config?.visualGap ?? 0;
|
|
502
|
+
}
|
|
487
503
|
/**
|
|
488
504
|
* Đổi số cột / số hàng của một khối rồi vẽ lại.
|
|
489
505
|
*
|
|
@@ -663,8 +679,40 @@ export class LibsUiGridLayoutService {
|
|
|
663
679
|
gridsterOptions: (depth, cb) => this.buildGridsterOptions(depth, cb),
|
|
664
680
|
attachNode: (node, depth, host) => this.attachNode(node, depth, host),
|
|
665
681
|
detachNode: (nodeId) => this.detachNode(nodeId),
|
|
682
|
+
getNodeElement: (nodeId, scope) => this.getNodeElement(nodeId, scope),
|
|
683
|
+
getNodeCanvasElement: (nodeId, scope) => this.getNodeCanvasElement(nodeId, scope),
|
|
666
684
|
};
|
|
667
685
|
}
|
|
686
|
+
/**
|
|
687
|
+
* Trả về vỏ DOM của một khối theo `id`.
|
|
688
|
+
*
|
|
689
|
+
* 🔴 Nơi dùng cần chạm vào DOM của khối (đo kích thước, gắn lớp phủ riêng) BẮT BUỘC đi qua đây.
|
|
690
|
+
* Trước khi có hàm này, nơi dùng phải tự viết `querySelector('.libs-ui-grid-layout-block-shell[...]')`
|
|
691
|
+
* — tức bám vào tên class NỘI BỘ của thư viện: đổi tên class là màn bên kia vỡ IM LẶNG, biên dịch
|
|
692
|
+
* vẫn xanh vì chuỗi selector không ai kiểm.
|
|
693
|
+
*
|
|
694
|
+
* `scope` giới hạn phạm vi tìm (mặc định cả tài liệu) — cần khi nhiều mặt phẳng cùng nằm trên màn.
|
|
695
|
+
*/
|
|
696
|
+
getNodeElement(nodeId, scope) {
|
|
697
|
+
if (typeof document === 'undefined') {
|
|
698
|
+
return undefined;
|
|
699
|
+
}
|
|
700
|
+
const root = scope ?? document;
|
|
701
|
+
return root.querySelector(`.libs-ui-grid-layout-block-shell[data-node-id="${nodeId}"]`) ?? undefined;
|
|
702
|
+
}
|
|
703
|
+
/**
|
|
704
|
+
* Trả về mặt phẳng LỒNG nằm trong một khối container (khối có con), nếu có.
|
|
705
|
+
*
|
|
706
|
+
* Tách riêng khỏi `getNodeElement` vì nơi dùng thường cần chèn phần tử của mình vào TRƯỚC mặt phẳng
|
|
707
|
+
* lồng này (ví dụ hàng tiêu đề của khối ghép), nên phải cầm đúng nó chứ không phải cả vỏ.
|
|
708
|
+
*/
|
|
709
|
+
getNodeCanvasElement(nodeId, scope) {
|
|
710
|
+
const shell = this.getNodeElement(nodeId, scope);
|
|
711
|
+
if (!shell) {
|
|
712
|
+
return undefined;
|
|
713
|
+
}
|
|
714
|
+
return shell.querySelector(':scope > libs_ui-services-grid_layout-canvas') ?? undefined;
|
|
715
|
+
}
|
|
668
716
|
applyInputs(ref, node, depth) {
|
|
669
717
|
ref.setInput('data', node.data);
|
|
670
718
|
ref.setInput('node', node);
|
|
@@ -677,4 +725,4 @@ export class LibsUiGridLayoutService {
|
|
|
677
725
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiGridLayoutService, decorators: [{
|
|
678
726
|
type: Injectable
|
|
679
727
|
}], ctorParameters: () => [] });
|
|
680
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2dyaWQtbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsVUFBVSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFTN0Q7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsNkZBQTZGO0lBQzdGLHdGQUF3RjtJQUN4RixtRkFBbUY7SUFDbEUsV0FBVyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQUNqRSxvRkFBb0Y7SUFDbkUsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQ2hFOzs7OztPQUtHO0lBQ2MscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFbkU7UUFDRSwrRkFBK0Y7UUFDL0YseUZBQXlGO1FBQ3pGLCtGQUErRjtRQUMvRixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxNQUFNLENBQXVCO0lBQ3BCLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FB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RSxJQUFJLENBQUMsQ0FBQztRQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO3dHQXp4QlUsdUJBQXVCOzRHQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIERlc3Ryb3lSZWYsIEluamVjdGFibGUsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSwgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJ2dyaWRzdGVyMTgnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBncmlkTGF5b3V0TmVzdGVkQ29uZmlnLCBncmlkTGF5b3V0Um9vdENvbmZpZyB9IGZyb20gJy4vZGVmaW5lcy9ncmlkc3Rlci1jb25maWcuZGVmaW5lJztcbmltcG9ydCB7IGZpbmROb2RlUmVjdXJzaXZlLCBmaW5kUGFyZW50UmVjdXJzaXZlIH0gZnJvbSAnLi9kZWZpbmVzL2NvbGxpc2lvbi5kZWZpbmUnO1xuaW1wb3J0IHsgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRV9ncmlkTGF5b3V0X21vZGVfc3RyaW5nLFxuICBUX2dyaWRMYXlvdXRfY2hhbmdlRXZlbnQsXG4gIFRfZ3JpZExheW91dF9uZXdOb2RlLFxuICBUX2dyaWRMYXlvdXRfY29uZmlnLFxuICBUX2dyaWRMYXlvdXRfbm9kZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2dyaWQtbGF5b3V0LmludGVyZmFjZSc7XG5cbi8qKlxuICogROG7sW5nIG3hu5l0IG3hurd0IHBo4bqzbmcga8OpbyB0aOG6oyB2w6AgdOG7sSBn4bqvbiBjb21wb25lbnQgY+G7p2EgbsahaSBkw7luZyBsw6puIHThu6tuZyBraOG7kWkuXG4gKlxuICogTsahaSBkw7luZyBjaOG7iSBj4bqnbiDEkcawYSB2w6BvOiBsb+G6oWkgY29tcG9uZW50IG114buRbiBk4buxbmdcbiAqIChgbm9kZUNvbXBvbmVudFR5cGVgKSB2w6AgY8OieSBk4buvIGxp4buHdSAoYGRhdGFgKS4gVG/DoG4gYuG7mSB2aeG7h2MgduG6vSBsxrDhu5tpLCBrw6lvIHRo4bqjLCDEkeG7lWkga8OtY2ggdGjGsOG7m2MsXG4gKiBs4buTbmcgY29udGFpbmVyIHbDoCBk4buNbiBk4bq5cCBkbyB0aMawIHZp4buHbiBsby5cbiAqXG4gKiDwn5S0IMSQw6J5IGzDoCBzZXJ2aWNlIHRoZW8gVOG7qk5HIG3hurd0IHBo4bqzbmcsIEtIw5RORyBgcHJvdmlkZWRJbjogJ3Jvb3QnYC4gS2hhaSB0cm9uZyBgcHJvdmlkZXJzYCBj4bunYVxuICogY29tcG9uZW50IGTDuW5nIG7DszsgaGFpIG3hurd0IHBo4bqzbmcgdHLDqm4gY8O5bmcgbeG7mXQgbcOgbiBwaOG6o2kgbMOgIGhhaSB0aOG7sWMgdGjhu4MgcmnDqm5nLCBkw7luZyBjaHVuZyB0aMOsXG4gKiBgY29tcG9uZW50UmVmc2AgY+G7p2EgbeG6t3QgcGjhurNuZyBuw6B5IGLhu4sgbeG6t3QgcGjhurNuZyBraWEgZOG7jW4gbeG6pXQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaWJzVWlHcmlkTGF5b3V0U2VydmljZSB7XG4gIC8vIPCflLQgVOG7sCBU4bqgTywga2jDtG5nIGBpbmplY3RgLiBOxqFpIGTDuW5nIGNo4buJIHBo4bqjaSB2aeG6v3QgYHByb3ZpZGVyczogW0xpYnNVaUdyaWRMYXlvdXRTZXJ2aWNlXWAg4oCUXG4gIC8vIGtow7RuZyBwaOG6o2kgYmnhur90IGLDqm4gdHJvbmcgdGjGsCB2aeG7h24gY8OybiBzZXJ2aWNlIG7DoG8ga2jDoWMgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgLy8gYFRyZWVTZXJ2aWNlYCBraMO0bmcgZ2nhu68gdHLhuqFuZyB0aMOhaSBkw7luZyBjaHVuZyBuw6puIG3hu5dpIG3hurd0IHBo4bqzbmcgbeG7mXQgYuG6o24gbMOgIMSRw7puZy5cbiAgcHJpdmF0ZSByZWFkb25seSB0cmVlU2VydmljZSA9IG5ldyBMaWJzVWlHcmlkTGF5b3V0VHJlZVNlcnZpY2UoKTtcbiAgLyoqIEzGsOG7o3QgdOG6o2kgY29tcG9uZW50IMSRYW5nIGNo4budLCB0aGVvIGlkIGto4buRaSDigJQgxJHhu4MgaHXhu7cga2hpIGto4buRaSBi4buLIGfhu6EgZ2nhu69hIGNo4burbmcuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ0xvYWRzID0gbmV3IE1hcDxzdHJpbmcsIFN1YnNjcmlwdGlvbj4oKTtcbiAgLyoqXG4gICAqIELhu5kgdGhlbyBkw7VpIGLhu4EgcuG7mW5nIGPhu6dhIHThu6tuZyBsxrDhu5tpIEzhu5JORywgxJHhu4Mgbmfhuq90IGtoaSBzZXJ2aWNlIGLhu4sgaHXhu7cuXG4gICAqXG4gICAqIPCflLQgR2nhu68gdGhhbSBjaGnhur91IGzDoCBC4bquVCBCVeG7mEM6IGBSZXNpemVPYnNlcnZlcmAga2jDtG5nIHThu7EgdOG6r3QgdGhlbyB2w7JuZyDEkeG7nWkgY29tcG9uZW50LiBLaMO0bmcgZOG7jW5cbiAgICogdGjDrCBt4buXaSBs4bqnbiBu4bqhcCBs4bqhaSBi4buRIGPhu6VjICjEkeG7lWkgdGFiKSBs4bqhaSBjaOG7k25nIHRow6ptIG3hu5l0IGLhu5ksIHbDoCBjaMO6bmcgduG6q24gY2jhuqF5IHRyw6puIERPTSDEkcOjIGfhu6EuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5lc3RlZFJlc2l6ZU9ic2VydmVycyA9IG5ldyBTZXQ8UmVzaXplT2JzZXJ2ZXI+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8g8J+UtCBTZXJ2aWNlIGtoYWkgdHJvbmcgYHByb3ZpZGVyc2AgY+G7p2EgY29tcG9uZW50IG7Dqm4gQW5ndWxhciBodeG7tyBuw7MgY8O5bmcgY29tcG9uZW50IOKAlCB0aMawIHZp4buHblxuICAgIC8vIHThu7EgZOG7jW4g4bufIMSRw6J5LCBuxqFpIGTDuW5nIEtIw5RORyBwaOG6o2kgZ+G7jWkgYGRlc3Ryb3koKWAgdHJvbmcgYG5nT25EZXN0cm95YCAobmfGsOG7nWkgZMO5bmcgY2jhu5F0XG4gICAgLy8gMjgvMDgvMjAyNikuIELhuq90IG5o4bubIG3hu5l0IGLGsOG7m2MgZOG7jW4gZOG6uXAgbMOgIGtp4buDdSBBUEkgZOG7hSBxdcOqbiwgdsOgIHF1w6puIHRow6wgcsOyIHLhu4kgYuG7mSBuaOG7myBpbSBs4bq3bmcuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZz86IFRfZ3JpZExheW91dF9jb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50UmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByb290Tm9kZSA9IHNpZ25hbDxUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlZGl0TW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiB0xINuZyBt4buXaSBs4bqnbiBjw6J5IMSR4buVaSDigJQgY29tcG9uZW50IGNvbiDEkeG7jWMgxJHhu4MgYmnhur90IHBo4bqjaSB0w61uaCBs4bqhaSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcnNpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b29tTGV2ZWwgPSBzaWduYWw8bnVtYmVyPigxKTtcblxuICAvKipcbiAgICogU2lnbmFsIGNo4buJIMSR4buNYyDEkeG7gyBuxqFpIGTDuW5nIHRoZW8gZMO1aS5cbiAgICpcbiAgICog8J+UtCBMw6AgVEhV4buYQyBUw41OSCwga2jDtG5nIHBo4bqjaSBnZXR0ZXIuIEdldHRlciB0cuG6oyBzaWduYWwgdGjDrCBjaOG7lyDEkeG7jWMgcGjhuqNpIHZp4bq/dCBgVmVyc2lvbigpKClgIOKAlFxuICAgKiBxdcOqbiBj4bq3cCBuZ2/hurdjIHRo4bupIGhhaSBsw6AgY29tcHV0ZWQgS0jDlE5HIHBo4bulIHRodeG7mWMgdsOgbyBuw7MsIGPDonkgxJHhu5VpIG3DoCBsxrDhu5tpIMSR4bupbmcgaW0sIHbDoFxuICAgKiBUeXBlU2NyaXB0IGtow7RuZyBo4buBIGLDoW8gbOG7l2kgKMSRbyAyOC8wOC8yMDI2OiB0aMOqbSBraOG7kWkga2jDtG5nIGhp4buHbiwgc+G6r3AgZ+G7jW4ga2jDtG5nIG5ow7pjIG5ow61jaCkuXG4gICAqL1xuICByZWFkb25seSBSb290ID0gdGhpcy5yb290Tm9kZS5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IElzRWRpdE1vZGUgPSB0aGlzLmVkaXRNb2RlLmFzUmVhZG9ubHkoKTtcbiAgLyoqIHTEg25nIG3hu5dpIGzhuqduIGPDonkgaG/hurdjIGPhuqV1IGjDrG5oIMSR4buVaSAqL1xuICByZWFkb25seSBWZXJzaW9uID0gdGhpcy52ZXJzaW9uLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgWm9vbSA9IHRoaXMuem9vbUxldmVsLmFzUmVhZG9ubHkoKTtcblxuICAvKipcbiAgICogdHLhuqduIHPhu5EgY+G6pXAgY29udGFpbmVyIGzhu5NuZyBuaGF1IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIGJp4bq/dCBjw7MgY2hvIGNodXnhu4NuIHRow6BuaCBjb250YWluZXIga2jDtG5nICovXG4gIHByaXZhdGUgbWF4Q29udGFpbmVyRGVwdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/Lm1heENvbnRhaW5lckRlcHRoID8/IDE7XG4gIH1cblxuICAvKipcbiAgICogbOG7gSB0cm9uZyBj4bunYSBjb250YWluZXIsIHB4IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIMSR4bq3dCBwYWRkaW5nIGzDqm4gduG7jyBjb250YWluZXIgKi9cbiAgcHJpdmF0ZSBjb250YWluZXJQYWRkaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5jb250YWluZXJQYWRkaW5nID8/IDEyO1xuICB9XG5cbiAgLyoqIEto4bufaSB04bqhbyBt4bq3dCBwaOG6s25nLiBH4buNaSBs4bqhaSBz4bq9IGThu41uIHPhuqFjaCBjb21wb25lbnQgY8WpIHLhu5NpIGThu7FuZyBs4bqhaSB04burIMSR4bqndS4gKi9cbiAgaW5pdChjb25maWc6IFRfZ3JpZExheW91dF9jb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAvLyDwn5S0IELhu5EgY+G7pWMgxJDDgyBMxq9VIGtow7RuZyDEkWkgcXVhIGx14bqtdCBjaOG6t24gbsOgbyBj4bunYSBnaWFvIGRp4buHbjogYuG6o24gbMawdSBjxakgKHNpbmggdHLGsOG7m2Mga2hpIGPDsyB0cuG6p24sXG4gICAgLy8gaG/hurdjIGRvIHRoYW8gdMOhYyBs4buXaSkgduG6q24gbWFuZyBjb250YWluZXIgbOG7k25nIGNvbnRhaW5lci4gVHLhuqduIGBtYXhDb250YWluZXJEZXB0aGAgY2jhu4kg4bqpbiBOw5pUXG4gICAgLy8gdHLDqm4gY2FudmFzIOKAlCBuw7Mga2jDtG5nIHPhu61hIGThu68gbGnhu4d1LCBuw6puIHRoaeG6v3UgZMOybmcgbsOgeSBsw6AgduG6vSByYSDEkcO6bmcgY8OieSBxdcOhIHPDonUgxJHDsy5cbiAgICAvLyBOxqFpIGTDuW5nIEtIw5RORyB04buxIGfhu41pIMSRxrDhu6NjOiBgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlYCBj4buRIMO9IGtow7RuZyB4deG6pXQuXG4gICAgdGhpcy50cmVlU2VydmljZS5mbGF0dGVuT3ZlckRlcHRoQ29udGFpbmVycyhjb25maWcuZGF0YSwgdGhpcy5tYXhDb250YWluZXJEZXB0aCgpKTtcbiAgICB0aGlzLmFzc2lnbk92ZXJsYXBMYXllcnMoY29uZmlnLmRhdGEpO1xuICAgIC8vIPCflLQgTmjDom4gYuG6o24gbmjGsCBgcmVmcmVzaCgpYDogYGluaXQoKWAgbOG6oWkgKMSR4buVaSBjaOG6vyDEkeG7mSwgYuG6rXQvdOG6r3QgY2jhu5NuZyBraOG7kWkpIHRyw6puIEPDmU5HIG9iamVjdCBjw6J5XG4gICAgLy8gdGjDrCBgQGZvcmAga2jDtG5nIGThu7FuZyBs4bqhaSBgZ3JpZHN0ZXItaXRlbWAsIG7Dqm4gYGxheWVySW5kZXhgIHbhu6thIGfDoW4ga2jDtG5nIHThu5tpIGAkaXRlbWAgdsOgIGto4buRaVxuICAgIC8vIHbhuqtuIGtow7RuZyDEkcOoIG5oYXUgxJHGsOG7o2MgKMSRbyAyOC8wOC8yMDI2OiBgaXRlbS5sYXllckluZGV4YCA9IDF8MnwzfDR8NyBtw6AgYCRpdGVtLmxheWVySW5kZXhgXG4gICAgLy8gdG/DoG4gYHVuZGVmaW5lZGApLlxuICAgIHRoaXMucm9vdE5vZGUuc2V0KHRoaXMuc2hhbGxvd0Nsb25lVHJlZShjb25maWcuZGF0YSkpO1xuICAgIHRoaXMuZWRpdE1vZGUuc2V0KGNvbmZpZy5pc0VkaXRNb2RlID8/IGZhbHNlKTtcblxuICAgIGxldCBpbml0aWFsWm9vbSA9IGNvbmZpZy5pbml0aWFsWm9vbSA/PyAxO1xuICAgIGlmIChjb25maWcuc3RvcmFnZUtleSAmJiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShjb25maWcuc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChzYXZlZCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQoc2F2ZWQpO1xuICAgICAgICAgIGNvbnN0IG1pbiA9IGNvbmZpZy56b29tTWluID8/IDAuNDtcbiAgICAgICAgICBjb25zdCBtYXggPSBjb25maWcuem9vbU1heCA/PyAxLjU7XG4gICAgICAgICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+PSBtaW4gJiYgcGFyc2VkIDw9IG1heCkge1xuICAgICAgICAgICAgaW5pdGlhbFpvb20gPSBwYXJzZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGxvY2FsU3RvcmFnZSBhY2Nlc3MgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy56b29tTGV2ZWwuc2V0KGluaXRpYWxab29tKTtcblxuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIHNldEVkaXRNb2RlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0TW9kZS5zZXQodmFsdWUpO1xuICAgIC8vIPCflLQgUEjhuqJJIGLGoW0gYHZlcnNpb25gOiBgZ3JpZHN0ZXJPcHRpb25zKClgIMSR4buNYyBgZWRpdE1vZGVgIMSR4buDIGLhuq10L3Thuq90IGvDqW/igJN0aOG6oywgbcOgIGNvbXB1dGVkXG4gICAgLy8gYGdyaWRPcHRpb25zYCBiw6puIGNhbnZhcyBjaOG7iSBjaOG6oXkgbOG6oWkga2hpIGBWZXJzaW9uYCDEkeG7lWkuIFRoaeG6v3UgZMOybmcgbsOgeSB0aMOsIMSR4buVaSBjaOG6vyDEkeG7mSB4b25nXG4gICAgLy8gZ3JpZHN0ZXIgduG6q24gZ2nhu68gb3B0aW9ucyBjxakg4oCUIGNodXnhu4NuIHNhbmcgWEVNIG3DoCBraOG7kWkgduG6q24ga8OpbyDEkcaw4bujYy5cbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICAvKipcbiAgICogQuG6rXQvdOG6r3QgY2hvIGto4buRaSBjaOG7k25nIGzDqm4gbmhhdSDigJQgS0jDlE5HIGThu7FuZyBs4bqhaSBt4bq3dCBwaOG6s25nLlxuICAgKlxuICAgKiBUcsaw4bubYyDEkcOieSBuxqFpIGTDuW5nIHBo4bqjaSBn4buNaSBgaW5pdCgpYCBs4bqhaSDEkeG7gyDEkeG7lWkgY+G7nSBuw6B5LCBtw6AgYGluaXQoKWAgaHXhu7cgc+G6oWNoIHLhu5NpIGThu7FuZyBs4bqhaSBt4buNaVxuICAgKiBjb21wb25lbnQgbuG7mWkgZHVuZyDigJQgbMOjbmcgcGjDrSwgdsOgIG5nxrDhu51pIGTDuW5nIHRo4bqleSBtw6BuIGNo4bubcCAobmfGsOG7nWkgZMO5bmcgY2jhu5F0IDI4LzA4LzIwMjYpLlxuICAgKi9cbiAgc2V0QWxsb3dPdmVybGFwKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgYWxsb3dPdmVybGFwOiB2YWx1ZSB9O1xuXG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIPCflLQgR8OhbiBs4bubcCB2w6BvIEPDglkgxJBBTkcgVuG6vCAoYHJvb3ROb2RlYCksIEtIw5RORyBwaOG6o2kgYGNvbmZpZy5kYXRhYC5cbiAgICAvLyBgaW5pdCgpYCDEkcOjIGNsb25lIGBjb25maWcuZGF0YWAgc2FuZyBgcm9vdE5vZGVgIG7Dqm4gaGFpIG9iamVjdCBLSMOBQyBuaGF1OyBnw6FuIHbDoG8gYGNvbmZpZy5kYXRhYFxuICAgIC8vIHRow6wgYHJlZnJlc2goKWAgY2xvbmUgbOG6oWkgdOG7qyBgcm9vdE5vZGVgIOKAlCBs4bubcCB24burYSBnw6FuIGtow7RuZyB04bubaSBgZ3JpZHN0ZXItaXRlbWAgbsOgbywgYHotaW5kZXhgXG4gICAgLy8gY+G7p2EgbeG7jWkga2jhu5FpIMSR4bupbmcg4bufIGAxYCB2w6Aga2jhu5FpIG7DoG8gduG6vSBzYXUgdGjDrCBu4bqxbSB0csOqbjogY2jhu5NuZyBraOG7kWkgXCJsw7pjIMSRxrDhu6NjIGzDumMga2jDtG5nXCJcbiAgICAvLyAoxJFvIDA0LzA5LzIwMjY6IGBpdGVtLmxheWVySW5kZXhgIHVuZGVmaW5lZCwgYGdldExheWVySW5kZXgoKWAgPSAwIGNobyBj4bqjIDgga2jhu5FpKS5cbiAgICB0aGlzLmFzc2lnbk92ZXJsYXBMYXllcnMocm9vdCk7XG4gICAgLy8gVGhheSB0aGFtIGNoaeG6v3UgY8OieSDEkeG7gyBgbGF5ZXJJbmRleGAgduG7q2EgZ8OhbiB04bubaSDEkcaw4bujYyBgJGl0ZW1gIGPhu6dhIGdyaWRzdGVyOyBjb21wb25lbnQgbuG7mWkgZHVuZ1xuICAgIC8vIEtIw5RORyBi4buLIGThu7FuZyBs4bqhaSB2w6wgYGF0dGFjaE5vZGVgIG5o4bqtbiByYSBpZCBjxakgdsOgIGNo4buJIGBzZXRJbnB1dGAuXG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQ+G6pXUgaMOsbmggZ3JpZHN0ZXIgY2hvIG3hu5l0IGPhuqVwIGzGsOG7m2kuXG4gICAqXG4gICAqIEBwYXJhbSBkZXB0aCAwID0gbMaw4bubaSBj4bqlcCB0cmFuZywg4omlIDEgPSBsxrDhu5tpIGzhu5NuZyB0cm9uZyBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgYnVpbGRHcmlkc3Rlck9wdGlvbnMoZGVwdGg6IG51bWJlciwgaXRlbUNoYW5nZUNhbGxiYWNrPzogKCkgPT4gdm9pZCk6IEdyaWRzdGVyQ29uZmlnIHtcbiAgICBjb25zdCBiYXNlID0gZGVwdGggPT09IDAgPyBncmlkTGF5b3V0Um9vdENvbmZpZygpIDogZ3JpZExheW91dE5lc3RlZENvbmZpZygpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRnJlZU1vZGUgPSBjb25maWcubW9kZSA9PT0gRV9ncmlkTGF5b3V0X21vZGVfc3RyaW5nLmZyZWU7XG4gICAgY29uc3QgY2FuRWRpdCA9IHRoaXMuZWRpdE1vZGUoKTtcbiAgICBjb25zdCBjYW5PdmVybGFwID0gaXNGcmVlTW9kZSB8fCAoY29uZmlnLmFsbG93T3ZlcmxhcCA/PyBmYWxzZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHNjYWxlOiB0aGlzLnpvb21MZXZlbCgpLFxuICAgICAgLi4uKGNvbmZpZy5jb2xzID8geyBtaW5Db2xzOiBjb25maWcuY29scywgbWF4Q29sczogY29uZmlnLmNvbHMsIG1heEl0ZW1Db2xzOiBjb25maWcuY29scyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5yb3dIZWlnaHQgJiYgZGVwdGggPT09IDAgPyB7IGZpeGVkUm93SGVpZ2h0OiBjb25maWcucm93SGVpZ2h0IH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPT09IDAgJiYgY29uZmlnLm1pblJvd3MgIT09IHVuZGVmaW5lZCA/IHsgbWluUm93czogY29uZmlnLm1pblJvd3MgfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA+IDAgJiYgY29uZmlnLm5lc3RlZE1pblJvd3MgIT09IHVuZGVmaW5lZCA/IHsgbWluUm93czogY29uZmlnLm5lc3RlZE1pblJvd3MgfSA6IHt9KSxcbiAgICAgIC8vIEtoZSB2w6AgY2hp4buBdSBjYW8gaMOgbmcga2jDoWMgbmhhdSB0aGVvIGPhuqVwOiBsxrDhu5tpIHRyYW5nIHRob8OhbmcsIGzGsOG7m2kgbOG7k25nIGtow610LlxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5tYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgbWFyZ2luOiBjb25maWcubWFyZ2luIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPiAwICYmIGNvbmZpZy5uZXN0ZWRNYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgbWFyZ2luOiBjb25maWcubmVzdGVkTWFyZ2luIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPiAwICYmIGNvbmZpZy5uZXN0ZWRSb3dIZWlnaHQgIT09IHVuZGVmaW5lZCA/IHsgZml4ZWRSb3dIZWlnaHQ6IGNvbmZpZy5uZXN0ZWRSb3dIZWlnaHQgfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcub3V0ZXJNYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgb3V0ZXJNYXJnaW46IGNvbmZpZy5vdXRlck1hcmdpbiB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5vdXRlck1hcmdpbkJvdHRvbSAhPT0gdW5kZWZpbmVkID8geyBvdXRlck1hcmdpbkJvdHRvbTogY29uZmlnLm91dGVyTWFyZ2luQm90dG9tIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLm1pbkl0ZW1Sb3dzICE9PSB1bmRlZmluZWQgPyB7IG1pbkl0ZW1Sb3dzOiBjb25maWcubWluSXRlbVJvd3MgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcuZGVmYXVsdEl0ZW1Db2xzICE9PSB1bmRlZmluZWQgPyB7IGRlZmF1bHRJdGVtQ29sczogY29uZmlnLmRlZmF1bHRJdGVtQ29scyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5kZWZhdWx0SXRlbVJvd3MgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdEl0ZW1Sb3dzOiBjb25maWcuZGVmYXVsdEl0ZW1Sb3dzIH0gOiB7fSksXG5cbiAgICAgIC8vIPCflLQgQ2jhur8gxJHhu5kgWEVNIHBo4bqjaSBU4bquVCBo4bqzbiBrw6lvIHbDoCDEkeG7lWkga8OtY2ggdGjGsOG7m2MuXG4gICAgICAvLyBgYmFzZWAgbHXDtG4gxJHhu4MgYGVuYWJsZWQ6IHRydWVgOyBraMO0bmcgZ2hpIMSRw6ggdGhlbyBgZWRpdE1vZGVgIHRow6wgbmfGsOG7nWkgeGVtIHbhuqtuIGvDqW8gxJHGsOG7o2Mga2jhu5FpXG4gICAgICAvLyB2w6AgxJHhu5VpIGLhu5EgY+G7pWMgY+G7p2EgbmfGsOG7nWkga2jDoWMgKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNjogXCLEkWFuZyB4ZW0gbcOgIHbhuqtuIGvDqW8gdGjhuqMgdGhheSDEkeG7lWlcbiAgICAgIC8vIHbhu4sgdHLDrSB2w6AgdGjDqm0ga2jhu5FpIMSRxrDhu6NjXCIpLlxuICAgICAgZHJhZ2dhYmxlOiB7IC4uLmJhc2UuZHJhZ2dhYmxlLCBlbmFibGVkOiBjYW5FZGl0IH0sXG4gICAgICByZXNpemFibGU6IHsgLi4uYmFzZS5yZXNpemFibGUsIGVuYWJsZWQ6IGNhbkVkaXQgfSxcblxuICAgICAgLy8gQ2jhur8gxJHhu5kgdOG7sSBkbyBMVcOUTiBjaG8gY2jhu5NuZzsgY2jhur8gxJHhu5kgbMaw4bubaSB0aMOsIHRoZW8gY+G7nSBj4bunYSBuxqFpIGTDuW5nLlxuICAgICAgYWxsb3dNdWx0aUxheWVyOiBjYW5PdmVybGFwLFxuICAgICAgLy8g8J+UtCBC4bqtdCBgYWxsb3dNdWx0aUxheWVyYCBN4buYVCBNw4xOSCBraMO0bmcgxJHhu6cuIE3DoyBsaWIgc28gYGxheWVySW5kZXhgIGPhu6dhIGhhaSBraOG7kWk6IEtIw4FDIG5oYXVcbiAgICAgIC8vIHRow6wgY2hvIMSRw6gsIEdJ4buQTkcgbmhhdSB24bqrbiBiw6FvIHZhIGNo4bqhbS4gS2jhu5FpIGtow7RuZyBraGFpIGBsYXllckluZGV4YCDEkeG7gXUgcsahaSB24buBXG4gICAgICAvLyBgZGVmYXVsdExheWVySW5kZXhgIOKAlCB04bupYyBjw7luZyBs4bubcCwgdsOgIHbhuqtuIGLhu4sgxJHhuql5IG5oYXUgbmjGsCBsxrDhu5tpIHRoxrDhu51uZyAobmfGsOG7nWkgZMO5bmcgYsOhb1xuICAgICAgLy8gMjgvMDgvMjAyNjogXCJi4bqtdCBjaOG7k25nIGto4buRaSBuaMawbmcga2hpIGvDqW8gdGjDrCBjw6FjIGto4buRaSB24bqrbiBkaSBjaHV54buDbiB0aGVvXCIpLlxuICAgICAgLy8gQ2hvIGNo4buTbmcgdGjDrCBwaOG6o2kgVOG6rlQgxJHhuql5IGto4buRaSwgbuG6v3Uga2jDtG5nIGto4buRaSBi4buLIGThuqF0IMSRaSB0csaw4bubYyBraGkga+G7i3AgxJHDqCBsw6puIG5oYXUuXG4gICAgICAuLi4oY2FuT3ZlcmxhcCA/IHsgcHVzaEl0ZW1zOiBmYWxzZSwgcHVzaFJlc2l6ZUl0ZW1zOiBmYWxzZSwgc3dhcDogZmFsc2UsIHN3YXBXaGlsZURyYWdnaW5nOiBmYWxzZSB9IDoge30pLFxuXG4gICAgICAuLi50aGlzLmJ1aWxkTmVzdGVkUmVzaXplSG9va3MoYmFzZSwgZGVwdGgpLFxuXG4gICAgICBpdGVtQ2hhbmdlQ2FsbGJhY2s6IChpdGVtOiBHcmlkc3Rlckl0ZW0pID0+IHtcbiAgICAgICAgLy8g8J+UtCBLaOG7kWkgduG7q2EgdGhhbyB0w6FjIHBo4bqjaSBsw6puIEzhu5pQIFRSw4pOIEPDmU5HLlxuICAgICAgICAvLyBgbGF5ZXJJbmRleGAgZ8OhbiBt4buZdCBs4bqnbiB0aGVvIHRo4bupIHThu7EgY8OieSBsw7pjIGto4bufaSB04bqhbywgbsOqbiBraOG7kWkga8OpbyBsw6puIGNo4buJIG7hu5VpIFRST05HIEzDmkNcbiAgICAgICAgLy8ga8OpbyAobmjhu50gYHotaW5kZXg6IDMwYCBj4bunYSBs4bubcCBgZ3JpZHN0ZXItaXRlbS1tb3ZpbmdgKTsgdGjhuqMgdGF5IHJhIGzDoCB24buBIGzhu5twIGPFqSB2w6AgYuG7iyBraOG7kWlcbiAgICAgICAgLy8gxJHhu6luZyBzYXUgdHJvbmcgY8OieSDEkcOoIG5nxrDhu6NjIGzDqm4gKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNiwgxJFvIMSRxrDhu6NjOiBrw6lvIHo9MzAsIHRo4bqjIHbhu4FcbiAgICAgICAgLy8gej0xMCB0cm9uZyBraGkgaGFpIGto4buRaSBr4bq/IGLDqm4gxJFhbmcgej0xMSB2w6Agej0xMikuXG4gICAgICAgIGlmIChjYW5PdmVybGFwKSB7XG4gICAgICAgICAgdGhpcy5yYWlzZVRvVG9wTGF5ZXIoaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gICAgICAgIGl0ZW1DaGFuZ2VDYWxsYmFjaz8uKCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQuG6r3QgbMaw4bubaSBM4buSTkcgxJFvIGzhuqFpIE5HQVkga2hpIGtodW5nIGNo4bupYSBuw7MgxJHhu5VpIGLhu4EgcuG7mW5nIOKAlCBkw7luZyBsw7pjIG5nxrDhu51pIGTDuW5nIGvDqW8gbcOpcCBraOG7kWkgY2hhLlxuICAgKlxuICAgKiBHcmlkc3RlciBjw7Mgc+G6tW4gxJHGsOG7nW5nIHThu7EgxJFvIChgcmVzaXplJGApLCBuaMawbmcgbHXhu5NuZyDEkcOzIGzDoCBgc3dpdGNoTWFwKCgpID0+IHRpbWVyKDEwMCkpYDogbeG7l2lcbiAgICogbOG6p24gcGjDoXQgbOG6oWkgaHXhu7cgdGltZXIgdHLGsOG7m2MsIG3DoCBrw6lvIGNodeG7mXQgYuG6r24gZMOgeSBoxqFuIDEwMG1zIG7Dqm4gdGltZXIga2jDtG5nIGJhbyBnaeG7nSB04bubaSDEkcOtY2guXG4gICAqIMSQbyDEkcaw4bujYyAoMTEvMDkvMjAyNik6IGvDqW8gbcOpcCBuaMOzbSB0aMOsIGzGsOG7m2kgY29uIGNvIHRoZW8gY2hhIHThu6tuZyBraHVuZyBow6xuaCAoMjM0IOKGkiAzODQgcHgpIGPDsm5cbiAgICogVEjhurogY29uIMSR4bupbmcgaW0g4bufIDEwNiBweCBzdeG7kXQgY8O6IGvDqW8sIGNo4buJIG5o4bqjeSDEkcO6bmcgc2F1IGtoaSB0aOG6oyB0YXkuXG4gICAqXG4gICAqIEdp4buvIEPhuqIgSEFJIMSRxrDhu51uZzogYGl0ZW1SZXNpemVDYWxsYmFja2AgYuG6r24gxJHhu5NuZyBi4buZIG5nYXkga2hpIGdyaWRzdGVyIGdoaSBi4buBIHLhu5luZyBt4bubaSBsw6puIGto4buRaVxuICAgKiAoc+G7m20gaMahbiBgUmVzaXplT2JzZXJ2ZXJgIG3hu5l0IGtodW5nIGjDrG5oKSBsbyDEkeG7mSB04bupYyB0aMOsOyBgUmVzaXplT2JzZXJ2ZXJgIGxvIG5o4buvbmcgbOG6p24ga2h1bmcgxJHhu5VpXG4gICAqIHbDrCBsw70gZG8ga2jDoWMg4oCUIMSR4buVaSB6b29tLCB0aHUgZ+G7jW4gY+G7mXQgYsOqbiB0csOhaS5cbiAgICpcbiAgICogVOG6r3QgYuG6sW5nIGBjb25maWcuYXV0b1Jlc2l6ZU5lc3RlZEdyaWRzOiBmYWxzZWAuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTmVzdGVkUmVzaXplSG9va3MoYmFzZTogR3JpZHN0ZXJDb25maWcsIGRlcHRoOiBudW1iZXIpOiBQYXJ0aWFsPEdyaWRzdGVyQ29uZmlnPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5hdXRvUmVzaXplTmVzdGVkR3JpZHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGdvY0l0ZW1SZXNpemUgPSBiYXNlLml0ZW1SZXNpemVDYWxsYmFjaztcbiAgICBjb25zdCBnb2NJbml0ID0gYmFzZS5pbml0Q2FsbGJhY2s7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbVJlc2l6ZUNhbGxiYWNrOiAoaXRlbSwgaXRlbUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBnb2NJdGVtUmVzaXplPy4oaXRlbSwgaXRlbUNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGVsID0gKGl0ZW1Db21wb25lbnQgYXMgeyBlbD86IEhUTUxFbGVtZW50IH0gfCB1bmRlZmluZWQpPy5lbDtcblxuICAgICAgICBlbD8ucXVlcnlTZWxlY3RvckFsbCgnZ3JpZHN0ZXInKS5mb3JFYWNoKChuZXN0ZWQpID0+IHRoaXMucmVzaXplR3JpZHN0ZXJFbGVtZW50KG5lc3RlZCBhcyBIVE1MRWxlbWVudCkpO1xuICAgICAgfSxcbiAgICAgIC4uLihkZXB0aCA+IDBcbiAgICAgICAgPyB7IGluaXRDYWxsYmFjazogKGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkgPT4gdGhpcy5yZWdpc3Rlck5lc3RlZEdyaWQoZ3JpZHN0ZXIsIGdvY0luaXQpIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBH4buNaSBgcmVzaXplKClgIGPhu6dhIG3hu5l0IHRo4bq7IGA8Z3JpZHN0ZXI+YCBxdWEgY2jDrW5oIGluc3RhbmNlIG3DoCBuw7MgdOG7sSBn4bqvbiBsw6puIHBo4bqnbiB04butLiAqL1xuICBwcml2YXRlIHJlc2l6ZUdyaWRzdGVyRWxlbWVudChuZXN0ZWQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgZ2l1SW5zdGFuY2UgPSBuZXN0ZWQgYXMgdW5rbm93biBhcyB7IF9fZ3JpZHN0ZXJJbnN0YW5jZT86IHsgb3B0aW9ucz86IHsgYXBpPzogeyByZXNpemU/OiAoKSA9PiB2b2lkIH0gfSB9IH07XG5cbiAgICBnaXVJbnN0YW5jZS5fX2dyaWRzdGVySW5zdGFuY2U/Lm9wdGlvbnM/LmFwaT8ucmVzaXplPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBH4bqvbiBpbnN0YW5jZSBsw6puIGNow61uaCBwaOG6p24gdOG7rSBgPGdyaWRzdGVyPmAgcuG7k2kgdGhlbyBkw7VpIGLhu4EgcuG7mW5nIGPhu6dhIG7Dsy5cbiAgICpcbiAgICogUGjhuqNpIGfhuq9uIG5nxrDhu6NjIGzDqm4gRE9NIHbDrCBgaXRlbVJlc2l6ZUNhbGxiYWNrYCBj4bunYSBraOG7kWkgQ0hBIGNo4buJIGPhuqdtIMSRxrDhu6NjIGBIVE1MRWxlbWVudGAsIGtow7RuZyBjw7NcbiAgICogxJHGsOG7nW5nIG7DoG8ga2jDoWMgxJFpIHThu6sgxJHDsyB24buBIGluc3RhbmNlIGPhu6dhIGzGsOG7m2kgbOG7k25nIGLDqm4gdHJvbmcuXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyTmVzdGVkR3JpZChcbiAgICBncmlkc3RlcjogR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2UsXG4gICAgZ29jPzogKGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBnb2M/Lihncmlkc3Rlcik7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBncmlkc3RlciBhcyB1bmtub3duIGFzIHsgZWw/OiBIVE1MRWxlbWVudDsgb3B0aW9ucz86IHsgYXBpPzogeyByZXNpemU/OiAoKSA9PiB2b2lkIH0gfSB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVsID0gaW5zdGFuY2U/LmVsO1xuXG4gICAgaWYgKCFlbCB8fCB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIChlbCBhcyB1bmtub3duIGFzIHsgX19ncmlkc3Rlckluc3RhbmNlPzogdW5rbm93biB9KS5fX2dyaWRzdGVySW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgIGNvbnN0IHRoZW9Eb2kgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gaW5zdGFuY2U/Lm9wdGlvbnM/LmFwaT8ucmVzaXplPy4oKSk7XG5cbiAgICB0aGVvRG9pLm9ic2VydmUoZWwpO1xuICAgIHRoaXMubmVzdGVkUmVzaXplT2JzZXJ2ZXJzLmFkZCh0aGVvRG9pKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBH4bqvbiBjb21wb25lbnQgY+G7p2EgbsahaSBkw7luZyBsw6puIG3hu5l0IGto4buRaS5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgY2jhu5cgZ+G6r24gUknDik5HIGPhu6dhIMO0IMSRw7Mg4oCUIG3hu5dpIGto4buRaSBt4buZdCBgVmlld0NvbnRhaW5lclJlZmAsIGTDuW5nIGNodW5nIG3hu5l0IGPDoWkgdGjDrFxuICAgKiAgIG3hu41pIGNvbXBvbmVudCBi4buLIGThu5NuIGjhur90IHbDoG8gbeG7mXQgw7QuXG4gICAqL1xuICBwcml2YXRlIGF0dGFjaE5vZGUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGRlcHRoOiBudW1iZXIsIGhvc3Q6IFZpZXdDb250YWluZXJSZWYpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNvbXBvbmVudFJlZnMuZ2V0KG5vZGUuaWQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLmFwcGx5SW5wdXRzKGV4aXN0aW5nLCBub2RlLCBkZXB0aCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBLaOG7kWkgdOG7sSBraGFpIHRow6wgaOG7j2kgbsOzOyBraMO0bmcgdGjDrCBo4buPaSBow6BtIHBow6JuIGdp4bqjaSBjaHVuZy4gQ+G6oyBoYWkgxJHhu4F1IG5o4bqtbiBgbm9kZWAgxJHhu4MgxJHhu41jXG4gICAgLy8gxJHGsOG7o2MgYGRhdGEudHlwZWAgbcOgIHF1eeG6v3QgxJHhu4tuaCB0cuG6oyBjb21wb25lbnQgbsOgby5cbiAgICBjb25zdCBzdHJlYW0gPSAobm9kZS5nZXRDb21wb25lbnRPdXRsZXQgPz8gY29uZmlnLmdldENvbXBvbmVudE91dGxldCk/Lihub2RlKTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g8J+UtCBIdeG7tyBsxrDhu6N0IHThuqNpIEPFqCBj4bunYSDEkcO6bmcga2jhu5FpIG7DoHkgdHLGsOG7m2Mga2hpIG3hu58gbMaw4bujdCBt4bubaS5cbiAgICAvLyBLaOG7kWkgYuG7iyBn4buhIHLhu5NpIGfhuq9uIGzhuqFpICjEkeG7lWkgYuG7kSBj4bulYywgc+G6r3AgZ+G7jW4pIHRyb25nIGzDumMgYGltcG9ydCgpYCBjaMawYSB4b25nIHRow6wgbMaw4bujdCBjxakgduG6q25cbiAgICAvLyBjaOG6oXkgdGnhur9wIHbDoCBk4buxbmcgY29tcG9uZW50IHbDoG8gbeG7mXQgYFZpZXdDb250YWluZXJSZWZgIMSRw6MgY2jhur90LlxuICAgIHRoaXMucGVuZGluZ0xvYWRzLmdldChub2RlLmlkKT8udW5zdWJzY3JpYmUoKTtcblxuICAgIGNvbnN0IHN1YiA9IHN0cmVhbS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoY29tcG9uZW50VHlwZSkgPT4ge1xuICAgICAgdGhpcy5wZW5kaW5nTG9hZHMuZGVsZXRlKG5vZGUuaWQpO1xuXG4gICAgICAvLyBLaOG7kWkgY8OzIHRo4buDIMSRw6MgYuG7iyB4b8OhIHRyb25nIGzDumMgY2jhu50gdOG6o2kg4oCUIGThu7FuZyB2w6BvIMSRw6J5IGzDoCByw7IgcuG7iS5cbiAgICAgIGlmICghdGhpcy50cmVlU2VydmljZS5maW5kQnlJZCh0aGlzLnJvb3ROb2RlKCkgPz8gbm9kZSwgbm9kZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWYgPSBob3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcblxuICAgICAgdGhpcy5hcHBseUlucHV0cyhyZWYsIG5vZGUsIGRlcHRoKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmcy5zZXQobm9kZS5pZCwgcmVmKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGVuZGluZ0xvYWRzLnNldChub2RlLmlkLCBzdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEfhu6EgY29tcG9uZW50IGPhu6dhIG3hu5l0IGto4buRaSB2w6AgaHXhu7cgbsOzLiAqL1xuICBwcml2YXRlIGRldGFjaE5vZGUobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBLaOG7kWkgYuG7iyBn4buhIGtoaSBjb21wb25lbnQgY+G7p2EgbsOzIGPDsm4gxJFhbmcgdOG6o2kg4oCUIHBo4bqjaSBodeG7tyBsxrDhu6N0IHThuqNpLCBraMO0bmcgdGjDrCBuw7MgZOG7sW5nIHbDoG8gbeG7mXRcbiAgICAvLyBgVmlld0NvbnRhaW5lclJlZmAgxJHDoyBjaOG6v3QuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZ2V0KG5vZGVJZCk/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZGVsZXRlKG5vZGVJZCk7XG5cbiAgICBjb25zdCByZWYgPSB0aGlzLmNvbXBvbmVudFJlZnMuZ2V0KG5vZGVJZCk7XG5cbiAgICBpZiAoIXJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlZi5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmRlbGV0ZShub2RlSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMucGVuZGluZ0xvYWRzLnZhbHVlcygpKSB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLmNvbXBvbmVudFJlZnMudmFsdWVzKCkpIHtcbiAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvYnNlcnZlciBvZiB0aGlzLm5lc3RlZFJlc2l6ZU9ic2VydmVycykge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0xvYWRzLmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmNsZWFyKCk7XG4gICAgdGhpcy5uZXN0ZWRSZXNpemVPYnNlcnZlcnMuY2xlYXIoKTtcbiAgICB0aGlzLmNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBOaMOzbSBow6BtIGNobyBuxqFpIGTDuW5nIENI4bumIMSQ4buYTkcgZ+G7jWkg4oCUIGtow7RuZyBwaOG6o2kgY2jhu50gbmfGsOG7nWkgZMO5bmcgYuG6pW0gbsO6dCB0csOqbiBraOG7kWkuXG4gIC8vIFPhu61hIGPDonkgdGjDrCBkw7luZyB0aOG6s25nIGBUcmVlU2VydmljZWAgcuG7k2kgZ+G7jWkgYHJlZnJlc2goKWAg4oCUIHhlbSBkZW1vIHRyb25nIGNvcmUtdWkuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBCw6FvIGNobyBzZXJ2aWNlIGJp4bq/dCBjw6J5IHbhu6thIMSR4buVaSB04burIGLDqm4gbmdvw6BpICh0aMOqbS94b8OhIGto4buRaSwgc+G6r3AgZ+G7jW4sIG7huqFwIGLhu5EgY+G7pWMga2jDoWMpLlxuICAgKlxuICAgKiDwn5S0IFBI4bqiSSB0aGF5IFRIQU0gQ0hJ4bq+VSBj4bunYSBub2RlIGfhu5FjLCBraMO0bmcgY2jhu4kgYsahbSBgdmVyc2lvbmAuXG4gICAqIGBAZm9yIOKApiB0cmFjayBpdGVtLmlkYCBnaeG7ryBuZ3V5w6puIG9iamVjdCBraGkgaWQga2jDtG5nIMSR4buVaSwgbsOqbiBgPGdyaWRzdGVyLWl0ZW0gW2l0ZW1dPVwi4oCmXCI+YCB24bqrblxuICAgKiBuaOG6rW4gxJHDum5nIG9iamVjdCBjxakgdsOgIGdyaWRzdGVyIGtow7RuZyBo4buBIGJp4bq/dCBgeC95L2NvbHMvcm93cy9sYXllckluZGV4YCB24burYSBi4buLIHPhu61hLiBCxqFtIG3hu5dpXG4gICAqIGB2ZXJzaW9uYCB0aMOsIGNvbXB1dGVkIGNo4bqheSBs4bqhaSBuaMawbmcgdHLhuqMgduG7gSBDw5lORyBt4bqjbmcgY8WpIOKAlCBsxrDhu5tpIMSR4bupbmcgaW0gKMSRbyAyOC8wOC8yMDI2OiBi4bqlbVxuICAgKiBcIlPhuq9wIGfhu41uXCIgY8OieSDEkcOjIGThu5NuIGtow610IG3DoCBtw6BuIGjDrG5oIGtow7RuZyBuaMO6YyBuaMOtY2g7IGLhuq10IGNo4buTbmcga2jhu5FpIG3DoCBgJGl0ZW0ubGF5ZXJJbmRleGBcbiAgICogduG6q24gdHLhu5FuZykuXG4gICAqXG4gICAqIE5ow6JuIGLhuqNuIE7DlE5HIGPhuqMgbm9kZSBn4buRYyB2w6AgZGFuaCBzw6FjaCBjb24gbMOgIMSR4bunOiBt4bqjbmcgbeG7m2kg4oaSIGBAZm9yYCBk4buxbmcgbOG6oWkgaXRlbSwgb2JqZWN0IGNvblxuICAgKiBt4bubaSDihpIgZ3JpZHN0ZXIgxJHhu41jIGzhuqFpIHRvw6BuIGLhu5kgdG/huqEgxJHhu5kuXG4gICAqL1xuICByZWZyZXNoKGV2ZW50PzogVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IGV2ZW50Py5yb290ID8/IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIGRhdGE6IHJvb3QgfTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3ROb2RlLnNldCh0aGlzLnNoYWxsb3dDbG9uZVRyZWUocm9vdCkpO1xuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIC8qKiBOaMOibiBi4bqjbiBuw7RuZyB0aGVvIGPhuqMgY2hp4buBdSBzw6J1OiBt4buXaSBub2RlIHbDoCBt4bqjbmcgYGNoaWxkcmVuYCB0aMOgbmggdGhhbSBjaGnhur91IG3hu5tpLiAqL1xuICAvKipcbiAgICogTmjDom4gYuG6o24gU8OCVSBj4bqjIGPDonkg4oCUIGTDuW5nIGNobyBgZXhwb3J0TGF5b3V0KClgLlxuICAgKlxuICAgKiDwn5S0IELhu44gYGdldENvbXBvbmVudE91dGxldGAga2jhu49pIGLhuqNuIHNhbzogbsOzIGzDoCBt4buZdCBIw4BNLCBraMO0bmcgdHXhuqduIHThu7EgaG/DoSDEkcaw4bujYyBuw6puIGfhu61pIHh14buRbmdcbiAgICogYmFja2VuZCBsw6AgaOG7j25nIChgSlNPTi5zdHJpbmdpZnlgIG514buRdCBt4bqldCwgYHN0cnVjdHVyZWRDbG9uZWAgbsOpbSBs4buXaSkuIE7huqFwIGzhuqFpIHRow6wgaMOgbSBwaMOiblxuICAgKiBnaeG6o2kgY2h1bmcgY+G7p2EgY+G6pXUgaMOsbmggbG8g4oCUIGNvbXBvbmVudCBzdXkgcmEgdOG7qyBgZGF0YS50eXBlYCwga2jDtG5nIGPhuqduIGzGsHUuXG4gICAqL1xuICBwcml2YXRlIGRlZXBDbG9uZVRyZWUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiBUX2dyaWRMYXlvdXRfbm9kZSB7XG4gICAgY29uc3QgY29weTogVF9ncmlkTGF5b3V0X25vZGUgPSB7IC4uLm5vZGUgfTtcblxuICAgIC8vIEPhuq90IGjDoG0gcGjDom4gZ2nhuqNpIOKAlCB4ZW0gY2jDuiB0aMOtY2ggdHLDqm4uXG4gICAgZGVsZXRlIGNvcHkuZ2V0Q29tcG9uZW50T3V0bGV0O1xuXG4gICAgY29uc3QgeyBjaGlsZHJlbiwgZGF0YSwgLi4ucmVzdCB9ID0gY29weTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXN0LFxuICAgICAgLi4uKGRhdGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBkYXRhOiBjbG9uZURlZXAoZGF0YSkgfSksXG4gICAgICAuLi4oY2hpbGRyZW4gPyB7IGNoaWxkcmVuOiBjaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLmRlZXBDbG9uZVRyZWUoY2hpbGQpKSB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNoYWxsb3dDbG9uZVRyZWUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiBUX2dyaWRMYXlvdXRfbm9kZSB7XG4gICAgaWYgKCFub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IC4uLm5vZGUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5ub2RlLCBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLnNoYWxsb3dDbG9uZVRyZWUoY2hpbGQpKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEfDoW4gYGxheWVySW5kZXhgIGtow6FjIG5oYXUgY2hvIHThu6tuZyBraOG7kWkga2hpIGLhuq10IGNo4buTbmcga2jhu5FpLlxuICAgKlxuICAgKiDwn5S0IGBhbGxvd011bHRpTGF5ZXI6IHRydWVgIE3hu5hUIE3DjE5IIGtow7RuZyBjaG8ga2jhu5FpIMSRw6ggbmhhdS4gTcOjIGxpYiBzbyBgbGF5ZXJJbmRleGAgY+G7p2EgaGFpIGto4buRaTpcbiAgICogS0jDgUMgbmhhdSB0aMOsIGNobyDEkcOoLCBHSeG7kE5HIG5oYXUgduG6q24gYsOhbyB2YSBjaOG6oW0uIEto4buRaSBraMO0bmcga2hhaSBgbGF5ZXJJbmRleGAgxJHhu4F1IHLGoWkgduG7gVxuICAgKiBgZGVmYXVsdExheWVySW5kZXhgIOKAlCB04bupYyBDw5lORyBs4bubcCwgbsOqbiBrw6lvIHbDoG8gbmhhdSBsw6AgYuG7iyBjaOG6t24geSBuaMawIGzGsOG7m2kgdGjGsOG7nW5nIChuZ8aw4budaSBkw7luZ1xuICAgKiBiw6FvIDI4LzA4LzIwMjY6IFwiYuG6rXQgY2jhu5NuZyBraOG7kWkgbmjGsG5nIGtoaSBrw6lvIHRow6wgY8OhYyBraOG7kWkgduG6q24gZGkgY2h1eeG7g24gdGhlb1wiKS5cbiAgICpcbiAgICogTsahaSBkw7luZyB04buxIGtoYWkgYGxheWVySW5kZXhgIHRow6wgZ2nhu68gbmd1ecOqbjsgYWkga2jDtG5nIGtoYWkgdGjDrCB0aMawIHZp4buHbiB44bq/cCBt4buXaSBraOG7kWkgbeG7mXQgbOG7m3BcbiAgICogdGhlbyB0aOG7qSB04buxLCDEkeG7pyDEkeG7gyBt4buNaSBj4bq3cCDEkeG7gXUga2jDoWMgbOG7m3AuXG4gICAqL1xuICBwcml2YXRlIGFzc2lnbk92ZXJsYXBMYXllcnMocm9vdDogVF9ncmlkTGF5b3V0X25vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjYW5PdmVybGFwID0gY29uZmlnPy5tb2RlID09PSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcuZnJlZSB8fCAoY29uZmlnPy5hbGxvd092ZXJsYXAgPz8gZmFsc2UpO1xuXG4gICAgaWYgKCFjYW5PdmVybGFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxheWVyID0gMDtcbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxheWVyICs9IDE7XG4gICAgICAgICAgY2hpbGQubGF5ZXJJbmRleCA9IGxheWVyO1xuICAgICAgICB9XG5cbiAgICAgICAgd2FsayhjaGlsZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhbGsocm9vdCk7XG5cbiAgfVxuXG4gIC8qKiDEkMawYSBt4buZdCBraOG7kWkgbMOqbiB0csOqbiB04bqldCBj4bqjOiBs4bubcCBj4bunYSBuw7MgPSBs4bubcCBs4bubbiBuaOG6pXQgxJFhbmcgY8OzICsgMS4gKi9cbiAgcHJpdmF0ZSByYWlzZVRvVG9wTGF5ZXIoaXRlbTogR3JpZHN0ZXJJdGVtKTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB0b3BMYXllciA9IDA7XG4gICAgY29uc3Qgd2FsayA9IChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuID8/IFtdKSB7XG4gICAgICAgIHRvcExheWVyID0gTWF0aC5tYXgodG9wTGF5ZXIsIGNoaWxkLmxheWVySW5kZXggPz8gMCk7XG4gICAgICAgIHdhbGsoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YWxrKHJvb3QpO1xuXG4gICAgLy8gYGl0ZW1gIGdyaWRzdGVyIHRy4bqjIHbhu4EgQ0jDjU5IIGzDoCBvYmplY3Qgbm9kZSBj4bunYSBjw6J5ICh0cnV54buBbiB0aOG6s25nIHF1YSBgW2l0ZW1dYCksIG7Dqm4gZ8OhbiB2w6BvXG4gICAgLy8gxJHDonkgbMOgIGPDonkgY8WpbmcgxJHhu5VpIHRoZW8uXG4gICAgY29uc3Qgbm9kZSA9IGl0ZW0gYXMgdW5rbm93biBhcyBUX2dyaWRMYXlvdXRfbm9kZTtcblxuICAgIGlmIChub2RlLmxheWVySW5kZXggPT09IHRvcExheWVyKSB7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLmxheWVySW5kZXggPSB0b3BMYXllciArIDE7XG4gIH1cblxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gU+G7rEEgQ8OCWSDigJQgdGjGsCB2aeG7h24gxJHDoyBnaeG7ryBjw6J5IG7Dqm4gYuG6oW4gS0jDlE5HIHBo4bqjaSB0cnV54buBbiBuw7MgdsOgby5cbiAgLy8gTeG7jWkgaMOgbSBkxrDhu5tpIMSRw6J5IHThu7EgduG6vSBs4bqhaTsga2jDtG5nIGPhuqduIGfhu41pIGByZWZyZXNoKClgLlxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogVGjDqm0gbeG7mXQga2jhu5FpLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBraOG7kWkgbeG7m2kg4oCUIEtIw5RORyBj4bqnbiBgaWRgICh0aMawIHZp4buHbiBzaW5oKSB2w6AgYHhgL2B5YCAodOG7sSDEkeG6t3QgeHXhu5FuZyBow6BuZyB0cuG7kW5nKS5cbiAgICogQHBhcmFtIHBhcmVudElkIGNvbnRhaW5lciBtdeG7kW4gdGjDqm0gdsOgbzsgYuG7jyB0cuG7kW5nIHRow6wgdGjDqm0gdsOgbyBt4bq3dCBwaOG6s25nIGfhu5FjLlxuICAgKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB24burYSBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgY29udGFpbmVyLlxuICAgKi9cbiAgYWRkQmxvY2soaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUsIHBhcmVudElkPzogc3RyaW5nKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3QgYWRkZWQgPSByb290ID8gdGhpcy50cmVlU2VydmljZS5hZGRDaGlsZChyb290LCBwYXJlbnRJZCA/PyByb290LmlkLCBpdGVtKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChhZGRlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRow6ptIG3hu5l0IGto4buRaSB04bqhaSB0b+G6oSDEkeG7mSAoY29sLCByb3cpIGPhu6UgdGjhu4MgdsOgIHThu7EgxJHhu5luZyDEkeG6qXkgY8OhYyBraOG7kWkgdmEgY2jhuqFtIHh14buRbmcgZMaw4bubaS5cbiAgICovXG4gIGluc2VydEJsb2NrV2l0aENvbGxpc2lvbihcbiAgICBpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgICB0YXJnZXRDb2wgPSAwLFxuICAgIHRhcmdldFJvdyA9IDAsXG4gICAgcGFyZW50SWQ/OiBzdHJpbmcsXG4gICk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGFkZGVkID0gcm9vdFxuICAgICAgPyB0aGlzLnRyZWVTZXJ2aWNlLmluc2VydFdpdGhDb2xsaXNpb24ocm9vdCwgcGFyZW50SWQgPz8gcm9vdC5pZCwgaXRlbSwgdGFyZ2V0Q29sLCB0YXJnZXRSb3cpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChhZGRlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVEcmFnUGF5bG9hZCA9IHNpZ25hbDx1bmtub3duIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKiDEkOG6t3QgcGF5bG9hZCBraGkgYuG6r3QgxJHhuqd1IGvDqW8gdOG7qyBiw6puIG5nb8OgaSB2w6BvICh2w60gZOG7pTogcGFsZXR0ZSwgZHJhd2VyKSAqL1xuICBzZXREcmFnUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVEcmFnUGF5bG9hZC5zZXQocGF5bG9hZCk7XG4gIH1cblxuICAvKiogTOG6pXkgcGF5bG9hZCDEkWFuZyBrw6lvICovXG4gIGdldERyYWdQYXlsb2FkKCk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZURyYWdQYXlsb2FkKCk7XG4gIH1cblxuICAvKiogWG/DoSBwYXlsb2FkIGtoaSBr4bq/dCB0aMO6YyBrw6lvICovXG4gIGNsZWFyRHJhZ1BheWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVEcmFnUGF5bG9hZC5zZXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKiBYb8OhIG3hu5l0IGto4buRaS4gWG/DoSBjb250YWluZXIgbMOgIHhvw6EgY+G6oyBydeG7mXQuIFRy4bqjIGBmYWxzZWAga2hpIGtow7RuZyB4b8OhIMSRxrDhu6NjICh2ZCBraOG7kWkgZ+G7kWMpLiAqL1xuICByZW1vdmVCbG9jayhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlQnlJZChyb290LCBpZCkgOiBmYWxzZTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBT4buRIGPhu5l0IHRo4bqtdCBj4bunYSBsxrDhu5tpIGPhuqVwIHRyYW5nLlxuICAgKlxuICAgKiDwn5S0IE3hurdjIMSR4buLbmggcGjhuqNpIFRSw5lORyBgbWluQ29scy9tYXhDb2xzYCBj4bunYSBgZ3JpZExheW91dFJvb3RDb25maWcoKWAuIFRyxrDhu5tjIMSRw6J5IGNo4buXIG7DoHkgdHLhuqMgMjRcbiAgICogdHJvbmcga2hpIGzGsOG7m2kgduG6vSAxMjogbsahaSBkw7luZyBraMO0bmcgdHJ1eeG7gW4gYGNvbHNgIHRow6wgdmEgY2jhuqFtLCBgdG9Db250YWluZXJgIHbDoCBgY29tcGFjdGAgdMOtbmhcbiAgICogdGhlbyAyNCBj4buZdCBjw7JuIG3DoG4gaMOsbmggY2jhu4kgY8OzIDEyIOKAlCBraOG7kWkgcsahaSByYSBuZ2/DoGkgbcOpcCBwaOG6o2kgbcOgIGtow7RuZyBhaSBoaeG7g3UgdsOsIHNhby5cbiAgICovXG4gIGdldCB0b3RhbENvbHVtbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmNvbHMgPz8gZ3JpZExheW91dFJvb3RDb25maWcoKS5tYXhDb2xzID8/IDEyO1xuICB9XG5cbiAgLyoqXG4gICAqIMSQ4buVaSBz4buRIGPhu5l0IC8gc+G7kSBow6BuZyBj4bunYSBt4buZdCBraOG7kWkgcuG7k2kgduG6vSBs4bqhaS5cbiAgICpcbiAgICogS8OpbyBgY29sc2AgcuG7mW5nIHF1w6EgbcOpcCBwaOG6o2kgdGjDrCBk4buLY2gga2jhu5FpIHNhbmcgdHLDoWkgY2hvIHbhu6thLCB0aGF5IHbDrCDEkeG7gyBuw7MgdHLDoG4gcmEgbmdvw6BpIGzGsOG7m2kuXG4gICAqL1xuICByZXNpemVCbG9jayhpZDogc3RyaW5nLCBzaXplOiB7IGNvbHM/OiBudW1iZXI7IHJvd3M/OiBudW1iZXIgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRCbG9jayhpZCk7XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5jb2xzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vZGUuY29scyA9IHNpemUuY29scztcbiAgICAgIGlmIChub2RlLnggKyBzaXplLmNvbHMgPiB0aGlzLnRvdGFsQ29sdW1ucykge1xuICAgICAgICBub2RlLnggPSBNYXRoLm1heCgwLCB0aGlzLnRvdGFsQ29sdW1ucyAtIHNpemUuY29scyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNpemUucm93cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBub2RlLnJvd3MgPSBzaXplLnJvd3M7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaCgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTmjDom4gYuG6o24gbeG7mXQga2jhu5FpIOKAlCDEkeG6t3Qga+G6vyBiw6puIHBo4bqjaSBu4bq/dSBjw7JuIGNo4buXLCBraMO0bmcgdGjDrCB4deG7kW5nIGTDsm5nIGTGsOG7m2kuXG4gICAqXG4gICAqIGB0cmFuc2Zvcm1EYXRhYCDEkeG7gyBuxqFpIGTDuW5nIMSR4buVaSBwaOG6p24gZOG7ryBsaeG7h3UgcmnDqm5nIGPhu6dhIG3DrG5oICh2ZCBu4buRaSB0aMOqbSBcIihC4bqjbiBzYW8pXCIgdsOgbyB0acOqdVxuICAgKiDEkeG7gSk7IHRoxrAgdmnhu4duIGtow7RuZyB04buxIMSRb8OhbiB0csaw4budbmcgbsOgbyBsw6AgdGnDqnUgxJHhu4EuXG4gICAqL1xuICBkdXBsaWNhdGVCbG9jayhpZDogc3RyaW5nLCB0cmFuc2Zvcm1EYXRhPzogKGRhdGE6IHVua25vd24pID0+IHVua25vd24pOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBub2RlID0gcm9vdCA/IGZpbmROb2RlUmVjdXJzaXZlKHJvb3QsIGlkKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghcm9vdCB8fCAhbm9kZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZmluZFBhcmVudFJlY3Vyc2l2ZShyb290LCBpZCk7XG4gICAgY29uc3QgaXNOZXN0ZWQgPSBCb29sZWFuKHBhcmVudCAmJiBwYXJlbnQuaWQgIT09IHJvb3QuaWQpO1xuICAgIGNvbnN0IGNsb25lZERhdGEgPSBjbG9uZURlZXAobm9kZS5kYXRhKTtcblxuICAgIGxldCB0YXJnZXRYID0gbm9kZS54ICsgbm9kZS5jb2xzO1xuICAgIGxldCB0YXJnZXRZID0gbm9kZS55O1xuXG4gICAgaWYgKHRhcmdldFggKyBub2RlLmNvbHMgPiB0aGlzLnRvdGFsQ29sdW1ucykge1xuICAgICAgdGFyZ2V0WCA9IDA7XG4gICAgICB0YXJnZXRZID0gbm9kZS55ICsgbm9kZS5yb3dzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZEJsb2NrKFxuICAgICAge1xuICAgICAgICB4OiB0YXJnZXRYLFxuICAgICAgICB5OiB0YXJnZXRZLFxuICAgICAgICBjb2xzOiBub2RlLmNvbHMsXG4gICAgICAgIHJvd3M6IG5vZGUucm93cyxcbiAgICAgICAgZGF0YTogdHJhbnNmb3JtRGF0YSA/IHRyYW5zZm9ybURhdGEoY2xvbmVkRGF0YSkgOiBjbG9uZWREYXRhLFxuICAgICAgICBnZXRDb21wb25lbnRPdXRsZXQ6IG5vZGUuZ2V0Q29tcG9uZW50T3V0bGV0LFxuICAgICAgfSxcbiAgICAgIGlzTmVzdGVkID8gcGFyZW50Py5pZCA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKiogQmnhur9uIGto4buRaSDEkcahbiB0aMOgbmggQ09OVEFJTkVSIOKAlCBu4buZaSBkdW5nIGPFqSB0aMOgbmgga2jhu5FpIGNvbiDEkeG6p3UgdGnDqm4sIGtow7RuZyBt4bqldCBk4buvIGxp4buHdS4gKi9cbiAgdG9Db250YWluZXIoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3QgZG9uZSA9IHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLnRvQ29udGFpbmVyKHJvb3QsIGlkLCB0aGlzLnRvdGFsQ29sdW1ucykgOiBmYWxzZTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIC8qKiDEkMawYSBDT05UQUlORVIgduG7gSBraOG7kWkgxJHGoW4g4oCUIGto4buRaSBjb24gxJHGsOG7o2MgbsOibmcgbMOqbiBj4bqlcCB0csOqbiwga2jDtG5nIGLhu4sgeG/DoS4gKi9cbiAgdG9TaW5nbGUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3QgZG9uZSA9IHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLnRvU2luZ2xlKHJvb3QsIGlkKSA6IGZhbHNlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgLyoqIEThu5NuIGto4buRaSBraMOtdCBsw6puIHRyw6puLCBs4bqlcCBo4bq/dCBjaOG7lyB0cuG7kW5nLiDEkOG7hyBxdXkgdsOgbyBjb250YWluZXIuICovXG4gIGNvbXBhY3QoKTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJlZVNlcnZpY2UuY29tcGFjdChyb290LCB0aGlzLnRvdGFsQ29sdW1ucyk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogQuG7kSBj4bulYyBISeG7hk4gVOG6oEksIMSRw6MgY+G6r3QgbeG7jWkgdGhhbSBjaGnhur91IOKAlCBn4butaSB0aOG6s25nIHh14buRbmcgYmFja2VuZCDEkcaw4bujYy5cbiAgICpcbiAgICogRMO5bmcga2hpIGLhuqVtIG7DunQgTMawdS4gS2jDoWMgYFJvb3QoKWAg4bufIGNo4buXIMSRw6J5IGzDoCBi4bqjbiBTQU86IG7GoWkgZMO5bmcgY8OzIHPhu61hIGfDrCB0csOqbiBr4bq/dCBxdeG6oyBjxaluZ1xuICAgKiBraMO0bmcgxJHhu6VuZyB04bubaSBjw6J5IG3DoCB0aMawIHZp4buHbiDEkWFuZyB24bq9LlxuICAgKlxuICAgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBraGkgbeG6t3QgcGjhurNuZyBjaMawYSBgaW5pdCgpYC5cbiAgICovXG4gIGV4cG9ydExheW91dCgpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIHJldHVybiByb290ID8gdGhpcy5kZWVwQ2xvbmVUcmVlKHJvb3QpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFTDrG0gbeG7mXQga2jhu5FpIHRoZW8gaWQuICovXG4gIGZpbmRCbG9jayhpZDogc3RyaW5nKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICByZXR1cm4gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UuZmluZEJ5SWQocm9vdCwgaWQpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFTDrG0ga2jhu5FpIGNoYSB0cuG7sWMgdGnhur9wIGPhu6dhIG3hu5l0IGto4buRaS4gKi9cbiAgZmluZFBhcmVudEJsb2NrKGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIHJldHVybiByb290ID8gdGhpcy50cmVlU2VydmljZS5maW5kUGFyZW50KHJvb3QsIGlkKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiDEkOG6t3QgdOG7tyBs4buHIHRodSBwaMOzbmcgY+G7p2EgY2FudmFzIChr4bq5cCBnaeG7r2EgbWluIHbDoCBtYXgpLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVOG7tyBs4buHICgwLjQgPSA0MCUsIDEuMCA9IDEwMCUsIDEuNSA9IDE1MCUpXG4gICAqIEBwYXJhbSBwZXJzaXN0S2V5IEtow7NhIGxvY2FsU3RvcmFnZSDEkeG7gyBsxrB1IGzhuqFpIChi4buPIHRy4buRbmcgdGjDrCBs4bqleSB04burIGNvbmZpZylcbiAgICovXG4gIHNldFpvb20odmFsdWU6IG51bWJlciwgcGVyc2lzdEtleT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1pbiA9IHRoaXMuY29uZmlnPy56b29tTWluID8/IDAuNDtcbiAgICBjb25zdCBtYXggPSB0aGlzLmNvbmZpZz8uem9vbU1heCA/PyAxLjU7XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCBNYXRoLnJvdW5kKHZhbHVlICogMTAwKSAvIDEwMCkpO1xuICAgIHRoaXMuem9vbUxldmVsLnNldChjbGFtcGVkKTtcblxuICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBwZXJzaXN0S2V5ID8/IHRoaXMuY29uZmlnPy5zdG9yYWdlS2V5O1xuICAgIGlmIChzdG9yYWdlS2V5ICYmIHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5LCBTdHJpbmcoY2xhbXBlZCkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZSBsb2NhbFN0b3JhZ2UgYWNjZXNzIGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICB9XG5cbiAgLyoqIFBow7NuZyB0byB0aMOqbSBt4buZdCBixrDhu5tjICht4bq3YyDEkeG7i25oIDAuMDUgdOG7qWMgNSUpICovXG4gIHpvb21JbihzdGVwPzogbnVtYmVyLCBwZXJzaXN0S2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHN0ZXAgPz8gdGhpcy5jb25maWc/Lnpvb21TdGVwID8/IDAuMDU7XG4gICAgdGhpcy5zZXRab29tKHRoaXMuem9vbUxldmVsKCkgKyBzLCBwZXJzaXN0S2V5KTtcbiAgfVxuXG4gIC8qKiBUaHUgbmjhu48gYuG7m3QgbeG7mXQgYsaw4bubYyAobeG6t2MgxJHhu4tuaCAwLjA1IHThu6ljIDUlKSAqL1xuICB6b29tT3V0KHN0ZXA/OiBudW1iZXIsIHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzID0gc3RlcCA/PyB0aGlzLmNvbmZpZz8uem9vbVN0ZXAgPz8gMC4wNTtcbiAgICB0aGlzLnNldFpvb20odGhpcy56b29tTGV2ZWwoKSAtIHMsIHBlcnNpc3RLZXkpO1xuICB9XG5cbiAgLyoqIMSQ4bq3dCBs4bqhaSB04bu3IGzhu4cgdGh1IHBow7NuZyBn4buRYyAxMDAlICgxLjApICovXG4gIHJlc2V0Wm9vbShwZXJzaXN0S2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRab29tKDEuMCwgcGVyc2lzdEtleSk7XG4gIH1cblxuICAvKipcbiAgICogVOG7sSDEkeG7mW5nIHTDrW5oIHRvw6FuIHbDoCDEkeG6t3QgdOG7tyBs4buHIHRodSBwaMOzbmcgxJHhu4MgY2FudmFzIHbhu6thIHbhurduIHbhu5tpIGNoaeG7gXUgcuG7mW5nIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lcldpZHRoIENoaeG7gXUgcuG7mW5nIGNvbnRhaW5lciDEkW8gxJHGsOG7o2MgKHB4KVxuICAgKiBAcGFyYW0gc3RhZ2VXaWR0aCBDaGnhu4F1IHLhu5luZyBjaHXhuqluIGPhu6dhIGNhbnZhcyAobeG6t2MgxJHhu4tuaCAxNjY4cHgpXG4gICAqIEBwYXJhbSBwYWRkaW5nIEtob+G6o25nIGPDoWNoIGzhu4EgaGFpIGLDqm4gKG3hurdjIMSR4buLbmggNDhweClcbiAgICogQHBhcmFtIHBlcnNpc3RLZXkgS2jDs2EgbG9jYWxTdG9yYWdlXG4gICAqIEByZXR1cm5zIFThu7cgbOG7hyB0aHUgcGjDs25nIHbhu6thIHTDrW5oXG4gICAqL1xuICBmaXRUb1NjcmVlbihjb250YWluZXJXaWR0aDogbnVtYmVyLCBzdGFnZVdpZHRoPzogbnVtYmVyLCBwYWRkaW5nID0gNDgsIHBlcnNpc3RLZXk/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHRhcmdldFdpZHRoID0gc3RhZ2VXaWR0aCA/PyB0aGlzLmNvbmZpZz8uc3RhZ2VXaWR0aCA/PyAxNjY4O1xuICAgIGNvbnN0IG1pbiA9IHRoaXMuY29uZmlnPy56b29tTWluID8/IDAuNDtcbiAgICBjb25zdCBtYXggPSAxLjI1O1xuICAgIGNvbnN0IHJhdGlvID0gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIE1hdGgucm91bmQoKChjb250YWluZXJXaWR0aCAtIHBhZGRpbmcpIC8gdGFyZ2V0V2lkdGgpICogMTAwKSAvIDEwMCkpO1xuICAgIHRoaXMuc2V0Wm9vbShyYXRpbywgcGVyc2lzdEtleSk7XG4gICAgcmV0dXJuIHJhdGlvO1xuICB9XG5cbiAgLyoqIEtp4buDbSB0cmEgdMOtbmggbsSDbmcgdGh1IHBow7NuZyBjw7MgxJHGsOG7o2MgY+G6pXUgaMOsbmggYuG6rXQga2jDtG5nICovXG4gIGlzWm9vbUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5jb25maWc/LmVuYWJsZVpvb20pO1xuICB9XG5cbiAgLyoqXG4gICAqIEPhu5VuZyBEVVkgTkjhuqRUIGNobyBjYW52YXMgY+G7p2EgdGjGsCB2aeG7h24uIE7GoWkgZMO5bmcgS0jDlE5HIGfhu41pIHThu5tpIMSRw6J5LlxuICAgKlxuICAgKiBN4buNaSB0aOG7qSBjYW52YXMgY+G6p24gxJHhu4F1IGzDoCBgcHJpdmF0ZWAgxJHhu4Mga2jDtG5nIGzhu410IHJhIEFQSSBjw7RuZyBraGFpOyBnb20gdsOgbyBt4buZdCBnZXR0ZXIgdGhlbyDEkcO6bmdcbiAgICoga2h1w7RuIGBGdW5jdGlvbnNDb250cm9sYCBj4bunYSBi4buZIHF1eSDGsOG7m2MsIHRoYXkgdsOsIMSR4buDIHLhuqNpIHLDoWMgaMOgbSBwdWJsaWMgbcOgIG5nxrDhu51pIG5nb8OgaSB0xrDhu59uZ1xuICAgKiBtw6xuaCBwaOG6o2kgZ+G7jWkgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgICovXG4gIGdldCBGdW5jdGlvbnNDb250cm9sKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXhDb250YWluZXJEZXB0aDogKCkgPT4gdGhpcy5tYXhDb250YWluZXJEZXB0aCgpLFxuICAgICAgY29udGFpbmVyUGFkZGluZzogKCkgPT4gdGhpcy5jb250YWluZXJQYWRkaW5nKCksXG4gICAgICBpc1pvb21FbmFibGVkOiAoKSA9PiB0aGlzLmlzWm9vbUNvbmZpZ3VyZWQoKSxcbiAgICAgIHpvb206ICgpID0+IHRoaXMuem9vbUxldmVsKCksXG4gICAgICBzZXRab29tOiAodjogbnVtYmVyLCBrZXk/OiBzdHJpbmcpID0+IHRoaXMuc2V0Wm9vbSh2LCBrZXkpLFxuICAgICAgem9vbUluOiAoc3RlcD86IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLnpvb21JbihzdGVwLCBrZXkpLFxuICAgICAgem9vbU91dDogKHN0ZXA/OiBudW1iZXIsIGtleT86IHN0cmluZykgPT4gdGhpcy56b29tT3V0KHN0ZXAsIGtleSksXG4gICAgICByZXNldFpvb206IChrZXk/OiBzdHJpbmcpID0+IHRoaXMucmVzZXRab29tKGtleSksXG4gICAgICBmaXRUb1NjcmVlbjogKGNXOiBudW1iZXIsIHNXPzogbnVtYmVyLCBwYWQ/OiBudW1iZXIsIGtleT86IHN0cmluZykgPT4gdGhpcy5maXRUb1NjcmVlbihjVywgc1csIHBhZCwga2V5KSxcbiAgICAgIGdyaWRzdGVyT3B0aW9uczogKGRlcHRoOiBudW1iZXIsIGNiPzogKCkgPT4gdm9pZCkgPT4gdGhpcy5idWlsZEdyaWRzdGVyT3B0aW9ucyhkZXB0aCwgY2IpLFxuICAgICAgYXR0YWNoTm9kZTogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBkZXB0aDogbnVtYmVyLCBob3N0OiBWaWV3Q29udGFpbmVyUmVmKSA9PiB0aGlzLmF0dGFjaE5vZGUobm9kZSwgZGVwdGgsIGhvc3QpLFxuICAgICAgZGV0YWNoTm9kZTogKG5vZGVJZDogc3RyaW5nKSA9PiB0aGlzLmRldGFjaE5vZGUobm9kZUlkKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUlucHV0cyhyZWY6IENvbXBvbmVudFJlZjx1bmtub3duPiwgbm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGRlcHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICByZWYuc2V0SW5wdXQoJ2RhdGEnLCBub2RlLmRhdGEpO1xuICAgIHJlZi5zZXRJbnB1dCgnbm9kZScsIG5vZGUpO1xuICAgIHJlZi5zZXRJbnB1dCgnaXNFZGl0TW9kZScsIHRoaXMuZWRpdE1vZGUoKSk7XG4gICAgcmVmLnNldElucHV0KCdkZXB0aCcsIGRlcHRoKTtcbiAgfVxufVxuIl19
|
|
728
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2dyaWQtbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsVUFBVSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFTN0Q7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsNkZBQTZGO0lBQzdGLHdGQUF3RjtJQUN4RixtRkFBbUY7SUFDbEUsV0FBVyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQUNqRSxvRkFBb0Y7SUFDbkUsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQ2hFOzs7OztPQUtHO0lBQ2MscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFbkU7UUFDRSwrRkFBK0Y7UUFDL0YseUZBQXlGO1FBQ3pGLCtGQUErRjtRQUMvRixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxNQUFNLENBQXVCO0lBQ3BCLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FB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QixHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO3dHQWoxQlUsdUJBQXVCOzRHQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIERlc3Ryb3lSZWYsIEluamVjdGFibGUsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSwgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJ2dyaWRzdGVyMTgnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBncmlkTGF5b3V0TmVzdGVkQ29uZmlnLCBncmlkTGF5b3V0Um9vdENvbmZpZyB9IGZyb20gJy4vZGVmaW5lcy9ncmlkc3Rlci1jb25maWcuZGVmaW5lJztcbmltcG9ydCB7IGZpbmROb2RlUmVjdXJzaXZlLCBmaW5kUGFyZW50UmVjdXJzaXZlIH0gZnJvbSAnLi9kZWZpbmVzL2NvbGxpc2lvbi5kZWZpbmUnO1xuaW1wb3J0IHsgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRV9ncmlkTGF5b3V0X21vZGVfc3RyaW5nLFxuICBUX2dyaWRMYXlvdXRfY2hhbmdlRXZlbnQsXG4gIFRfZ3JpZExheW91dF9uZXdOb2RlLFxuICBUX2dyaWRMYXlvdXRfY29uZmlnLFxuICBUX2dyaWRMYXlvdXRfbm9kZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2dyaWQtbGF5b3V0LmludGVyZmFjZSc7XG5cbi8qKlxuICogROG7sW5nIG3hu5l0IG3hurd0IHBo4bqzbmcga8OpbyB0aOG6oyB2w6AgdOG7sSBn4bqvbiBjb21wb25lbnQgY+G7p2EgbsahaSBkw7luZyBsw6puIHThu6tuZyBraOG7kWkuXG4gKlxuICogTsahaSBkw7luZyBjaOG7iSBj4bqnbiDEkcawYSB2w6BvOiBsb+G6oWkgY29tcG9uZW50IG114buRbiBk4buxbmdcbiAqIChgbm9kZUNvbXBvbmVudFR5cGVgKSB2w6AgY8OieSBk4buvIGxp4buHdSAoYGRhdGFgKS4gVG/DoG4gYuG7mSB2aeG7h2MgduG6vSBsxrDhu5tpLCBrw6lvIHRo4bqjLCDEkeG7lWkga8OtY2ggdGjGsOG7m2MsXG4gKiBs4buTbmcgY29udGFpbmVyIHbDoCBk4buNbiBk4bq5cCBkbyB0aMawIHZp4buHbiBsby5cbiAqXG4gKiDwn5S0IMSQw6J5IGzDoCBzZXJ2aWNlIHRoZW8gVOG7qk5HIG3hurd0IHBo4bqzbmcsIEtIw5RORyBgcHJvdmlkZWRJbjogJ3Jvb3QnYC4gS2hhaSB0cm9uZyBgcHJvdmlkZXJzYCBj4bunYVxuICogY29tcG9uZW50IGTDuW5nIG7DszsgaGFpIG3hurd0IHBo4bqzbmcgdHLDqm4gY8O5bmcgbeG7mXQgbcOgbiBwaOG6o2kgbMOgIGhhaSB0aOG7sWMgdGjhu4MgcmnDqm5nLCBkw7luZyBjaHVuZyB0aMOsXG4gKiBgY29tcG9uZW50UmVmc2AgY+G7p2EgbeG6t3QgcGjhurNuZyBuw6B5IGLhu4sgbeG6t3QgcGjhurNuZyBraWEgZOG7jW4gbeG6pXQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaWJzVWlHcmlkTGF5b3V0U2VydmljZSB7XG4gIC8vIPCflLQgVOG7sCBU4bqgTywga2jDtG5nIGBpbmplY3RgLiBOxqFpIGTDuW5nIGNo4buJIHBo4bqjaSB2aeG6v3QgYHByb3ZpZGVyczogW0xpYnNVaUdyaWRMYXlvdXRTZXJ2aWNlXWAg4oCUXG4gIC8vIGtow7RuZyBwaOG6o2kgYmnhur90IGLDqm4gdHJvbmcgdGjGsCB2aeG7h24gY8OybiBzZXJ2aWNlIG7DoG8ga2jDoWMgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgLy8gYFRyZWVTZXJ2aWNlYCBraMO0bmcgZ2nhu68gdHLhuqFuZyB0aMOhaSBkw7luZyBjaHVuZyBuw6puIG3hu5dpIG3hurd0IHBo4bqzbmcgbeG7mXQgYuG6o24gbMOgIMSRw7puZy5cbiAgcHJpdmF0ZSByZWFkb25seSB0cmVlU2VydmljZSA9IG5ldyBMaWJzVWlHcmlkTGF5b3V0VHJlZVNlcnZpY2UoKTtcbiAgLyoqIEzGsOG7o3QgdOG6o2kgY29tcG9uZW50IMSRYW5nIGNo4budLCB0aGVvIGlkIGto4buRaSDigJQgxJHhu4MgaHXhu7cga2hpIGto4buRaSBi4buLIGfhu6EgZ2nhu69hIGNo4burbmcuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ0xvYWRzID0gbmV3IE1hcDxzdHJpbmcsIFN1YnNjcmlwdGlvbj4oKTtcbiAgLyoqXG4gICAqIELhu5kgdGhlbyBkw7VpIGLhu4EgcuG7mW5nIGPhu6dhIHThu6tuZyBsxrDhu5tpIEzhu5JORywgxJHhu4Mgbmfhuq90IGtoaSBzZXJ2aWNlIGLhu4sgaHXhu7cuXG4gICAqXG4gICAqIPCflLQgR2nhu68gdGhhbSBjaGnhur91IGzDoCBC4bquVCBCVeG7mEM6IGBSZXNpemVPYnNlcnZlcmAga2jDtG5nIHThu7EgdOG6r3QgdGhlbyB2w7JuZyDEkeG7nWkgY29tcG9uZW50LiBLaMO0bmcgZOG7jW5cbiAgICogdGjDrCBt4buXaSBs4bqnbiBu4bqhcCBs4bqhaSBi4buRIGPhu6VjICjEkeG7lWkgdGFiKSBs4bqhaSBjaOG7k25nIHRow6ptIG3hu5l0IGLhu5ksIHbDoCBjaMO6bmcgduG6q24gY2jhuqF5IHRyw6puIERPTSDEkcOjIGfhu6EuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5lc3RlZFJlc2l6ZU9ic2VydmVycyA9IG5ldyBTZXQ8UmVzaXplT2JzZXJ2ZXI+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8g8J+UtCBTZXJ2aWNlIGtoYWkgdHJvbmcgYHByb3ZpZGVyc2AgY+G7p2EgY29tcG9uZW50IG7Dqm4gQW5ndWxhciBodeG7tyBuw7MgY8O5bmcgY29tcG9uZW50IOKAlCB0aMawIHZp4buHblxuICAgIC8vIHThu7EgZOG7jW4g4bufIMSRw6J5LCBuxqFpIGTDuW5nIEtIw5RORyBwaOG6o2kgZ+G7jWkgYGRlc3Ryb3koKWAgdHJvbmcgYG5nT25EZXN0cm95YCAobmfGsOG7nWkgZMO5bmcgY2jhu5F0XG4gICAgLy8gMjgvMDgvMjAyNikuIELhuq90IG5o4bubIG3hu5l0IGLGsOG7m2MgZOG7jW4gZOG6uXAgbMOgIGtp4buDdSBBUEkgZOG7hSBxdcOqbiwgdsOgIHF1w6puIHRow6wgcsOyIHLhu4kgYuG7mSBuaOG7myBpbSBs4bq3bmcuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZz86IFRfZ3JpZExheW91dF9jb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50UmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByb290Tm9kZSA9IHNpZ25hbDxUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlZGl0TW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiB0xINuZyBt4buXaSBs4bqnbiBjw6J5IMSR4buVaSDigJQgY29tcG9uZW50IGNvbiDEkeG7jWMgxJHhu4MgYmnhur90IHBo4bqjaSB0w61uaCBs4bqhaSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcnNpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b29tTGV2ZWwgPSBzaWduYWw8bnVtYmVyPigxKTtcblxuICAvKipcbiAgICogU2lnbmFsIGNo4buJIMSR4buNYyDEkeG7gyBuxqFpIGTDuW5nIHRoZW8gZMO1aS5cbiAgICpcbiAgICog8J+UtCBMw6AgVEhV4buYQyBUw41OSCwga2jDtG5nIHBo4bqjaSBnZXR0ZXIuIEdldHRlciB0cuG6oyBzaWduYWwgdGjDrCBjaOG7lyDEkeG7jWMgcGjhuqNpIHZp4bq/dCBgVmVyc2lvbigpKClgIOKAlFxuICAgKiBxdcOqbiBj4bq3cCBuZ2/hurdjIHRo4bupIGhhaSBsw6AgY29tcHV0ZWQgS0jDlE5HIHBo4bulIHRodeG7mWMgdsOgbyBuw7MsIGPDonkgxJHhu5VpIG3DoCBsxrDhu5tpIMSR4bupbmcgaW0sIHbDoFxuICAgKiBUeXBlU2NyaXB0IGtow7RuZyBo4buBIGLDoW8gbOG7l2kgKMSRbyAyOC8wOC8yMDI2OiB0aMOqbSBraOG7kWkga2jDtG5nIGhp4buHbiwgc+G6r3AgZ+G7jW4ga2jDtG5nIG5ow7pjIG5ow61jaCkuXG4gICAqL1xuICByZWFkb25seSBSb290ID0gdGhpcy5yb290Tm9kZS5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IElzRWRpdE1vZGUgPSB0aGlzLmVkaXRNb2RlLmFzUmVhZG9ubHkoKTtcbiAgLyoqIHTEg25nIG3hu5dpIGzhuqduIGPDonkgaG/hurdjIGPhuqV1IGjDrG5oIMSR4buVaSAqL1xuICByZWFkb25seSBWZXJzaW9uID0gdGhpcy52ZXJzaW9uLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgWm9vbSA9IHRoaXMuem9vbUxldmVsLmFzUmVhZG9ubHkoKTtcblxuICAvKipcbiAgICogdHLhuqduIHPhu5EgY+G6pXAgY29udGFpbmVyIGzhu5NuZyBuaGF1IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIGJp4bq/dCBjw7MgY2hvIGNodXnhu4NuIHRow6BuaCBjb250YWluZXIga2jDtG5nICovXG4gIHByaXZhdGUgbWF4Q29udGFpbmVyRGVwdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/Lm1heENvbnRhaW5lckRlcHRoID8/IDE7XG4gIH1cblxuICAvKipcbiAgICogbOG7gSB0cm9uZyBj4bunYSBjb250YWluZXIsIHB4IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIMSR4bq3dCBwYWRkaW5nIGzDqm4gduG7jyBjb250YWluZXIgKi9cbiAgcHJpdmF0ZSBjb250YWluZXJQYWRkaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5jb250YWluZXJQYWRkaW5nID8/IDEyO1xuICB9XG5cbiAgLyoqIEto4bufaSB04bqhbyBt4bq3dCBwaOG6s25nLiBH4buNaSBs4bqhaSBz4bq9IGThu41uIHPhuqFjaCBjb21wb25lbnQgY8WpIHLhu5NpIGThu7FuZyBs4bqhaSB04burIMSR4bqndS4gKi9cbiAgaW5pdChjb25maWc6IFRfZ3JpZExheW91dF9jb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAvLyDwn5S0IELhu5EgY+G7pWMgxJDDgyBMxq9VIGtow7RuZyDEkWkgcXVhIGx14bqtdCBjaOG6t24gbsOgbyBj4bunYSBnaWFvIGRp4buHbjogYuG6o24gbMawdSBjxakgKHNpbmggdHLGsOG7m2Mga2hpIGPDsyB0cuG6p24sXG4gICAgLy8gaG/hurdjIGRvIHRoYW8gdMOhYyBs4buXaSkgduG6q24gbWFuZyBjb250YWluZXIgbOG7k25nIGNvbnRhaW5lci4gVHLhuqduIGBtYXhDb250YWluZXJEZXB0aGAgY2jhu4kg4bqpbiBOw5pUXG4gICAgLy8gdHLDqm4gY2FudmFzIOKAlCBuw7Mga2jDtG5nIHPhu61hIGThu68gbGnhu4d1LCBuw6puIHRoaeG6v3UgZMOybmcgbsOgeSBsw6AgduG6vSByYSDEkcO6bmcgY8OieSBxdcOhIHPDonUgxJHDsy5cbiAgICAvLyBOxqFpIGTDuW5nIEtIw5RORyB04buxIGfhu41pIMSRxrDhu6NjOiBgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlYCBj4buRIMO9IGtow7RuZyB4deG6pXQuXG4gICAgdGhpcy50cmVlU2VydmljZS5mbGF0dGVuT3ZlckRlcHRoQ29udGFpbmVycyhjb25maWcuZGF0YSwgdGhpcy5tYXhDb250YWluZXJEZXB0aCgpKTtcbiAgICB0aGlzLmFzc2lnbk92ZXJsYXBMYXllcnMoY29uZmlnLmRhdGEpO1xuICAgIC8vIPCflLQgTmjDom4gYuG6o24gbmjGsCBgcmVmcmVzaCgpYDogYGluaXQoKWAgbOG6oWkgKMSR4buVaSBjaOG6vyDEkeG7mSwgYuG6rXQvdOG6r3QgY2jhu5NuZyBraOG7kWkpIHRyw6puIEPDmU5HIG9iamVjdCBjw6J5XG4gICAgLy8gdGjDrCBgQGZvcmAga2jDtG5nIGThu7FuZyBs4bqhaSBgZ3JpZHN0ZXItaXRlbWAsIG7Dqm4gYGxheWVySW5kZXhgIHbhu6thIGfDoW4ga2jDtG5nIHThu5tpIGAkaXRlbWAgdsOgIGto4buRaVxuICAgIC8vIHbhuqtuIGtow7RuZyDEkcOoIG5oYXUgxJHGsOG7o2MgKMSRbyAyOC8wOC8yMDI2OiBgaXRlbS5sYXllckluZGV4YCA9IDF8MnwzfDR8NyBtw6AgYCRpdGVtLmxheWVySW5kZXhgXG4gICAgLy8gdG/DoG4gYHVuZGVmaW5lZGApLlxuICAgIHRoaXMucm9vdE5vZGUuc2V0KHRoaXMuc2hhbGxvd0Nsb25lVHJlZShjb25maWcuZGF0YSkpO1xuICAgIHRoaXMuZWRpdE1vZGUuc2V0KGNvbmZpZy5pc0VkaXRNb2RlID8/IGZhbHNlKTtcblxuICAgIGxldCBpbml0aWFsWm9vbSA9IGNvbmZpZy5pbml0aWFsWm9vbSA/PyAxO1xuICAgIGlmIChjb25maWcuc3RvcmFnZUtleSAmJiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShjb25maWcuc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChzYXZlZCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQoc2F2ZWQpO1xuICAgICAgICAgIGNvbnN0IG1pbiA9IGNvbmZpZy56b29tTWluID8/IDAuNDtcbiAgICAgICAgICBjb25zdCBtYXggPSBjb25maWcuem9vbU1heCA/PyAxLjU7XG4gICAgICAgICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+PSBtaW4gJiYgcGFyc2VkIDw9IG1heCkge1xuICAgICAgICAgICAgaW5pdGlhbFpvb20gPSBwYXJzZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGxvY2FsU3RvcmFnZSBhY2Nlc3MgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy56b29tTGV2ZWwuc2V0KGluaXRpYWxab29tKTtcblxuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIHNldEVkaXRNb2RlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0TW9kZS5zZXQodmFsdWUpO1xuICAgIC8vIPCflLQgUEjhuqJJIGLGoW0gYHZlcnNpb25gOiBgZ3JpZHN0ZXJPcHRpb25zKClgIMSR4buNYyBgZWRpdE1vZGVgIMSR4buDIGLhuq10L3Thuq90IGvDqW/igJN0aOG6oywgbcOgIGNvbXB1dGVkXG4gICAgLy8gYGdyaWRPcHRpb25zYCBiw6puIGNhbnZhcyBjaOG7iSBjaOG6oXkgbOG6oWkga2hpIGBWZXJzaW9uYCDEkeG7lWkuIFRoaeG6v3UgZMOybmcgbsOgeSB0aMOsIMSR4buVaSBjaOG6vyDEkeG7mSB4b25nXG4gICAgLy8gZ3JpZHN0ZXIgduG6q24gZ2nhu68gb3B0aW9ucyBjxakg4oCUIGNodXnhu4NuIHNhbmcgWEVNIG3DoCBraOG7kWkgduG6q24ga8OpbyDEkcaw4bujYy5cbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICAvKipcbiAgICogQuG6rXQvdOG6r3QgY2hvIGto4buRaSBjaOG7k25nIGzDqm4gbmhhdSDigJQgS0jDlE5HIGThu7FuZyBs4bqhaSBt4bq3dCBwaOG6s25nLlxuICAgKlxuICAgKiBUcsaw4bubYyDEkcOieSBuxqFpIGTDuW5nIHBo4bqjaSBn4buNaSBgaW5pdCgpYCBs4bqhaSDEkeG7gyDEkeG7lWkgY+G7nSBuw6B5LCBtw6AgYGluaXQoKWAgaHXhu7cgc+G6oWNoIHLhu5NpIGThu7FuZyBs4bqhaSBt4buNaVxuICAgKiBjb21wb25lbnQgbuG7mWkgZHVuZyDigJQgbMOjbmcgcGjDrSwgdsOgIG5nxrDhu51pIGTDuW5nIHRo4bqleSBtw6BuIGNo4bubcCAobmfGsOG7nWkgZMO5bmcgY2jhu5F0IDI4LzA4LzIwMjYpLlxuICAgKi9cbiAgc2V0QWxsb3dPdmVybGFwKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgYWxsb3dPdmVybGFwOiB2YWx1ZSB9O1xuXG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIPCflLQgR8OhbiBs4bubcCB2w6BvIEPDglkgxJBBTkcgVuG6vCAoYHJvb3ROb2RlYCksIEtIw5RORyBwaOG6o2kgYGNvbmZpZy5kYXRhYC5cbiAgICAvLyBgaW5pdCgpYCDEkcOjIGNsb25lIGBjb25maWcuZGF0YWAgc2FuZyBgcm9vdE5vZGVgIG7Dqm4gaGFpIG9iamVjdCBLSMOBQyBuaGF1OyBnw6FuIHbDoG8gYGNvbmZpZy5kYXRhYFxuICAgIC8vIHRow6wgYHJlZnJlc2goKWAgY2xvbmUgbOG6oWkgdOG7qyBgcm9vdE5vZGVgIOKAlCBs4bubcCB24burYSBnw6FuIGtow7RuZyB04bubaSBgZ3JpZHN0ZXItaXRlbWAgbsOgbywgYHotaW5kZXhgXG4gICAgLy8gY+G7p2EgbeG7jWkga2jhu5FpIMSR4bupbmcg4bufIGAxYCB2w6Aga2jhu5FpIG7DoG8gduG6vSBzYXUgdGjDrCBu4bqxbSB0csOqbjogY2jhu5NuZyBraOG7kWkgXCJsw7pjIMSRxrDhu6NjIGzDumMga2jDtG5nXCJcbiAgICAvLyAoxJFvIDA0LzA5LzIwMjY6IGBpdGVtLmxheWVySW5kZXhgIHVuZGVmaW5lZCwgYGdldExheWVySW5kZXgoKWAgPSAwIGNobyBj4bqjIDgga2jhu5FpKS5cbiAgICB0aGlzLmFzc2lnbk92ZXJsYXBMYXllcnMocm9vdCk7XG4gICAgLy8gVGhheSB0aGFtIGNoaeG6v3UgY8OieSDEkeG7gyBgbGF5ZXJJbmRleGAgduG7q2EgZ8OhbiB04bubaSDEkcaw4bujYyBgJGl0ZW1gIGPhu6dhIGdyaWRzdGVyOyBjb21wb25lbnQgbuG7mWkgZHVuZ1xuICAgIC8vIEtIw5RORyBi4buLIGThu7FuZyBs4bqhaSB2w6wgYGF0dGFjaE5vZGVgIG5o4bqtbiByYSBpZCBjxakgdsOgIGNo4buJIGBzZXRJbnB1dGAuXG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQ+G6pXUgaMOsbmggZ3JpZHN0ZXIgY2hvIG3hu5l0IGPhuqVwIGzGsOG7m2kuXG4gICAqXG4gICAqIEBwYXJhbSBkZXB0aCAwID0gbMaw4bubaSBj4bqlcCB0cmFuZywg4omlIDEgPSBsxrDhu5tpIGzhu5NuZyB0cm9uZyBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgYnVpbGRHcmlkc3Rlck9wdGlvbnMoZGVwdGg6IG51bWJlciwgaXRlbUNoYW5nZUNhbGxiYWNrPzogKCkgPT4gdm9pZCk6IEdyaWRzdGVyQ29uZmlnIHtcbiAgICBjb25zdCBiYXNlID0gZGVwdGggPT09IDAgPyBncmlkTGF5b3V0Um9vdENvbmZpZygpIDogZ3JpZExheW91dE5lc3RlZENvbmZpZygpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRnJlZU1vZGUgPSBjb25maWcubW9kZSA9PT0gRV9ncmlkTGF5b3V0X21vZGVfc3RyaW5nLmZyZWU7XG4gICAgY29uc3QgY2FuRWRpdCA9IHRoaXMuZWRpdE1vZGUoKTtcbiAgICBjb25zdCBjYW5PdmVybGFwID0gaXNGcmVlTW9kZSB8fCAoY29uZmlnLmFsbG93T3ZlcmxhcCA/PyBmYWxzZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHNjYWxlOiB0aGlzLnpvb21MZXZlbCgpLFxuICAgICAgLi4uKGNvbmZpZy5jb2xzID8geyBtaW5Db2xzOiBjb25maWcuY29scywgbWF4Q29sczogY29uZmlnLmNvbHMsIG1heEl0ZW1Db2xzOiBjb25maWcuY29scyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5yb3dIZWlnaHQgJiYgZGVwdGggPT09IDAgPyB7IGZpeGVkUm93SGVpZ2h0OiBjb25maWcucm93SGVpZ2h0IH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPT09IDAgJiYgY29uZmlnLm1pblJvd3MgIT09IHVuZGVmaW5lZCA/IHsgbWluUm93czogY29uZmlnLm1pblJvd3MgfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA+IDAgJiYgY29uZmlnLm5lc3RlZE1pblJvd3MgIT09IHVuZGVmaW5lZCA/IHsgbWluUm93czogY29uZmlnLm5lc3RlZE1pblJvd3MgfSA6IHt9KSxcbiAgICAgIC8vIEtoZSB2w6AgY2hp4buBdSBjYW8gaMOgbmcga2jDoWMgbmhhdSB0aGVvIGPhuqVwOiBsxrDhu5tpIHRyYW5nIHRob8OhbmcsIGzGsOG7m2kgbOG7k25nIGtow610LlxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5tYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgbWFyZ2luOiBjb25maWcubWFyZ2luIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPiAwICYmIGNvbmZpZy5uZXN0ZWRNYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgbWFyZ2luOiBjb25maWcubmVzdGVkTWFyZ2luIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPiAwICYmIGNvbmZpZy5uZXN0ZWRSb3dIZWlnaHQgIT09IHVuZGVmaW5lZCA/IHsgZml4ZWRSb3dIZWlnaHQ6IGNvbmZpZy5uZXN0ZWRSb3dIZWlnaHQgfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcub3V0ZXJNYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgb3V0ZXJNYXJnaW46IGNvbmZpZy5vdXRlck1hcmdpbiB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5vdXRlck1hcmdpbkJvdHRvbSAhPT0gdW5kZWZpbmVkID8geyBvdXRlck1hcmdpbkJvdHRvbTogY29uZmlnLm91dGVyTWFyZ2luQm90dG9tIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLm1pbkl0ZW1Sb3dzICE9PSB1bmRlZmluZWQgPyB7IG1pbkl0ZW1Sb3dzOiBjb25maWcubWluSXRlbVJvd3MgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcuZGVmYXVsdEl0ZW1Db2xzICE9PSB1bmRlZmluZWQgPyB7IGRlZmF1bHRJdGVtQ29sczogY29uZmlnLmRlZmF1bHRJdGVtQ29scyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5kZWZhdWx0SXRlbVJvd3MgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdEl0ZW1Sb3dzOiBjb25maWcuZGVmYXVsdEl0ZW1Sb3dzIH0gOiB7fSksXG5cbiAgICAgIC8vIPCflLQgQ2jhur8gxJHhu5kgWEVNIHBo4bqjaSBU4bquVCBo4bqzbiBrw6lvIHbDoCDEkeG7lWkga8OtY2ggdGjGsOG7m2MuXG4gICAgICAvLyBgYmFzZWAgbHXDtG4gxJHhu4MgYGVuYWJsZWQ6IHRydWVgOyBraMO0bmcgZ2hpIMSRw6ggdGhlbyBgZWRpdE1vZGVgIHRow6wgbmfGsOG7nWkgeGVtIHbhuqtuIGvDqW8gxJHGsOG7o2Mga2jhu5FpXG4gICAgICAvLyB2w6AgxJHhu5VpIGLhu5EgY+G7pWMgY+G7p2EgbmfGsOG7nWkga2jDoWMgKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNjogXCLEkWFuZyB4ZW0gbcOgIHbhuqtuIGvDqW8gdGjhuqMgdGhheSDEkeG7lWlcbiAgICAgIC8vIHbhu4sgdHLDrSB2w6AgdGjDqm0ga2jhu5FpIMSRxrDhu6NjXCIpLlxuICAgICAgZHJhZ2dhYmxlOiB7IC4uLmJhc2UuZHJhZ2dhYmxlLCBlbmFibGVkOiBjYW5FZGl0IH0sXG4gICAgICByZXNpemFibGU6IHsgLi4uYmFzZS5yZXNpemFibGUsIGVuYWJsZWQ6IGNhbkVkaXQgfSxcblxuICAgICAgLy8gQ2jhur8gxJHhu5kgdOG7sSBkbyBMVcOUTiBjaG8gY2jhu5NuZzsgY2jhur8gxJHhu5kgbMaw4bubaSB0aMOsIHRoZW8gY+G7nSBj4bunYSBuxqFpIGTDuW5nLlxuICAgICAgYWxsb3dNdWx0aUxheWVyOiBjYW5PdmVybGFwLFxuICAgICAgLy8g8J+UtCBC4bqtdCBgYWxsb3dNdWx0aUxheWVyYCBN4buYVCBNw4xOSCBraMO0bmcgxJHhu6cuIE3DoyBsaWIgc28gYGxheWVySW5kZXhgIGPhu6dhIGhhaSBraOG7kWk6IEtIw4FDIG5oYXVcbiAgICAgIC8vIHRow6wgY2hvIMSRw6gsIEdJ4buQTkcgbmhhdSB24bqrbiBiw6FvIHZhIGNo4bqhbS4gS2jhu5FpIGtow7RuZyBraGFpIGBsYXllckluZGV4YCDEkeG7gXUgcsahaSB24buBXG4gICAgICAvLyBgZGVmYXVsdExheWVySW5kZXhgIOKAlCB04bupYyBjw7luZyBs4bubcCwgdsOgIHbhuqtuIGLhu4sgxJHhuql5IG5oYXUgbmjGsCBsxrDhu5tpIHRoxrDhu51uZyAobmfGsOG7nWkgZMO5bmcgYsOhb1xuICAgICAgLy8gMjgvMDgvMjAyNjogXCJi4bqtdCBjaOG7k25nIGto4buRaSBuaMawbmcga2hpIGvDqW8gdGjDrCBjw6FjIGto4buRaSB24bqrbiBkaSBjaHV54buDbiB0aGVvXCIpLlxuICAgICAgLy8gQ2hvIGNo4buTbmcgdGjDrCBwaOG6o2kgVOG6rlQgxJHhuql5IGto4buRaSwgbuG6v3Uga2jDtG5nIGto4buRaSBi4buLIGThuqF0IMSRaSB0csaw4bubYyBraGkga+G7i3AgxJHDqCBsw6puIG5oYXUuXG4gICAgICAuLi4oY2FuT3ZlcmxhcCA/IHsgcHVzaEl0ZW1zOiBmYWxzZSwgcHVzaFJlc2l6ZUl0ZW1zOiBmYWxzZSwgc3dhcDogZmFsc2UsIHN3YXBXaGlsZURyYWdnaW5nOiBmYWxzZSB9IDoge30pLFxuXG4gICAgICAuLi50aGlzLmJ1aWxkTmVzdGVkUmVzaXplSG9va3MoYmFzZSwgZGVwdGgpLFxuXG4gICAgICBpdGVtQ2hhbmdlQ2FsbGJhY2s6IChpdGVtOiBHcmlkc3Rlckl0ZW0pID0+IHtcbiAgICAgICAgLy8g8J+UtCBLaOG7kWkgduG7q2EgdGhhbyB0w6FjIHBo4bqjaSBsw6puIEzhu5pQIFRSw4pOIEPDmU5HLlxuICAgICAgICAvLyBgbGF5ZXJJbmRleGAgZ8OhbiBt4buZdCBs4bqnbiB0aGVvIHRo4bupIHThu7EgY8OieSBsw7pjIGto4bufaSB04bqhbywgbsOqbiBraOG7kWkga8OpbyBsw6puIGNo4buJIG7hu5VpIFRST05HIEzDmkNcbiAgICAgICAgLy8ga8OpbyAobmjhu50gYHotaW5kZXg6IDMwYCBj4bunYSBs4bubcCBgZ3JpZHN0ZXItaXRlbS1tb3ZpbmdgKTsgdGjhuqMgdGF5IHJhIGzDoCB24buBIGzhu5twIGPFqSB2w6AgYuG7iyBraOG7kWlcbiAgICAgICAgLy8gxJHhu6luZyBzYXUgdHJvbmcgY8OieSDEkcOoIG5nxrDhu6NjIGzDqm4gKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNiwgxJFvIMSRxrDhu6NjOiBrw6lvIHo9MzAsIHRo4bqjIHbhu4FcbiAgICAgICAgLy8gej0xMCB0cm9uZyBraGkgaGFpIGto4buRaSBr4bq/IGLDqm4gxJFhbmcgej0xMSB2w6Agej0xMikuXG4gICAgICAgIGlmIChjYW5PdmVybGFwKSB7XG4gICAgICAgICAgdGhpcy5yYWlzZVRvVG9wTGF5ZXIoaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gICAgICAgIGl0ZW1DaGFuZ2VDYWxsYmFjaz8uKCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQuG6r3QgbMaw4bubaSBM4buSTkcgxJFvIGzhuqFpIE5HQVkga2hpIGtodW5nIGNo4bupYSBuw7MgxJHhu5VpIGLhu4EgcuG7mW5nIOKAlCBkw7luZyBsw7pjIG5nxrDhu51pIGTDuW5nIGvDqW8gbcOpcCBraOG7kWkgY2hhLlxuICAgKlxuICAgKiBHcmlkc3RlciBjw7Mgc+G6tW4gxJHGsOG7nW5nIHThu7EgxJFvIChgcmVzaXplJGApLCBuaMawbmcgbHXhu5NuZyDEkcOzIGzDoCBgc3dpdGNoTWFwKCgpID0+IHRpbWVyKDEwMCkpYDogbeG7l2lcbiAgICogbOG6p24gcGjDoXQgbOG6oWkgaHXhu7cgdGltZXIgdHLGsOG7m2MsIG3DoCBrw6lvIGNodeG7mXQgYuG6r24gZMOgeSBoxqFuIDEwMG1zIG7Dqm4gdGltZXIga2jDtG5nIGJhbyBnaeG7nSB04bubaSDEkcOtY2guXG4gICAqIMSQbyDEkcaw4bujYyAoMTEvMDkvMjAyNik6IGvDqW8gbcOpcCBuaMOzbSB0aMOsIGzGsOG7m2kgY29uIGNvIHRoZW8gY2hhIHThu6tuZyBraHVuZyBow6xuaCAoMjM0IOKGkiAzODQgcHgpIGPDsm5cbiAgICogVEjhurogY29uIMSR4bupbmcgaW0g4bufIDEwNiBweCBzdeG7kXQgY8O6IGvDqW8sIGNo4buJIG5o4bqjeSDEkcO6bmcgc2F1IGtoaSB0aOG6oyB0YXkuXG4gICAqXG4gICAqIEdp4buvIEPhuqIgSEFJIMSRxrDhu51uZzogYGl0ZW1SZXNpemVDYWxsYmFja2AgYuG6r24gxJHhu5NuZyBi4buZIG5nYXkga2hpIGdyaWRzdGVyIGdoaSBi4buBIHLhu5luZyBt4bubaSBsw6puIGto4buRaVxuICAgKiAoc+G7m20gaMahbiBgUmVzaXplT2JzZXJ2ZXJgIG3hu5l0IGtodW5nIGjDrG5oKSBsbyDEkeG7mSB04bupYyB0aMOsOyBgUmVzaXplT2JzZXJ2ZXJgIGxvIG5o4buvbmcgbOG6p24ga2h1bmcgxJHhu5VpXG4gICAqIHbDrCBsw70gZG8ga2jDoWMg4oCUIMSR4buVaSB6b29tLCB0aHUgZ+G7jW4gY+G7mXQgYsOqbiB0csOhaS5cbiAgICpcbiAgICogVOG6r3QgYuG6sW5nIGBjb25maWcuYXV0b1Jlc2l6ZU5lc3RlZEdyaWRzOiBmYWxzZWAuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTmVzdGVkUmVzaXplSG9va3MoYmFzZTogR3JpZHN0ZXJDb25maWcsIGRlcHRoOiBudW1iZXIpOiBQYXJ0aWFsPEdyaWRzdGVyQ29uZmlnPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5hdXRvUmVzaXplTmVzdGVkR3JpZHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGdvY0l0ZW1SZXNpemUgPSBiYXNlLml0ZW1SZXNpemVDYWxsYmFjaztcbiAgICBjb25zdCBnb2NJbml0ID0gYmFzZS5pbml0Q2FsbGJhY2s7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbVJlc2l6ZUNhbGxiYWNrOiAoaXRlbSwgaXRlbUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBnb2NJdGVtUmVzaXplPy4oaXRlbSwgaXRlbUNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGVsID0gKGl0ZW1Db21wb25lbnQgYXMgeyBlbD86IEhUTUxFbGVtZW50IH0gfCB1bmRlZmluZWQpPy5lbDtcblxuICAgICAgICBlbD8ucXVlcnlTZWxlY3RvckFsbCgnZ3JpZHN0ZXInKS5mb3JFYWNoKChuZXN0ZWQpID0+IHRoaXMucmVzaXplR3JpZHN0ZXJFbGVtZW50KG5lc3RlZCBhcyBIVE1MRWxlbWVudCkpO1xuICAgICAgfSxcbiAgICAgIC4uLihkZXB0aCA+IDBcbiAgICAgICAgPyB7IGluaXRDYWxsYmFjazogKGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkgPT4gdGhpcy5yZWdpc3Rlck5lc3RlZEdyaWQoZ3JpZHN0ZXIsIGdvY0luaXQpIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBH4buNaSBgcmVzaXplKClgIGPhu6dhIG3hu5l0IHRo4bq7IGA8Z3JpZHN0ZXI+YCBxdWEgY2jDrW5oIGluc3RhbmNlIG3DoCBuw7MgdOG7sSBn4bqvbiBsw6puIHBo4bqnbiB04butLiAqL1xuICBwcml2YXRlIHJlc2l6ZUdyaWRzdGVyRWxlbWVudChuZXN0ZWQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgZ2l1SW5zdGFuY2UgPSBuZXN0ZWQgYXMgdW5rbm93biBhcyB7IF9fZ3JpZHN0ZXJJbnN0YW5jZT86IHsgb3B0aW9ucz86IHsgYXBpPzogeyByZXNpemU/OiAoKSA9PiB2b2lkIH0gfSB9IH07XG5cbiAgICBnaXVJbnN0YW5jZS5fX2dyaWRzdGVySW5zdGFuY2U/Lm9wdGlvbnM/LmFwaT8ucmVzaXplPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBH4bqvbiBpbnN0YW5jZSBsw6puIGNow61uaCBwaOG6p24gdOG7rSBgPGdyaWRzdGVyPmAgcuG7k2kgdGhlbyBkw7VpIGLhu4EgcuG7mW5nIGPhu6dhIG7Dsy5cbiAgICpcbiAgICogUGjhuqNpIGfhuq9uIG5nxrDhu6NjIGzDqm4gRE9NIHbDrCBgaXRlbVJlc2l6ZUNhbGxiYWNrYCBj4bunYSBraOG7kWkgQ0hBIGNo4buJIGPhuqdtIMSRxrDhu6NjIGBIVE1MRWxlbWVudGAsIGtow7RuZyBjw7NcbiAgICogxJHGsOG7nW5nIG7DoG8ga2jDoWMgxJFpIHThu6sgxJHDsyB24buBIGluc3RhbmNlIGPhu6dhIGzGsOG7m2kgbOG7k25nIGLDqm4gdHJvbmcuXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyTmVzdGVkR3JpZChcbiAgICBncmlkc3RlcjogR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2UsXG4gICAgZ29jPzogKGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBnb2M/Lihncmlkc3Rlcik7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBncmlkc3RlciBhcyB1bmtub3duIGFzIHsgZWw/OiBIVE1MRWxlbWVudDsgb3B0aW9ucz86IHsgYXBpPzogeyByZXNpemU/OiAoKSA9PiB2b2lkIH0gfSB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVsID0gaW5zdGFuY2U/LmVsO1xuXG4gICAgaWYgKCFlbCB8fCB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIChlbCBhcyB1bmtub3duIGFzIHsgX19ncmlkc3Rlckluc3RhbmNlPzogdW5rbm93biB9KS5fX2dyaWRzdGVySW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgIGNvbnN0IHRoZW9Eb2kgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gaW5zdGFuY2U/Lm9wdGlvbnM/LmFwaT8ucmVzaXplPy4oKSk7XG5cbiAgICB0aGVvRG9pLm9ic2VydmUoZWwpO1xuICAgIHRoaXMubmVzdGVkUmVzaXplT2JzZXJ2ZXJzLmFkZCh0aGVvRG9pKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBH4bqvbiBjb21wb25lbnQgY+G7p2EgbsahaSBkw7luZyBsw6puIG3hu5l0IGto4buRaS5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgY2jhu5cgZ+G6r24gUknDik5HIGPhu6dhIMO0IMSRw7Mg4oCUIG3hu5dpIGto4buRaSBt4buZdCBgVmlld0NvbnRhaW5lclJlZmAsIGTDuW5nIGNodW5nIG3hu5l0IGPDoWkgdGjDrFxuICAgKiAgIG3hu41pIGNvbXBvbmVudCBi4buLIGThu5NuIGjhur90IHbDoG8gbeG7mXQgw7QuXG4gICAqL1xuICBwcml2YXRlIGF0dGFjaE5vZGUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGRlcHRoOiBudW1iZXIsIGhvc3Q6IFZpZXdDb250YWluZXJSZWYpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNvbXBvbmVudFJlZnMuZ2V0KG5vZGUuaWQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLmFwcGx5SW5wdXRzKGV4aXN0aW5nLCBub2RlLCBkZXB0aCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBLaOG7kWkgdOG7sSBraGFpIHRow6wgaOG7j2kgbsOzOyBraMO0bmcgdGjDrCBo4buPaSBow6BtIHBow6JuIGdp4bqjaSBjaHVuZy4gQ+G6oyBoYWkgxJHhu4F1IG5o4bqtbiBgbm9kZWAgxJHhu4MgxJHhu41jXG4gICAgLy8gxJHGsOG7o2MgYGRhdGEudHlwZWAgbcOgIHF1eeG6v3QgxJHhu4tuaCB0cuG6oyBjb21wb25lbnQgbsOgby5cbiAgICBjb25zdCBzdHJlYW0gPSAobm9kZS5nZXRDb21wb25lbnRPdXRsZXQgPz8gY29uZmlnLmdldENvbXBvbmVudE91dGxldCk/Lihub2RlKTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g8J+UtCBIdeG7tyBsxrDhu6N0IHThuqNpIEPFqCBj4bunYSDEkcO6bmcga2jhu5FpIG7DoHkgdHLGsOG7m2Mga2hpIG3hu58gbMaw4bujdCBt4bubaS5cbiAgICAvLyBLaOG7kWkgYuG7iyBn4buhIHLhu5NpIGfhuq9uIGzhuqFpICjEkeG7lWkgYuG7kSBj4bulYywgc+G6r3AgZ+G7jW4pIHRyb25nIGzDumMgYGltcG9ydCgpYCBjaMawYSB4b25nIHRow6wgbMaw4bujdCBjxakgduG6q25cbiAgICAvLyBjaOG6oXkgdGnhur9wIHbDoCBk4buxbmcgY29tcG9uZW50IHbDoG8gbeG7mXQgYFZpZXdDb250YWluZXJSZWZgIMSRw6MgY2jhur90LlxuICAgIHRoaXMucGVuZGluZ0xvYWRzLmdldChub2RlLmlkKT8udW5zdWJzY3JpYmUoKTtcblxuICAgIGNvbnN0IHN1YiA9IHN0cmVhbS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoY29tcG9uZW50VHlwZSkgPT4ge1xuICAgICAgdGhpcy5wZW5kaW5nTG9hZHMuZGVsZXRlKG5vZGUuaWQpO1xuXG4gICAgICAvLyBLaOG7kWkgY8OzIHRo4buDIMSRw6MgYuG7iyB4b8OhIHRyb25nIGzDumMgY2jhu50gdOG6o2kg4oCUIGThu7FuZyB2w6BvIMSRw6J5IGzDoCByw7IgcuG7iS5cbiAgICAgIGlmICghdGhpcy50cmVlU2VydmljZS5maW5kQnlJZCh0aGlzLnJvb3ROb2RlKCkgPz8gbm9kZSwgbm9kZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWYgPSBob3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcblxuICAgICAgdGhpcy5hcHBseUlucHV0cyhyZWYsIG5vZGUsIGRlcHRoKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmcy5zZXQobm9kZS5pZCwgcmVmKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGVuZGluZ0xvYWRzLnNldChub2RlLmlkLCBzdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEfhu6EgY29tcG9uZW50IGPhu6dhIG3hu5l0IGto4buRaSB2w6AgaHXhu7cgbsOzLiAqL1xuICBwcml2YXRlIGRldGFjaE5vZGUobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBLaOG7kWkgYuG7iyBn4buhIGtoaSBjb21wb25lbnQgY+G7p2EgbsOzIGPDsm4gxJFhbmcgdOG6o2kg4oCUIHBo4bqjaSBodeG7tyBsxrDhu6N0IHThuqNpLCBraMO0bmcgdGjDrCBuw7MgZOG7sW5nIHbDoG8gbeG7mXRcbiAgICAvLyBgVmlld0NvbnRhaW5lclJlZmAgxJHDoyBjaOG6v3QuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZ2V0KG5vZGVJZCk/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZGVsZXRlKG5vZGVJZCk7XG5cbiAgICBjb25zdCByZWYgPSB0aGlzLmNvbXBvbmVudFJlZnMuZ2V0KG5vZGVJZCk7XG5cbiAgICBpZiAoIXJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlZi5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmRlbGV0ZShub2RlSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMucGVuZGluZ0xvYWRzLnZhbHVlcygpKSB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLmNvbXBvbmVudFJlZnMudmFsdWVzKCkpIHtcbiAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvYnNlcnZlciBvZiB0aGlzLm5lc3RlZFJlc2l6ZU9ic2VydmVycykge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0xvYWRzLmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmNsZWFyKCk7XG4gICAgdGhpcy5uZXN0ZWRSZXNpemVPYnNlcnZlcnMuY2xlYXIoKTtcbiAgICB0aGlzLmNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBOaMOzbSBow6BtIGNobyBuxqFpIGTDuW5nIENI4bumIMSQ4buYTkcgZ+G7jWkg4oCUIGtow7RuZyBwaOG6o2kgY2jhu50gbmfGsOG7nWkgZMO5bmcgYuG6pW0gbsO6dCB0csOqbiBraOG7kWkuXG4gIC8vIFPhu61hIGPDonkgdGjDrCBkw7luZyB0aOG6s25nIGBUcmVlU2VydmljZWAgcuG7k2kgZ+G7jWkgYHJlZnJlc2goKWAg4oCUIHhlbSBkZW1vIHRyb25nIGNvcmUtdWkuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBCw6FvIGNobyBzZXJ2aWNlIGJp4bq/dCBjw6J5IHbhu6thIMSR4buVaSB04burIGLDqm4gbmdvw6BpICh0aMOqbS94b8OhIGto4buRaSwgc+G6r3AgZ+G7jW4sIG7huqFwIGLhu5EgY+G7pWMga2jDoWMpLlxuICAgKlxuICAgKiDwn5S0IFBI4bqiSSB0aGF5IFRIQU0gQ0hJ4bq+VSBj4bunYSBub2RlIGfhu5FjLCBraMO0bmcgY2jhu4kgYsahbSBgdmVyc2lvbmAuXG4gICAqIGBAZm9yIOKApiB0cmFjayBpdGVtLmlkYCBnaeG7ryBuZ3V5w6puIG9iamVjdCBraGkgaWQga2jDtG5nIMSR4buVaSwgbsOqbiBgPGdyaWRzdGVyLWl0ZW0gW2l0ZW1dPVwi4oCmXCI+YCB24bqrblxuICAgKiBuaOG6rW4gxJHDum5nIG9iamVjdCBjxakgdsOgIGdyaWRzdGVyIGtow7RuZyBo4buBIGJp4bq/dCBgeC95L2NvbHMvcm93cy9sYXllckluZGV4YCB24burYSBi4buLIHPhu61hLiBCxqFtIG3hu5dpXG4gICAqIGB2ZXJzaW9uYCB0aMOsIGNvbXB1dGVkIGNo4bqheSBs4bqhaSBuaMawbmcgdHLhuqMgduG7gSBDw5lORyBt4bqjbmcgY8WpIOKAlCBsxrDhu5tpIMSR4bupbmcgaW0gKMSRbyAyOC8wOC8yMDI2OiBi4bqlbVxuICAgKiBcIlPhuq9wIGfhu41uXCIgY8OieSDEkcOjIGThu5NuIGtow610IG3DoCBtw6BuIGjDrG5oIGtow7RuZyBuaMO6YyBuaMOtY2g7IGLhuq10IGNo4buTbmcga2jhu5FpIG3DoCBgJGl0ZW0ubGF5ZXJJbmRleGBcbiAgICogduG6q24gdHLhu5FuZykuXG4gICAqXG4gICAqIE5ow6JuIGLhuqNuIE7DlE5HIGPhuqMgbm9kZSBn4buRYyB2w6AgZGFuaCBzw6FjaCBjb24gbMOgIMSR4bunOiBt4bqjbmcgbeG7m2kg4oaSIGBAZm9yYCBk4buxbmcgbOG6oWkgaXRlbSwgb2JqZWN0IGNvblxuICAgKiBt4bubaSDihpIgZ3JpZHN0ZXIgxJHhu41jIGzhuqFpIHRvw6BuIGLhu5kgdG/huqEgxJHhu5kuXG4gICAqL1xuICByZWZyZXNoKGV2ZW50PzogVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IGV2ZW50Py5yb290ID8/IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIGRhdGE6IHJvb3QgfTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3ROb2RlLnNldCh0aGlzLnNoYWxsb3dDbG9uZVRyZWUocm9vdCkpO1xuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIC8qKiBOaMOibiBi4bqjbiBuw7RuZyB0aGVvIGPhuqMgY2hp4buBdSBzw6J1OiBt4buXaSBub2RlIHbDoCBt4bqjbmcgYGNoaWxkcmVuYCB0aMOgbmggdGhhbSBjaGnhur91IG3hu5tpLiAqL1xuICAvKipcbiAgICogTmjDom4gYuG6o24gU8OCVSBj4bqjIGPDonkg4oCUIGTDuW5nIGNobyBgZXhwb3J0TGF5b3V0KClgLlxuICAgKlxuICAgKiDwn5S0IELhu44gYGdldENvbXBvbmVudE91dGxldGAga2jhu49pIGLhuqNuIHNhbzogbsOzIGzDoCBt4buZdCBIw4BNLCBraMO0bmcgdHXhuqduIHThu7EgaG/DoSDEkcaw4bujYyBuw6puIGfhu61pIHh14buRbmdcbiAgICogYmFja2VuZCBsw6AgaOG7j25nIChgSlNPTi5zdHJpbmdpZnlgIG514buRdCBt4bqldCwgYHN0cnVjdHVyZWRDbG9uZWAgbsOpbSBs4buXaSkuIE7huqFwIGzhuqFpIHRow6wgaMOgbSBwaMOiblxuICAgKiBnaeG6o2kgY2h1bmcgY+G7p2EgY+G6pXUgaMOsbmggbG8g4oCUIGNvbXBvbmVudCBzdXkgcmEgdOG7qyBgZGF0YS50eXBlYCwga2jDtG5nIGPhuqduIGzGsHUuXG4gICAqL1xuICBwcml2YXRlIGRlZXBDbG9uZVRyZWUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiBUX2dyaWRMYXlvdXRfbm9kZSB7XG4gICAgY29uc3QgY29weTogVF9ncmlkTGF5b3V0X25vZGUgPSB7IC4uLm5vZGUgfTtcblxuICAgIC8vIEPhuq90IGjDoG0gcGjDom4gZ2nhuqNpIOKAlCB4ZW0gY2jDuiB0aMOtY2ggdHLDqm4uXG4gICAgZGVsZXRlIGNvcHkuZ2V0Q29tcG9uZW50T3V0bGV0O1xuXG4gICAgY29uc3QgeyBjaGlsZHJlbiwgZGF0YSwgLi4ucmVzdCB9ID0gY29weTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXN0LFxuICAgICAgLi4uKGRhdGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBkYXRhOiBjbG9uZURlZXAoZGF0YSkgfSksXG4gICAgICAuLi4oY2hpbGRyZW4gPyB7IGNoaWxkcmVuOiBjaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLmRlZXBDbG9uZVRyZWUoY2hpbGQpKSB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNoYWxsb3dDbG9uZVRyZWUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiBUX2dyaWRMYXlvdXRfbm9kZSB7XG4gICAgaWYgKCFub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IC4uLm5vZGUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5ub2RlLCBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLnNoYWxsb3dDbG9uZVRyZWUoY2hpbGQpKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEfDoW4gYGxheWVySW5kZXhgIGtow6FjIG5oYXUgY2hvIHThu6tuZyBraOG7kWkga2hpIGLhuq10IGNo4buTbmcga2jhu5FpLlxuICAgKlxuICAgKiDwn5S0IGBhbGxvd011bHRpTGF5ZXI6IHRydWVgIE3hu5hUIE3DjE5IIGtow7RuZyBjaG8ga2jhu5FpIMSRw6ggbmhhdS4gTcOjIGxpYiBzbyBgbGF5ZXJJbmRleGAgY+G7p2EgaGFpIGto4buRaTpcbiAgICogS0jDgUMgbmhhdSB0aMOsIGNobyDEkcOoLCBHSeG7kE5HIG5oYXUgduG6q24gYsOhbyB2YSBjaOG6oW0uIEto4buRaSBraMO0bmcga2hhaSBgbGF5ZXJJbmRleGAgxJHhu4F1IHLGoWkgduG7gVxuICAgKiBgZGVmYXVsdExheWVySW5kZXhgIOKAlCB04bupYyBDw5lORyBs4bubcCwgbsOqbiBrw6lvIHbDoG8gbmhhdSBsw6AgYuG7iyBjaOG6t24geSBuaMawIGzGsOG7m2kgdGjGsOG7nW5nIChuZ8aw4budaSBkw7luZ1xuICAgKiBiw6FvIDI4LzA4LzIwMjY6IFwiYuG6rXQgY2jhu5NuZyBraOG7kWkgbmjGsG5nIGtoaSBrw6lvIHRow6wgY8OhYyBraOG7kWkgduG6q24gZGkgY2h1eeG7g24gdGhlb1wiKS5cbiAgICpcbiAgICogTsahaSBkw7luZyB04buxIGtoYWkgYGxheWVySW5kZXhgIHRow6wgZ2nhu68gbmd1ecOqbjsgYWkga2jDtG5nIGtoYWkgdGjDrCB0aMawIHZp4buHbiB44bq/cCBt4buXaSBraOG7kWkgbeG7mXQgbOG7m3BcbiAgICogdGhlbyB0aOG7qSB04buxLCDEkeG7pyDEkeG7gyBt4buNaSBj4bq3cCDEkeG7gXUga2jDoWMgbOG7m3AuXG4gICAqL1xuICBwcml2YXRlIGFzc2lnbk92ZXJsYXBMYXllcnMocm9vdDogVF9ncmlkTGF5b3V0X25vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjYW5PdmVybGFwID0gY29uZmlnPy5tb2RlID09PSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcuZnJlZSB8fCAoY29uZmlnPy5hbGxvd092ZXJsYXAgPz8gZmFsc2UpO1xuXG4gICAgaWYgKCFjYW5PdmVybGFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxheWVyID0gMDtcbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxheWVyICs9IDE7XG4gICAgICAgICAgY2hpbGQubGF5ZXJJbmRleCA9IGxheWVyO1xuICAgICAgICB9XG5cbiAgICAgICAgd2FsayhjaGlsZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhbGsocm9vdCk7XG5cbiAgfVxuXG4gIC8qKiDEkMawYSBt4buZdCBraOG7kWkgbMOqbiB0csOqbiB04bqldCBj4bqjOiBs4bubcCBj4bunYSBuw7MgPSBs4bubcCBs4bubbiBuaOG6pXQgxJFhbmcgY8OzICsgMS4gKi9cbiAgcHJpdmF0ZSByYWlzZVRvVG9wTGF5ZXIoaXRlbTogR3JpZHN0ZXJJdGVtKTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB0b3BMYXllciA9IDA7XG4gICAgY29uc3Qgd2FsayA9IChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuID8/IFtdKSB7XG4gICAgICAgIHRvcExheWVyID0gTWF0aC5tYXgodG9wTGF5ZXIsIGNoaWxkLmxheWVySW5kZXggPz8gMCk7XG4gICAgICAgIHdhbGsoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YWxrKHJvb3QpO1xuXG4gICAgLy8gYGl0ZW1gIGdyaWRzdGVyIHRy4bqjIHbhu4EgQ0jDjU5IIGzDoCBvYmplY3Qgbm9kZSBj4bunYSBjw6J5ICh0cnV54buBbiB0aOG6s25nIHF1YSBgW2l0ZW1dYCksIG7Dqm4gZ8OhbiB2w6BvXG4gICAgLy8gxJHDonkgbMOgIGPDonkgY8WpbmcgxJHhu5VpIHRoZW8uXG4gICAgY29uc3Qgbm9kZSA9IGl0ZW0gYXMgdW5rbm93biBhcyBUX2dyaWRMYXlvdXRfbm9kZTtcblxuICAgIGlmIChub2RlLmxheWVySW5kZXggPT09IHRvcExheWVyKSB7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLmxheWVySW5kZXggPSB0b3BMYXllciArIDE7XG4gIH1cblxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gU+G7rEEgQ8OCWSDigJQgdGjGsCB2aeG7h24gxJHDoyBnaeG7ryBjw6J5IG7Dqm4gYuG6oW4gS0jDlE5HIHBo4bqjaSB0cnV54buBbiBuw7MgdsOgby5cbiAgLy8gTeG7jWkgaMOgbSBkxrDhu5tpIMSRw6J5IHThu7EgduG6vSBs4bqhaTsga2jDtG5nIGPhuqduIGfhu41pIGByZWZyZXNoKClgLlxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogVGjDqm0gbeG7mXQga2jhu5FpLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBraOG7kWkgbeG7m2kg4oCUIEtIw5RORyBj4bqnbiBgaWRgICh0aMawIHZp4buHbiBzaW5oKSB2w6AgYHhgL2B5YCAodOG7sSDEkeG6t3QgeHXhu5FuZyBow6BuZyB0cuG7kW5nKS5cbiAgICogQHBhcmFtIHBhcmVudElkIGNvbnRhaW5lciBtdeG7kW4gdGjDqm0gdsOgbzsgYuG7jyB0cuG7kW5nIHRow6wgdGjDqm0gdsOgbyBt4bq3dCBwaOG6s25nIGfhu5FjLlxuICAgKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB24burYSBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgY29udGFpbmVyLlxuICAgKi9cbiAgYWRkQmxvY2soaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUsIHBhcmVudElkPzogc3RyaW5nKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3QgYWRkZWQgPSByb290ID8gdGhpcy50cmVlU2VydmljZS5hZGRDaGlsZChyb290LCBwYXJlbnRJZCA/PyByb290LmlkLCBpdGVtKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChhZGRlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRow6ptIG3hu5l0IGto4buRaSB04bqhaSB0b+G6oSDEkeG7mSAoY29sLCByb3cpIGPhu6UgdGjhu4MgdsOgIHThu7EgxJHhu5luZyDEkeG6qXkgY8OhYyBraOG7kWkgdmEgY2jhuqFtIHh14buRbmcgZMaw4bubaS5cbiAgICovXG4gIGluc2VydEJsb2NrV2l0aENvbGxpc2lvbihcbiAgICBpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgICB0YXJnZXRDb2wgPSAwLFxuICAgIHRhcmdldFJvdyA9IDAsXG4gICAgcGFyZW50SWQ/OiBzdHJpbmcsXG4gICk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGFkZGVkID0gcm9vdFxuICAgICAgPyB0aGlzLnRyZWVTZXJ2aWNlLmluc2VydFdpdGhDb2xsaXNpb24ocm9vdCwgcGFyZW50SWQgPz8gcm9vdC5pZCwgaXRlbSwgdGFyZ2V0Q29sLCB0YXJnZXRSb3cpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChhZGRlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVEcmFnUGF5bG9hZCA9IHNpZ25hbDx1bmtub3duIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKiDEkOG6t3QgcGF5bG9hZCBraGkgYuG6r3QgxJHhuqd1IGvDqW8gdOG7qyBiw6puIG5nb8OgaSB2w6BvICh2w60gZOG7pTogcGFsZXR0ZSwgZHJhd2VyKSAqL1xuICBzZXREcmFnUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVEcmFnUGF5bG9hZC5zZXQocGF5bG9hZCk7XG4gIH1cblxuICAvKiogTOG6pXkgcGF5bG9hZCDEkWFuZyBrw6lvICovXG4gIGdldERyYWdQYXlsb2FkKCk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZURyYWdQYXlsb2FkKCk7XG4gIH1cblxuICAvKiogWG/DoSBwYXlsb2FkIGtoaSBr4bq/dCB0aMO6YyBrw6lvICovXG4gIGNsZWFyRHJhZ1BheWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVEcmFnUGF5bG9hZC5zZXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKiBYb8OhIG3hu5l0IGto4buRaS4gWG/DoSBjb250YWluZXIgbMOgIHhvw6EgY+G6oyBydeG7mXQuIFRy4bqjIGBmYWxzZWAga2hpIGtow7RuZyB4b8OhIMSRxrDhu6NjICh2ZCBraOG7kWkgZ+G7kWMpLiAqL1xuICByZW1vdmVCbG9jayhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlQnlJZChyb290LCBpZCkgOiBmYWxzZTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBT4buRIGPhu5l0IHRo4bqtdCBj4bunYSBsxrDhu5tpIGPhuqVwIHRyYW5nLlxuICAgKlxuICAgKiDwn5S0IE3hurdjIMSR4buLbmggcGjhuqNpIFRSw5lORyBgbWluQ29scy9tYXhDb2xzYCBj4bunYSBgZ3JpZExheW91dFJvb3RDb25maWcoKWAuIFRyxrDhu5tjIMSRw6J5IGNo4buXIG7DoHkgdHLhuqMgMjRcbiAgICogdHJvbmcga2hpIGzGsOG7m2kgduG6vSAxMjogbsahaSBkw7luZyBraMO0bmcgdHJ1eeG7gW4gYGNvbHNgIHRow6wgdmEgY2jhuqFtLCBgdG9Db250YWluZXJgIHbDoCBgY29tcGFjdGAgdMOtbmhcbiAgICogdGhlbyAyNCBj4buZdCBjw7JuIG3DoG4gaMOsbmggY2jhu4kgY8OzIDEyIOKAlCBraOG7kWkgcsahaSByYSBuZ2/DoGkgbcOpcCBwaOG6o2kgbcOgIGtow7RuZyBhaSBoaeG7g3UgdsOsIHNhby5cbiAgICovXG4gIGdldCB0b3RhbENvbHVtbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmNvbHMgPz8gZ3JpZExheW91dFJvb3RDb25maWcoKS5tYXhDb2xzID8/IDEyO1xuICB9XG5cbiAgLyoqXG4gICAqIENoaeG7gXUgY2FvIG3hu5l0IGjDoG5nIGzGsOG7m2kgKHBpeGVsKSBkw7luZyDEkeG7gyB0w61uaCBraHVuZyB4ZW0gdHLGsOG7m2MgbMO6YyBrw6lvIHRo4bqjLlxuICAgKlxuICAgKiDwn5S0IFBo4bqjaSDEkeG7jWMgdOG7qyBgY29uZmlnLnJvd0hlaWdodGAgY+G7p2EgbsahaSBkw7luZy4gVHLGsOG7m2MgxJHDonkgYGNhbGN1bGF0ZURyb3BHaG9zdGAgxJHDs25nIGPhu6luZyA2OCwgbsOqblxuICAgKiBt4bq3dCBwaOG6s25nIGtoYWkgaMOgbmcgdGjhuqVwIHRow6wga2h1bmcgeGVtIHRyxrDhu5tjIGNhbyBn4bqlcCBuaGnhu4F1IGzhuqduIGto4buRaSB0aOG6rXQg4oCUIG7GoWkgZMO5bmcgcGjhuqNpIOG6qW4ga2h1bmdcbiAgICogY+G7p2EgdGjGsCB2aeG7h24gxJFpIHLhu5NpIHThu7EgduG6vSBs4bqhaS5cbiAgICovXG4gIGdldCByb3dTdGVwUHgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnJvd0hlaWdodCA/PyBncmlkTGF5b3V0Um9vdENvbmZpZygpLmZpeGVkUm93SGVpZ2h0ID8/IDY4O1xuICB9XG5cbiAgLyoqXG4gICAqIEtoZSBOSMOMTiBUSOG6pFkgZ2nhu69hIGhhaSBraOG7kWkgY+G6pXAgZ+G7kWMgKHB4KS4gYDBgID0ga2jDtG5nIMOhcCwgZ2nhu68gxJHDum5nIGjDoG5oIHZpIGPFqS5cbiAgICovXG4gIGdldCB2aXN1YWxHYXBQeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8udmlzdWFsR2FwID8/IDA7XG4gIH1cblxuICAvKipcbiAgICogxJDhu5VpIHPhu5EgY+G7mXQgLyBz4buRIGjDoG5nIGPhu6dhIG3hu5l0IGto4buRaSBy4buTaSB24bq9IGzhuqFpLlxuICAgKlxuICAgKiBLw6lvIGBjb2xzYCBy4buZbmcgcXXDoSBtw6lwIHBo4bqjaSB0aMOsIGThu4tjaCBraOG7kWkgc2FuZyB0csOhaSBjaG8gduG7q2EsIHRoYXkgdsOsIMSR4buDIG7DsyB0csOgbiByYSBuZ2/DoGkgbMaw4bubaS5cbiAgICovXG4gIHJlc2l6ZUJsb2NrKGlkOiBzdHJpbmcsIHNpemU6IHsgY29scz86IG51bWJlcjsgcm93cz86IG51bWJlciB9KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZEJsb2NrKGlkKTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaXplLmNvbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9kZS5jb2xzID0gc2l6ZS5jb2xzO1xuICAgICAgaWYgKG5vZGUueCArIHNpemUuY29scyA+IHRoaXMudG90YWxDb2x1bW5zKSB7XG4gICAgICAgIG5vZGUueCA9IE1hdGgubWF4KDAsIHRoaXMudG90YWxDb2x1bW5zIC0gc2l6ZS5jb2xzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5yb3dzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vZGUucm93cyA9IHNpemUucm93cztcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOaMOibiBi4bqjbiBt4buZdCBraOG7kWkg4oCUIMSR4bq3dCBr4bq/IGLDqm4gcGjhuqNpIG7hur91IGPDsm4gY2jhu5csIGtow7RuZyB0aMOsIHh14buRbmcgZMOybmcgZMaw4bubaS5cbiAgICpcbiAgICogYHRyYW5zZm9ybURhdGFgIMSR4buDIG7GoWkgZMO5bmcgxJHhu5VpIHBo4bqnbiBk4buvIGxp4buHdSByacOqbmcgY+G7p2EgbcOsbmggKHZkIG7hu5FpIHRow6ptIFwiKELhuqNuIHNhbylcIiB2w6BvIHRpw6p1XG4gICAqIMSR4buBKTsgdGjGsCB2aeG7h24ga2jDtG5nIHThu7EgxJFvw6FuIHRyxrDhu51uZyBuw6BvIGzDoCB0acOqdSDEkeG7gS5cbiAgICovXG4gIGR1cGxpY2F0ZUJsb2NrKGlkOiBzdHJpbmcsIHRyYW5zZm9ybURhdGE/OiAoZGF0YTogdW5rbm93bikgPT4gdW5rbm93bik6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IG5vZGUgPSByb290ID8gZmluZE5vZGVSZWN1cnNpdmUocm9vdCwgaWQpIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFyb290IHx8ICFub2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBmaW5kUGFyZW50UmVjdXJzaXZlKHJvb3QsIGlkKTtcbiAgICBjb25zdCBpc05lc3RlZCA9IEJvb2xlYW4ocGFyZW50ICYmIHBhcmVudC5pZCAhPT0gcm9vdC5pZCk7XG4gICAgY29uc3QgY2xvbmVkRGF0YSA9IGNsb25lRGVlcChub2RlLmRhdGEpO1xuXG4gICAgbGV0IHRhcmdldFggPSBub2RlLnggKyBub2RlLmNvbHM7XG4gICAgbGV0IHRhcmdldFkgPSBub2RlLnk7XG5cbiAgICBpZiAodGFyZ2V0WCArIG5vZGUuY29scyA+IHRoaXMudG90YWxDb2x1bW5zKSB7XG4gICAgICB0YXJnZXRYID0gMDtcbiAgICAgIHRhcmdldFkgPSBub2RlLnkgKyBub2RlLnJvd3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkQmxvY2soXG4gICAgICB7XG4gICAgICAgIHg6IHRhcmdldFgsXG4gICAgICAgIHk6IHRhcmdldFksXG4gICAgICAgIGNvbHM6IG5vZGUuY29scyxcbiAgICAgICAgcm93czogbm9kZS5yb3dzLFxuICAgICAgICBkYXRhOiB0cmFuc2Zvcm1EYXRhID8gdHJhbnNmb3JtRGF0YShjbG9uZWREYXRhKSA6IGNsb25lZERhdGEsXG4gICAgICAgIGdldENvbXBvbmVudE91dGxldDogbm9kZS5nZXRDb21wb25lbnRPdXRsZXQsXG4gICAgICB9LFxuICAgICAgaXNOZXN0ZWQgPyBwYXJlbnQ/LmlkIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBCaeG6v24ga2jhu5FpIMSRxqFuIHRow6BuaCBDT05UQUlORVIg4oCUIG7hu5lpIGR1bmcgY8WpIHRow6BuaCBraOG7kWkgY29uIMSR4bqndSB0acOqbiwga2jDtG5nIG3huqV0IGThu68gbGnhu4d1LiAqL1xuICB0b0NvbnRhaW5lcihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9Db250YWluZXIocm9vdCwgaWQsIHRoaXMudG90YWxDb2x1bW5zKSA6IGZhbHNlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgLyoqIMSQxrBhIENPTlRBSU5FUiB24buBIGto4buRaSDEkcahbiDigJQga2jhu5FpIGNvbiDEkcaw4bujYyBuw6JuZyBsw6puIGPhuqVwIHRyw6puLCBraMO0bmcgYuG7iyB4b8OhLiAqL1xuICB0b1NpbmdsZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9TaW5nbGUocm9vdCwgaWQpIDogZmFsc2U7XG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICAvKiogROG7k24ga2jhu5FpIGtow610IGzDqm4gdHLDqm4sIGzhuqVwIGjhur90IGNo4buXIHRy4buRbmcuIMSQ4buHIHF1eSB2w6BvIGNvbnRhaW5lci4gKi9cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlU2VydmljZS5jb21wYWN0KHJvb3QsIHRoaXMudG90YWxDb2x1bW5zKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBC4buRIGPhu6VjIEhJ4buGTiBU4bqgSSwgxJHDoyBj4bqvdCBt4buNaSB0aGFtIGNoaeG6v3Ug4oCUIGfhu61pIHRo4bqzbmcgeHXhu5FuZyBiYWNrZW5kIMSRxrDhu6NjLlxuICAgKlxuICAgKiBEw7luZyBraGkgYuG6pW0gbsO6dCBMxrB1LiBLaMOhYyBgUm9vdCgpYCDhu58gY2jhu5cgxJHDonkgbMOgIGLhuqNuIFNBTzogbsahaSBkw7luZyBjw7Mgc+G7rWEgZ8OsIHRyw6puIGvhur90IHF14bqjIGPFqW5nXG4gICAqIGtow7RuZyDEkeG7pW5nIHThu5tpIGPDonkgbcOgIHRoxrAgdmnhu4duIMSRYW5nIHbhur0uXG4gICAqXG4gICAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGtoaSBt4bq3dCBwaOG6s25nIGNoxrBhIGBpbml0KClgLlxuICAgKi9cbiAgZXhwb3J0TGF5b3V0KCk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLmRlZXBDbG9uZVRyZWUocm9vdCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBt4buZdCBraOG7kWkgdGhlbyBpZC4gKi9cbiAgZmluZEJsb2NrKGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIHJldHVybiByb290ID8gdGhpcy50cmVlU2VydmljZS5maW5kQnlJZChyb290LCBpZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBraOG7kWkgY2hhIHRy4buxYyB0aeG6v3AgY+G7p2EgbeG7mXQga2jhu5FpLiAqL1xuICBmaW5kUGFyZW50QmxvY2soaWQ6IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLmZpbmRQYXJlbnQocm9vdCwgaWQpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIMSQ4bq3dCB04bu3IGzhu4cgdGh1IHBow7NuZyBj4bunYSBjYW52YXMgKGvhurlwIGdp4buvYSBtaW4gdsOgIG1heCkuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBU4bu3IGzhu4cgKDAuNCA9IDQwJSwgMS4wID0gMTAwJSwgMS41ID0gMTUwJSlcbiAgICogQHBhcmFtIHBlcnNpc3RLZXkgS2jDs2EgbG9jYWxTdG9yYWdlIMSR4buDIGzGsHUgbOG6oWkgKGLhu48gdHLhu5FuZyB0aMOsIGzhuqV5IHThu6sgY29uZmlnKVxuICAgKi9cbiAgc2V0Wm9vbSh2YWx1ZTogbnVtYmVyLCBwZXJzaXN0S2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWc/Lnpvb21NaW4gPz8gMC40O1xuICAgIGNvbnN0IG1heCA9IHRoaXMuY29uZmlnPy56b29tTWF4ID8/IDEuNTtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIE1hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwKSk7XG4gICAgdGhpcy56b29tTGV2ZWwuc2V0KGNsYW1wZWQpO1xuXG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IHBlcnNpc3RLZXkgPz8gdGhpcy5jb25maWc/LnN0b3JhZ2VLZXk7XG4gICAgaWYgKHN0b3JhZ2VLZXkgJiYgdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIFN0cmluZyhjbGFtcGVkKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGxvY2FsU3RvcmFnZSBhY2Nlc3MgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICAvKiogUGjDs25nIHRvIHRow6ptIG3hu5l0IGLGsOG7m2MgKG3hurdjIMSR4buLbmggMC4wNSB04bupYyA1JSkgKi9cbiAgem9vbUluKHN0ZXA/OiBudW1iZXIsIHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzID0gc3RlcCA/PyB0aGlzLmNvbmZpZz8uem9vbVN0ZXAgPz8gMC4wNTtcbiAgICB0aGlzLnNldFpvb20odGhpcy56b29tTGV2ZWwoKSArIHMsIHBlcnNpc3RLZXkpO1xuICB9XG5cbiAgLyoqIFRodSBuaOG7jyBi4bubdCBt4buZdCBixrDhu5tjICht4bq3YyDEkeG7i25oIDAuMDUgdOG7qWMgNSUpICovXG4gIHpvb21PdXQoc3RlcD86IG51bWJlciwgcGVyc2lzdEtleT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzdGVwID8/IHRoaXMuY29uZmlnPy56b29tU3RlcCA/PyAwLjA1O1xuICAgIHRoaXMuc2V0Wm9vbSh0aGlzLnpvb21MZXZlbCgpIC0gcywgcGVyc2lzdEtleSk7XG4gIH1cblxuICAvKiogxJDhurd0IGzhuqFpIHThu7cgbOG7hyB0aHUgcGjDs25nIGfhu5FjIDEwMCUgKDEuMCkgKi9cbiAgcmVzZXRab29tKHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFpvb20oMS4wLCBwZXJzaXN0S2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4buxIMSR4buZbmcgdMOtbmggdG/DoW4gdsOgIMSR4bq3dCB04bu3IGzhu4cgdGh1IHBow7NuZyDEkeG7gyBjYW52YXMgduG7q2EgduG6t24gduG7m2kgY2hp4buBdSBy4buZbmcgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyV2lkdGggQ2hp4buBdSBy4buZbmcgY29udGFpbmVyIMSRbyDEkcaw4bujYyAocHgpXG4gICAqIEBwYXJhbSBzdGFnZVdpZHRoIENoaeG7gXUgcuG7mW5nIGNodeG6qW4gY+G7p2EgY2FudmFzICht4bq3YyDEkeG7i25oIDE2NjhweClcbiAgICogQHBhcmFtIHBhZGRpbmcgS2hv4bqjbmcgY8OhY2ggbOG7gSBoYWkgYsOqbiAobeG6t2MgxJHhu4tuaCA0OHB4KVxuICAgKiBAcGFyYW0gcGVyc2lzdEtleSBLaMOzYSBsb2NhbFN0b3JhZ2VcbiAgICogQHJldHVybnMgVOG7tyBs4buHIHRodSBwaMOzbmcgduG7q2EgdMOtbmhcbiAgICovXG4gIGZpdFRvU2NyZWVuKGNvbnRhaW5lcldpZHRoOiBudW1iZXIsIHN0YWdlV2lkdGg/OiBudW1iZXIsIHBhZGRpbmcgPSA0OCwgcGVyc2lzdEtleT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdGFyZ2V0V2lkdGggPSBzdGFnZVdpZHRoID8/IHRoaXMuY29uZmlnPy5zdGFnZVdpZHRoID8/IDE2Njg7XG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWc/Lnpvb21NaW4gPz8gMC40O1xuICAgIGNvbnN0IG1heCA9IDEuMjU7XG4gICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgTWF0aC5yb3VuZCgoKGNvbnRhaW5lcldpZHRoIC0gcGFkZGluZykgLyB0YXJnZXRXaWR0aCkgKiAxMDApIC8gMTAwKSk7XG4gICAgdGhpcy5zZXRab29tKHJhdGlvLCBwZXJzaXN0S2V5KTtcbiAgICByZXR1cm4gcmF0aW87XG4gIH1cblxuICAvKiogS2nhu4NtIHRyYSB0w61uaCBuxINuZyB0aHUgcGjDs25nIGPDsyDEkcaw4bujYyBj4bqldSBow6xuaCBi4bqtdCBraMO0bmcgKi9cbiAgaXNab29tQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmNvbmZpZz8uZW5hYmxlWm9vbSk7XG4gIH1cblxuICAvKipcbiAgICogQ+G7lW5nIERVWSBOSOG6pFQgY2hvIGNhbnZhcyBj4bunYSB0aMawIHZp4buHbi4gTsahaSBkw7luZyBLSMOUTkcgZ+G7jWkgdOG7m2kgxJHDonkuXG4gICAqXG4gICAqIE3hu41pIHRo4bupIGNhbnZhcyBj4bqnbiDEkeG7gXUgbMOgIGBwcml2YXRlYCDEkeG7gyBraMO0bmcgbOG7jXQgcmEgQVBJIGPDtG5nIGtoYWk7IGdvbSB2w6BvIG3hu5l0IGdldHRlciB0aGVvIMSRw7puZ1xuICAgKiBraHXDtG4gYEZ1bmN0aW9uc0NvbnRyb2xgIGPhu6dhIGLhu5kgcXV5IMaw4bubYywgdGhheSB2w6wgxJHhu4MgcuG6o2kgcsOhYyBow6BtIHB1YmxpYyBtw6AgbmfGsOG7nWkgbmdvw6BpIHTGsOG7n25nXG4gICAqIG3DrG5oIHBo4bqjaSBn4buNaSAobmfGsOG7nWkgZMO5bmcgY2jhu5F0IDI4LzA4LzIwMjYpLlxuICAgKi9cbiAgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1heENvbnRhaW5lckRlcHRoOiAoKSA9PiB0aGlzLm1heENvbnRhaW5lckRlcHRoKCksXG4gICAgICBjb250YWluZXJQYWRkaW5nOiAoKSA9PiB0aGlzLmNvbnRhaW5lclBhZGRpbmcoKSxcbiAgICAgIGlzWm9vbUVuYWJsZWQ6ICgpID0+IHRoaXMuaXNab29tQ29uZmlndXJlZCgpLFxuICAgICAgem9vbTogKCkgPT4gdGhpcy56b29tTGV2ZWwoKSxcbiAgICAgIHNldFpvb206ICh2OiBudW1iZXIsIGtleT86IHN0cmluZykgPT4gdGhpcy5zZXRab29tKHYsIGtleSksXG4gICAgICB6b29tSW46IChzdGVwPzogbnVtYmVyLCBrZXk/OiBzdHJpbmcpID0+IHRoaXMuem9vbUluKHN0ZXAsIGtleSksXG4gICAgICB6b29tT3V0OiAoc3RlcD86IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLnpvb21PdXQoc3RlcCwga2V5KSxcbiAgICAgIHJlc2V0Wm9vbTogKGtleT86IHN0cmluZykgPT4gdGhpcy5yZXNldFpvb20oa2V5KSxcbiAgICAgIGZpdFRvU2NyZWVuOiAoY1c6IG51bWJlciwgc1c/OiBudW1iZXIsIHBhZD86IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLmZpdFRvU2NyZWVuKGNXLCBzVywgcGFkLCBrZXkpLFxuICAgICAgZ3JpZHN0ZXJPcHRpb25zOiAoZGVwdGg6IG51bWJlciwgY2I/OiAoKSA9PiB2b2lkKSA9PiB0aGlzLmJ1aWxkR3JpZHN0ZXJPcHRpb25zKGRlcHRoLCBjYiksXG4gICAgICBhdHRhY2hOb2RlOiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGRlcHRoOiBudW1iZXIsIGhvc3Q6IFZpZXdDb250YWluZXJSZWYpID0+IHRoaXMuYXR0YWNoTm9kZShub2RlLCBkZXB0aCwgaG9zdCksXG4gICAgICBkZXRhY2hOb2RlOiAobm9kZUlkOiBzdHJpbmcpID0+IHRoaXMuZGV0YWNoTm9kZShub2RlSWQpLFxuICAgICAgZ2V0Tm9kZUVsZW1lbnQ6IChub2RlSWQ6IHN0cmluZywgc2NvcGU/OiBQYXJlbnROb2RlKSA9PiB0aGlzLmdldE5vZGVFbGVtZW50KG5vZGVJZCwgc2NvcGUpLFxuICAgICAgZ2V0Tm9kZUNhbnZhc0VsZW1lbnQ6IChub2RlSWQ6IHN0cmluZywgc2NvcGU/OiBQYXJlbnROb2RlKSA9PiB0aGlzLmdldE5vZGVDYW52YXNFbGVtZW50KG5vZGVJZCwgc2NvcGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHLhuqMgduG7gSB24buPIERPTSBj4bunYSBt4buZdCBraOG7kWkgdGhlbyBgaWRgLlxuICAgKlxuICAgKiDwn5S0IE7GoWkgZMO5bmcgY+G6p24gY2jhuqFtIHbDoG8gRE9NIGPhu6dhIGto4buRaSAoxJFvIGvDrWNoIHRoxrDhu5tjLCBn4bqvbiBs4bubcCBwaOG7pyByacOqbmcpIELhuq5UIEJV4buYQyDEkWkgcXVhIMSRw6J5LlxuICAgKiBUcsaw4bubYyBraGkgY8OzIGjDoG0gbsOgeSwgbsahaSBkw7luZyBwaOG6o2kgdOG7sSB2aeG6v3QgYHF1ZXJ5U2VsZWN0b3IoJy5saWJzLXVpLWdyaWQtbGF5b3V0LWJsb2NrLXNoZWxsWy4uLl0nKWBcbiAgICog4oCUIHThu6ljIGLDoW0gdsOgbyB0w6puIGNsYXNzIE7hu5hJIELhu5ggY+G7p2EgdGjGsCB2aeG7h246IMSR4buVaSB0w6puIGNsYXNzIGzDoCBtw6BuIGLDqm4ga2lhIHbhu6EgSU0gTOG6tk5HLCBiacOqbiBk4buLY2hcbiAgICogduG6q24geGFuaCB2w6wgY2h14buXaSBzZWxlY3RvciBraMO0bmcgYWkga2nhu4NtLlxuICAgKlxuICAgKiBgc2NvcGVgIGdp4bubaSBo4bqhbiBwaOG6oW0gdmkgdMOsbSAobeG6t2MgxJHhu4tuaCBj4bqjIHTDoGkgbGnhu4d1KSDigJQgY+G6p24ga2hpIG5oaeG7gXUgbeG6t3QgcGjhurNuZyBjw7luZyBu4bqxbSB0csOqbiBtw6BuLlxuICAgKi9cbiAgZ2V0Tm9kZUVsZW1lbnQobm9kZUlkOiBzdHJpbmcsIHNjb3BlPzogUGFyZW50Tm9kZSk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0gc2NvcGUgPz8gZG9jdW1lbnQ7XG5cbiAgICByZXR1cm4gKHJvb3QucXVlcnlTZWxlY3RvcihgLmxpYnMtdWktZ3JpZC1sYXlvdXQtYmxvY2stc2hlbGxbZGF0YS1ub2RlLWlkPVwiJHtub2RlSWR9XCJdYCkgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVHLhuqMgduG7gSBt4bq3dCBwaOG6s25nIEzhu5JORyBu4bqxbSB0cm9uZyBt4buZdCBraOG7kWkgY29udGFpbmVyIChraOG7kWkgY8OzIGNvbiksIG7hur91IGPDsy5cbiAgICpcbiAgICogVMOhY2ggcmnDqm5nIGto4buPaSBgZ2V0Tm9kZUVsZW1lbnRgIHbDrCBuxqFpIGTDuW5nIHRoxrDhu51uZyBj4bqnbiBjaMOobiBwaOG6p24gdOG7rSBj4bunYSBtw6xuaCB2w6BvIFRSxq/hu5pDIG3hurd0IHBo4bqzbmdcbiAgICogbOG7k25nIG7DoHkgKHbDrSBk4bulIGjDoG5nIHRpw6p1IMSR4buBIGPhu6dhIGto4buRaSBnaMOpcCksIG7Dqm4gcGjhuqNpIGPhuqdtIMSRw7puZyBuw7MgY2jhu6kga2jDtG5nIHBo4bqjaSBj4bqjIHbhu48uXG4gICAqL1xuICBnZXROb2RlQ2FudmFzRWxlbWVudChub2RlSWQ6IHN0cmluZywgc2NvcGU/OiBQYXJlbnROb2RlKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNoZWxsID0gdGhpcy5nZXROb2RlRWxlbWVudChub2RlSWQsIHNjb3BlKTtcblxuICAgIGlmICghc2hlbGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChzaGVsbC5xdWVyeVNlbGVjdG9yKCc6c2NvcGUgPiBsaWJzX3VpLXNlcnZpY2VzLWdyaWRfbGF5b3V0LWNhbnZhcycpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUlucHV0cyhyZWY6IENvbXBvbmVudFJlZjx1bmtub3duPiwgbm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGRlcHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICByZWYuc2V0SW5wdXQoJ2RhdGEnLCBub2RlLmRhdGEpO1xuICAgIHJlZi5zZXRJbnB1dCgnbm9kZScsIG5vZGUpO1xuICAgIHJlZi5zZXRJbnB1dCgnaXNFZGl0TW9kZScsIHRoaXMuZWRpdE1vZGUoKSk7XG4gICAgcmVmLnNldElucHV0KCdkZXB0aCcsIGRlcHRoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqIENo4bq/IMSR4buZIHPhuq9wIHjhur9wIGto4buRaSB0csOqbiBt4bq3dCBwaOG6s25nICovXG5leHBvcnQgY29uc3QgZW51bSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcge1xuICAvKiogQsOhbSBsxrDhu5tpOiBraOG7kWkgdGjhurNuZyBow6BuZywgdOG7sSDEkeG6qXkgbmhhdSwgc+G6r3AgZ+G7jW4gxJHGsOG7o2MgKi9cbiAgZ3JpZCA9ICdncmlkJyxcbiAgLyoqIFThu7EgZG86IGto4buRaSDEkeG6t3Qg4bufIHRv4bqhIMSR4buZIGLhuqV0IGvhu7MsIGNo4buTbmcgbMOqbiBuaGF1IHRob+G6o2kgbcOhaSAqL1xuICBmcmVlID0gJ2ZyZWUnLFxufVxuXG4vKiogTeG7mXQga2jhu5FpIHRyw6puIG3hurd0IHBo4bqzbmcuIGBjaGlsZHJlbmAga2jDoWMgcuG7l25nIHRow6wga2jhu5FpIGzDoCBDT05UQUlORVIsIHJ14buZdCBuw7MgbMOgIG3hu5l0IGzGsOG7m2kgY29uLiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBj4buZdCBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBYIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB4OiBudW1iZXI7XG4gIC8qKiBow6BuZyBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBZIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB5OiBudW1iZXI7XG4gIC8qKiBz4buRIGPhu5l0IGNoaeG6v20gKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCBjaGnhu4F1IHLhu5luZyAoY2jhur8gxJHhu5kgdOG7sSBkbykgKi9cbiAgY29sczogbnVtYmVyO1xuICAvKiogc+G7kSBow6BuZyBjaGnhur9tIChjaOG6vyDEkeG7mSBsxrDhu5tpKSDigJQgcHggY2hp4buBdSBjYW8gKGNo4bq/IMSR4buZIHThu7EgZG8pICovXG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIEzhu5twIGNo4buTbmcuIEhhaSBraOG7kWkgQ0jhu5JORyBuaGF1IMSRxrDhu6NjIGtoaSBraMOhYyBgbGF5ZXJJbmRleGAgdsOgIGBhbGxvd092ZXJsYXBgIGLhuq10LlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4buNaSBraOG7kWkgY8O5bmcgbOG7m3AgMCDigJQgY2jhu5NuZyBuaGF1IGLhu4sgY2jhurduIG5oxrAgbMaw4bubaSB0aMaw4budbmcuXG4gICAqL1xuICBsYXllckluZGV4PzogbnVtYmVyO1xuICAvKioga2jhu5FpIGNvbjsga2jDoWMgcuG7l25nIHRow6wgxJHDonkgbMOgIGNvbnRhaW5lciAqL1xuICBjaGlsZHJlbj86IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPjtcbiAgLyoqXG4gICAqIENvbXBvbmVudCB24bq9IFJJw4pORyBjaG8ga2jhu5FpIG7DoHksIHRy4bqjIHbhu4EgZOG6oW5nIE9ic2VydmFibGUgxJHhu4MgTEFaWSBMT0FEIHRo4bqtdCBz4buxLlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4bq3dCBwaOG6s25nIGjhu49pIGBnZXRDb21wb25lbnRPdXRsZXRgIGNodW5nIGPhu6dhIGPhuqV1IGjDrG5oLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBnZXRDb21wb25lbnRPdXRsZXQ6IChub2RlKSA9PiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSlcbiAgICogYGBgXG4gICAqL1xuICBnZXRDb21wb25lbnRPdXRsZXQ/OiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpID0+IE9ic2VydmFibGU8VHlwZTx1bmtub3duPj47XG4gIC8qKiBk4buvIGxp4buHdSByacOqbmcgY+G7p2EgbsahaSBkw7luZyDigJQgdGjGsCB2aeG7h24gS0jDlE5HIMSR4buNYywgY2h1eeG7g24gbmd1ecOqbiB2w6BvIGlucHV0IGBkYXRhYCBj4bunYSBjb21wb25lbnQgKi9cbiAgZGF0YT86IHVua25vd247XG59O1xuXG4vKipcbiAqIMSQaSBrw6htIHPhu7Ega2nhu4duIGPhu6dhIG3hu5l0IE7DmlQgYnVpbHQtaW4gdHLDqm4ga2jhu5FpLlxuICpcbiAqIFRoxrAgdmnhu4duIENIxq9BIGzDoG0gZ8OsIGtoaSBi4bqvbiDigJQgbsOzIGNo4buJIGLDoW8gXCJuZ8aw4budaSBkw7luZyB24burYSBi4bqlbSBuw7p0IG7DoHlcIi4gTsahaSBkw7luZyBxdXnhur90IMSR4buLbmg6XG4gKiAtIGPhuqduIGjhu49pIHRyxrDhu5tjIChtb2RhbCB4w6FjIG5o4bqtbiwgZ+G7jWkgQVBJIGtp4buDbSB0cmEpIOKGkiBo4buPaSB4b25nIHLhu5NpIGfhu41pIGBjb25maXJtKClgO1xuICogLSBraMO0bmcgY+G6p24gaOG7j2kg4oaSIGfhu41pIGBjb25maXJtKClgIG5nYXk7XG4gKiAtIGtow7RuZyBjaG8gcGjDqXAg4oaSIGtow7RuZyBn4buNaSBnw6wgY+G6oy5cbiAqXG4gKiBgYGB0c1xuICogcHJvdGVjdGVkIGhhbmRsZXJSZW1vdmUoZXZlbnQ6IFRfZ3JpZExheW91dF9hY3Rpb25FdmVudCk6IHZvaWQge1xuICogICB0aGlzLmRpYWxvZy5jb25maXJtKCdYb8OhIGto4buRaSBuw6B5PycpLnN1YnNjcmliZSgoZG9uZ1kpID0+IGRvbmdZICYmIGV2ZW50LmNvbmZpcm0oKSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FjdGlvbkV2ZW50ID0ge1xuICAvKioga2jhu5FpIG5nxrDhu51pIGTDuW5nIHbhu6thIGLhuqVtIG7DunQgKi9cbiAgbm9kZUlkOiBzdHJpbmc7XG4gIC8qKiBraOG7kWkgxJHDsywga2hpIGLhuqFuIGPhuqduIMSR4buNYyBgZGF0YWAgxJHhu4MgcXV54bq/dCDEkeG7i25oICh2ZCBraOG7kWkgxJFhbmcgY8OzIGThu68gbGnhu4d1IHRow6wgbeG7m2kgaOG7j2kpICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKipcbiAgICogR+G7jWkgxJHhu4MgdGjGsCB2aeG7h24gdGjhu7FjIGhp4buHbiB0aGFvIHTDoWMuIEtow7RuZyBn4buNaSA9IGtow7RuZyBsw6BtIGfDrC5cbiAgICpcbiAgICogQHJldHVybnMgYGZhbHNlYCBraGkgdGhhbyB0w6FjIGtow7RuZyB0aOG7sWMgaGnhu4duIMSRxrDhu6NjIChraOG7kWkgxJHDoyBi4buLIHhvw6EsIGNo4bqhbSB0cuG6p24gbOG7k25nIGPhuqVw4oCmKS5cbiAgICovXG4gIGNvbmZpcm06ICgpID0+IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEto4buRaSBN4buaSSB0cnV54buBbiB2w6BvIGBhZGRDaGlsZGAuIEtow6FjIGBUX2dyaWRMYXlvdXRfbm9kZWAg4bufIGJhIGNo4buXIGRvIHRoxrAgdmnhu4duIHThu7EgbG86XG4gKiAtIGBpZGAgdOG7sSBzaW5oIChtw6MgbcOheSBkw7luZyDEkeG7gyB0cmEgY+G7qXUsIGtow7RuZyBwaOG6o2kgdGjhu6kgbmfGsOG7nWkgZMO5bmcgbmdoxKkgcmEpLFxuICogLSBgeGAgwrcgYHlgIHThu7EgxJHhurd0IHh14buRbmcgaMOgbmcgdHLhu5FuZyBr4bq/IHRp4bq/cC5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25ld05vZGUgPSBPbWl0PFRfZ3JpZExheW91dF9ub2RlLCAnaWQnIHwgJ3gnIHwgJ3knPiAmIHtcbiAgLyoqIMSR4buDIHRy4buRbmcgdGjDrCB0aMawIHZp4buHbiBzaW5oOyBjaOG7iSB0cnV54buBbiBraGkgYuG6oW4gQ+G6pk4gbeG7mXQgaWQgY+G7kSDEkeG7i25oICh2ZCBraMO0aSBwaOG7pWMgdOG7qyBi4bqjbiBsxrB1KSAqL1xuICBpZD86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn07XG5cbi8qKlxuICogxJBpIGvDqG0gc+G7sSBraeG7h24gYuG6pW0gbsO6dCBUSMOKTSB0csOqbiBt4buZdCBjb250YWluZXIuXG4gKlxuICogS2jDoWMgYFRfZ3JpZExheW91dF9hY3Rpb25FdmVudGAg4bufIGNo4buXIGBjb25maXJtYCBuaOG6rW4ga2jhu5FpIG114buRbiB0aMOqbTogdGjGsCB2aeG7h24ga2jDtG5nIGJp4bq/dCBz4bqjbiBwaOG6qW1cbiAqIGPhu6dhIGLhuqFuIGPDsyBuaOG7r25nIGxv4bqhaSBraOG7kWkgbsOgbywgbsOqbiBi4bqhbiBt4bufIG1lbnUgY2jhu41uIGxv4bqhaSBy4buTaSB0cnV54buBbiBraOG7kWkgxJHDoyBk4buxbmcgdsOgbyDEkcOieS5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FkZEV2ZW50ID0ge1xuICAvKiogY29udGFpbmVyIG5nxrDhu51pIGTDuW5nIG114buRbiB0aMOqbSBraOG7kWkgdsOgbyAqL1xuICBub2RlSWQ6IHN0cmluZztcbiAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB0aMawIHZp4buHbiBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIG7hur91IGtow7RuZyB0aMOqbSDEkcaw4bujYyAqL1xuICBjb25maXJtOiAoaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUpID0+IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiDEkOG6p3UgdsOgbyBtw6AgdGjGsCB2aeG7h24gdHJ1eeG7gW4gY2hvIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nLlxuICogQ29tcG9uZW50IELhuq5UIEJV4buYQyBraGFpIMSR4bunIGJhIGlucHV0IG7DoHkgKGTDuW5nIGBpbnB1dCgpYCksIHRoaeG6v3UgY8OhaSBuw6BvIHRow6wgYHNldElucHV0YCBuw6ltIGzhu5dpLlxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfbm9kZUlucHV0czxURGF0YSA9IHVua25vd24+ID0ge1xuICAvKiogxJHDum5nIGBub2RlLmRhdGFgIGPhu6dhIGto4buRaSDigJQgdGjhu6kgbsahaSBkw7luZyBj4bqnbiBuaOG6pXQsIG7Dqm4gxJHhu4MgxJHhuqd1ICovXG4gIGRhdGE6IFREYXRhO1xuICAvKiogY+G6oyBraOG7kWksIGtoaSBj4bqnbiBiaeG6v3QgaWQgwrcga8OtY2ggdGjGsOG7m2MgwrcgY8OzIHBo4bqjaSBjb250YWluZXIga2jDtG5nICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKiogxJFhbmcg4bufIGNo4bq/IMSR4buZIHPhu61hIGhheSBjaOG7iSB4ZW0gKi9cbiAgaXNFZGl0TW9kZTogYm9vbGVhbjtcbiAgLyoqIMSR4buZIHPDonU6IDAgPSBn4buRYywgMSA9IGto4buRaSBj4bqlcCB0cmFuZywgMiA9IGto4buRaSB0cm9uZyBjb250YWluZXIgKi9cbiAgZGVwdGg6IG51bWJlcjtcbn07XG5cbi8qKiBD4bqldSBow6xuaCBraOG7n2kgdOG6oW8gbeG7mXQgbeG6t3QgcGjhurNuZyBrw6lvIHRo4bqjICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfY29uZmlnID0ge1xuICAvKipcbiAgICogSMOgbSBQSMOCTiBHSeG6okkgY29tcG9uZW50IGNobyBt4buZdCBraOG7kWkg4oCUIGNo4buXIGLhuqFuIG1hcCB04burIGThu68gbGnhu4d1IHNlcnZlciBzYW5nIGdpYW8gZGnhu4duLlxuICAgKlxuICAgKiBN4bq3dCBwaOG6s25nIGfhu41pIGjDoG0gbsOgeSBjaG8gTeG7lkkga2jhu5FpIGtow7RuZyB04buxIGtoYWkgYGdldENvbXBvbmVudE91dGxldGAuIFRy4bqjIGBPYnNlcnZhYmxlYCBuw6puXG4gICAqIGBpbXBvcnQoKWAgxJHhu5luZyBjaOG6oXkgxJHGsOG7o2M6IGLDsyBtw6MgY+G7p2EgdOG7q25nIGxv4bqhaSBraOG7kWkgY2jhu4kgdOG6o2kga2hpIG3DoG4gdGjhuq10IHPhu7EgY8OzIGto4buRaSBsb+G6oWkgxJHDsy5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZ2V0Q29tcG9uZW50T3V0bGV0OiAobm9kZSkgPT4ge1xuICAgKiAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZS5kYXRhIGFzIHsgdHlwZTogc3RyaW5nIH07XG4gICAqXG4gICAqICAgaWYgKHR5cGUgPT09ICdjaGFydCcpIHtcbiAgICogICAgIHJldHVybiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSk7XG4gICAqICAgfVxuICAgKlxuICAgKiAgIHJldHVybiBmcm9tKGltcG9ydCgnLi90ZXh0LWNhcmQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5UZXh0Q2FyZENvbXBvbmVudCkpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKSA9PiBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4+O1xuICAvKiogY8OieSBraOG7kWkgYmFuIMSR4bqndSAqL1xuICBkYXRhOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgbW9kZT86IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZztcbiAgaXNFZGl0TW9kZT86IGJvb2xlYW47XG4gIC8qKiBz4buRIGPhu5l0IGPhu6dhIGzGsOG7m2kgKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDEyICovXG4gIGNvbHM/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZywgcHggKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDU2ICovXG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFPhu5EgaMOgbmcgVOG7kEkgVEhJ4buCVSBj4bunYSBsxrDhu5tpIEPhuqRQIFRSQU5HLiBN4bq3YyDEkeG7i25oIDIuXG4gICAqXG4gICAqIMSQ4bq3dCBs4bubbiBoxqFuIGtoaSBtdeG7kW4gw7QgbGkgcGjhu6cga8OtbiBtw6BuIGjDrG5oIG5nYXkgY+G6oyBsw7pjIGLhu5EgY+G7pWMgY8OybiDDrXQga2jhu5FpIOKAlCBsxrDhu5tpIGNo4buJIGNhbyBi4bqxbmdcbiAgICoga2jhu5FpIGN14buRaSBjw7luZyB0aMOsIHBo4bqnbiBkxrDhu5tpIHRy4buRbmcgdHLGoW4sIG5nxrDhu51pIGTDuW5nIGtow7RuZyBiaeG6v3QgY8OybiB0aOG6oyDEkcaw4bujYyB2w6BvIMSRw6J1LlxuICAgKi9cbiAgbWluUm93cz86IG51bWJlcjtcbiAgLyoqIFPhu5EgaMOgbmcgVOG7kEkgVEhJ4buCVSBj4bunYSBsxrDhu5tpIGLDqm4gVFJPTkcgY29udGFpbmVyLiBN4bq3YyDEkeG7i25oIDEgKi9cbiAgbmVzdGVkTWluUm93cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIENobyBsxrDhu5tpIEzhu5JORyB04buxIMSRbyBs4bqhaSBraGkga2h1bmcgY2jhu6lhIG7DsyDEkeG7lWkgYuG7gSBy4buZbmcuIE3hurdjIMSR4buLbmggQuG6rFQuXG4gICAqXG4gICAqIFThuq90IMSRaSB0aMOsIGzDumMga8OpbyBtw6lwIGto4buRaSBjaGEsIHRo4bq7IGNvbiDEkeG7qW5nIGltIHThu5tpIGtoaSB0aOG6oyB0YXkg4oCUIGNo4buJIHThuq90IG7hur91IG7GoWkgZMO5bmcgdOG7sSBsb1xuICAgKiB2aeG7h2MgxJFvIGzhuqFpLlxuICAgKi9cbiAgYXV0b1Jlc2l6ZU5lc3RlZEdyaWRzPzogYm9vbGVhbjtcbiAgLyoqIGtoZSBnaeG7r2EgaGFpIGto4buRaSDhu58gbMaw4bubaSBD4bqkUCBUUkFORywgcHguIE3hurdjIMSR4buLbmggMTIgKi9cbiAgbWFyZ2luPzogbnVtYmVyO1xuICAvKioga2hlIGdp4buvYSBoYWkga2jhu5FpIGLDqm4gVFJPTkcgY29udGFpbmVyLCBweC4gTeG6t2MgxJHhu4tuaCAyIOKAlCBraOG7kWkgY29uIGzDoCBkw7JuZyB0aMO0bmcgdGluIGPhu6dhIGPDuW5nXG4gICAqICBt4buZdCBjYXJkLCBraGUgcuG7mW5nIGzDoG0gY2jDum5nIHRyw7RuZyBuaMawIGNhcmQgcuG7nWkgbmhhdSAqL1xuICBuZXN0ZWRNYXJnaW4/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZyBiw6puIFRST05HIGNvbnRhaW5lciwgcHguIE3hurdjIMSR4buLbmggMTYg4oCUIGjDoG5nIG5o4buPIGNobyBixrDhu5tjIGvDqW8gbeG7i24gKi9cbiAgbmVzdGVkUm93SGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogTOG7gSB0cm9uZyBj4bunYSBDT05UQUlORVIsIHB4IOKAlCDDoXAgxJHhu4F1IGLhu5FuIGNoaeG7gXUuIE3hurdjIMSR4buLbmggMTIuXG4gICAqXG4gICAqIENo4buJIGNvbnRhaW5lciBjw7MgbOG7gSBuw6B5OyBraOG7kWkgxJHGoW4ga2jDtG5nIGPDsywgdsOsIG7DsyBraMO0bmcgY2jhu6lhIGfDrCBiw6puIHRyb25nLlxuICAgKlxuICAgKiDwn5S0IEtIw5RORyBuw6puIMSR4buDIDA6IHRheSBj4bqnbSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2Ega2jhu5FpIGNvbiBu4bqxbSBzw6F0IGJpw6puIGNvbnRhaW5lciwga2jDtG5nIGNo4burYSBs4buBXG4gICAqIHRow6wgY2h14buZdCBraMO0bmcgdHLDum5nIMSRxrDhu6NjIG7DsyB2w6Aga2jhu5FpIGNvbiBt4bqldCBsdcO0biBraOG6oyBuxINuZyByZXNpemUuXG4gICAqL1xuICBjb250YWluZXJQYWRkaW5nPzogbnVtYmVyO1xuICAvKiogdmnhu4FuIG5nb8OgaSBxdWFuaCBsxrDhu5tpIGPhuqVwIHRyYW5nLiBN4bq3YyDEkeG7i25oIGLhuq10ICovXG4gIG91dGVyTWFyZ2luPzogYm9vbGVhbjtcbiAgLyoqIGNo4burYSB0aMOqbSBiYW8gbmhpw6p1IHB4IGTGsOG7m2kgxJHDoXkgbMaw4bubaSBj4bqlcCB0cmFuZy4gTeG6t2MgxJHhu4tuaCA0MCAqL1xuICBvdXRlck1hcmdpbkJvdHRvbT86IG51bWJlcjtcbiAgLyoqIHPhu5EgaMOgbmcgdOG7kWkgdGhp4buDdSBt4buZdCBraOG7kWkgxJHGsOG7o2MgY28gbOG6oWkuIE3hurdjIMSR4buLbmggMiAqL1xuICBtaW5JdGVtUm93cz86IG51bWJlcjtcbiAgLyoqIGvDrWNoIHRoxrDhu5tjIG3hurdjIMSR4buLbmggY+G7p2Ega2jhu5FpIG3hu5tpLCB0w61uaCB0aGVvIMO0IGzGsOG7m2kuIE3hurdjIMSR4buLbmggMyBj4buZdCDDlyAyIGjDoG5nICovXG4gIGRlZmF1bHRJdGVtQ29scz86IG51bWJlcjtcbiAgZGVmYXVsdEl0ZW1Sb3dzPzogbnVtYmVyO1xuICAvKipcbiAgICogQ2hvIHBow6lwIGhhaSBraOG7kWkgS0jDgUMgYGxheWVySW5kZXhgIG7hurFtIGNo4buTbmcgbmhhdS5cbiAgICogQ2jhur8gxJHhu5kgYHR1RG9gIGx1w7RuIGLhuq10LCBraMO0bmcgxJHhu41jIGPhu50gbsOgeS5cbiAgICovXG4gIGFsbG93T3ZlcmxhcD86IGJvb2xlYW47XG4gIC8qKiB0cuG6p24gc+G7kSBj4bqlcCBjb250YWluZXIgbOG7k25nIG5oYXUuIE3hurdjIMSR4buLbmggMSAoY29udGFpbmVyIGtow7RuZyBjaOG7qWEgY29udGFpbmVyKSAqL1xuICBtYXhDb250YWluZXJEZXB0aD86IG51bWJlcjtcbiAgLyoqIELhuq10IHTDrW5oIG7Eg25nIHRodSBwaMOzbmcgKHpvb20pIGNhbnZhcy4gTeG6t2MgxJHhu4tuaCBmYWxzZSAqL1xuICBlbmFibGVab29tPzogYm9vbGVhbjtcbiAgLyoqIFThu7cgbOG7hyB0aHUgcGjDs25nIGJhbiDEkeG6p3UuIE3hurdjIMSR4buLbmggMSAoMTAwJSkgKi9cbiAgaW5pdGlhbFpvb20/OiBudW1iZXI7XG4gIC8qKiBHaeG7m2kgaOG6oW4gdGh1IHBow7NuZyB04buRaSB0aGnhu4N1LiBN4bq3YyDEkeG7i25oIDAuNCAoNDAlKSAqL1xuICB6b29tTWluPzogbnVtYmVyO1xuICAvKiogR2nhu5tpIGjhuqFuIHRodSBwaMOzbmcgdOG7kWkgxJFhLiBN4bq3YyDEkeG7i25oIDEuNSAoMTUwJSkgKi9cbiAgem9vbU1heD86IG51bWJlcjtcbiAgLyoqIELGsOG7m2MgbmjhuqN5IG3hu5dpIGzhuqduIHTEg25nL2dp4bqjbSB0aHUgcGjDs25nLiBN4bq3YyDEkeG7i25oIDAuMDUgKDUlKSAqL1xuICB6b29tU3RlcD86IG51bWJlcjtcbiAgLyoqIENoaeG7gXUgcuG7mW5nIGNodeG6qW4gY+G7p2EgY2FudmFzIHN0YWdlLCBweC4gTeG6t2MgxJHhu4tuaCAxNjY4ICovXG4gIHN0YWdlV2lkdGg/OiBudW1iZXI7XG4gIC8qKiBDaGnhu4F1IGNhbyB04buRaSB0aGnhu4N1IGPhu6dhIGNhbnZhcyBzdGFnZSwgcHguIE3hurdjIMSR4buLbmggOTM3ICovXG4gIHN0YWdlTWluSGVpZ2h0PzogbnVtYmVyO1xuICAvKiogS2jDs2EgbMawdSB04bu3IGzhu4cgdGh1IHBow7NuZyB2w6BvIGxvY2FsU3RvcmFnZSAodmQgJ29jYl9iaV9jYW52YXNfem9vbScpICovXG4gIHN0b3JhZ2VLZXk/OiBzdHJpbmc7XG4gIC8qKiBU4buxIMSR4buZbmcgduG7q2EgbcOgbiBow6xuaCBraGkgdOG6o2kgdHJhbmcgbOG6p24gxJHhuqd1IG7hur91IGtodW5nIG5ow6xuIG5o4buPIGjGoW4gc3RhZ2UuIE3hurdjIMSR4buLbmggdHJ1ZSAqL1xuICBhdXRvRml0T25Mb2FkPzogYm9vbGVhbjtcbn07XG5cbi8qKiBM4buxYSBjaOG7jW4gdOG7tyBs4buHIHRodSBwaMOzbmcgdHLDqm4gbWVudSBkcm9wZG93biAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X3pvb21QcmVzZXQgPSB7XG4gIC8qKiBLaG/DoSBpMThuLCBLSMOUTkcgcGjhuqNpIGNo4buvIGhp4buDbiB0aOG7iyDigJQgdGVtcGxhdGUgZOG7i2NoIHF1YSBgdHJhbnNsYXRlYCBwaXBlLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxuLyoqIFPhu7Ega2nhu4duIHRoxrAgdmnhu4duIGLhuq9uIHJhIGtoaSBi4buRIGPhu6VjIMSR4buVaSAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50ID0ge1xuICByb290OiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgLyoqIGto4buRaSB24burYSBi4buLIHTDoWMgxJHhu5luZzsgYuG7jyB0cuG7kW5nIGtoaSDEkeG7lWkgZGnhu4duIHLhu5luZyAoc+G6r3AgZ+G7jW4sIG7huqFwIGzhuqFpKSAqL1xuICBub2RlSWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIELhu5FpIGPhuqNuaCB0cnV54buBbiB2w6BvIGB0ZW1wbGF0ZVRvb2xiYXJgIOKAlCB0ZW1wbGF0ZSB04buxIHbhur0gdGhhbmggY8O0bmcgY+G7pSB0aGF5IGLhu5kgbsO6dCBt4bq3YyDEkeG7i25oLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxuZy10ZW1wbGF0ZSAjdG9vbGJhciBsZXQtbm9kZSBsZXQtY3R4PVwiY3R4XCI+XG4gKiAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAqICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlbW92ZSdcIlxuICogICAgIChvdXRDbGljayk9XCJjdHgucmVtb3ZlKClcIiAvPlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfdG9vbGJhckNvbnRleHQgPSB7XG4gIC8qKiBraOG7kWkgxJFhbmcgduG6vSDigJQgZMO5bmcgYGxldC1ub2RlYCB0cm9uZyB0ZW1wbGF0ZSAqL1xuICAkaW1wbGljaXQ6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKioga2jhu5FpIG7DoHkgbMOgIGNvbnRhaW5lciAoY8OzIHJ14buZdCkgaGF5IGto4buRaSDEkcahbiAqL1xuICBpc0NvbnRhaW5lcjogYm9vbGVhbjtcbiAgLyoqIGPDsm4gdGjDqm0gxJHGsOG7o2Mga2jhu5FpIHbDoG8gdHJvbmcga2jDtG5nIChjaMawYSBjaOG6oW0gdHLhuqduIGzhu5NuZyBj4bqlcCkgKi9cbiAgY2FuQWRkSW5zaWRlOiBib29sZWFuO1xuICAvKiogxJHhu5VpIMSRxrDhu6NjIGdp4buvYSBraOG7kWkgxJHGoW4g4oaUIGto4buRaSBnaMOpcCBraMO0bmcgKi9cbiAgY2FuVG9nZ2xlVHlwZTogYm9vbGVhbjtcbiAgLyoqIGfhu41pIMSR4buDIHRoxrAgdmnhu4duIHBow6F0IGBvdXRSZW1vdmVOb2RlYCBuaMawIGtoaSBi4bqlbSBuw7p0IHhvw6EgbeG6t2MgxJHhu4tuaCAqL1xuICByZW1vdmU6ICgpID0+IHZvaWQ7XG4gIC8qKiBn4buNaSDEkeG7gyB0aMawIHZp4buHbiBwaMOhdCBgb3V0QWRkQmxvY2tJbnNpZGVgICovXG4gIGFkZEluc2lkZTogKCkgPT4gdm9pZDtcbiAgLyoqIGfhu41pIMSR4buDIHRoxrAgdmnhu4duIHBow6F0IGBvdXRUb2dnbGVUeXBlYCAqL1xuICB0b2dnbGVUeXBlOiAoKSA9PiB2b2lkO1xufTtcblxuLyoqIEtodW5nIHhlbSB0csaw4bubYyAoZ2hvc3QgcHJldmlldykga2hpIGvDqW8gdGjhursgdOG7qyBiw6puIG5nb8OgaSB2w6BvIGNhbnZhcyAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCA9IHtcbiAgY29sOiBudW1iZXI7XG4gIHJvdzogbnVtYmVyO1xuICBjb2xzOiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgcGl4ZWxMZWZ0OiBudW1iZXI7XG4gIHBpeGVsVG9wOiBudW1iZXI7XG4gIHBpeGVsV2lkdGg6IG51bWJlcjtcbiAgcGl4ZWxIZWlnaHQ6IG51bWJlcjtcbiAgaXNJbnNpZGVHcm91cDogYm9vbGVhbjtcbiAgdGFyZ2V0UGFyZW50SWQ/OiBzdHJpbmc7XG4gIGdyb3VwVGl0bGU/OiBzdHJpbmc7XG4gIGNhcmRUaXRsZTogc3RyaW5nO1xuICBjYXJkSWNvblRleHQ/OiBzdHJpbmc7XG4gIGNhcmRJY29uQ2xhc3M/OiBzdHJpbmc7XG4gIGhvdmVyZWRHcmlkc3Rlcj86IEhUTUxFbGVtZW50O1xufTtcblxuLyoqIFPhu7Ega2nhu4duIHBow6F0IHJhIGtoaSB0aOG6oyBt4buZdCB0aOG6uyBt4bubaSB04burIGLDqm4gbmdvw6BpIHbDoG8gY2FudmFzICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfZHJvcEV2ZW50ID0ge1xuICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIGNvbDogbnVtYmVyO1xuICByb3c6IG51bWJlcjtcbiAgY29sczogbnVtYmVyO1xuICByb3dzOiBudW1iZXI7XG4gIHJhd0V2ZW50OiBEcmFnRXZlbnQ7XG4gIHBheWxvYWQ/OiB1bmtub3duO1xufTtcblxuLyoqIEThu68gbGnhu4d1IGPhu6dhIHRo4bq7IGvDqW8gdOG7qyBiw6puIG5nb8OgaSB2w6BvIGNhbnZhcyAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQgPSB7XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb2xzPzogbnVtYmVyO1xuICByb3dzPzogbnVtYmVyO1xuICBpY29uVGV4dD86IHN0cmluZztcbiAgaWNvbkNsYXNzPzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4iXX0=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqIENo4bq/IMSR4buZIHPhuq9wIHjhur9wIGto4buRaSB0csOqbiBt4bq3dCBwaOG6s25nICovXG5leHBvcnQgY29uc3QgZW51bSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcge1xuICAvKiogQsOhbSBsxrDhu5tpOiBraOG7kWkgdGjhurNuZyBow6BuZywgdOG7sSDEkeG6qXkgbmhhdSwgc+G6r3AgZ+G7jW4gxJHGsOG7o2MgKi9cbiAgZ3JpZCA9ICdncmlkJyxcbiAgLyoqIFThu7EgZG86IGto4buRaSDEkeG6t3Qg4bufIHRv4bqhIMSR4buZIGLhuqV0IGvhu7MsIGNo4buTbmcgbMOqbiBuaGF1IHRob+G6o2kgbcOhaSAqL1xuICBmcmVlID0gJ2ZyZWUnLFxufVxuXG4vKiogTeG7mXQga2jhu5FpIHRyw6puIG3hurd0IHBo4bqzbmcuIGBjaGlsZHJlbmAga2jDoWMgcuG7l25nIHRow6wga2jhu5FpIGzDoCBDT05UQUlORVIsIHJ14buZdCBuw7MgbMOgIG3hu5l0IGzGsOG7m2kgY29uLiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBj4buZdCBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBYIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB4OiBudW1iZXI7XG4gIC8qKiBow6BuZyBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBZIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB5OiBudW1iZXI7XG4gIC8qKiBz4buRIGPhu5l0IGNoaeG6v20gKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCBjaGnhu4F1IHLhu5luZyAoY2jhur8gxJHhu5kgdOG7sSBkbykgKi9cbiAgY29sczogbnVtYmVyO1xuICAvKiogc+G7kSBow6BuZyBjaGnhur9tIChjaOG6vyDEkeG7mSBsxrDhu5tpKSDigJQgcHggY2hp4buBdSBjYW8gKGNo4bq/IMSR4buZIHThu7EgZG8pICovXG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIEzhu5twIGNo4buTbmcuIEhhaSBraOG7kWkgQ0jhu5JORyBuaGF1IMSRxrDhu6NjIGtoaSBraMOhYyBgbGF5ZXJJbmRleGAgdsOgIGBhbGxvd092ZXJsYXBgIGLhuq10LlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4buNaSBraOG7kWkgY8O5bmcgbOG7m3AgMCDigJQgY2jhu5NuZyBuaGF1IGLhu4sgY2jhurduIG5oxrAgbMaw4bubaSB0aMaw4budbmcuXG4gICAqL1xuICBsYXllckluZGV4PzogbnVtYmVyO1xuICAvKioga2jhu5FpIGNvbjsga2jDoWMgcuG7l25nIHRow6wgxJHDonkgbMOgIGNvbnRhaW5lciAqL1xuICBjaGlsZHJlbj86IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPjtcbiAgLyoqXG4gICAqIENvbXBvbmVudCB24bq9IFJJw4pORyBjaG8ga2jhu5FpIG7DoHksIHRy4bqjIHbhu4EgZOG6oW5nIE9ic2VydmFibGUgxJHhu4MgTEFaWSBMT0FEIHRo4bqtdCBz4buxLlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4bq3dCBwaOG6s25nIGjhu49pIGBnZXRDb21wb25lbnRPdXRsZXRgIGNodW5nIGPhu6dhIGPhuqV1IGjDrG5oLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBnZXRDb21wb25lbnRPdXRsZXQ6IChub2RlKSA9PiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSlcbiAgICogYGBgXG4gICAqL1xuICBnZXRDb21wb25lbnRPdXRsZXQ/OiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpID0+IE9ic2VydmFibGU8VHlwZTx1bmtub3duPj47XG4gIC8qKiBk4buvIGxp4buHdSByacOqbmcgY+G7p2EgbsahaSBkw7luZyDigJQgdGjGsCB2aeG7h24gS0jDlE5HIMSR4buNYywgY2h1eeG7g24gbmd1ecOqbiB2w6BvIGlucHV0IGBkYXRhYCBj4bunYSBjb21wb25lbnQgKi9cbiAgZGF0YT86IHVua25vd247XG59O1xuXG4vKipcbiAqIMSQaSBrw6htIHPhu7Ega2nhu4duIGPhu6dhIG3hu5l0IE7DmlQgYnVpbHQtaW4gdHLDqm4ga2jhu5FpLlxuICpcbiAqIFRoxrAgdmnhu4duIENIxq9BIGzDoG0gZ8OsIGtoaSBi4bqvbiDigJQgbsOzIGNo4buJIGLDoW8gXCJuZ8aw4budaSBkw7luZyB24burYSBi4bqlbSBuw7p0IG7DoHlcIi4gTsahaSBkw7luZyBxdXnhur90IMSR4buLbmg6XG4gKiAtIGPhuqduIGjhu49pIHRyxrDhu5tjIChtb2RhbCB4w6FjIG5o4bqtbiwgZ+G7jWkgQVBJIGtp4buDbSB0cmEpIOKGkiBo4buPaSB4b25nIHLhu5NpIGfhu41pIGBjb25maXJtKClgO1xuICogLSBraMO0bmcgY+G6p24gaOG7j2kg4oaSIGfhu41pIGBjb25maXJtKClgIG5nYXk7XG4gKiAtIGtow7RuZyBjaG8gcGjDqXAg4oaSIGtow7RuZyBn4buNaSBnw6wgY+G6oy5cbiAqXG4gKiBgYGB0c1xuICogcHJvdGVjdGVkIGhhbmRsZXJSZW1vdmUoZXZlbnQ6IFRfZ3JpZExheW91dF9hY3Rpb25FdmVudCk6IHZvaWQge1xuICogICB0aGlzLmRpYWxvZy5jb25maXJtKCdYb8OhIGto4buRaSBuw6B5PycpLnN1YnNjcmliZSgoZG9uZ1kpID0+IGRvbmdZICYmIGV2ZW50LmNvbmZpcm0oKSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FjdGlvbkV2ZW50ID0ge1xuICAvKioga2jhu5FpIG5nxrDhu51pIGTDuW5nIHbhu6thIGLhuqVtIG7DunQgKi9cbiAgbm9kZUlkOiBzdHJpbmc7XG4gIC8qKiBraOG7kWkgxJHDsywga2hpIGLhuqFuIGPhuqduIMSR4buNYyBgZGF0YWAgxJHhu4MgcXV54bq/dCDEkeG7i25oICh2ZCBraOG7kWkgxJFhbmcgY8OzIGThu68gbGnhu4d1IHRow6wgbeG7m2kgaOG7j2kpICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKipcbiAgICogR+G7jWkgxJHhu4MgdGjGsCB2aeG7h24gdGjhu7FjIGhp4buHbiB0aGFvIHTDoWMuIEtow7RuZyBn4buNaSA9IGtow7RuZyBsw6BtIGfDrC5cbiAgICpcbiAgICogQHJldHVybnMgYGZhbHNlYCBraGkgdGhhbyB0w6FjIGtow7RuZyB0aOG7sWMgaGnhu4duIMSRxrDhu6NjIChraOG7kWkgxJHDoyBi4buLIHhvw6EsIGNo4bqhbSB0cuG6p24gbOG7k25nIGPhuqVw4oCmKS5cbiAgICovXG4gIGNvbmZpcm06ICgpID0+IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEto4buRaSBN4buaSSB0cnV54buBbiB2w6BvIGBhZGRDaGlsZGAuIEtow6FjIGBUX2dyaWRMYXlvdXRfbm9kZWAg4bufIGJhIGNo4buXIGRvIHRoxrAgdmnhu4duIHThu7EgbG86XG4gKiAtIGBpZGAgdOG7sSBzaW5oIChtw6MgbcOheSBkw7luZyDEkeG7gyB0cmEgY+G7qXUsIGtow7RuZyBwaOG6o2kgdGjhu6kgbmfGsOG7nWkgZMO5bmcgbmdoxKkgcmEpLFxuICogLSBgeGAgwrcgYHlgIHThu7EgxJHhurd0IHh14buRbmcgaMOgbmcgdHLhu5FuZyBr4bq/IHRp4bq/cC5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25ld05vZGUgPSBPbWl0PFRfZ3JpZExheW91dF9ub2RlLCAnaWQnIHwgJ3gnIHwgJ3knPiAmIHtcbiAgLyoqIMSR4buDIHRy4buRbmcgdGjDrCB0aMawIHZp4buHbiBzaW5oOyBjaOG7iSB0cnV54buBbiBraGkgYuG6oW4gQ+G6pk4gbeG7mXQgaWQgY+G7kSDEkeG7i25oICh2ZCBraMO0aSBwaOG7pWMgdOG7qyBi4bqjbiBsxrB1KSAqL1xuICBpZD86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbiAgLyoqXG4gICAqIELhuq10IMSR4buDIEdJ4buuIGB4YC9geWAgdHJ1eeG7gW4gdsOgby4gTeG6t2MgxJHhu4tuaCB04bqvdDogdGjGsCB2aeG7h24gdOG7sSB44bq/cCBraOG7kWkgeHXhu5FuZyBow6BuZyB0cuG7kW5nIGvhur8gdGnhur9wLlxuICAgKlxuICAgKiDwn5S0IFBo4bqjaSBsw6AgY+G7nSB0xrDhu51uZyBtaW5oLCBLSMOUTkcgc3V5IHJhIHThu6sgdmnhu4djIGPDsyB0cnV54buBbiBgeGAvYHlgIGhheSBraMO0bmc6IGAwYCB24burYSBsw6AgdG/huqEgxJHhu5lcbiAgICogaOG7o3AgbOG7hyB24burYSBsw6AgZ2nDoSB0cuG7iyBt4buNaSBow6BtIGThu7FuZyBub2RlIMSRaeG7gW4gc+G6tW4sIG7Dqm4gxJFvw6FuIG5o4bqnbSBsw6Aga2jhu5FpIG3hu5tpIMSRw6ggbMOqbiBraOG7kWkgY8WpLlxuICAgKlxuICAgKiBD4budIG7DoHkgY2jhu4kgxJHhu4MgxJFp4buBdSBraGnhu4NuIGzDumMgdGjDqm0sIGtow7RuZyDEkcaw4bujYyBsxrB1IGzhuqFpIHRyb25nIGPDonkuXG4gICAqL1xuICBrZWVwUG9zaXRpb24/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiDEkGkga8OobSBz4buxIGtp4buHbiBi4bqlbSBuw7p0IFRIw4pNIHRyw6puIG3hu5l0IGNvbnRhaW5lci5cbiAqXG4gKiBLaMOhYyBgVF9ncmlkTGF5b3V0X2FjdGlvbkV2ZW50YCDhu58gY2jhu5cgYGNvbmZpcm1gIG5o4bqtbiBraOG7kWkgbXXhu5FuIHRow6ptOiB0aMawIHZp4buHbiBraMO0bmcgYmnhur90IHPhuqNuIHBo4bqpbVxuICogY+G7p2EgYuG6oW4gY8OzIG5o4buvbmcgbG/huqFpIGto4buRaSBuw6BvLCBuw6puIGLhuqFuIG3hu58gbWVudSBjaOG7jW4gbG/huqFpIHLhu5NpIHRydXnhu4FuIGto4buRaSDEkcOjIGThu7FuZyB2w6BvIMSRw6J5LlxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfYWRkRXZlbnQgPSB7XG4gIC8qKiBjb250YWluZXIgbmfGsOG7nWkgZMO5bmcgbXXhu5FuIHRow6ptIGto4buRaSB2w6BvICovXG4gIG5vZGVJZDogc3RyaW5nO1xuICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgLyoqIEByZXR1cm5zIGto4buRaSB24burYSB04bqhbyAoa8OobSBgaWRgIHRoxrAgdmnhu4duIHNpbmgpLCBob+G6t2MgYHVuZGVmaW5lZGAgbuG6v3Uga2jDtG5nIHRow6ptIMSRxrDhu6NjICovXG4gIGNvbmZpcm06IChpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSkgPT4gVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIMSQ4bqndSB2w6BvIG3DoCB0aMawIHZp4buHbiB0cnV54buBbiBjaG8gY29tcG9uZW50IGPhu6dhIG7GoWkgZMO5bmcuXG4gKiBDb21wb25lbnQgQuG6rlQgQlXhu5hDIGtoYWkgxJHhu6cgYmEgaW5wdXQgbsOgeSAoZMO5bmcgYGlucHV0KClgKSwgdGhp4bq/dSBjw6FpIG7DoG8gdGjDrCBgc2V0SW5wdXRgIG7DqW0gbOG7l2kuXG4gKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9ub2RlSW5wdXRzPFREYXRhID0gdW5rbm93bj4gPSB7XG4gIC8qKiDEkcO6bmcgYG5vZGUuZGF0YWAgY+G7p2Ega2jhu5FpIOKAlCB0aOG7qSBuxqFpIGTDuW5nIGPhuqduIG5o4bqldCwgbsOqbiDEkeG7gyDEkeG6p3UgKi9cbiAgZGF0YTogVERhdGE7XG4gIC8qKiBj4bqjIGto4buRaSwga2hpIGPhuqduIGJp4bq/dCBpZCDCtyBrw61jaCB0aMaw4bubYyDCtyBjw7MgcGjhuqNpIGNvbnRhaW5lciBraMO0bmcgKi9cbiAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiDEkWFuZyDhu58gY2jhur8gxJHhu5kgc+G7rWEgaGF5IGNo4buJIHhlbSAqL1xuICBpc0VkaXRNb2RlOiBib29sZWFuO1xuICAvKiogxJHhu5kgc8OidTogMCA9IGfhu5FjLCAxID0ga2jhu5FpIGPhuqVwIHRyYW5nLCAyID0ga2jhu5FpIHRyb25nIGNvbnRhaW5lciAqL1xuICBkZXB0aDogbnVtYmVyO1xufTtcblxuLyoqIEPhuqV1IGjDrG5oIGto4bufaSB04bqhbyBt4buZdCBt4bq3dCBwaOG6s25nIGvDqW8gdGjhuqMgKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9jb25maWcgPSB7XG4gIC8qKlxuICAgKiBIw6BtIFBIw4JOIEdJ4bqiSSBjb21wb25lbnQgY2hvIG3hu5l0IGto4buRaSDigJQgY2jhu5cgYuG6oW4gbWFwIHThu6sgZOG7ryBsaeG7h3Ugc2VydmVyIHNhbmcgZ2lhbyBkaeG7h24uXG4gICAqXG4gICAqIE3hurd0IHBo4bqzbmcgZ+G7jWkgaMOgbSBuw6B5IGNobyBN4buWSSBraOG7kWkga2jDtG5nIHThu7Ega2hhaSBgZ2V0Q29tcG9uZW50T3V0bGV0YC4gVHLhuqMgYE9ic2VydmFibGVgIG7Dqm5cbiAgICogYGltcG9ydCgpYCDEkeG7mW5nIGNo4bqheSDEkcaw4bujYzogYsOzIG3DoyBj4bunYSB04burbmcgbG/huqFpIGto4buRaSBjaOG7iSB04bqjaSBraGkgbcOgbiB0aOG6rXQgc+G7sSBjw7Mga2jhu5FpIGxv4bqhaSDEkcOzLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBnZXRDb21wb25lbnRPdXRsZXQ6IChub2RlKSA9PiB7XG4gICAqICAgY29uc3QgeyB0eXBlIH0gPSBub2RlLmRhdGEgYXMgeyB0eXBlOiBzdHJpbmcgfTtcbiAgICpcbiAgICogICBpZiAodHlwZSA9PT0gJ2NoYXJ0Jykge1xuICAgKiAgICAgcmV0dXJuIGZyb20oaW1wb3J0KCcuL2NoYXJ0LWNhcmQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5DaGFydENhcmRDb21wb25lbnQpKTtcbiAgICogICB9XG4gICAqXG4gICAqICAgcmV0dXJuIGZyb20oaW1wb3J0KCcuL3RleHQtY2FyZC5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLlRleHRDYXJkQ29tcG9uZW50KSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBnZXRDb21wb25lbnRPdXRsZXQ/OiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpID0+IE9ic2VydmFibGU8VHlwZTx1bmtub3duPj47XG4gIC8qKiBjw6J5IGto4buRaSBiYW4gxJHhuqd1ICovXG4gIGRhdGE6IFRfZ3JpZExheW91dF9ub2RlO1xuICBtb2RlPzogRV9ncmlkTGF5b3V0X21vZGVfc3RyaW5nO1xuICBpc0VkaXRNb2RlPzogYm9vbGVhbjtcbiAgLyoqIHPhu5EgY+G7mXQgY+G7p2EgbMaw4bubaSAoY2jhur8gxJHhu5kgbMaw4bubaSkuIE3hurdjIMSR4buLbmggMTIgKi9cbiAgY29scz86IG51bWJlcjtcbiAgLyoqIGNoaeG7gXUgY2FvIG3hu5l0IGjDoG5nLCBweCAoY2jhur8gxJHhu5kgbMaw4bubaSkuIE3hurdjIMSR4buLbmggNTYgKi9cbiAgcm93SGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogU+G7kSBow6BuZyBU4buQSSBUSEnhu4JVIGPhu6dhIGzGsOG7m2kgQ+G6pFAgVFJBTkcuIE3hurdjIMSR4buLbmggMi5cbiAgICpcbiAgICogxJDhurd0IGzhu5tuIGjGoW4ga2hpIG114buRbiDDtCBsaSBwaOG7pyBrw61uIG3DoG4gaMOsbmggbmdheSBj4bqjIGzDumMgYuG7kSBj4bulYyBjw7JuIMOtdCBraOG7kWkg4oCUIGzGsOG7m2kgY2jhu4kgY2FvIGLhurFuZ1xuICAgKiBraOG7kWkgY3Xhu5FpIGPDuW5nIHRow6wgcGjhuqduIGTGsOG7m2kgdHLhu5FuZyB0csahbiwgbmfGsOG7nWkgZMO5bmcga2jDtG5nIGJp4bq/dCBjw7JuIHRo4bqjIMSRxrDhu6NjIHbDoG8gxJHDonUuXG4gICAqL1xuICBtaW5Sb3dzPzogbnVtYmVyO1xuICAvKiogU+G7kSBow6BuZyBU4buQSSBUSEnhu4JVIGPhu6dhIGzGsOG7m2kgYsOqbiBUUk9ORyBjb250YWluZXIuIE3hurdjIMSR4buLbmggMSAqL1xuICBuZXN0ZWRNaW5Sb3dzPzogbnVtYmVyO1xuICAvKipcbiAgICogQ2hvIGzGsOG7m2kgTOG7kk5HIHThu7EgxJFvIGzhuqFpIGtoaSBraHVuZyBjaOG7qWEgbsOzIMSR4buVaSBi4buBIHLhu5luZy4gTeG6t2MgxJHhu4tuaCBC4bqsVC5cbiAgICpcbiAgICogVOG6r3QgxJFpIHRow6wgbMO6YyBrw6lvIG3DqXAga2jhu5FpIGNoYSwgdGjhursgY29uIMSR4bupbmcgaW0gdOG7m2kga2hpIHRo4bqjIHRheSDigJQgY2jhu4kgdOG6r3QgbuG6v3UgbsahaSBkw7luZyB04buxIGxvXG4gICAqIHZp4buHYyDEkW8gbOG6oWkuXG4gICAqL1xuICBhdXRvUmVzaXplTmVzdGVkR3JpZHM/OiBib29sZWFuO1xuICAvKioga2hlIGdp4buvYSBoYWkga2jhu5FpIOG7nyBsxrDhu5tpIEPhuqRQIFRSQU5HLCBweC4gTeG6t2MgxJHhu4tuaCAxMiAqL1xuICBtYXJnaW4/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBLaGUgTkjDjE4gVEjhuqRZIGdp4buvYSBoYWkga2jhu5FpIGPhuqVwIHRyYW5nLCBweCDigJQgcGjhuqduIHbhu48ga2jhu5FpIHRo4buldCB2w6BvIG7hu61hIGtoZSBt4buXaSBj4bqhbmguXG4gICAqXG4gICAqIPCflLQgS2jDoWMgYG1hcmdpbmA6IGBtYXJnaW5gIGzDoCBraGUgY+G7p2Egw5QgTMav4buaSSBuw6puIMSR4buVaSBuw7MgbMOgIMSR4buVaSBsdcO0biBixrDhu5tjIGvDqW8gdsOgIHBow6lwIHTDrW5oIHZhXG4gICAqIGNo4bqhbS4gTXXhu5FuIHRo4bq7IHRyw7RuZyB0aMawYSByYSBtw6AgYsaw4bubYyBrw6lvIGdp4buvIG5ndXnDqm4gdGjDrCBkw7luZyBgdmlzdWFsR2FwYCDigJQgw7QgbMaw4bubaSBraMO0bmcgxJHhu5VpLFxuICAgKiBjaOG7iSBwaOG6p24gbmjDrG4gdGjhuqV5IGNvIGzhuqFpLiBLaMO0bmcga2hhaSB0aMOsIGtow7RuZyDDoXAgZ8OsIChnaeG7ryDEkcO6bmcgaMOgbmggdmkgY8WpKS5cbiAgICpcbiAgICogQ2jhu4kgw6FwIGNobyBraOG7kWkgQ+G6pFAgR+G7kEM7IGto4buRaSBjb24gdHJvbmcgY29udGFpbmVyIGdp4buvIG5ndXnDqm4gxJHhu4Mga2jDtG5nIHTDoWNoIHLhu51pIGPDoWMgZMOybmcgY+G7p2FcbiAgICogY8O5bmcgbeG7mXQgdGjhursuXG4gICAqL1xuICB2aXN1YWxHYXA/OiBudW1iZXI7XG4gIC8qKiBraGUgZ2nhu69hIGhhaSBraOG7kWkgYsOqbiBUUk9ORyBjb250YWluZXIsIHB4LiBN4bq3YyDEkeG7i25oIDIg4oCUIGto4buRaSBjb24gbMOgIGTDsm5nIHRow7RuZyB0aW4gY+G7p2EgY8O5bmdcbiAgICogIG3hu5l0IGNhcmQsIGtoZSBy4buZbmcgbMOgbSBjaMO6bmcgdHLDtG5nIG5oxrAgY2FyZCBy4budaSBuaGF1ICovXG4gIG5lc3RlZE1hcmdpbj86IG51bWJlcjtcbiAgLyoqIGNoaeG7gXUgY2FvIG3hu5l0IGjDoG5nIGLDqm4gVFJPTkcgY29udGFpbmVyLCBweC4gTeG6t2MgxJHhu4tuaCAxNiDigJQgaMOgbmcgbmjhu48gY2hvIGLGsOG7m2Mga8OpbyBt4buLbiAqL1xuICBuZXN0ZWRSb3dIZWlnaHQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBM4buBIHRyb25nIGPhu6dhIENPTlRBSU5FUiwgcHgg4oCUIMOhcCDEkeG7gXUgYuG7kW4gY2hp4buBdS4gTeG6t2MgxJHhu4tuaCAxMi5cbiAgICpcbiAgICogQ2jhu4kgY29udGFpbmVyIGPDsyBs4buBIG7DoHk7IGto4buRaSDEkcahbiBraMO0bmcgY8OzLCB2w6wgbsOzIGtow7RuZyBjaOG7qWEgZ8OsIGLDqm4gdHJvbmcuXG4gICAqXG4gICAqIPCflLQgS0jDlE5HIG7Dqm4gxJHhu4MgMDogdGF5IGPhuqdtIMSR4buVaSBrw61jaCB0aMaw4bubYyBj4bunYSBraOG7kWkgY29uIG7hurFtIHPDoXQgYmnDqm4gY29udGFpbmVyLCBraMO0bmcgY2jhu6thIGzhu4FcbiAgICogdGjDrCBjaHXhu5l0IGtow7RuZyB0csO6bmcgxJHGsOG7o2MgbsOzIHbDoCBraOG7kWkgY29uIG3huqV0IGx1w7RuIGto4bqjIG7Eg25nIHJlc2l6ZS5cbiAgICovXG4gIGNvbnRhaW5lclBhZGRpbmc/OiBudW1iZXI7XG4gIC8qKiB2aeG7gW4gbmdvw6BpIHF1YW5oIGzGsOG7m2kgY+G6pXAgdHJhbmcuIE3hurdjIMSR4buLbmggYuG6rXQgKi9cbiAgb3V0ZXJNYXJnaW4/OiBib29sZWFuO1xuICAvKiogY2jhu6thIHRow6ptIGJhbyBuaGnDqnUgcHggZMaw4bubaSDEkcOheSBsxrDhu5tpIGPhuqVwIHRyYW5nLiBN4bq3YyDEkeG7i25oIDQwICovXG4gIG91dGVyTWFyZ2luQm90dG9tPzogbnVtYmVyO1xuICAvKiogc+G7kSBow6BuZyB04buRaSB0aGnhu4N1IG3hu5l0IGto4buRaSDEkcaw4bujYyBjbyBs4bqhaS4gTeG6t2MgxJHhu4tuaCAyICovXG4gIG1pbkl0ZW1Sb3dzPzogbnVtYmVyO1xuICAvKioga8OtY2ggdGjGsOG7m2MgbeG6t2MgxJHhu4tuaCBj4bunYSBraOG7kWkgbeG7m2ksIHTDrW5oIHRoZW8gw7QgbMaw4bubaS4gTeG6t2MgxJHhu4tuaCAzIGPhu5l0IMOXIDIgaMOgbmcgKi9cbiAgZGVmYXVsdEl0ZW1Db2xzPzogbnVtYmVyO1xuICBkZWZhdWx0SXRlbVJvd3M/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDaG8gcGjDqXAgaGFpIGto4buRaSBLSMOBQyBgbGF5ZXJJbmRleGAgbuG6sW0gY2jhu5NuZyBuaGF1LlxuICAgKiBDaOG6vyDEkeG7mSBgdHVEb2AgbHXDtG4gYuG6rXQsIGtow7RuZyDEkeG7jWMgY+G7nSBuw6B5LlxuICAgKi9cbiAgYWxsb3dPdmVybGFwPzogYm9vbGVhbjtcbiAgLyoqIHRy4bqnbiBz4buRIGPhuqVwIGNvbnRhaW5lciBs4buTbmcgbmhhdS4gTeG6t2MgxJHhu4tuaCAxIChjb250YWluZXIga2jDtG5nIGNo4bupYSBjb250YWluZXIpICovXG4gIG1heENvbnRhaW5lckRlcHRoPzogbnVtYmVyO1xuICAvKiogQuG6rXQgdMOtbmggbsSDbmcgdGh1IHBow7NuZyAoem9vbSkgY2FudmFzLiBN4bq3YyDEkeG7i25oIGZhbHNlICovXG4gIGVuYWJsZVpvb20/OiBib29sZWFuO1xuICAvKiogVOG7tyBs4buHIHRodSBwaMOzbmcgYmFuIMSR4bqndS4gTeG6t2MgxJHhu4tuaCAxICgxMDAlKSAqL1xuICBpbml0aWFsWm9vbT86IG51bWJlcjtcbiAgLyoqIEdp4bubaSBo4bqhbiB0aHUgcGjDs25nIHThu5FpIHRoaeG7g3UuIE3hurdjIMSR4buLbmggMC40ICg0MCUpICovXG4gIHpvb21NaW4/OiBudW1iZXI7XG4gIC8qKiBHaeG7m2kgaOG6oW4gdGh1IHBow7NuZyB04buRaSDEkWEuIE3hurdjIMSR4buLbmggMS41ICgxNTAlKSAqL1xuICB6b29tTWF4PzogbnVtYmVyO1xuICAvKiogQsaw4bubYyBuaOG6o3kgbeG7l2kgbOG6p24gdMSDbmcvZ2nhuqNtIHRodSBwaMOzbmcuIE3hurdjIMSR4buLbmggMC4wNSAoNSUpICovXG4gIHpvb21TdGVwPzogbnVtYmVyO1xuICAvKiogQ2hp4buBdSBy4buZbmcgY2h14bqpbiBj4bunYSBjYW52YXMgc3RhZ2UsIHB4LiBN4bq3YyDEkeG7i25oIDE2NjggKi9cbiAgc3RhZ2VXaWR0aD86IG51bWJlcjtcbiAgLyoqIENoaeG7gXUgY2FvIHThu5FpIHRoaeG7g3UgY+G7p2EgY2FudmFzIHN0YWdlLCBweC4gTeG6t2MgxJHhu4tuaCA5MzcgKi9cbiAgc3RhZ2VNaW5IZWlnaHQ/OiBudW1iZXI7XG4gIC8qKiBLaMOzYSBsxrB1IHThu7cgbOG7hyB0aHUgcGjDs25nIHbDoG8gbG9jYWxTdG9yYWdlICh2ZCAnb2NiX2JpX2NhbnZhc196b29tJykgKi9cbiAgc3RvcmFnZUtleT86IHN0cmluZztcbiAgLyoqIFThu7EgxJHhu5luZyB24burYSBtw6BuIGjDrG5oIGtoaSB04bqjaSB0cmFuZyBs4bqnbiDEkeG6p3UgbuG6v3Uga2h1bmcgbmjDrG4gbmjhu48gaMahbiBzdGFnZS4gTeG6t2MgxJHhu4tuaCB0cnVlICovXG4gIGF1dG9GaXRPbkxvYWQ/OiBib29sZWFuO1xufTtcblxuLyoqIEzhu7FhIGNo4buNbiB04bu3IGzhu4cgdGh1IHBow7NuZyB0csOqbiBtZW51IGRyb3Bkb3duICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfem9vbVByZXNldCA9IHtcbiAgLyoqIEtob8OhIGkxOG4sIEtIw5RORyBwaOG6o2kgY2jhu68gaGnhu4NuIHRo4buLIOKAlCB0ZW1wbGF0ZSBk4buLY2ggcXVhIGB0cmFuc2xhdGVgIHBpcGUuICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuXG4vKiogU+G7sSBraeG7h24gdGjGsCB2aeG7h24gYuG6r24gcmEga2hpIGLhu5EgY+G7pWMgxJHhu5VpICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfY2hhbmdlRXZlbnQgPSB7XG4gIHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKioga2jhu5FpIHbhu6thIGLhu4sgdMOhYyDEkeG7mW5nOyBi4buPIHRy4buRbmcga2hpIMSR4buVaSBkaeG7h24gcuG7mW5nIChz4bqvcCBn4buNbiwgbuG6oXAgbOG6oWkpICovXG4gIG5vZGVJZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogQuG7kWkgY+G6o25oIHRydXnhu4FuIHbDoG8gYHRlbXBsYXRlVG9vbGJhcmAg4oCUIHRlbXBsYXRlIHThu7EgduG6vSB0aGFuaCBjw7RuZyBj4bulIHRoYXkgYuG7mSBuw7p0IG3hurdjIMSR4buLbmguXG4gKlxuICogYGBgaHRtbFxuICogPG5nLXRlbXBsYXRlICN0b29sYmFyIGxldC1ub2RlIGxldC1jdHg9XCJjdHhcIj5cbiAqICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICogICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tcmVtb3ZlJ1wiXG4gKiAgICAgKG91dENsaWNrKT1cImN0eC5yZW1vdmUoKVwiIC8+XG4gKiA8L25nLXRlbXBsYXRlPlxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF90b29sYmFyQ29udGV4dCA9IHtcbiAgLyoqIGto4buRaSDEkWFuZyB24bq9IOKAlCBkw7luZyBgbGV0LW5vZGVgIHRyb25nIHRlbXBsYXRlICovXG4gICRpbXBsaWNpdDogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBraOG7kWkgbsOgeSBsw6AgY29udGFpbmVyIChjw7MgcnXhu5l0KSBoYXkga2jhu5FpIMSRxqFuICovXG4gIGlzQ29udGFpbmVyOiBib29sZWFuO1xuICAvKiogY8OybiB0aMOqbSDEkcaw4bujYyBraOG7kWkgdsOgbyB0cm9uZyBraMO0bmcgKGNoxrBhIGNo4bqhbSB0cuG6p24gbOG7k25nIGPhuqVwKSAqL1xuICBjYW5BZGRJbnNpZGU6IGJvb2xlYW47XG4gIC8qKiDEkeG7lWkgxJHGsOG7o2MgZ2nhu69hIGto4buRaSDEkcahbiDihpQga2jhu5FpIGdow6lwIGtow7RuZyAqL1xuICBjYW5Ub2dnbGVUeXBlOiBib29sZWFuO1xuICAvKiogZ+G7jWkgxJHhu4MgdGjGsCB2aeG7h24gcGjDoXQgYG91dFJlbW92ZU5vZGVgIG5oxrAga2hpIGLhuqVtIG7DunQgeG/DoSBt4bq3YyDEkeG7i25oICovXG4gIHJlbW92ZTogKCkgPT4gdm9pZDtcbiAgLyoqIGfhu41pIMSR4buDIHRoxrAgdmnhu4duIHBow6F0IGBvdXRBZGRCbG9ja0luc2lkZWAgKi9cbiAgYWRkSW5zaWRlOiAoKSA9PiB2b2lkO1xuICAvKiogZ+G7jWkgxJHhu4MgdGjGsCB2aeG7h24gcGjDoXQgYG91dFRvZ2dsZVR5cGVgICovXG4gIHRvZ2dsZVR5cGU6ICgpID0+IHZvaWQ7XG59O1xuXG4vKiogS2h1bmcgeGVtIHRyxrDhu5tjIChnaG9zdCBwcmV2aWV3KSBraGkga8OpbyB0aOG6uyB04burIGLDqm4gbmdvw6BpIHbDoG8gY2FudmFzICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfZHJvcEdob3N0ID0ge1xuICBjb2w6IG51bWJlcjtcbiAgcm93OiBudW1iZXI7XG4gIGNvbHM6IG51bWJlcjtcbiAgcm93czogbnVtYmVyO1xuICBwaXhlbExlZnQ6IG51bWJlcjtcbiAgcGl4ZWxUb3A6IG51bWJlcjtcbiAgcGl4ZWxXaWR0aDogbnVtYmVyO1xuICBwaXhlbEhlaWdodDogbnVtYmVyO1xuICBpc0luc2lkZUdyb3VwOiBib29sZWFuO1xuICB0YXJnZXRQYXJlbnRJZD86IHN0cmluZztcbiAgZ3JvdXBUaXRsZT86IHN0cmluZztcbiAgY2FyZFRpdGxlOiBzdHJpbmc7XG4gIGNhcmRJY29uVGV4dD86IHN0cmluZztcbiAgY2FyZEljb25DbGFzcz86IHN0cmluZztcbiAgaG92ZXJlZEdyaWRzdGVyPzogSFRNTEVsZW1lbnQ7XG59O1xuXG4vKiogU+G7sSBraeG7h24gcGjDoXQgcmEga2hpIHRo4bqjIG3hu5l0IHRo4bq7IG3hu5tpIHThu6sgYsOqbiBuZ2/DoGkgdsOgbyBjYW52YXMgKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9kcm9wRXZlbnQgPSB7XG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICBwYXJlbnRJZD86IHN0cmluZztcbiAgY29sOiBudW1iZXI7XG4gIHJvdzogbnVtYmVyO1xuICBjb2xzOiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgcmF3RXZlbnQ6IERyYWdFdmVudDtcbiAgcGF5bG9hZD86IHVua25vd247XG59O1xuXG4vKiogROG7ryBsaeG7h3UgY+G7p2EgdGjhursga8OpbyB04burIGLDqm4gbmdvw6BpIHbDoG8gY2FudmFzICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfZXh0ZXJuYWxEcmFnUGF5bG9hZCA9IHtcbiAga2luZD86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGNvbHM/OiBudW1iZXI7XG4gIHJvd3M/OiBudW1iZXI7XG4gIGljb25UZXh0Pzogc3RyaW5nO1xuICBpY29uQ2xhc3M/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbiJdfQ==
|