UNPKG

@spartacus/checkout

Version:

Checkout feature library for Spartacus

336 lines 46.9 kB
import { MULTI_CART_DATA, PROCESS_FEATURE, StateUtils, } from '@spartacus/core'; import { CHECKOUT_DETAILS, PLACED_ORDER_PROCESS_ID, SET_COST_CENTER_PROCESS_ID, SET_DELIVERY_ADDRESS_PROCESS_ID, SET_DELIVERY_MODE_PROCESS_ID, SET_PAYMENT_DETAILS_PROCESS_ID, SET_SUPPORTED_DELIVERY_MODE_PROCESS_ID, } from '../checkout-state'; export const CLEAR_CHECKOUT_DELIVERY_ADDRESS = '[Checkout] Clear Checkout Delivery Address'; export const CLEAR_CHECKOUT_DELIVERY_ADDRESS_SUCCESS = '[Checkout] Clear Checkout Delivery Address Success'; export const CLEAR_CHECKOUT_DELIVERY_ADDRESS_FAIL = '[Checkout] Clear Checkout Delivery Address Fail'; export const CLEAR_CHECKOUT_DELIVERY_MODE = '[Checkout] Clear Checkout Delivery Mode'; export const CLEAR_CHECKOUT_DELIVERY_MODE_SUCCESS = '[Checkout] Clear Checkout Delivery Mode Success'; export const CLEAR_CHECKOUT_DELIVERY_MODE_FAIL = '[Checkout] Clear Checkout Delivery Mode Fail'; export const ADD_DELIVERY_ADDRESS = '[Checkout] Add Delivery Address'; export const ADD_DELIVERY_ADDRESS_FAIL = '[Checkout] Add Delivery Address Fail'; export const ADD_DELIVERY_ADDRESS_SUCCESS = '[Checkout] Add Delivery Address Success'; export const SET_DELIVERY_ADDRESS = '[Checkout] Set Delivery Address'; export const SET_DELIVERY_ADDRESS_FAIL = '[Checkout] Set Delivery Address Fail'; export const SET_DELIVERY_ADDRESS_SUCCESS = '[Checkout] Set Delivery Address Success'; export const RESET_SET_DELIVERY_ADDRESS_PROCESS = '[Checkout] Reset Set Delivery Address Process'; export const LOAD_SUPPORTED_DELIVERY_MODES = '[Checkout] Load Supported Delivery Modes'; export const LOAD_SUPPORTED_DELIVERY_MODES_FAIL = '[Checkout] Load Supported Delivery Modes Fail'; export const LOAD_SUPPORTED_DELIVERY_MODES_SUCCESS = '[Checkout] Load Supported Delivery Modes Success'; export const CLEAR_SUPPORTED_DELIVERY_MODES = '[Checkout] Clear Supported Delivery Modes'; export const SET_DELIVERY_MODE = '[Checkout] Set Delivery Mode'; export const SET_DELIVERY_MODE_FAIL = '[Checkout] Set Delivery Mode Fail'; export const SET_DELIVERY_MODE_SUCCESS = '[Checkout] Set Delivery Mode Success'; export const RESET_SET_DELIVERY_MODE_PROCESS = '[Checkout] Reset Set Delivery Mode Process'; export const SET_SUPPORTED_DELIVERY_MODES = '[Checkout] Set Supported Delivery Modes'; export const SET_SUPPORTED_DELIVERY_MODES_FAIL = '[Checkout] Set Supported Delivery Modes Fail'; export const SET_SUPPORTED_DELIVERY_MODES_SUCCESS = '[Checkout] Set Supported Delivery Modes Success'; export const RESET_SUPPORTED_SET_DELIVERY_MODES_PROCESS = '[Checkout] Reset Set Supported Delivery Modes Process'; export const CREATE_PAYMENT_DETAILS = '[Checkout] Create Payment Details'; export const CREATE_PAYMENT_DETAILS_FAIL = '[Checkout] Create Payment Details Fail'; export const CREATE_PAYMENT_DETAILS_SUCCESS = '[Checkout] Create Payment Details Success'; export const SET_PAYMENT_DETAILS = '[Checkout] Set Payment Details'; export const SET_PAYMENT_DETAILS_FAIL = '[Checkout] Set Payment Details Fail'; export const SET_PAYMENT_DETAILS_SUCCESS = '[Checkout] Set Payment Details Success'; export const RESET_SET_PAYMENT_DETAILS_PROCESS = '[Checkout] Reset Set Payment Details Process'; export const PLACE_ORDER = '[Checkout] Place Order'; export const PLACE_ORDER_FAIL = '[Checkout] Place Order Fail'; export const PLACE_ORDER_SUCCESS = '[Checkout] Place Order Success'; export const CLEAR_PLACE_ORDER = '[Checkout] Clear Place Order'; export const CLEAR_CHECKOUT_STEP = '[Checkout] Clear One Checkout Step'; export const CLEAR_CHECKOUT_DATA = '[Checkout] Clear Checkout Data'; export const LOAD_CHECKOUT_DETAILS = '[Checkout] Load Checkout Details'; export const LOAD_CHECKOUT_DETAILS_FAIL = '[Checkout] Load Checkout Details Fail'; export const LOAD_CHECKOUT_DETAILS_SUCCESS = '[Checkout] Load Checkout Details Success'; export const CHECKOUT_CLEAR_MISCS_DATA = '[Checkout] Clear Miscs Data'; export const PAYMENT_PROCESS_SUCCESS = '[Checkout] Payment Process Success'; export const SET_COST_CENTER = '[Checkout] Set Cost Center'; export const SET_COST_CENTER_FAIL = '[Checkout] Set Cost Center Fail'; export const SET_COST_CENTER_SUCCESS = '[Checkout] Set Cost Center Success'; export const RESET_SET_COST_CENTER_PROCESS = '[Checkout] Reset Set Cost Center Process'; export class AddDeliveryAddress { constructor(payload) { this.payload = payload; this.type = ADD_DELIVERY_ADDRESS; } } export class AddDeliveryAddressFail { constructor(payload) { this.payload = payload; this.type = ADD_DELIVERY_ADDRESS_FAIL; } } export class AddDeliveryAddressSuccess { constructor(payload) { this.payload = payload; this.type = ADD_DELIVERY_ADDRESS_SUCCESS; } } export class SetDeliveryAddress extends StateUtils.EntityLoadAction { constructor(payload) { super(PROCESS_FEATURE, SET_DELIVERY_ADDRESS_PROCESS_ID); this.payload = payload; this.type = SET_DELIVERY_ADDRESS; } } export class SetDeliveryAddressFail extends StateUtils.EntityFailAction { constructor(payload) { super(PROCESS_FEATURE, SET_DELIVERY_ADDRESS_PROCESS_ID, payload); this.payload = payload; this.type = SET_DELIVERY_ADDRESS_FAIL; } } export class SetDeliveryAddressSuccess extends StateUtils.EntitySuccessAction { constructor(payload) { super(PROCESS_FEATURE, SET_DELIVERY_ADDRESS_PROCESS_ID); this.payload = payload; this.type = SET_DELIVERY_ADDRESS_SUCCESS; } } export class ResetSetDeliveryAddressProcess extends StateUtils.EntityLoaderResetAction { constructor() { super(PROCESS_FEATURE, SET_DELIVERY_ADDRESS_PROCESS_ID); this.type = RESET_SET_DELIVERY_ADDRESS_PROCESS; } } export class LoadSupportedDeliveryModes extends StateUtils.EntityLoadAction { constructor(payload) { super(PROCESS_FEATURE, SET_SUPPORTED_DELIVERY_MODE_PROCESS_ID); this.payload = payload; this.type = LOAD_SUPPORTED_DELIVERY_MODES; } } export class LoadSupportedDeliveryModesFail extends StateUtils.EntityFailAction { constructor(payload) { super(PROCESS_FEATURE, SET_SUPPORTED_DELIVERY_MODE_PROCESS_ID); this.payload = payload; this.type = LOAD_SUPPORTED_DELIVERY_MODES_FAIL; } } export class LoadSupportedDeliveryModesSuccess extends StateUtils.EntitySuccessAction { constructor(payload) { super(PROCESS_FEATURE, SET_SUPPORTED_DELIVERY_MODE_PROCESS_ID); this.payload = payload; this.type = LOAD_SUPPORTED_DELIVERY_MODES_SUCCESS; } } export class ResetLoadSupportedDeliveryModesProcess extends StateUtils.EntityLoaderResetAction { constructor() { super(PROCESS_FEATURE, SET_SUPPORTED_DELIVERY_MODE_PROCESS_ID); this.type = RESET_SUPPORTED_SET_DELIVERY_MODES_PROCESS; } } export class SetDeliveryMode extends StateUtils.EntityLoadAction { constructor(payload) { super(PROCESS_FEATURE, SET_DELIVERY_MODE_PROCESS_ID); this.payload = payload; this.type = SET_DELIVERY_MODE; } } export class SetDeliveryModeFail extends StateUtils.EntityFailAction { constructor(payload) { super(PROCESS_FEATURE, SET_DELIVERY_MODE_PROCESS_ID, payload); this.payload = payload; this.type = SET_DELIVERY_MODE_FAIL; } } export class SetDeliveryModeSuccess extends StateUtils.EntitySuccessAction { constructor(payload) { super(PROCESS_FEATURE, SET_DELIVERY_MODE_PROCESS_ID); this.payload = payload; this.type = SET_DELIVERY_MODE_SUCCESS; } } export class ResetSetDeliveryModeProcess extends StateUtils.EntityLoaderResetAction { constructor() { super(PROCESS_FEATURE, SET_DELIVERY_MODE_PROCESS_ID); this.type = RESET_SET_DELIVERY_MODE_PROCESS; } } export class CreatePaymentDetails extends StateUtils.EntityLoadAction { constructor(payload) { super(PROCESS_FEATURE, SET_PAYMENT_DETAILS_PROCESS_ID); this.payload = payload; this.type = CREATE_PAYMENT_DETAILS; } } export class CreatePaymentDetailsFail extends StateUtils.EntityFailAction { constructor(payload) { super(PROCESS_FEATURE, SET_PAYMENT_DETAILS_PROCESS_ID); this.payload = payload; this.type = CREATE_PAYMENT_DETAILS_FAIL; } } export class CreatePaymentDetailsSuccess { constructor(payload) { this.payload = payload; this.type = CREATE_PAYMENT_DETAILS_SUCCESS; } } export class PaymentProcessSuccess extends StateUtils.EntitySuccessAction { constructor() { super(PROCESS_FEATURE, SET_PAYMENT_DETAILS_PROCESS_ID); this.type = PAYMENT_PROCESS_SUCCESS; } } export class SetPaymentDetails extends StateUtils.EntityLoadAction { constructor(payload) { super(PROCESS_FEATURE, SET_PAYMENT_DETAILS_PROCESS_ID); this.payload = payload; this.type = SET_PAYMENT_DETAILS; } } export class SetPaymentDetailsFail extends StateUtils.EntityFailAction { constructor(payload) { super(PROCESS_FEATURE, SET_PAYMENT_DETAILS_PROCESS_ID, payload); this.payload = payload; this.type = SET_PAYMENT_DETAILS_FAIL; } } export class SetPaymentDetailsSuccess extends StateUtils.EntitySuccessAction { constructor(payload) { super(PROCESS_FEATURE, SET_PAYMENT_DETAILS_PROCESS_ID); this.payload = payload; this.type = SET_PAYMENT_DETAILS_SUCCESS; } } export class ResetSetPaymentDetailsProcess extends StateUtils.EntityLoaderResetAction { constructor() { super(PROCESS_FEATURE, SET_PAYMENT_DETAILS_PROCESS_ID); this.type = RESET_SET_PAYMENT_DETAILS_PROCESS; } } export class PlaceOrder extends StateUtils.EntityLoadAction { constructor(payload) { super(PROCESS_FEATURE, PLACED_ORDER_PROCESS_ID); this.payload = payload; this.type = PLACE_ORDER; } } export class PlaceOrderFail extends StateUtils.EntityFailAction { constructor(payload) { super(PROCESS_FEATURE, PLACED_ORDER_PROCESS_ID, payload); this.payload = payload; this.type = PLACE_ORDER_FAIL; } } export class PlaceOrderSuccess extends StateUtils.EntitySuccessAction { constructor(payload) { super(PROCESS_FEATURE, PLACED_ORDER_PROCESS_ID); this.payload = payload; this.type = PLACE_ORDER_SUCCESS; } } export class ClearPlaceOrder extends StateUtils.EntityLoaderResetAction { constructor() { super(PROCESS_FEATURE, PLACED_ORDER_PROCESS_ID); this.type = CLEAR_PLACE_ORDER; } } export class ClearSupportedDeliveryModes { constructor() { this.type = CLEAR_SUPPORTED_DELIVERY_MODES; } } export class ClearCheckoutStep { constructor(payload) { this.payload = payload; this.type = CLEAR_CHECKOUT_STEP; } } export class ClearCheckoutData { constructor() { this.type = CLEAR_CHECKOUT_DATA; } } export class LoadCheckoutDetails extends StateUtils.LoaderLoadAction { constructor(payload) { super(CHECKOUT_DETAILS); this.payload = payload; this.type = LOAD_CHECKOUT_DETAILS; } } export class LoadCheckoutDetailsFail extends StateUtils.LoaderFailAction { constructor(payload) { super(CHECKOUT_DETAILS, payload); this.payload = payload; this.type = LOAD_CHECKOUT_DETAILS_FAIL; } } export class LoadCheckoutDetailsSuccess extends StateUtils.LoaderSuccessAction { constructor(payload) { super(CHECKOUT_DETAILS); this.payload = payload; this.type = LOAD_CHECKOUT_DETAILS_SUCCESS; } } export class CheckoutClearMiscsData { constructor() { this.type = CHECKOUT_CLEAR_MISCS_DATA; } } export class ClearCheckoutDeliveryAddress { constructor(payload) { this.payload = payload; this.type = CLEAR_CHECKOUT_DELIVERY_ADDRESS; } } export class ClearCheckoutDeliveryAddressSuccess { constructor() { this.type = CLEAR_CHECKOUT_DELIVERY_ADDRESS_SUCCESS; } } export class ClearCheckoutDeliveryAddressFail { constructor(payload) { this.payload = payload; this.type = CLEAR_CHECKOUT_DELIVERY_ADDRESS_FAIL; } } export class ClearCheckoutDeliveryMode extends StateUtils.EntityProcessesIncrementAction { constructor(payload) { super(MULTI_CART_DATA, payload.cartId); this.payload = payload; this.type = CLEAR_CHECKOUT_DELIVERY_MODE; } } export class ClearCheckoutDeliveryModeSuccess extends StateUtils.EntityProcessesDecrementAction { constructor(payload) { super(MULTI_CART_DATA, payload.cartId); this.payload = payload; this.type = CLEAR_CHECKOUT_DELIVERY_MODE_SUCCESS; } } export class ClearCheckoutDeliveryModeFail extends StateUtils.EntityProcessesDecrementAction { constructor(payload) { super(MULTI_CART_DATA, payload.cartId); this.payload = payload; this.type = CLEAR_CHECKOUT_DELIVERY_MODE_FAIL; } } export class SetCostCenter extends StateUtils.EntityLoadAction { constructor(payload) { super(PROCESS_FEATURE, SET_COST_CENTER_PROCESS_ID); this.payload = payload; this.type = SET_COST_CENTER; } } export class SetCostCenterFail extends StateUtils.EntityFailAction { constructor(payload) { super(PROCESS_FEATURE, SET_COST_CENTER_PROCESS_ID, payload); this.payload = payload; this.type = SET_COST_CENTER_FAIL; } } export class SetCostCenterSuccess extends StateUtils.EntitySuccessAction { constructor(payload) { super(PROCESS_FEATURE, SET_COST_CENTER_PROCESS_ID); this.payload = payload; this.type = SET_COST_CENTER_SUCCESS; } } export class ResetSetCostCenterProcess extends StateUtils.EntityLoaderResetAction { constructor() { super(PROCESS_FEATURE, SET_COST_CENTER_PROCESS_ID); this.type = RESET_SET_COST_CENTER_PROCESS; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL2NoZWNrb3V0L2NvcmUvc3RvcmUvYWN0aW9ucy9jaGVja291dC5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLGVBQWUsRUFHZixlQUFlLEVBQ2YsVUFBVSxHQUNYLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsMEJBQTBCLEVBQzFCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsOEJBQThCLEVBQzlCLHNDQUFzQyxHQUN2QyxNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUMxQyw0Q0FBNEMsQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FDbEQsb0RBQW9ELENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQy9DLGlEQUFpRCxDQUFDO0FBRXBELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUN2Qyx5Q0FBeUMsQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FDL0MsaURBQWlELENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQzVDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLHNDQUFzQyxDQUFDO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUN2Qyx5Q0FBeUMsQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxzQ0FBc0MsQ0FBQztBQUNoRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FDdkMseUNBQXlD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QUssQ0FBQyxlQUFlLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUY1QyxTQUFJLEdBQUcsNkJBQTZCLENBQUM7SUFHOUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQWRkcmVzcyxcbiAgRGVsaXZlcnlNb2RlLFxuICBNVUxUSV9DQVJUX0RBVEEsXG4gIE9yZGVyLFxuICBQYXltZW50RGV0YWlscyxcbiAgUFJPQ0VTU19GRUFUVVJFLFxuICBTdGF0ZVV0aWxzLFxufSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgQ2hlY2tvdXREZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoZWNrb3V0Lm1vZGVsJztcbmltcG9ydCB7XG4gIENIRUNLT1VUX0RFVEFJTFMsXG4gIFBMQUNFRF9PUkRFUl9QUk9DRVNTX0lELFxuICBTRVRfQ09TVF9DRU5URVJfUFJPQ0VTU19JRCxcbiAgU0VUX0RFTElWRVJZX0FERFJFU1NfUFJPQ0VTU19JRCxcbiAgU0VUX0RFTElWRVJZX01PREVfUFJPQ0VTU19JRCxcbiAgU0VUX1BBWU1FTlRfREVUQUlMU19QUk9DRVNTX0lELFxuICBTRVRfU1VQUE9SVEVEX0RFTElWRVJZX01PREVfUFJPQ0VTU19JRCxcbn0gZnJvbSAnLi4vY2hlY2tvdXQtc3RhdGUnO1xuXG5leHBvcnQgY29uc3QgQ0xFQVJfQ0hFQ0tPVVRfREVMSVZFUllfQUREUkVTUyA9XG4gICdbQ2hlY2tvdXRdIENsZWFyIENoZWNrb3V0IERlbGl2ZXJ5IEFkZHJlc3MnO1xuZXhwb3J0IGNvbnN0IENMRUFSX0NIRUNLT1VUX0RFTElWRVJZX0FERFJFU1NfU1VDQ0VTUyA9XG4gICdbQ2hlY2tvdXRdIENsZWFyIENoZWNrb3V0IERlbGl2ZXJ5IEFkZHJlc3MgU3VjY2Vzcyc7XG5leHBvcnQgY29uc3QgQ0xFQVJfQ0hFQ0tPVVRfREVMSVZFUllfQUREUkVTU19GQUlMID1cbiAgJ1tDaGVja291dF0gQ2xlYXIgQ2hlY2tvdXQgRGVsaXZlcnkgQWRkcmVzcyBGYWlsJztcblxuZXhwb3J0IGNvbnN0IENMRUFSX0NIRUNLT1VUX0RFTElWRVJZX01PREUgPVxuICAnW0NoZWNrb3V0XSBDbGVhciBDaGVja291dCBEZWxpdmVyeSBNb2RlJztcbmV4cG9ydCBjb25zdCBDTEVBUl9DSEVDS09VVF9ERUxJVkVSWV9NT0RFX1NVQ0NFU1MgPVxuICAnW0NoZWNrb3V0XSBDbGVhciBDaGVja291dCBEZWxpdmVyeSBNb2RlIFN1Y2Nlc3MnO1xuZXhwb3J0IGNvbnN0IENMRUFSX0NIRUNLT1VUX0RFTElWRVJZX01PREVfRkFJTCA9XG4gICdbQ2hlY2tvdXRdIENsZWFyIENoZWNrb3V0IERlbGl2ZXJ5IE1vZGUgRmFpbCc7XG5cbmV4cG9ydCBjb25zdCBBRERfREVMSVZFUllfQUREUkVTUyA9ICdbQ2hlY2tvdXRdIEFkZCBEZWxpdmVyeSBBZGRyZXNzJztcbmV4cG9ydCBjb25zdCBBRERfREVMSVZFUllfQUREUkVTU19GQUlMID0gJ1tDaGVja291dF0gQWRkIERlbGl2ZXJ5IEFkZHJlc3MgRmFpbCc7XG5leHBvcnQgY29uc3QgQUREX0RFTElWRVJZX0FERFJFU1NfU1VDQ0VTUyA9XG4gICdbQ2hlY2tvdXRdIEFkZCBEZWxpdmVyeSBBZGRyZXNzIFN1Y2Nlc3MnO1xuXG5leHBvcnQgY29uc3QgU0VUX0RFTElWRVJZX0FERFJFU1MgPSAnW0NoZWNrb3V0XSBTZXQgRGVsaXZlcnkgQWRkcmVzcyc7XG5leHBvcnQgY29uc3QgU0VUX0RFTElWRVJZX0FERFJFU1NfRkFJTCA9ICdbQ2hlY2tvdXRdIFNldCBEZWxpdmVyeSBBZGRyZXNzIEZhaWwnO1xuZXhwb3J0IGNvbnN0IFNFVF9ERUxJVkVSWV9BRERSRVNTX1NVQ0NFU1MgPVxuICAnW0NoZWNrb3V0XSBTZXQgRGVsaXZlcnkgQWRkcmVzcyBTdWNjZXNzJztcbmV4cG9ydCBjb25zdCBSRVNFVF9TRVRfREVMSVZFUllfQUREUkVTU19QUk9DRVNTID1cbiAgJ1tDaGVja291dF0gUmVzZXQgU2V0IERlbGl2ZXJ5IEFkZHJlc3MgUHJvY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBMT0FEX1NVUFBPUlRFRF9ERUxJVkVSWV9NT0RFUyA9XG4gICdbQ2hlY2tvdXRdIExvYWQgU3VwcG9ydGVkIERlbGl2ZXJ5IE1vZGVzJztcbmV4cG9ydCBjb25zdCBMT0FEX1NVUFBPUlRFRF9ERUxJVkVSWV9NT0RFU19GQUlMID1cbiAgJ1tDaGVja291dF0gTG9hZCBTdXBwb3J0ZWQgRGVsaXZlcnkgTW9kZXMgRmFpbCc7XG5leHBvcnQgY29uc3QgTE9BRF9TVVBQT1JURURfREVMSVZFUllfTU9ERVNfU1VDQ0VTUyA9XG4gICdbQ2hlY2tvdXRdIExvYWQgU3VwcG9ydGVkIERlbGl2ZXJ5IE1vZGVzIFN1Y2Nlc3MnO1xuZXhwb3J0IGNvbnN0IENMRUFSX1NVUFBPUlRFRF9ERUxJVkVSWV9NT0RFUyA9XG4gICdbQ2hlY2tvdXRdIENsZWFyIFN1cHBvcnRlZCBEZWxpdmVyeSBNb2Rlcyc7XG5cbmV4cG9ydCBjb25zdCBTRVRfREVMSVZFUllfTU9ERSA9ICdbQ2hlY2tvdXRdIFNldCBEZWxpdmVyeSBNb2RlJztcbmV4cG9ydCBjb25zdCBTRVRfREVMSVZFUllfTU9ERV9GQUlMID0gJ1tDaGVja291dF0gU2V0IERlbGl2ZXJ5IE1vZGUgRmFpbCc7XG5leHBvcnQgY29uc3QgU0VUX0RFTElWRVJZX01PREVfU1VDQ0VTUyA9ICdbQ2hlY2tvdXRdIFNldCBEZWxpdmVyeSBNb2RlIFN1Y2Nlc3MnO1xuZXhwb3J0IGNvbnN0IFJFU0VUX1NFVF9ERUxJVkVSWV9NT0RFX1BST0NFU1MgPVxuICAnW0NoZWNrb3V0XSBSZXNldCBTZXQgRGVsaXZlcnkgTW9kZSBQcm9jZXNzJztcblxuZXhwb3J0IGNvbnN0IFNFVF9TVVBQT1JURURfREVMSVZFUllfTU9ERVMgPVxuICAnW0NoZWNrb3V0XSBTZXQgU3VwcG9ydGVkIERlbGl2ZXJ5IE1vZGVzJztcbmV4cG9ydCBjb25zdCBTRVRfU1VQUE9SVEVEX0RFTElWRVJZX01PREVTX0ZBSUwgPVxuICAnW0NoZWNrb3V0XSBTZXQgU3VwcG9ydGVkIERlbGl2ZXJ5IE1vZGVzIEZhaWwnO1xuZXhwb3J0IGNvbnN0IFNFVF9TVVBQT1JURURfREVMSVZFUllfTU9ERVNfU1VDQ0VTUyA9XG4gICdbQ2hlY2tvdXRdIFNldCBTdXBwb3J0ZWQgRGVsaXZlcnkgTW9kZXMgU3VjY2Vzcyc7XG5leHBvcnQgY29uc3QgUkVTRVRfU1VQUE9SVEVEX1NFVF9ERUxJVkVSWV9NT0RFU19QUk9DRVNTID1cbiAgJ1tDaGVja291dF0gUmVzZXQgU2V0IFN1cHBvcnRlZCBEZWxpdmVyeSBNb2RlcyBQcm9jZXNzJztcblxuZXhwb3J0IGNvbnN0IENSRUFURV9QQVlNRU5UX0RFVEFJTFMgPSAnW0NoZWNrb3V0XSBDcmVhdGUgUGF5bWVudCBEZXRhaWxzJztcbmV4cG9ydCBjb25zdCBDUkVBVEVfUEFZTUVOVF9ERVRBSUxTX0ZBSUwgPVxuICAnW0NoZWNrb3V0XSBDcmVhdGUgUGF5bWVudCBEZXRhaWxzIEZhaWwnO1xuZXhwb3J0IGNvbnN0IENSRUFURV9QQVlNRU5UX0RFVEFJTFNfU1VDQ0VTUyA9XG4gICdbQ2hlY2tvdXRdIENyZWF0ZSBQYXltZW50IERldGFpbHMgU3VjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBTRVRfUEFZTUVOVF9ERVRBSUxTID0gJ1tDaGVja291dF0gU2V0IFBheW1lbnQgRGV0YWlscyc7XG5leHBvcnQgY29uc3QgU0VUX1BBWU1FTlRfREVUQUlMU19GQUlMID0gJ1tDaGVja291dF0gU2V0IFBheW1lbnQgRGV0YWlscyBGYWlsJztcbmV4cG9ydCBjb25zdCBTRVRfUEFZTUVOVF9ERVRBSUxTX1NVQ0NFU1MgPVxuICAnW0NoZWNrb3V0XSBTZXQgUGF5bWVudCBEZXRhaWxzIFN1Y2Nlc3MnO1xuZXhwb3J0IGNvbnN0IFJFU0VUX1NFVF9QQVlNRU5UX0RFVEFJTFNfUFJPQ0VTUyA9XG4gICdbQ2hlY2tvdXRdIFJlc2V0IFNldCBQYXltZW50IERldGFpbHMgUHJvY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBQTEFDRV9PUkRFUiA9ICdbQ2hlY2tvdXRdIFBsYWNlIE9yZGVyJztcbmV4cG9ydCBjb25zdCBQTEFDRV9PUkRFUl9GQUlMID0gJ1tDaGVja291dF0gUGxhY2UgT3JkZXIgRmFpbCc7XG5leHBvcnQgY29uc3QgUExBQ0VfT1JERVJfU1VDQ0VTUyA9ICdbQ2hlY2tvdXRdIFBsYWNlIE9yZGVyIFN1Y2Nlc3MnO1xuZXhwb3J0IGNvbnN0IENMRUFSX1BMQUNFX09SREVSID0gJ1tDaGVja291dF0gQ2xlYXIgUGxhY2UgT3JkZXInO1xuXG5leHBvcnQgY29uc3QgQ0xFQVJfQ0hFQ0tPVVRfU1RFUCA9ICdbQ2hlY2tvdXRdIENsZWFyIE9uZSBDaGVja291dCBTdGVwJztcbmV4cG9ydCBjb25zdCBDTEVBUl9DSEVDS09VVF9EQVRBID0gJ1tDaGVja291dF0gQ2xlYXIgQ2hlY2tvdXQgRGF0YSc7XG5cbmV4cG9ydCBjb25zdCBMT0FEX0NIRUNLT1VUX0RFVEFJTFMgPSAnW0NoZWNrb3V0XSBMb2FkIENoZWNrb3V0IERldGFpbHMnO1xuZXhwb3J0IGNvbnN0IExPQURfQ0hFQ0tPVVRfREVUQUlMU19GQUlMID1cbiAgJ1tDaGVja291dF0gTG9hZCBDaGVja291dCBEZXRhaWxzIEZhaWwnO1xuZXhwb3J0IGNvbnN0IExPQURfQ0hFQ0tPVVRfREVUQUlMU19TVUNDRVNTID1cbiAgJ1tDaGVja291dF0gTG9hZCBDaGVja291dCBEZXRhaWxzIFN1Y2Nlc3MnO1xuXG5leHBvcnQgY29uc3QgQ0hFQ0tPVVRfQ0xFQVJfTUlTQ1NfREFUQSA9ICdbQ2hlY2tvdXRdIENsZWFyIE1pc2NzIERhdGEnO1xuZXhwb3J0IGNvbnN0IFBBWU1FTlRfUFJPQ0VTU19TVUNDRVNTID0gJ1tDaGVja291dF0gUGF5bWVudCBQcm9jZXNzIFN1Y2Nlc3MnO1xuXG5leHBvcnQgY29uc3QgU0VUX0NPU1RfQ0VOVEVSID0gJ1tDaGVja291dF0gU2V0IENvc3QgQ2VudGVyJztcbmV4cG9ydCBjb25zdCBTRVRfQ09TVF9DRU5URVJfRkFJTCA9ICdbQ2hlY2tvdXRdIFNldCBDb3N0IENlbnRlciBGYWlsJztcbmV4cG9ydCBjb25zdCBTRVRfQ09TVF9DRU5URVJfU1VDQ0VTUyA9ICdbQ2hlY2tvdXRdIFNldCBDb3N0IENlbnRlciBTdWNjZXNzJztcbmV4cG9ydCBjb25zdCBSRVNFVF9TRVRfQ09TVF9DRU5URVJfUFJPQ0VTUyA9XG4gICdbQ2hlY2tvdXRdIFJlc2V0IFNldCBDb3N0IENlbnRlciBQcm9jZXNzJztcblxuZXhwb3J0IGNsYXNzIEFkZERlbGl2ZXJ5QWRkcmVzcyBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBBRERfREVMSVZFUllfQUREUkVTUztcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBheWxvYWQ6IHsgdXNlcklkOiBzdHJpbmc7IGNhcnRJZDogc3RyaW5nOyBhZGRyZXNzOiBBZGRyZXNzIH1cbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQWRkRGVsaXZlcnlBZGRyZXNzRmFpbCBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBBRERfREVMSVZFUllfQUREUkVTU19GQUlMO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogYW55KSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQWRkRGVsaXZlcnlBZGRyZXNzU3VjY2VzcyBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBBRERfREVMSVZFUllfQUREUkVTU19TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogQWRkcmVzcykge31cbn1cblxuZXhwb3J0IGNsYXNzIFNldERlbGl2ZXJ5QWRkcmVzcyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5TG9hZEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfREVMSVZFUllfQUREUkVTUztcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBheWxvYWQ6IHsgdXNlcklkOiBzdHJpbmc7IGNhcnRJZDogc3RyaW5nOyBhZGRyZXNzOiBBZGRyZXNzIH1cbiAgKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfREVMSVZFUllfQUREUkVTU19QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0RGVsaXZlcnlBZGRyZXNzRmFpbCBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5RmFpbEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfREVMSVZFUllfQUREUkVTU19GQUlMO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogYW55KSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfREVMSVZFUllfQUREUkVTU19QUk9DRVNTX0lELCBwYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0RGVsaXZlcnlBZGRyZXNzU3VjY2VzcyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5U3VjY2Vzc0FjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfREVMSVZFUllfQUREUkVTU19TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogQWRkcmVzcykge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgU0VUX0RFTElWRVJZX0FERFJFU1NfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc2V0U2V0RGVsaXZlcnlBZGRyZXNzUHJvY2VzcyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5TG9hZGVyUmVzZXRBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gUkVTRVRfU0VUX0RFTElWRVJZX0FERFJFU1NfUFJPQ0VTUztcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfREVMSVZFUllfQUREUkVTU19QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9hZFN1cHBvcnRlZERlbGl2ZXJ5TW9kZXMgZXh0ZW5kcyBTdGF0ZVV0aWxzLkVudGl0eUxvYWRBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gTE9BRF9TVVBQT1JURURfREVMSVZFUllfTU9ERVM7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiB7IHVzZXJJZDogc3RyaW5nOyBjYXJ0SWQ6IHN0cmluZyB9KSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfU1VQUE9SVEVEX0RFTElWRVJZX01PREVfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvYWRTdXBwb3J0ZWREZWxpdmVyeU1vZGVzRmFpbCBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5RmFpbEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBMT0FEX1NVUFBPUlRFRF9ERUxJVkVSWV9NT0RFU19GQUlMO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogYW55KSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfU1VQUE9SVEVEX0RFTElWRVJZX01PREVfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvYWRTdXBwb3J0ZWREZWxpdmVyeU1vZGVzU3VjY2VzcyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5U3VjY2Vzc0FjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBMT0FEX1NVUFBPUlRFRF9ERUxJVkVSWV9NT0RFU19TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogRGVsaXZlcnlNb2RlW10pIHtcbiAgICBzdXBlcihQUk9DRVNTX0ZFQVRVUkUsIFNFVF9TVVBQT1JURURfREVMSVZFUllfTU9ERV9QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzZXRMb2FkU3VwcG9ydGVkRGVsaXZlcnlNb2Rlc1Byb2Nlc3MgZXh0ZW5kcyBTdGF0ZVV0aWxzLkVudGl0eUxvYWRlclJlc2V0QWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFJFU0VUX1NVUFBPUlRFRF9TRVRfREVMSVZFUllfTU9ERVNfUFJPQ0VTUztcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfU1VQUE9SVEVEX0RFTElWRVJZX01PREVfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldERlbGl2ZXJ5TW9kZSBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5TG9hZEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfREVMSVZFUllfTU9ERTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBheWxvYWQ6IHsgdXNlcklkOiBzdHJpbmc7IGNhcnRJZDogc3RyaW5nOyBzZWxlY3RlZE1vZGVJZDogc3RyaW5nIH1cbiAgKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfREVMSVZFUllfTU9ERV9QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0RGVsaXZlcnlNb2RlRmFpbCBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5RmFpbEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfREVMSVZFUllfTU9ERV9GQUlMO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogYW55KSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfREVMSVZFUllfTU9ERV9QUk9DRVNTX0lELCBwYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0RGVsaXZlcnlNb2RlU3VjY2VzcyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5U3VjY2Vzc0FjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfREVMSVZFUllfTU9ERV9TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfREVMSVZFUllfTU9ERV9QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzZXRTZXREZWxpdmVyeU1vZGVQcm9jZXNzIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlMb2FkZXJSZXNldEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBSRVNFVF9TRVRfREVMSVZFUllfTU9ERV9QUk9DRVNTO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihQUk9DRVNTX0ZFQVRVUkUsIFNFVF9ERUxJVkVSWV9NT0RFX1BST0NFU1NfSUQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVQYXltZW50RGV0YWlscyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5TG9hZEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBDUkVBVEVfUEFZTUVOVF9ERVRBSUxTO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGF5bG9hZDoge1xuICAgICAgdXNlcklkOiBzdHJpbmc7XG4gICAgICBjYXJ0SWQ6IHN0cmluZztcbiAgICAgIHBheW1lbnREZXRhaWxzOiBQYXltZW50RGV0YWlscztcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgU0VUX1BBWU1FTlRfREVUQUlMU19QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUGF5bWVudERldGFpbHNGYWlsIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlGYWlsQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IENSRUFURV9QQVlNRU5UX0RFVEFJTFNfRkFJTDtcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IGFueSkge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgU0VUX1BBWU1FTlRfREVUQUlMU19QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUGF5bWVudERldGFpbHNTdWNjZXNzIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IENSRUFURV9QQVlNRU5UX0RFVEFJTFNfU1VDQ0VTUztcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IFBheW1lbnREZXRhaWxzKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgUGF5bWVudFByb2Nlc3NTdWNjZXNzIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlTdWNjZXNzQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFBBWU1FTlRfUFJPQ0VTU19TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihQUk9DRVNTX0ZFQVRVUkUsIFNFVF9QQVlNRU5UX0RFVEFJTFNfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldFBheW1lbnREZXRhaWxzIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlMb2FkQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFNFVF9QQVlNRU5UX0RFVEFJTFM7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwYXlsb2FkOiB7XG4gICAgICB1c2VySWQ6IHN0cmluZztcbiAgICAgIGNhcnRJZDogc3RyaW5nO1xuICAgICAgcGF5bWVudERldGFpbHM6IFBheW1lbnREZXRhaWxzO1xuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfUEFZTUVOVF9ERVRBSUxTX1BST0NFU1NfSUQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRQYXltZW50RGV0YWlsc0ZhaWwgZXh0ZW5kcyBTdGF0ZVV0aWxzLkVudGl0eUZhaWxBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gU0VUX1BBWU1FTlRfREVUQUlMU19GQUlMO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogYW55KSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfUEFZTUVOVF9ERVRBSUxTX1BST0NFU1NfSUQsIHBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRQYXltZW50RGV0YWlsc1N1Y2Nlc3MgZXh0ZW5kcyBTdGF0ZVV0aWxzLkVudGl0eVN1Y2Nlc3NBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gU0VUX1BBWU1FTlRfREVUQUlMU19TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogUGF5bWVudERldGFpbHMpIHtcbiAgICBzdXBlcihQUk9DRVNTX0ZFQVRVUkUsIFNFVF9QQVlNRU5UX0RFVEFJTFNfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc2V0U2V0UGF5bWVudERldGFpbHNQcm9jZXNzIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlMb2FkZXJSZXNldEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBSRVNFVF9TRVRfUEFZTUVOVF9ERVRBSUxTX1BST0NFU1M7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgU0VUX1BBWU1FTlRfREVUQUlMU19QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGxhY2VPcmRlciBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5TG9hZEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBQTEFDRV9PUkRFUjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBheWxvYWQ6IHsgdXNlcklkOiBzdHJpbmc7IGNhcnRJZDogc3RyaW5nOyB0ZXJtc0NoZWNrZWQ6IGJvb2xlYW4gfVxuICApIHtcbiAgICBzdXBlcihQUk9DRVNTX0ZFQVRVUkUsIFBMQUNFRF9PUkRFUl9QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGxhY2VPcmRlckZhaWwgZXh0ZW5kcyBTdGF0ZVV0aWxzLkVudGl0eUZhaWxBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gUExBQ0VfT1JERVJfRkFJTDtcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IGFueSkge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgUExBQ0VEX09SREVSX1BST0NFU1NfSUQsIHBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQbGFjZU9yZGVyU3VjY2VzcyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5U3VjY2Vzc0FjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBQTEFDRV9PUkRFUl9TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogT3JkZXIpIHtcbiAgICBzdXBlcihQUk9DRVNTX0ZFQVRVUkUsIFBMQUNFRF9PUkRFUl9QUk9DRVNTX0lEKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJQbGFjZU9yZGVyIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlMb2FkZXJSZXNldEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBDTEVBUl9QTEFDRV9PUkRFUjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBQTEFDRURfT1JERVJfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyU3VwcG9ydGVkRGVsaXZlcnlNb2RlcyBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBDTEVBUl9TVVBQT1JURURfREVMSVZFUllfTU9ERVM7XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckNoZWNrb3V0U3RlcCBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBDTEVBUl9DSEVDS09VVF9TVEVQO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogbnVtYmVyKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJDaGVja291dERhdGEgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gQ0xFQVJfQ0hFQ0tPVVRfREFUQTtcbn1cblxuZXhwb3J0IGNsYXNzIExvYWRDaGVja291dERldGFpbHMgZXh0ZW5kcyBTdGF0ZVV0aWxzLkxvYWRlckxvYWRBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gTE9BRF9DSEVDS09VVF9ERVRBSUxTO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogeyB1c2VySWQ6IHN0cmluZzsgY2FydElkOiBzdHJpbmcgfSkge1xuICAgIHN1cGVyKENIRUNLT1VUX0RFVEFJTFMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb2FkQ2hlY2tvdXREZXRhaWxzRmFpbCBleHRlbmRzIFN0YXRlVXRpbHMuTG9hZGVyRmFpbEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBMT0FEX0NIRUNLT1VUX0RFVEFJTFNfRkFJTDtcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IGFueSkge1xuICAgIHN1cGVyKENIRUNLT1VUX0RFVEFJTFMsIHBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb2FkQ2hlY2tvdXREZXRhaWxzU3VjY2VzcyBleHRlbmRzIFN0YXRlVXRpbHMuTG9hZGVyU3VjY2Vzc0FjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBMT0FEX0NIRUNLT1VUX0RFVEFJTFNfU1VDQ0VTUztcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IENoZWNrb3V0RGV0YWlscykge1xuICAgIHN1cGVyKENIRUNLT1VUX0RFVEFJTFMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGVja291dENsZWFyTWlzY3NEYXRhIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IENIRUNLT1VUX0NMRUFSX01JU0NTX0RBVEE7XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckNoZWNrb3V0RGVsaXZlcnlBZGRyZXNzIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IENMRUFSX0NIRUNLT1VUX0RFTElWRVJZX0FERFJFU1M7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiB7IHVzZXJJZDogc3RyaW5nOyBjYXJ0SWQ6IHN0cmluZyB9KSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJDaGVja291dERlbGl2ZXJ5QWRkcmVzc1N1Y2Nlc3MgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gQ0xFQVJfQ0hFQ0tPVVRfREVMSVZFUllfQUREUkVTU19TVUNDRVNTO1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckNoZWNrb3V0RGVsaXZlcnlBZGRyZXNzRmFpbCBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBDTEVBUl9DSEVDS09VVF9ERUxJVkVSWV9BRERSRVNTX0ZBSUw7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiBhbnkpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckNoZWNrb3V0RGVsaXZlcnlNb2RlIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlQcm9jZXNzZXNJbmNyZW1lbnRBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gQ0xFQVJfQ0hFQ0tPVVRfREVMSVZFUllfTU9ERTtcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IHsgdXNlcklkOiBzdHJpbmc7IGNhcnRJZDogc3RyaW5nIH0pIHtcbiAgICBzdXBlcihNVUxUSV9DQVJUX0RBVEEsIHBheWxvYWQuY2FydElkKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJDaGVja291dERlbGl2ZXJ5TW9kZVN1Y2Nlc3MgZXh0ZW5kcyBTdGF0ZVV0aWxzLkVudGl0eVByb2Nlc3Nlc0RlY3JlbWVudEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBDTEVBUl9DSEVDS09VVF9ERUxJVkVSWV9NT0RFX1NVQ0NFU1M7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiB7IHVzZXJJZDogc3RyaW5nOyBjYXJ0SWQ6IHN0cmluZyB9KSB7XG4gICAgc3VwZXIoTVVMVElfQ0FSVF9EQVRBLCBwYXlsb2FkLmNhcnRJZCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyQ2hlY2tvdXREZWxpdmVyeU1vZGVGYWlsIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlQcm9jZXNzZXNEZWNyZW1lbnRBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gQ0xFQVJfQ0hFQ0tPVVRfREVMSVZFUllfTU9ERV9GQUlMO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogeyB1c2VySWQ6IHN0cmluZzsgY2FydElkOiBzdHJpbmc7IGVycm9yOiBhbnkgfSkge1xuICAgIHN1cGVyKE1VTFRJX0NBUlRfREFUQSwgcGF5bG9hZC5jYXJ0SWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRDb3N0Q2VudGVyIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlMb2FkQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFNFVF9DT1NUX0NFTlRFUjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBheWxvYWQ6IHsgdXNlcklkOiBzdHJpbmc7IGNhcnRJZDogc3RyaW5nOyBjb3N0Q2VudGVySWQ6IHN0cmluZyB9XG4gICkge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgU0VUX0NPU1RfQ0VOVEVSX1BST0NFU1NfSUQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRDb3N0Q2VudGVyRmFpbCBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5RmFpbEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfQ09TVF9DRU5URVJfRkFJTDtcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IGFueSkge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgU0VUX0NPU1RfQ0VOVEVSX1BST0NFU1NfSUQsIHBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRDb3N0Q2VudGVyU3VjY2VzcyBleHRlbmRzIFN0YXRlVXRpbHMuRW50aXR5U3VjY2Vzc0FjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBTRVRfQ09TVF9DRU5URVJfU1VDQ0VTUztcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IHN0cmluZykge1xuICAgIHN1cGVyKFBST0NFU1NfRkVBVFVSRSwgU0VUX0NPU1RfQ0VOVEVSX1BST0NFU1NfSUQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNldFNldENvc3RDZW50ZXJQcm9jZXNzIGV4dGVuZHMgU3RhdGVVdGlscy5FbnRpdHlMb2FkZXJSZXNldEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBSRVNFVF9TRVRfQ09TVF9DRU5URVJfUFJPQ0VTUztcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUFJPQ0VTU19GRUFUVVJFLCBTRVRfQ09TVF9DRU5URVJfUFJPQ0VTU19JRCk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2hlY2tvdXRBY3Rpb24gPVxuICB8IEFkZERlbGl2ZXJ5QWRkcmVzc1xuICB8IEFkZERlbGl2ZXJ5QWRkcmVzc0ZhaWxcbiAgfCBBZGREZWxpdmVyeUFkZHJlc3NTdWNjZXNzXG4gIHwgU2V0RGVsaXZlcnlBZGRyZXNzXG4gIHwgU2V0RGVsaXZlcnlBZGRyZXNzRmFpbFxuICB8IFNldERlbGl2ZXJ5QWRkcmVzc1N1Y2Nlc3NcbiAgfCBSZXNldFNldERlbGl2ZXJ5QWRkcmVzc1Byb2Nlc3NcbiAgfCBMb2FkU3VwcG9ydGVkRGVsaXZlcnlNb2Rlc1xuICB8IExvYWRTdXBwb3J0ZWREZWxpdmVyeU1vZGVzRmFpbFxuICB8IExvYWRTdXBwb3J0ZWREZWxpdmVyeU1vZGVzU3VjY2Vzc1xuICB8IFNldERlbGl2ZXJ5TW9kZVxuICB8IFNldERlbGl2ZXJ5TW9kZUZhaWxcbiAgfCBTZXREZWxpdmVyeU1vZGVTdWNjZXNzXG4gIHwgUmVzZXRTZXREZWxpdmVyeU1vZGVQcm9jZXNzXG4gIHwgQ2xlYXJTdXBwb3J0ZWREZWxpdmVyeU1vZGVzXG4gIHwgQ3JlYXRlUGF5bWVudERldGFpbHNcbiAgfCBDcmVhdGVQYXltZW50RGV0YWlsc0ZhaWxcbiAgfCBDcmVhdGVQYXltZW50RGV0YWlsc1N1Y2Nlc3NcbiAgfCBTZXRQYXltZW50RGV0YWlsc1xuICB8IFNldFBheW1lbnREZXRhaWxzRmFpbFxuICB8IFNldFBheW1lbnREZXRhaWxzU3VjY2Vzc1xuICB8IFJlc2V0U2V0UGF5bWVudERldGFpbHNQcm9jZXNzXG4gIHwgUGxhY2VPcmRlclxuICB8IFBsYWNlT3JkZXJGYWlsXG4gIHwgUGxhY2VPcmRlclN1Y2Nlc3NcbiAgfCBDbGVhckNoZWNrb3V0U3RlcFxuICB8IENsZWFyQ2hlY2tvdXREYXRhXG4gIHwgQ2xlYXJDaGVja291dERlbGl2ZXJ5QWRkcmVzc1xuICB8IENsZWFyQ2hlY2tvdXREZWxpdmVyeUFkZHJlc3NGYWlsXG4gIHwgQ2xlYXJDaGVja291dERlbGl2ZXJ5QWRkcmVzc1N1Y2Nlc3NcbiAgfCBDbGVhckNoZWNrb3V0RGVsaXZlcnlNb2RlXG4gIHwgQ2xlYXJDaGVja291dERlbGl2ZXJ5TW9kZUZhaWxcbiAgfCBDbGVhckNoZWNrb3V0RGVsaXZlcnlNb2RlU3VjY2Vzc1xuICB8IExvYWRDaGVja291dERldGFpbHNcbiAgfCBMb2FkQ2hlY2tvdXREZXRhaWxzRmFpbFxuICB8IExvYWRDaGVja291dERldGFpbHNTdWNjZXNzXG4gIHwgQ2hlY2tvdXRDbGVhck1pc2NzRGF0YVxuICB8IFNldENvc3RDZW50ZXJcbiAgfCBTZXRDb3N0Q2VudGVyRmFpbFxuICB8IFNldENvc3RDZW50ZXJTdWNjZXNzXG4gIHwgUmVzZXRTZXRDb3N0Q2VudGVyUHJvY2VzcztcbiJdfQ==