UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

119 lines (117 loc) 16.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@neo-one/utils"); const constants_1 = require("../../constants"); const Helper_1 = require("../Helper"); const array_1 = require("./array"); const arrayStorage_1 = require("./arrayStorage"); const iterableIterator_1 = require("./iterableIterator"); const map_1 = require("./map"); const mapStorage_1 = require("./mapStorage"); const set_1 = require("./set"); const setStorage_1 = require("./setStorage"); class ForIterableTypeHelper extends Helper_1.Helper { constructor({ type, knownType, array, map, set, arrayStorage, mapStorage, setStorage, iterableIterator, defaultCase, }) { super(); this.type = type; this.knownType = knownType; this.array = array; this.map = map; this.set = set; this.arrayStorage = arrayStorage; this.mapStorage = mapStorage; this.setStorage = setStorage; this.iterableIterator = iterableIterator; this.defaultCase = defaultCase; } emit(sb, node, options) { if (this.knownType !== undefined) { this.processKnownType(this.knownType, options); return; } sb.emitHelper(node, options, sb.helpers.forType({ type: this.type, defaultCase: this.defaultCase, types: [ { hasType: (type) => array_1.hasArray(sb.context, node, type), isRuntimeType: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.isArray); }, process: this.array, }, { hasType: (type) => arrayStorage_1.hasArrayStorage(sb.context, node, type), isRuntimeType: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.isArrayStorage); }, process: this.arrayStorage, }, { hasType: (type) => map_1.hasMap(sb.context, node, type), isRuntimeType: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.isMap); }, process: this.map, }, { hasType: (type) => mapStorage_1.hasMapStorage(sb.context, node, type), isRuntimeType: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.isMapStorage); }, process: this.mapStorage, }, { hasType: (type) => set_1.hasSet(sb.context, node, type), isRuntimeType: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.isSet); }, process: this.set, }, { hasType: (type) => setStorage_1.hasSetStorage(sb.context, node, type), isRuntimeType: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.isSetStorage); }, process: this.setStorage, }, { hasType: (type) => iterableIterator_1.hasIterableIterator(sb.context, node, type), isRuntimeType: (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.isIterableIterator); }, process: this.iterableIterator, }, ], })); } processKnownType(knownType, options) { switch (knownType) { case constants_1.Types.Array: this.array(options); break; case constants_1.Types.ArrayStorage: this.arrayStorage(options); break; case constants_1.Types.Map: this.map(options); break; case constants_1.Types.MapStorage: this.mapStorage(options); break; case constants_1.Types.Set: this.set(options); break; case constants_1.Types.SetStorage: this.setStorage(options); break; case constants_1.Types.IterableIterator: this.iterableIterator(options); break; default: utils_1.utils.assertNever(knownType); } } } exports.ForIterableTypeHelper = ForIterableTypeHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZvckl0ZXJhYmxlVHlwZUhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUF1QztBQUV2QywrQ0FBdUQ7QUFHdkQsc0NBQW1DO0FBQ25DLG1DQUFtQztBQUNuQyxpREFBaUQ7QUFDakQseURBQXlEO0FBQ3pELCtCQUErQjtBQUMvQiw2Q0FBNkM7QUFDN0MsK0JBQStCO0FBQy9CLDZDQUE2QztBQW1CN0MsTUFBYSxxQkFBc0IsU0FBUSxlQUFNO0lBWS9DLFlBQW1CLEVBQ2pCLElBQUksRUFDSixTQUFTLEVBQ1QsS0FBSyxFQUNMLEdBQUcsRUFDSCxHQUFHLEVBQ0gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDa0I7UUFDN0IsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxJQUFJLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsT0FBcUI7UUFDakUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUUvQyxPQUFPO1NBQ1I7UUFFRCxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGdCQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO29CQUNuRCxhQUFhLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTt3QkFDOUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3hELENBQUM7b0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO2lCQUNwQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLDhCQUFlLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO29CQUMxRCxhQUFhLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTt3QkFDOUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQy9ELENBQUM7b0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZO2lCQUMzQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFlBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7b0JBQ2pELGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUM5QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEQsQ0FBQztvQkFDRCxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUc7aUJBQ2xCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsMEJBQWEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7b0JBQ3hELGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUM5QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDN0QsQ0FBQztvQkFDRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7aUJBQ3pCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsWUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztvQkFDakQsYUFBYSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQzlCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0RCxDQUFDO29CQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRztpQkFDbEI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQywwQkFBYSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztvQkFDeEQsYUFBYSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQzlCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUM3RCxDQUFDO29CQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVTtpQkFDekI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxzQ0FBbUIsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7b0JBQzlELGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUM5QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUNuRSxDQUFDO29CQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2lCQUMvQjthQUNGO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBd0IsRUFBRSxPQUFxQjtRQUN0RSxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLGlCQUFLLENBQUMsS0FBSztnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwQixNQUFNO1lBQ1IsS0FBSyxpQkFBSyxDQUFDLFlBQVk7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLGlCQUFLLENBQUMsR0FBRztnQkFFWixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQixNQUFNO1lBQ1IsS0FBSyxpQkFBSyxDQUFDLFVBQVU7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDUixLQUFLLGlCQUFLLENBQUMsR0FBRztnQkFDWixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQixNQUFNO1lBQ1IsS0FBSyxpQkFBSyxDQUFDLFVBQVU7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDUixLQUFLLGlCQUFLLENBQUMsZ0JBQWdCO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUjtnQkFFRSxhQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztDQUNGO0FBdElELHNEQXNJQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci90eXBlcy9Gb3JJdGVyYWJsZVR5cGVIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BuZW8tb25lL3V0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IEl0ZXJhYmxlVHlwZXMsIFR5cGVzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuaW1wb3J0IHsgaGFzQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGhhc0FycmF5U3RvcmFnZSB9IGZyb20gJy4vYXJyYXlTdG9yYWdlJztcbmltcG9ydCB7IGhhc0l0ZXJhYmxlSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhYmxlSXRlcmF0b3InO1xuaW1wb3J0IHsgaGFzTWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgaGFzTWFwU3RvcmFnZSB9IGZyb20gJy4vbWFwU3RvcmFnZSc7XG5pbXBvcnQgeyBoYXNTZXQgfSBmcm9tICcuL3NldCc7XG5pbXBvcnQgeyBoYXNTZXRTdG9yYWdlIH0gZnJvbSAnLi9zZXRTdG9yYWdlJztcblxudHlwZSBQcm9jZXNzVHlwZSA9IChvcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ySXRlcmFibGVUeXBlSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHR5cGU/OiB0cy5UeXBlO1xuICByZWFkb25seSBrbm93blR5cGU/OiBJdGVyYWJsZVR5cGVzO1xuICByZWFkb25seSBhcnJheTogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IG1hcDogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IHNldDogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IGFycmF5U3RvcmFnZTogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IG1hcFN0b3JhZ2U6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBzZXRTdG9yYWdlOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgaXRlcmFibGVJdGVyYXRvcjogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IGRlZmF1bHRDYXNlPzogUHJvY2Vzc1R5cGU7XG59XG5cbi8vIElucHV0OiBbdmFsXVxuLy8gT3V0cHV0OiBbXVxuZXhwb3J0IGNsYXNzIEZvckl0ZXJhYmxlVHlwZUhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZT86IHRzLlR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkga25vd25UeXBlPzogSXRlcmFibGVUeXBlcztcbiAgcHJpdmF0ZSByZWFkb25seSBhcnJheTogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXQ6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGFycmF5U3RvcmFnZTogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwU3RvcmFnZTogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0U3RvcmFnZTogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlcmFibGVJdGVyYXRvcjogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENhc2U/OiBQcm9jZXNzVHlwZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioe1xuICAgIHR5cGUsXG4gICAga25vd25UeXBlLFxuICAgIGFycmF5LFxuICAgIG1hcCxcbiAgICBzZXQsXG4gICAgYXJyYXlTdG9yYWdlLFxuICAgIG1hcFN0b3JhZ2UsXG4gICAgc2V0U3RvcmFnZSxcbiAgICBpdGVyYWJsZUl0ZXJhdG9yLFxuICAgIGRlZmF1bHRDYXNlLFxuICB9OiBGb3JJdGVyYWJsZVR5cGVIZWxwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMua25vd25UeXBlID0ga25vd25UeXBlO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICB0aGlzLnNldCA9IHNldDtcbiAgICB0aGlzLmFycmF5U3RvcmFnZSA9IGFycmF5U3RvcmFnZTtcbiAgICB0aGlzLm1hcFN0b3JhZ2UgPSBtYXBTdG9yYWdlO1xuICAgIHRoaXMuc2V0U3RvcmFnZSA9IHNldFN0b3JhZ2U7XG4gICAgdGhpcy5pdGVyYWJsZUl0ZXJhdG9yID0gaXRlcmFibGVJdGVyYXRvcjtcbiAgICB0aGlzLmRlZmF1bHRDYXNlID0gZGVmYXVsdENhc2U7XG4gIH1cblxuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMua25vd25UeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0tub3duVHlwZSh0aGlzLmtub3duVHlwZSwgb3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmZvclR5cGUoe1xuICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIGRlZmF1bHRDYXNlOiB0aGlzLmRlZmF1bHRDYXNlLFxuICAgICAgICB0eXBlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhc1R5cGU6ICh0eXBlKSA9PiBoYXNBcnJheShzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNBcnJheSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogdGhpcy5hcnJheSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhc1R5cGU6ICh0eXBlKSA9PiBoYXNBcnJheVN0b3JhZ2Uoc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzQXJyYXlTdG9yYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLmFycmF5U3RvcmFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhc1R5cGU6ICh0eXBlKSA9PiBoYXNNYXAoc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzTWFwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLm1hcCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhc1R5cGU6ICh0eXBlKSA9PiBoYXNNYXBTdG9yYWdlKHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc01hcFN0b3JhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMubWFwU3RvcmFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhc1R5cGU6ICh0eXBlKSA9PiBoYXNTZXQoc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzU2V0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLnNldCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhc1R5cGU6ICh0eXBlKSA9PiBoYXNTZXRTdG9yYWdlKHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc1NldFN0b3JhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuc2V0U3RvcmFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhc1R5cGU6ICh0eXBlKSA9PiBoYXNJdGVyYWJsZUl0ZXJhdG9yKHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc0l0ZXJhYmxlSXRlcmF0b3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuaXRlcmFibGVJdGVyYXRvcixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0tub3duVHlwZShrbm93blR5cGU6IEl0ZXJhYmxlVHlwZXMsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIHN3aXRjaCAoa25vd25UeXBlKSB7XG4gICAgICBjYXNlIFR5cGVzLkFycmF5OlxuICAgICAgICB0aGlzLmFycmF5KG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHlwZXMuQXJyYXlTdG9yYWdlOlxuICAgICAgICB0aGlzLmFycmF5U3RvcmFnZShvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFR5cGVzLk1hcDpcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHRoaXMubWFwKG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHlwZXMuTWFwU3RvcmFnZTpcbiAgICAgICAgdGhpcy5tYXBTdG9yYWdlKG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHlwZXMuU2V0OlxuICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFR5cGVzLlNldFN0b3JhZ2U6XG4gICAgICAgIHRoaXMuc2V0U3RvcmFnZShvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFR5cGVzLkl0ZXJhYmxlSXRlcmF0b3I6XG4gICAgICAgIHRoaXMuaXRlcmFibGVJdGVyYXRvcihvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICB1dGlscy5hc3NlcnROZXZlcihrbm93blR5cGUpO1xuICAgIH1cbiAgfVxufVxuIl19