UNPKG

aws-cdk-neuronx-patterns

Version:
176 lines 24.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const deep_learning_containers_1 = require("./deep-learning-containers"); describe("PytorchInferenceNeuronxImage", () => { it("Can get LATEST version", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.LATEST; expect(image).not.toBeUndefined(); expect(image.imageTag).toEqual(expect.any(String)); expect(image.neuronSdkVersion).toEqual(expect.any(String)); }); it("SDK 2.28.0 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_28_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "2.9.0-neuronx-py312-sdk2.28.0-ubuntu24.04", neuronSdkVersion: "2.28.0", }); }); it("SDK 2.27.1 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_27_1; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "2.9.0-neuronx-py312-sdk2.27.1-ubuntu24.04", neuronSdkVersion: "2.27.1", }); }); it("SDK 2.26.1 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_26_1; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "2.8.0-neuronx-py311-sdk2.26.1-ubuntu22.04", neuronSdkVersion: "2.26.1", }); }); it("SDK 2.25.0 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_25_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "2.7.0-neuronx-py310-sdk2.25.0-ubuntu22.04", neuronSdkVersion: "2.25.0", }); }); it("SDK 2.23.0 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_23_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "2.6.0-neuronx-py310-sdk2.23.0-ubuntu22.04", neuronSdkVersion: "2.23.0", }); }); it("SDK 2.22.0 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_22_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "2.5.1-neuronx-py310-sdk2.22.0-ubuntu22.04", neuronSdkVersion: "2.22.0", }); }); it("SDK 2.20.2 with PyTorch 2.1.2 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_20_2_PYTORCH_2_1_2; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "2.1.2-neuronx-py310-sdk2.20.2-ubuntu20.04", neuronSdkVersion: "2.20.2", }); }); it("SDK 2.20.2 with PyTorch 1.13.1 is defined", () => { const image = deep_learning_containers_1.PytorchInferenceNeuronxImage.SDK_2_20_2_PYTORCH_1_13_1; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-neuronx", imageTag: "1.13.1-neuronx-py310-sdk2.20.2-ubuntu20.04", neuronSdkVersion: "2.20.2", }); }); }); describe("VllmInferenceNeuronxImage", () => { it("Can get LATEST version", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.LATEST; expect(image).not.toBeUndefined(); expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: expect.any(String), neuronSdkVersion: expect.any(String), vllmVersion: expect.any(String), }); }); it("SDK 2.28.0 is defined", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.SDK_2_28_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: "0.13.0-neuronx-py312-sdk2.28.0-ubuntu24.04", neuronSdkVersion: "2.28.0", vllmVersion: "0.13.0", }); }); it("SDK 2.27.1 with vLLM 0.13.0 is defined", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.SDK_2_27_1_VLLM_0_13_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: "0.13.0-neuronx-py312-sdk2.27.1-ubuntu24.04", neuronSdkVersion: "2.27.1", vllmVersion: "0.13.0", }); }); it("SDK 2.27.1 with vLLM 0.11.0 is defined", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.SDK_2_27_1_VLLM_0_11_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: "0.11.0-neuronx-py312-sdk2.27.1-ubuntu24.04", neuronSdkVersion: "2.27.1", vllmVersion: "0.11.0", }); }); it("SDK 2.26.1 is defined", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.SDK_2_26_1; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: "0.9.1-neuronx-py311-sdk2.26.1-ubuntu22.04", neuronSdkVersion: "2.26.1", vllmVersion: "0.9.1", }); }); it("SDK 2.26.0 is defined", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.SDK_2_26_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: "0.9.1-neuronx-py311-sdk2.26.0-ubuntu22.04", neuronSdkVersion: "2.26.0", vllmVersion: "0.9.1", }); }); it("SDK 2.25.0 is defined", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.SDK_2_25_0; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: "0.9.1-neuronx-py310-sdk2.25.0-ubuntu22.04", neuronSdkVersion: "2.25.0", vllmVersion: "0.9.1", }); }); it("SDK 2.24.1 is defined", () => { const image = deep_learning_containers_1.VllmInferenceNeuronxImage.SDK_2_24_1; expect(image).toStrictEqual({ imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: "0.7.2-neuronx-py310-sdk2.24.1-ubuntu22.04", neuronSdkVersion: "2.24.1", vllmVersion: "0.7.2", }); }); it("LATEST points to the highest SDK version", () => { expect(deep_learning_containers_1.VllmInferenceNeuronxImage.LATEST.neuronSdkVersion).toBe("2.28.0"); }); }); describe("PytorchTrainingNeuronxImage", () => { it("Can get LATEST version", () => { const image = deep_learning_containers_1.PytorchTrainingNeuronxImage.LATEST; expect(image).not.toBeUndefined(); expect(image).toStrictEqual({ imageName: undefined, imageTag: expect.any(String), neuronSdkVersion: expect.any(String), }); }); it("SDK 2.28.0 is defined", () => { const image = deep_learning_containers_1.PytorchTrainingNeuronxImage.SDK_2_28_0; expect(image).toStrictEqual({ imageName: undefined, imageTag: "2.9.0-neuronx-py312-sdk2.28.0-ubuntu24.04", neuronSdkVersion: "2.28.0", }); }); it("LATEST points to the highest SDK version", () => { expect(deep_learning_containers_1.PytorchTrainingNeuronxImage.LATEST.neuronSdkVersion).toBe("2.28.0"); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1sZWFybmluZy1jb250YWluZXJzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFzZS9uZXVyb254L2RlZXAtbGVhcm5pbmctY29udGFpbmVycy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUVBSW9DO0FBRXBDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7SUFDNUMsRUFBRSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtRQUNoQyxNQUFNLEtBQUssR0FBRyx1REFBNEIsQ0FBQyxNQUFNLENBQUM7UUFDbEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLE1BQU0sS0FBSyxHQUFHLHVEQUE0QixDQUFDLFVBQVUsQ0FBQztRQUN0RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQzFCLFNBQVMsRUFBRSxpREFBaUQ7WUFDNUQsUUFBUSxFQUFFLDJDQUEyQztZQUNyRCxnQkFBZ0IsRUFBRSxRQUFRO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUMvQixNQUFNLEtBQUssR0FBRyx1REFBNEIsQ0FBQyxVQUFVLENBQUM7UUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFB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Q0FBQztJQUM3RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUHl0b3JjaEluZmVyZW5jZU5ldXJvbnhJbWFnZSxcbiAgUHl0b3JjaFRyYWluaW5nTmV1cm9ueEltYWdlLFxuICBWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLFxufSBmcm9tIFwiLi9kZWVwLWxlYXJuaW5nLWNvbnRhaW5lcnNcIjtcblxuZGVzY3JpYmUoXCJQeXRvcmNoSW5mZXJlbmNlTmV1cm9ueEltYWdlXCIsICgpID0+IHtcbiAgaXQoXCJDYW4gZ2V0IExBVEVTVCB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IFB5dG9yY2hJbmZlcmVuY2VOZXVyb254SW1hZ2UuTEFURVNUO1xuICAgIGV4cGVjdChpbWFnZSkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoaW1hZ2UuaW1hZ2VUYWcpLnRvRXF1YWwoZXhwZWN0LmFueShTdHJpbmcpKTtcbiAgICBleHBlY3QoaW1hZ2UubmV1cm9uU2RrVmVyc2lvbikudG9FcXVhbChleHBlY3QuYW55KFN0cmluZykpO1xuICB9KTtcblxuICBpdChcIlNESyAyLjI4LjAgaXMgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBQeXRvcmNoSW5mZXJlbmNlTmV1cm9ueEltYWdlLlNES18yXzI4XzA7XG4gICAgZXhwZWN0KGltYWdlKS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGltYWdlTmFtZTogXCJwdWJsaWMuZWNyLmF3cy9uZXVyb24vcHl0b3JjaC1pbmZlcmVuY2UtbmV1cm9ueFwiLFxuICAgICAgaW1hZ2VUYWc6IFwiMi45LjAtbmV1cm9ueC1weTMxMi1zZGsyLjI4LjAtdWJ1bnR1MjQuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yOC4wXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiU0RLIDIuMjcuMSBpcyBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IFB5dG9yY2hJbmZlcmVuY2VOZXVyb254SW1hZ2UuU0RLXzJfMjdfMTtcbiAgICBleHBlY3QoaW1hZ2UpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgaW1hZ2VOYW1lOiBcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLWluZmVyZW5jZS1uZXVyb254XCIsXG4gICAgICBpbWFnZVRhZzogXCIyLjkuMC1uZXVyb254LXB5MzEyLXNkazIuMjcuMS11YnVudHUyNC4wNFwiLFxuICAgICAgbmV1cm9uU2RrVmVyc2lvbjogXCIyLjI3LjFcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJTREsgMi4yNi4xIGlzIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gUHl0b3JjaEluZmVyZW5jZU5ldXJvbnhJbWFnZS5TREtfMl8yNl8xO1xuICAgIGV4cGVjdChpbWFnZSkudG9TdHJpY3RFcXVhbCh7XG4gICAgICBpbWFnZU5hbWU6IFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtaW5mZXJlbmNlLW5ldXJvbnhcIixcbiAgICAgIGltYWdlVGFnOiBcIjIuOC4wLW5ldXJvbngtcHkzMTEtc2RrMi4yNi4xLXVidW50dTIyLjA0XCIsXG4gICAgICBuZXVyb25TZGtWZXJzaW9uOiBcIjIuMjYuMVwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIlNESyAyLjI1LjAgaXMgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBQeXRvcmNoSW5mZXJlbmNlTmV1cm9ueEltYWdlLlNES18yXzI1XzA7XG4gICAgZXhwZWN0KGltYWdlKS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGltYWdlTmFtZTogXCJwdWJsaWMuZWNyLmF3cy9uZXVyb24vcHl0b3JjaC1pbmZlcmVuY2UtbmV1cm9ueFwiLFxuICAgICAgaW1hZ2VUYWc6IFwiMi43LjAtbmV1cm9ueC1weTMxMC1zZGsyLjI1LjAtdWJ1bnR1MjIuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yNS4wXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiU0RLIDIuMjMuMCBpcyBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IFB5dG9yY2hJbmZlcmVuY2VOZXVyb254SW1hZ2UuU0RLXzJfMjNfMDtcbiAgICBleHBlY3QoaW1hZ2UpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgaW1hZ2VOYW1lOiBcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLWluZmVyZW5jZS1uZXVyb254XCIsXG4gICAgICBpbWFnZVRhZzogXCIyLjYuMC1uZXVyb254LXB5MzEwLXNkazIuMjMuMC11YnVudHUyMi4wNFwiLFxuICAgICAgbmV1cm9uU2RrVmVyc2lvbjogXCIyLjIzLjBcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJTREsgMi4yMi4wIGlzIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gUHl0b3JjaEluZmVyZW5jZU5ldXJvbnhJbWFnZS5TREtfMl8yMl8wO1xuICAgIGV4cGVjdChpbWFnZSkudG9TdHJpY3RFcXVhbCh7XG4gICAgICBpbWFnZU5hbWU6IFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtaW5mZXJlbmNlLW5ldXJvbnhcIixcbiAgICAgIGltYWdlVGFnOiBcIjIuNS4xLW5ldXJvbngtcHkzMTAtc2RrMi4yMi4wLXVidW50dTIyLjA0XCIsXG4gICAgICBuZXVyb25TZGtWZXJzaW9uOiBcIjIuMjIuMFwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIlNESyAyLjIwLjIgd2l0aCBQeVRvcmNoIDIuMS4yIGlzIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gUHl0b3JjaEluZmVyZW5jZU5ldXJvbnhJbWFnZS5TREtfMl8yMF8yX1BZVE9SQ0hfMl8xXzI7XG4gICAgZXhwZWN0KGltYWdlKS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGltYWdlTmFtZTogXCJwdWJsaWMuZWNyLmF3cy9uZXVyb24vcHl0b3JjaC1pbmZlcmVuY2UtbmV1cm9ueFwiLFxuICAgICAgaW1hZ2VUYWc6IFwiMi4xLjItbmV1cm9ueC1weTMxMC1zZGsyLjIwLjItdWJ1bnR1MjAuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yMC4yXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiU0RLIDIuMjAuMiB3aXRoIFB5VG9yY2ggMS4xMy4xIGlzIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gUHl0b3JjaEluZmVyZW5jZU5ldXJvbnhJbWFnZS5TREtfMl8yMF8yX1BZVE9SQ0hfMV8xM18xO1xuICAgIGV4cGVjdChpbWFnZSkudG9TdHJpY3RFcXVhbCh7XG4gICAgICBpbWFnZU5hbWU6IFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtaW5mZXJlbmNlLW5ldXJvbnhcIixcbiAgICAgIGltYWdlVGFnOiBcIjEuMTMuMS1uZXVyb254LXB5MzEwLXNkazIuMjAuMi11YnVudHUyMC4wNFwiLFxuICAgICAgbmV1cm9uU2RrVmVyc2lvbjogXCIyLjIwLjJcIixcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlXCIsICgpID0+IHtcbiAgaXQoXCJDYW4gZ2V0IExBVEVTVCB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IFZsbG1JbmZlcmVuY2VOZXVyb254SW1hZ2UuTEFURVNUO1xuICAgIGV4cGVjdChpbWFnZSkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoaW1hZ2UpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgaW1hZ2VOYW1lOiBcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLWluZmVyZW5jZS12bGxtLW5ldXJvbnhcIixcbiAgICAgIGltYWdlVGFnOiBleHBlY3QuYW55KFN0cmluZyksXG4gICAgICBuZXVyb25TZGtWZXJzaW9uOiBleHBlY3QuYW55KFN0cmluZyksXG4gICAgICB2bGxtVmVyc2lvbjogZXhwZWN0LmFueShTdHJpbmcpLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIlNESyAyLjI4LjAgaXMgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLlNES18yXzI4XzA7XG4gICAgZXhwZWN0KGltYWdlKS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGltYWdlTmFtZTogXCJwdWJsaWMuZWNyLmF3cy9uZXVyb24vcHl0b3JjaC1pbmZlcmVuY2UtdmxsbS1uZXVyb254XCIsXG4gICAgICBpbWFnZVRhZzogXCIwLjEzLjAtbmV1cm9ueC1weTMxMi1zZGsyLjI4LjAtdWJ1bnR1MjQuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yOC4wXCIsXG4gICAgICB2bGxtVmVyc2lvbjogXCIwLjEzLjBcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJTREsgMi4yNy4xIHdpdGggdkxMTSAwLjEzLjAgaXMgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLlNES18yXzI3XzFfVkxMTV8wXzEzXzA7XG4gICAgZXhwZWN0KGltYWdlKS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGltYWdlTmFtZTogXCJwdWJsaWMuZWNyLmF3cy9uZXVyb24vcHl0b3JjaC1pbmZlcmVuY2UtdmxsbS1uZXVyb254XCIsXG4gICAgICBpbWFnZVRhZzogXCIwLjEzLjAtbmV1cm9ueC1weTMxMi1zZGsyLjI3LjEtdWJ1bnR1MjQuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yNy4xXCIsXG4gICAgICB2bGxtVmVyc2lvbjogXCIwLjEzLjBcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJTREsgMi4yNy4xIHdpdGggdkxMTSAwLjExLjAgaXMgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLlNES18yXzI3XzFfVkxMTV8wXzExXzA7XG4gICAgZXhwZWN0KGltYWdlKS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGltYWdlTmFtZTogXCJwdWJsaWMuZWNyLmF3cy9uZXVyb24vcHl0b3JjaC1pbmZlcmVuY2UtdmxsbS1uZXVyb254XCIsXG4gICAgICBpbWFnZVRhZzogXCIwLjExLjAtbmV1cm9ueC1weTMxMi1zZGsyLjI3LjEtdWJ1bnR1MjQuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yNy4xXCIsXG4gICAgICB2bGxtVmVyc2lvbjogXCIwLjExLjBcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJTREsgMi4yNi4xIGlzIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gVmxsbUluZmVyZW5jZU5ldXJvbnhJbWFnZS5TREtfMl8yNl8xO1xuICAgIGV4cGVjdChpbWFnZSkudG9TdHJpY3RFcXVhbCh7XG4gICAgICBpbWFnZU5hbWU6IFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtaW5mZXJlbmNlLXZsbG0tbmV1cm9ueFwiLFxuICAgICAgaW1hZ2VUYWc6IFwiMC45LjEtbmV1cm9ueC1weTMxMS1zZGsyLjI2LjEtdWJ1bnR1MjIuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yNi4xXCIsXG4gICAgICB2bGxtVmVyc2lvbjogXCIwLjkuMVwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIlNESyAyLjI2LjAgaXMgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLlNES18yXzI2XzA7XG4gICAgZXhwZWN0KGltYWdlKS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGltYWdlTmFtZTogXCJwdWJsaWMuZWNyLmF3cy9uZXVyb24vcHl0b3JjaC1pbmZlcmVuY2UtdmxsbS1uZXVyb254XCIsXG4gICAgICBpbWFnZVRhZzogXCIwLjkuMS1uZXVyb254LXB5MzExLXNkazIuMjYuMC11YnVudHUyMi4wNFwiLFxuICAgICAgbmV1cm9uU2RrVmVyc2lvbjogXCIyLjI2LjBcIixcbiAgICAgIHZsbG1WZXJzaW9uOiBcIjAuOS4xXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiU0RLIDIuMjUuMCBpcyBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IFZsbG1JbmZlcmVuY2VOZXVyb254SW1hZ2UuU0RLXzJfMjVfMDtcbiAgICBleHBlY3QoaW1hZ2UpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgaW1hZ2VOYW1lOiBcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLWluZmVyZW5jZS12bGxtLW5ldXJvbnhcIixcbiAgICAgIGltYWdlVGFnOiBcIjAuOS4xLW5ldXJvbngtcHkzMTAtc2RrMi4yNS4wLXVidW50dTIyLjA0XCIsXG4gICAgICBuZXVyb25TZGtWZXJzaW9uOiBcIjIuMjUuMFwiLFxuICAgICAgdmxsbVZlcnNpb246IFwiMC45LjFcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJTREsgMi4yNC4xIGlzIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gVmxsbUluZmVyZW5jZU5ldXJvbnhJbWFnZS5TREtfMl8yNF8xO1xuICAgIGV4cGVjdChpbWFnZSkudG9TdHJpY3RFcXVhbCh7XG4gICAgICBpbWFnZU5hbWU6IFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtaW5mZXJlbmNlLXZsbG0tbmV1cm9ueFwiLFxuICAgICAgaW1hZ2VUYWc6IFwiMC43LjItbmV1cm9ueC1weTMxMC1zZGsyLjI0LjEtdWJ1bnR1MjIuMDRcIixcbiAgICAgIG5ldXJvblNka1ZlcnNpb246IFwiMi4yNC4xXCIsXG4gICAgICB2bGxtVmVyc2lvbjogXCIwLjcuMlwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIkxBVEVTVCBwb2ludHMgdG8gdGhlIGhpZ2hlc3QgU0RLIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLkxBVEVTVC5uZXVyb25TZGtWZXJzaW9uKS50b0JlKFwiMi4yOC4wXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlB5dG9yY2hUcmFpbmluZ05ldXJvbnhJbWFnZVwiLCAoKSA9PiB7XG4gIGl0KFwiQ2FuIGdldCBMQVRFU1QgdmVyc2lvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBQeXRvcmNoVHJhaW5pbmdOZXVyb254SW1hZ2UuTEFURVNUO1xuICAgIGV4cGVjdChpbWFnZSkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoaW1hZ2UpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgaW1hZ2VOYW1lOiB1bmRlZmluZWQsXG4gICAgICBpbWFnZVRhZzogZXhwZWN0LmFueShTdHJpbmcpLFxuICAgICAgbmV1cm9uU2RrVmVyc2lvbjogZXhwZWN0LmFueShTdHJpbmcpLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIlNESyAyLjI4LjAgaXMgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBQeXRvcmNoVHJhaW5pbmdOZXVyb254SW1hZ2UuU0RLXzJfMjhfMDtcbiAgICBleHBlY3QoaW1hZ2UpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgaW1hZ2VOYW1lOiB1bmRlZmluZWQsXG4gICAgICBpbWFnZVRhZzogXCIyLjkuMC1uZXVyb254LXB5MzEyLXNkazIuMjguMC11YnVudHUyNC4wNFwiLFxuICAgICAgbmV1cm9uU2RrVmVyc2lvbjogXCIyLjI4LjBcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJMQVRFU1QgcG9pbnRzIHRvIHRoZSBoaWdoZXN0IFNESyB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICBleHBlY3QoUHl0b3JjaFRyYWluaW5nTmV1cm9ueEltYWdlLkxBVEVTVC5uZXVyb25TZGtWZXJzaW9uKS50b0JlKFwiMi4yOC4wXCIpO1xuICB9KTtcbn0pO1xuIl19