appium-cdp-driver 1.0.6 → 1.0.7

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.
@@ -1,134 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
- var __importDefault = (this && this.__importDefault) || function (mod) {
13
- return (mod && mod.__esModule) ? mod : { "default": mod };
14
- };
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- const appium_uiautomator2_driver_1 = require("appium-uiautomator2-driver");
17
- const appium_adb_1 = require("appium-adb");
18
- const logger_js_1 = __importDefault(require("../src/logger.js"));
19
- const asyncbox_1 = require("asyncbox");
20
- const START_APP_WAIT_DURATION = 60000;
21
- const opera = {
22
- pkg: 'com.opera.browser',
23
- activity: 'com.opera.android.BrowserActivity',
24
- };
25
- const common = {
26
- waitDuration: START_APP_WAIT_DURATION,
27
- optionalIntentArguments: '-d www.appium.io',
28
- };
29
- function skipWelcomeOpera() {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- const adb = yield appium_adb_1.ADB.createADB();
32
- yield adb.adbExec(['shell', 'pm', 'clear', 'com.opera.browser']);
33
- //await adb.startApp(Object.assign({}, opera, common));
34
- const driver = new appium_uiautomator2_driver_1.AndroidUiautomator2Driver();
35
- const caps = {
36
- platformName: "Android",
37
- "appium:automationName": "UiAutomator2",
38
- "appium:deviceName": "Android Device",
39
- "appium:appPackage": "com.opera.browser",
40
- "appium:appActivity": "com.opera.android.BrowserActivity",
41
- };
42
- try {
43
- yield driver.createSession(null, {
44
- alwaysMatch: caps,
45
- firstMatch: [{}],
46
- });
47
- const activity = yield driver.getCurrentActivity();
48
- logger_js_1.default.info(`Activity is ${activity}`);
49
- if (activity.includes('Welcome')) {
50
- // Helper function to find element with waitForCondition
51
- const findElementWithWaitForCondition = (strategy_1, selector_1, ...args_1) => __awaiter(this, [strategy_1, selector_1, ...args_1], void 0, function* (strategy, selector, timeout = 30000) {
52
- try {
53
- return yield (0, asyncbox_1.waitForCondition)(() => __awaiter(this, void 0, void 0, function* () {
54
- try {
55
- logger_js_1.default.info(`Attempting to find element (${strategy}: ${selector})`);
56
- const element = yield driver.findElement(strategy, selector);
57
- logger_js_1.default.info(`Successfully found element (${strategy}: ${selector})`);
58
- return element;
59
- }
60
- catch (error) {
61
- // Return false to continue waiting
62
- return false;
63
- }
64
- }), {
65
- waitMs: timeout,
66
- intervalMs: 2000,
67
- });
68
- }
69
- catch (error) {
70
- throw new Error(`Failed to find element (${strategy}: ${selector}) within ${timeout}ms timeout: ${error.message}`);
71
- }
72
- });
73
- const nextButton = yield findElementWithWaitForCondition('id', 'com.opera.browser:id/continue_button');
74
- logger_js_1.default.info(`Next button is ${JSON.stringify(nextButton, null, 2)}`);
75
- yield driver.click(nextButton.ELEMENT);
76
- const skipButton = yield findElementWithWaitForCondition('id', 'com.opera.browser:id/skip_button');
77
- const MAX_RETRIES = 3;
78
- let attempt = 0;
79
- let found = false;
80
- while (attempt < MAX_RETRIES && !found) {
81
- yield driver.click(skipButton.ELEMENT);
82
- try {
83
- yield findElementWithWaitForCondition('xpath', '//android.widget.Button[@text="Enable notifications"]');
84
- found = true;
85
- }
86
- catch (error) {
87
- logger_js_1.default.info(`Enable notifications text not found, retrying skip...`);
88
- attempt++;
89
- }
90
- }
91
- const skipAgainButton = yield findElementWithWaitForCondition('id', 'com.opera.browser:id/skip_button');
92
- attempt = 0;
93
- found = false;
94
- while (attempt < MAX_RETRIES && !found) {
95
- yield driver.click(skipAgainButton.ELEMENT);
96
- try {
97
- yield findElementWithWaitForCondition('xpath', '//android.widget.Button[@text="Allow"]');
98
- found = true;
99
- }
100
- catch (error) {
101
- logger_js_1.default.info(`Enable notifications text not found, retrying skip...`);
102
- attempt++;
103
- }
104
- }
105
- const allowButton = yield findElementWithWaitForCondition('xpath', '//android.widget.Button[@text="Allow"]');
106
- yield driver.click(allowButton.ELEMENT);
107
- attempt = 0;
108
- found = false;
109
- while (attempt < MAX_RETRIES && !found) {
110
- try {
111
- const doneButton = yield findElementWithWaitForCondition('id', 'com.opera.browser:id/positive_button', 8000);
112
- yield driver.click(doneButton.ELEMENT);
113
- found = true;
114
- }
115
- catch (error) {
116
- logger_js_1.default.info(`Done button not found, retrying after opening a url...`);
117
- }
118
- finally {
119
- yield adb.shell(['am', 'start', '-a', 'android.intent.action.VIEW', '-d', 'https://www.appium.io', opera.pkg]);
120
- attempt++;
121
- }
122
- }
123
- }
124
- }
125
- finally {
126
- yield driver.deleteSession();
127
- }
128
- });
129
- }
130
- (() => __awaiter(void 0, void 0, void 0, function* () {
131
- yield skipWelcomeOpera();
132
- process.exit(0);
133
- }))();
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zY3JpcHRzL29wZXJhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUVBLDJFQUF1RTtBQUN2RSwyQ0FBaUM7QUFDakMsaUVBQW1DO0FBQ25DLHVDQUE0QztBQUU1QyxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxNQUFNLEtBQUssR0FBRztJQUNaLEdBQUcsRUFBRSxtQkFBbUI7SUFDeEIsUUFBUSxFQUFFLG1DQUFtQztDQUM5QyxDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQUc7SUFDYixZQUFZLEVBQUUsdUJBQXVCO0lBQ3JDLHVCQUF1QixFQUFFLGtCQUFrQjtDQUM1QyxDQUFDO0FBRUYsU0FBZSxnQkFBZ0I7O1FBQzdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDakUsdURBQXVEO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksc0RBQXlCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRztZQUNYLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLHVCQUF1QixFQUFFLGNBQWM7WUFDdkMsbUJBQW1CLEVBQUUsZ0JBQWdCO1lBQ3JDLG1CQUFtQixFQUFFLG1CQUFtQjtZQUN4QyxvQkFBb0IsRUFBRSxtQ0FBbUM7U0FDMUQsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0JBQy9CLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FB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
@@ -1,97 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
- var __importDefault = (this && this.__importDefault) || function (mod) {
13
- return (mod && mod.__esModule) ? mod : { "default": mod };
14
- };
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- const appium_uiautomator2_driver_1 = require("appium-uiautomator2-driver");
17
- const appium_adb_1 = require("appium-adb");
18
- const logger_js_1 = __importDefault(require("../src/logger.js"));
19
- const asyncbox_1 = require("asyncbox");
20
- const START_APP_WAIT_DURATION = 60000;
21
- const samsung = {
22
- pkg: 'com.sec.android.app.sbrowser',
23
- activity: 'com.sec.android.app.sbrowser.SBrowserMainActivity',
24
- };
25
- const common = {
26
- waitDuration: START_APP_WAIT_DURATION,
27
- optionalIntentArguments: '-d www.appium.io',
28
- };
29
- function skipWelcomeSamsung() {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- const adb = yield appium_adb_1.ADB.createADB();
32
- yield adb.adbExec(['shell', 'pm', 'clear', samsung.pkg]);
33
- const driver = new appium_uiautomator2_driver_1.AndroidUiautomator2Driver();
34
- const caps = {
35
- platformName: "Android",
36
- "appium:automationName": "UiAutomator2",
37
- "appium:deviceName": "Android Device",
38
- "appium:appPackage": samsung.pkg,
39
- "appium:appActivity": samsung.activity,
40
- };
41
- try {
42
- yield driver.createSession(null, {
43
- alwaysMatch: caps,
44
- firstMatch: [{}],
45
- });
46
- const activity = yield driver.getCurrentActivity();
47
- logger_js_1.default.info(`Activity is ${activity}`);
48
- if (activity.includes('HelpIntroActivity')) {
49
- const findElementWithWaitForCondition = (strategy_1, selector_1, ...args_1) => __awaiter(this, [strategy_1, selector_1, ...args_1], void 0, function* (strategy, selector, timeout = 6000) {
50
- try {
51
- return yield (0, asyncbox_1.waitForCondition)(() => __awaiter(this, void 0, void 0, function* () {
52
- try {
53
- logger_js_1.default.info(`Attempting to find element (${strategy}: ${selector})`);
54
- const element = yield driver.findElement(strategy, selector);
55
- logger_js_1.default.info(`Successfully found element (${strategy}: ${selector})`);
56
- return element;
57
- }
58
- catch (error) {
59
- // Return false to continue waiting
60
- return false;
61
- }
62
- }), {
63
- waitMs: timeout,
64
- intervalMs: 1000,
65
- });
66
- }
67
- catch (error) {
68
- throw new Error(`Failed to find element (${strategy}: ${selector}) within ${timeout}ms timeout: ${error.message}`);
69
- }
70
- });
71
- const MAX_RETRIES = 2;
72
- let attempt = 0;
73
- while (attempt < MAX_RETRIES) {
74
- try {
75
- const buttonToClick = yield findElementWithWaitForCondition('id', 'com.sec.android.app.sbrowser:id/help_intro_legal_agree_button');
76
- logger_js_1.default.info(`Button to click is ${JSON.stringify(buttonToClick, null, 2)}`);
77
- yield driver.click(buttonToClick.ELEMENT);
78
- }
79
- catch (error) {
80
- logger_js_1.default.info(`Continue button not found, retrying...`);
81
- }
82
- finally {
83
- attempt++;
84
- }
85
- }
86
- }
87
- }
88
- finally {
89
- yield driver.deleteSession();
90
- }
91
- });
92
- }
93
- (() => __awaiter(void 0, void 0, void 0, function* () {
94
- yield skipWelcomeSamsung();
95
- process.exit(0);
96
- }))();
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Ftc3VuZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NjcmlwdHMvc2Ftc3VuZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFQSwyRUFBdUU7QUFDdkUsMkNBQWlDO0FBQ2pDLGlFQUFtQztBQUNuQyx1Q0FBNEM7QUFFNUMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFFdEMsTUFBTSxPQUFPLEdBQUc7SUFDZCxHQUFHLEVBQUUsOEJBQThCO0lBQ25DLFFBQVEsRUFBRSxtREFBbUQ7Q0FDOUQsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFHO0lBQ2IsWUFBWSxFQUFFLHVCQUF1QjtJQUNyQyx1QkFBdUIsRUFBRSxrQkFBa0I7Q0FDNUMsQ0FBQztBQUVGLFNBQWUsa0JBQWtCOztRQUMvQixNQUFNLEdBQUcsR0FBRyxNQUFNLGdCQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxzREFBeUIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHO1lBQ1gsWUFBWSxFQUFFLFNBQVM7WUFDdkIsdUJBQXVCLEVBQUUsY0FBYztZQUN2QyxtQkFBbUIsRUFBRSxnQkFBZ0I7WUFDckMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0JBQy9CLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMs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
package/build/src/adb.js DELETED
@@ -1,162 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getAdb = getAdb;
16
- exports.requireSdkRoot = requireSdkRoot;
17
- exports.adbExec = adbExec;
18
- exports.startApplication = startApplication;
19
- const appium_adb_1 = require("appium-adb");
20
- const support_1 = require("@appium/support");
21
- const get_port_1 = __importDefault(require("get-port"));
22
- const logger_1 = __importDefault(require("./logger"));
23
- let adb;
24
- const START_APP_WAIT_DURATION = 60000;
25
- const DEVTOOLS_SOCKET_MAP = {
26
- chrome: 'chrome_devtools_remote',
27
- brave: 'chrome_devtools_remote',
28
- opera: 'com.opera.browser.devtools',
29
- duckduckgo: 'webview_devtools_remote',
30
- samsung: 'Terrace_devtools_remote',
31
- edge: 'chrome_devtools_remote',
32
- terrance: 'com.sec.android.app.sbrowser_devtools_remote',
33
- };
34
- function getAdb() {
35
- return __awaiter(this, void 0, void 0, function* () {
36
- try {
37
- if (!adb) {
38
- adb = yield appium_adb_1.ADB.createADB();
39
- }
40
- }
41
- catch (e) {
42
- console.log(e);
43
- }
44
- });
45
- }
46
- function requireSdkRoot() {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- const sdkRoot = (0, appium_adb_1.getSdkRootFromEnv)();
49
- const docMsg = 'Read https://developer.android.com/studio/command-line/variables for more details';
50
- if (_.isEmpty(sdkRoot)) {
51
- throw new Error(`Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported. ${docMsg}`);
52
- }
53
- if (!(yield support_1.fs.exists(sdkRoot))) {
54
- throw new Error(`The Android SDK root folder '${sdkRoot}' does not exist on the local file system. ${docMsg}`);
55
- }
56
- const stats = yield support_1.fs.stat(sdkRoot);
57
- if (!stats.isDirectory()) {
58
- throw new Error(`The Android SDK root '${sdkRoot}' must be a folder. ${docMsg}`);
59
- }
60
- return sdkRoot;
61
- });
62
- }
63
- function adbExec() {
64
- return __awaiter(this, arguments, void 0, function* (browser = 'chrome') {
65
- let freePort = yield (0, get_port_1.default)();
66
- let devtoolsSocket = DEVTOOLS_SOCKET_MAP[browser] || `${browser}_devtools_remote`;
67
- if (browser === 'duckduckgo') {
68
- const pid = yield getDuckDuckGoPid(browser);
69
- if (pid) {
70
- devtoolsSocket = `webview_devtools_remote_${pid}`;
71
- }
72
- else {
73
- throw new Error(`Unable to get PID for ${browser}`);
74
- }
75
- }
76
- yield adb.adbExec([
77
- 'forward',
78
- `tcp:${freePort}`,
79
- `localabstract:${devtoolsSocket}`,
80
- ]);
81
- return freePort;
82
- });
83
- }
84
- function getDuckDuckGoPid() {
85
- return __awaiter(this, arguments, void 0, function* (browser = 'duckduckgo') {
86
- const packageName = 'com.duckduckgo.mobile.android';
87
- try {
88
- const output = yield adb.adbExec(['shell', 'pidof', packageName]);
89
- const pid = output.trim();
90
- return pid || null;
91
- }
92
- catch (err) {
93
- console.error(`Unable to get PID for ${browser}:`, err.message);
94
- return null;
95
- }
96
- });
97
- }
98
- function startApplication() {
99
- return __awaiter(this, arguments, void 0, function* (browser = 'chrome') {
100
- const common = {
101
- waitDuration: START_APP_WAIT_DURATION,
102
- optionalIntentArguments: '-d www.appium.io',
103
- };
104
- const chrome = {
105
- pkg: 'com.android.chrome',
106
- activity: 'com.google.android.apps.chrome.Main',
107
- };
108
- const terrance = {
109
- pkg: 'com.sec.android.app.sbrowser',
110
- activity: 'com.sec.android.app.sbrowser.SBrowserMainActivity',
111
- };
112
- const brave = {
113
- pkg: 'com.brave.browser',
114
- activity: 'com.google.android.apps.chrome.Main',
115
- };
116
- const opera = {
117
- pkg: 'com.opera.browser',
118
- activity: 'com.opera.android.BrowserActivity',
119
- };
120
- const duckduckgo = {
121
- pkg: 'com.duckduckgo.mobile.android',
122
- activity: 'com.duckduckgo.app.browser.BrowserActivity',
123
- };
124
- const samsung = {
125
- pkg: 'com.sec.android.app.sbrowser',
126
- activity: 'com.sec.android.app.sbrowser.SBrowserMainActivity',
127
- };
128
- const edge = {
129
- pkg: 'com.microsoft.emmx',
130
- activity: 'com.microsoft.ruby.Main',
131
- };
132
- if (browser === 'chrome') {
133
- logger_1.default.info(`Starting Chrome`);
134
- yield adb.startApp(Object.assign({}, chrome, common));
135
- }
136
- else if (browser === 'terrance') {
137
- logger_1.default.info(`Starting Terrance`);
138
- yield adb.startApp(Object.assign({}, terrance, common));
139
- }
140
- else if (browser === 'brave') {
141
- logger_1.default.info(`Starting Brave`);
142
- yield adb.startApp(Object.assign({}, brave, common));
143
- }
144
- else if (browser === 'opera') {
145
- logger_1.default.info(`Starting Opera`);
146
- yield adb.startApp(Object.assign({}, opera, common));
147
- }
148
- else if (browser === 'duckduckgo') {
149
- logger_1.default.info(`Starting DuckDuckGo`);
150
- yield adb.startApp(Object.assign({}, duckduckgo, common));
151
- }
152
- else if (browser === 'samsung') {
153
- logger_1.default.info(`Starting Samsung Browser`);
154
- yield adb.startApp(Object.assign({}, samsung, common));
155
- }
156
- else if (browser === 'edge') {
157
- logger_1.default.info(`Starting MS Edge`);
158
- yield adb.startApp(Object.assign({}, edge, common));
159
- }
160
- });
161
- }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWtCQSx3QkFRQztBQUVELHdDQXNCQztBQUVELDBCQW9CQztBQWNELDRDQThEQztBQXBKRCwyQ0FBb0Q7QUFDcEQsNkNBQXFDO0FBQ3JDLHdEQUErQjtBQUMvQixzREFBMkI7QUFFM0IsSUFBSSxHQUFHLENBQUM7QUFDUixNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsS0FBSyxFQUFFLHdCQUF3QjtJQUMvQixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFVBQVUsRUFBRSx5QkFBeUI7SUFDckMsT0FBTyxFQUFFLHlCQUF5QjtJQUNsQyxJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLFFBQVEsRUFBRSw4Q0FBOEM7Q0FDekQsQ0FBQztBQUVGLFNBQXNCLE1BQU07O1FBQzFCLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsTUFBTSxnQkFBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7Q0FBQTtBQUVELFNBQXNCLGNBQWM7O1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUEsOEJBQWlCLEdBQUUsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FDVixtRkFBbUYsQ0FBQztRQUN0RixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUNiLGdGQUFnRixNQUFNLEVBQUUsQ0FDekYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJ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
package/build/src/cdp.js DELETED
@@ -1,22 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.getNetwork = getNetwork;
13
- const taiko_1 = require("taiko");
14
- function getNetwork() {
15
- return __awaiter(this, void 0, void 0, function* () {
16
- const cdpClient = yield (0, taiko_1.client)();
17
- const Network = cdpClient.Network;
18
- yield Network.enable();
19
- return Network;
20
- });
21
- }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NkcC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBLGdDQUtDO0FBUEQsaUNBQStCO0FBRS9CLFNBQXNCLFVBQVU7O1FBQzVCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSxjQUFNLEdBQUUsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FBQSJ9
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.elementCache = exports.helpers = exports.commands = void 0;
16
- const cdp_1 = require("../cdp");
17
- const url_1 = __importDefault(require("./url"));
18
- let commands = {}, helpers = {}, extensions = {};
19
- exports.commands = commands;
20
- exports.helpers = helpers;
21
- commands.setCookie = function setCookie(cookie) {
22
- return __awaiter(this, void 0, void 0, function* () {
23
- const url = yield url_1.default.getUrl();
24
- const origin = (new URL(url)).origin;
25
- const options = {};
26
- options.name = cookie.name;
27
- options.value = cookie.value;
28
- options.url = origin;
29
- const network = yield (0, cdp_1.getNetwork)();
30
- return network.setCookie(options);
31
- });
32
- };
33
- commands.getCookies = function getCookies() {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- const network = yield (0, cdp_1.getNetwork)();
36
- const allCookies = yield network.getAllCookies();
37
- return allCookies.cookies;
38
- });
39
- };
40
- commands.getCookie = function getCookie(key) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- const network = yield (0, cdp_1.getNetwork)();
43
- const allCookies = yield network.getAllCookies();
44
- return allCookies.cookies.filter((cookie) => { return cookie.name === key; })[0];
45
- });
46
- };
47
- commands.deleteCookie = function deleteCookie(key) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- const allCookies = yield commands.getCookies();
50
- const cookie = allCookies.filter((cookie) => { return cookie.name === key; })[0];
51
- const network = yield (0, cdp_1.getNetwork)();
52
- return network.deleteCookies({ name: key, domain: cookie.domain });
53
- });
54
- };
55
- commands.deleteCookies = function deleteAllCookies() {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- const network = yield (0, cdp_1.getNetwork)();
58
- return network.clearBrowserCookies();
59
- });
60
- };
61
- Object.assign(extensions, commands, helpers);
62
- exports.default = extensions;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb29raWVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdDQUFvQztBQUNwQyxnREFBZ0M7QUFFaEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNiLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQXdDWCw0QkFBUTtBQUFFLDBCQUFPO0FBdEMxQixRQUFRLENBQUMsU0FBUyxHQUFHLFNBQWUsU0FBUyxDQUFDLE1BQU07O1FBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFckMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMzQixPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFFckIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLGdCQUFVLEdBQUUsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUFBLENBQUE7QUFFRCxRQUFRLENBQUMsVUFBVSxHQUFHLFNBQWUsVUFBVTs7UUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLGdCQUFVLEdBQUUsQ0FBQztRQUNuQyxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDOUIsQ0FBQztDQUFBLENBQUE7QUFFRCxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQWUsU0FBUyxDQUFDLEdBQUc7O1FBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxnQkFBVSxHQUFFLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakQsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7Q0FBQSxDQUFBO0FBRUQsUUFBUSxDQUFDLFlBQVksR0FBRyxTQUFlLFlBQVksQ0FBQyxHQUFHOztRQUNuRCxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLGdCQUFVLEdBQUUsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQUEsQ0FBQTtBQUVELFFBQVEsQ0FBQyxhQUFhLEdBQUcsU0FBZSxnQkFBZ0I7O1FBQ3BELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxnQkFBVSxHQUFFLENBQUM7UUFDbkMsT0FBTyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0NBQUEsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUU3QyxrQkFBZSxVQUFVLENBQUMifQ==
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jcmVhdGVTZXNzaW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.elementCache = exports.helpers = exports.commands = void 0;
13
- const taiko_1 = require("taiko");
14
- let commands = {}, helpers = {}, extensions = {};
15
- exports.commands = commands;
16
- exports.helpers = helpers;
17
- commands.getPageSource = function pageSource() {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- return (0, taiko_1.evaluate)(() => { return document.documentElement.outerHTML; });
20
- });
21
- };
22
- Object.assign(extensions, commands, helpers);
23
- exports.default = extensions;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZG9jdW1lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQWlDO0FBRWpDLElBQUksUUFBUSxHQUFHLEVBQUUsRUFDZixPQUFPLEdBQUcsRUFBRSxFQUNaLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFPVCw0QkFBUTtBQUFFLDBCQUFPO0FBTDFCLFFBQVEsQ0FBQyxhQUFhLEdBQUcsU0FBZSxVQUFVOztRQUM5QyxPQUFPLElBQUEsZ0JBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUFBLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFN0Msa0JBQWUsVUFBVSxDQUFDIn0=
@@ -1,85 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.helpers = exports.commands = void 0;
13
- const taiko_1 = require("taiko");
14
- const find_1 = require("./find");
15
- let commands = {}, helpers = {}, extensions = {};
16
- exports.commands = commands;
17
- exports.helpers = helpers;
18
- function _click(element) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- yield (0, taiko_1.click)(element);
21
- });
22
- }
23
- commands.click = function click(elementId) {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- const element = find_1.elementCache[elementId];
26
- yield _click(element);
27
- });
28
- };
29
- commands.getText = function getText(elementId) {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- const element = find_1.elementCache[elementId];
32
- return element.text();
33
- });
34
- };
35
- commands.elementDisplayed = function elementDisplayed(elementId) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- const element = find_1.elementCache[elementId];
38
- return element.isVisible();
39
- });
40
- };
41
- commands.elementEnabled = function elementEnabled(elementId) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- const element = find_1.elementCache[elementId];
44
- return !(yield element.isDisabled());
45
- });
46
- };
47
- commands.setValue = function setValue(value, elementId) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- const element = find_1.elementCache[elementId];
50
- const input = Array.isArray(value) ? value.join('') : value;
51
- yield (0, taiko_1.write)(input, (0, taiko_1.into)(element));
52
- });
53
- };
54
- commands.clear = function clear(elementId) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- const element = find_1.elementCache[elementId];
57
- yield (0, taiko_1.write)("", (0, taiko_1.into)(element));
58
- });
59
- };
60
- commands.getAttribute = function getAttribute(value, elementId) {
61
- return __awaiter(this, void 0, void 0, function* () {
62
- const element = find_1.elementCache[elementId];
63
- return yield element.attribute(value);
64
- });
65
- };
66
- commands.getElementRect = function getElementRect(elementId) {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- const element = find_1.elementCache[elementId];
69
- return yield (0, taiko_1.evaluate)(element, (element) => {
70
- const { x, y, width, height } = element.getBoundingClientRect();
71
- return { x, y, width, height };
72
- });
73
- });
74
- };
75
- commands.getName = function getName(elementId) {
76
- return __awaiter(this, void 0, void 0, function* () {
77
- const element = find_1.elementCache[elementId];
78
- return yield (0, taiko_1.evaluate)(element, (element) => {
79
- return element.tagName;
80
- });
81
- });
82
- };
83
- Object.assign(extensions, commands, helpers);
84
- exports.default = extensions;
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFtRDtBQUNuRCxpQ0FBc0M7QUFFdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUNmLE9BQU8sR0FBRyxFQUFFLEVBQ1osVUFBVSxHQUFHLEVBQUUsQ0FBQztBQTJEVCw0QkFBUTtBQUFFLDBCQUFPO0FBekQxQixTQUFlLE1BQU0sQ0FBQyxPQUFPOztRQUMzQixNQUFNLElBQUEsYUFBSyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUNELFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBZSxLQUFLLENBQUMsU0FBUzs7UUFDN0MsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxPQUFPLEdBQUcsU0FBZSxPQUFPLENBQUMsU0FBUzs7UUFDakQsTUFBTSxPQUFPLEdBQUcsbUJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxTQUFlLGdCQUFnQixDQUFDLFNBQVM7O1FBQ25FLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsY0FBYyxHQUFHLFNBQWUsY0FBYyxDQUFDLFNBQVM7O1FBQy9ELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLENBQUEsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUEsQ0FBQztJQUNyQyxDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBZSxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVM7O1FBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzVELE1BQU0sSUFBQSxhQUFLLEVBQUMsS0FBSyxFQUFFLElBQUEsWUFBSSxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQWUsS0FBSyxDQUFDLFNBQVM7O1FBQzdDLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFBLGFBQUssRUFBQyxFQUFFLEVBQUUsSUFBQSxZQUFJLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQUEsQ0FBQztBQUVGLFFBQVEsQ0FBQyxZQUFZLEdBQUcsU0FBZSxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVM7O1FBQ2xFLE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUFBLENBQUM7QUFFRixRQUFRLENBQUMsY0FBYyxHQUFHLFNBQWUsY0FBYyxDQUFDLFNBQVM7O1FBQy9ELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUV6QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0QsT0FBTyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUFBLENBQUE7QUFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLFNBQWUsT0FBTyxDQUFDLFNBQVM7O1FBQ2pELE1BQU0sT0FBTyxHQUFHLG1CQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUUxQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQUEsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUU3QyxrQkFBZSxVQUFVLENBQUMifQ==