| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see order_view.bundle.js.LICENSE.txt */
(()=>{var e={57208:e=>{"use strict";e.exports=JSON.parse('{"base_url":"","routes":{"admin_common_notifications":{"tokens":[["text","/common/notifications"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_product_form":{"tokens":[["variable","/","\\\\d+","id"],["text","/sell/catalog/products"]],"defaults":[],"requirements":{"id":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_feature_get_feature_values":{"tokens":[["variable","/","\\\\d+","idFeature"],["text","/sell/catalog/products/features"]],"defaults":{"idFeature":0},"requirements":{"idFeature":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations":{"tokens":[["text","/combinations"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_ids":{"tokens":[["text","/combinations/ids"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_update_combination_from_listing":{"tokens":[["text","/update-combination-from-listing"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_combinations_edit_combination":{"tokens":[["text","/edit"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_products_combinations_remove_combination":{"tokens":[["text","/remove"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["DELETE"],"schemes":[]},"admin_products_attribute_groups":{"tokens":[["text","/attribute-groups"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_all_attribute_groups":{"tokens":[["text","/sell/catalog/products-v2/all-attribute-groups"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_generate":{"tokens":[["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2/generate-combinations"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_get_images":{"tokens":[["text","/images"],["variable","/","\\\\d+","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":{"productId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_v2_add_image":{"tokens":[["text","/sell/catalog/products-v2/images/add"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_update_image":{"tokens":[["text","/update"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_v2_delete_image":{"tokens":[["text","/delete"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_categories_get_categories_tree":{"tokens":[["text","/sell/catalog/categories/tree"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_cart_rules_search":{"tokens":[["text","/sell/catalog/cart-rules/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_customers_search":{"tokens":[["text","/sell/customers/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_carts":{"tokens":[["text","/carts"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_orders":{"tokens":[["text","/orders"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_addresses_create":{"tokens":[["text","/sell/addresses/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_addresses_edit":{"tokens":[["text","/edit"],["variable","/","\\\\d+","addressId"],["text","/sell/addresses"]],"defaults":[],"requirements":{"addressId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_order_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","orderId"],["text","/sell/addresses/order"]],"defaults":[],"requirements":{"orderId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_cart_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","cartId"],["text","/sell/addresses/cart"]],"defaults":[],"requirements":{"cartId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_carts_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_info":{"tokens":[["text","/info"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_create":{"tokens":[["text","/sell/orders/carts/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_addresses":{"tokens":[["text","/addresses"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_carrier":{"tokens":[["text","/carrier"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_currency":{"tokens":[["text","/currency"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_language":{"tokens":[["text","/language"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_set_delivery_settings":{"tokens":[["text","/rules/delivery-settings"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_cart_rule":{"tokens":[["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_cart_rule":{"tokens":[["text","/delete"],["variable","/","[^/]++","cartRuleId"],["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_price":{"tokens":[["text","/price"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_quantity":{"tokens":[["text","/quantity"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_product":{"tokens":[["text","/delete-product"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_place":{"tokens":[["text","/sell/orders/place"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_orders_duplicate_cart":{"tokens":[["text","/duplicate-cart"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_update_product":{"tokens":[["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_partial_refund":{"tokens":[["text","/partial-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_standard_refund":{"tokens":[["text","/standard-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_return_product":{"tokens":[["text","/return-product"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_send_process_order_email":{"tokens":[["text","/sell/orders/process-order-email"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_delete_product":{"tokens":[["text","/delete"],["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_get_discounts":{"tokens":[["text","/discounts"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_prices":{"tokens":[["text","/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_payments":{"tokens":[["text","/payments"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_products":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_invoices":{"tokens":[["text","/invoices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_documents":{"tokens":[["text","/documents"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_shipping":{"tokens":[["text","/shipping"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_cancellation":{"tokens":[["text","/cancellation"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_configure_product_pagination":{"tokens":[["text","/sell/orders/configure-product-pagination"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_product_prices":{"tokens":[["text","/products/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_products_search":{"tokens":[["text","/sell/orders/products/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_shops_search":{"tokens":[["variable","/","[^/]++","searchTerm"],["text","/configure/advanced/shops/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]}},"prefix":"","host":"localhost","port":"","scheme":"http","locale":[]}')},35691:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,o=(n=r(99663))&&n.__esModule?n:{default:n};t.default=function e(t){(0,o.default)(this,e),this.message=t,this.name="LocalizationException"}},65693:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NumberSymbol=t.NumberFormatter=t.NumberSpecification=t.PriceSpecification=void 0;var n=i(r(37210)),o=i(r(76694)),a=i(r(91598)),d=i(r(58182));function i(e){return e&&e.__esModule?e:{default:e}}t.PriceSpecification=a.default,t.NumberSpecification=d.default,t.NumberFormatter=n.default,t.NumberSymbol=o.default},37210:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(r(85315)),o=l(r(88902)),a=l(r(12424)),d=l(r(99663)),i=l(r(22600)),u=l(r(76694)),s=l(r(91598)),c=l(r(58182));function l(e){return e&&e.__esModule?e:{default:e}}var p=r(91658),f=function(){function e(t){(0,d.default)(this,e),this.numberSpecification=t}return(0,i.default)(e,[{key:"format",value:function(e,t){void 0!==t&&(this.numberSpecification=t);var r=Math.abs(e).toFixed(this.numberSpecification.getMaxFractionDigits()),n=this.extractMajorMinorDigits(r),o=(0,a.default)(n,2),d=o[0],i=o[1],u=d=this.splitMajorGroups(d);(i=this.adjustMinorDigitsZeroes(i))&&(u+="."+i);var s=this.getCldrPattern(e<0);return u=this.addPlaceholders(u,s),u=this.replaceSymbols(u),this.performSpecificReplacements(u)}},{key:"extractMajorMinorDigits",value:function(e){var t=e.toString().split(".");return[t[0],void 0===t[1]?"":t[1]]}},{key:"splitMajorGroups",value:function(e){if(!this.numberSpecification.isGroupingUsed())return e;var t=e.split("").reverse(),r=[];for(r.push(t.splice(0,this.numberSpecification.getPrimaryGroupSize()));t.length;)r.push(t.splice(0,this.numberSpecification.getSecondaryGroupSize()));r=r.reverse();var n=[];return r.forEach((function(e){n.push(e.reverse().join(""))})),n.join(",")}},{key:"adjustMinorDigitsZeroes",value:function(e){var t=e;return t.length>this.numberSpecification.getMaxFractionDigits()&&(t=t.replace(/0+$/,"")),t.length<this.numberSpecification.getMinFractionDigits()&&(t=t.padEnd(this.numberSpecification.getMinFractionDigits(),"0")),t}},{key:"getCldrPattern",value:function(e){return e?this.numberSpecification.getNegativePattern():this.numberSpecification.getPositivePattern()}},{key:"replaceSymbols",value:function(e){var t=this.numberSpecification.getSymbol(),r={};return r["."]=t.getDecimal(),r[","]=t.getGroup(),r["-"]=t.getMinusSign(),r["%"]=t.getPercentSign(),r["+"]=t.getPlusSign(),this.strtr(e,r)}},{key:"strtr",value:function(e,t){var r=(0,o.default)(t).map(p);return e.split(RegExp("("+r.join("|")+")")).map((function(e){return t[e]||e})).join("")}},{key:"addPlaceholders",value:function(e,t){return t.replace(/#?(,#+)*0(\.[0#]+)*/,e)}},{key:"performSpecificReplacements",value:function(e){return this.numberSpecification instanceof s.default?e.split("¤").join(this.numberSpecification.getCurrencySymbol()):e}}],[{key:"build",value:function(t){var r;return r=void 0!==t.numberSymbols?new(Function.prototype.bind.apply(u.default,[null].concat((0,n.default)(t.numberSymbols)))):new(Function.prototype.bind.apply(u.default,[null].concat((0,n.default)(t.symbol)))),new e(t.currencySymbol?new s.default(t.positivePattern,t.negativePattern,r,parseInt(t.maxFractionDigits,10),parseInt(t.minFractionDigits,10),t.groupingUsed,t.primaryGroupSize,t.secondaryGroupSize,t.currencySymbol,t.currencyCode):new c.default(t.positivePattern,t.negativePattern,r,parseInt(t.maxFractionDigits,10),parseInt(t.minFractionDigits,10),t.groupingUsed,t.primaryGroupSize,t.secondaryGroupSize))}}]),e}();t.default=f},76694:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(r(99663)),o=d(r(22600)),a=d(r(35691));function d(e){return e&&e.__esModule?e:{default:e}}var i=function(){function e(t,r,o,a,d,i,u,s,c,l,p){(0,n.default)(this,e),this.decimal=t,this.group=r,this.list=o,this.percentSign=a,this.minusSign=d,this.plusSign=i,this.exponential=u,this.superscriptingExponent=s,this.perMille=c,this.infinity=l,this.nan=p,this.validateData()}return(0,o.default)(e,[{key:"getDecimal",value:function(){return this.decimal}},{key:"getGroup",value:function(){return this.group}},{key:"getList",value:function(){return this.list}},{key:"getPercentSign",value:function(){return this.percentSign}},{key:"getMinusSign",value:function(){return this.minusSign}},{key:"getPlusSign",value:function(){return this.plusSign}},{key:"getExponential",value:function(){return this.exponential}},{key:"getSuperscriptingExponent",value:function(){return this.superscriptingExponent}},{key:"getPerMille",value:function(){return this.perMille}},{key:"getInfinity",value:function(){return this.infinity}},{key:"getNan",value:function(){return this.nan}},{key:"validateData",value:function(){if(!this.decimal||"string"!=typeof this.decimal)throw new a.default("Invalid decimal");if(!this.group||"string"!=typeof this.group)throw new a.default("Invalid group");if(!this.list||"string"!=typeof this.list)throw new a.default("Invalid symbol list");if(!this.percentSign||"string"!=typeof this.percentSign)throw new a.default("Invalid percentSign");if(!this.minusSign||"string"!=typeof this.minusSign)throw new a.default("Invalid minusSign");if(!this.plusSign||"string"!=typeof this.plusSign)throw new a.default("Invalid plusSign");if(!this.exponential||"string"!=typeof this.exponential)throw new a.default("Invalid exponential");if(!this.superscriptingExponent||"string"!=typeof this.superscriptingExponent)throw new a.default("Invalid superscriptingExponent");if(!this.perMille||"string"!=typeof this.perMille)throw new a.default("Invalid perMille");if(!this.infinity||"string"!=typeof this.infinity)throw new a.default("Invalid infinity");if(!this.nan||"string"!=typeof this.nan)throw new a.default("Invalid nan")}}]),e}();t.default=i},58182:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(r(99663)),o=i(r(22600)),a=i(r(35691)),d=i(r(76694));function i(e){return e&&e.__esModule?e:{default:e}}var u=function(){function e(t,r,o,i,u,s,c,l){if((0,n.default)(this,e),this.positivePattern=t,this.negativePattern=r,this.symbol=o,this.maxFractionDigits=i,this.minFractionDigits=i<u?i:u,this.groupingUsed=s,this.primaryGroupSize=c,this.secondaryGroupSize=l,!this.positivePattern||"string"!=typeof this.positivePattern)throw new a.default("Invalid positivePattern");if(!this.negativePattern||"string"!=typeof this.negativePattern)throw new a.default("Invalid negativePattern");if(!(this.symbol&&this.symbol instanceof d.default))throw new a.default("Invalid symbol");if("number"!=typeof this.maxFractionDigits)throw new a.default("Invalid maxFractionDigits");if("number"!=typeof this.minFractionDigits)throw new a.default("Invalid minFractionDigits");if("boolean"!=typeof this.groupingUsed)throw new a.default("Invalid groupingUsed");if("number"!=typeof this.primaryGroupSize)throw new a.default("Invalid primaryGroupSize");if("number"!=typeof this.secondaryGroupSize)throw new a.default("Invalid secondaryGroupSize")}return(0,o.default)(e,[{key:"getSymbol",value:function(){return this.symbol}},{key:"getPositivePattern",value:function(){return this.positivePattern}},{key:"getNegativePattern",value:function(){return this.negativePattern}},{key:"getMaxFractionDigits",value:function(){return this.maxFractionDigits}},{key:"getMinFractionDigits",value:function(){return this.minFractionDigits}},{key:"isGroupingUsed",value:function(){return this.groupingUsed}},{key:"getPrimaryGroupSize",value:function(){return this.primaryGroupSize}},{key:"getSecondaryGroupSize",value:function(){return this.secondaryGroupSize}}]),e}();t.default=u},91598:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=s(r(85105)),o=s(r(99663)),a=s(r(22600)),d=s(r(49135)),i=s(r(93196)),u=s(r(35691));function s(e){return e&&e.__esModule?e:{default:e}}var c=function(e){function t(e,r,a,i,s,c,l,p,f,h){(0,o.default)(this,t);var v=(0,d.default)(this,(t.__proto__||(0,n.default)(t)).call(this,e,r,a,i,s,c,l,p));if(v.currencySymbol=f,v.currencyCode=h,!v.currencySymbol||"string"!=typeof v.currencySymbol)throw new u.default("Invalid currencySymbol");if(!v.currencyCode||"string"!=typeof v.currencyCode)throw new u.default("Invalid currencyCode");return v}return(0,i.default)(t,e),(0,a.default)(t,[{key:"getCurrencySymbol",value:function(){return this.currencySymbol}},{key:"getCurrencyCode",value:function(){return this.currencyCode}}],[{key:"getCurrencyDisplay",value:function(){return"symbol"}}]),t}(s(r(58182)).default);t.default=c},76544:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventEmitter=void 0;var n,o=(n=r(17187))&&n.__esModule?n:{default:n},a=t.EventEmitter=new o.default;t.default=a},9400:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,o=(n=r(99663))&&n.__esModule?n:{default:n},a=window.$;t.default=function e(){var t=this;(0,o.default)(this,e),this.wrapperSelector=".js-text-with-length-counter",this.textSelector=".js-countable-text",this.inputSelector=".js-countable-input",a(document).on("input",this.wrapperSelector+" "+this.inputSelector,(function(e){var r=a(e.currentTarget),n=r.data("max-length")-r.val().length;r.closest(t.wrapperSelector).find(t.textSelector).text(n)}))}},68840:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,o=(n=r(85315))&&n.__esModule?n:{default:n};t.default=function(e,t,r){var n=this,d=e.id,i=e.closable;this.modal=function(e){var t,r=e.id,n=void 0===r?"confirm-modal":r,a=e.confirmTitle,d=e.confirmMessage,i=void 0===d?"":d,u=e.closeButtonLabel,s=void 0===u?"Close":u,c=e.confirmButtonLabel,l=void 0===c?"Accept":c,p=e.confirmButtonClass,f=void 0===p?"btn-primary":p,h=e.customButtons,v=void 0===h?[]:h,m={};return m.container=document.createElement("div"),m.container.classList.add("modal","fade"),m.container.id=n,m.dialog=document.createElement("div"),m.dialog.classList.add("modal-dialog"),m.content=document.createElement("div"),m.content.classList.add("modal-content"),m.header=document.createElement("div"),m.header.classList.add("modal-header"),a&&(m.title=document.createElement("h4"),m.title.classList.add("modal-title"),m.title.innerHTML=a),m.closeIcon=document.createElement("button"),m.closeIcon.classList.add("close"),m.closeIcon.setAttribute("type","button"),m.closeIcon.dataset.dismiss="modal",m.closeIcon.innerHTML="×",m.body=document.createElement("div"),m.body.classList.add("modal-body","text-left","font-weight-normal"),m.message=document.createElement("p"),m.message.classList.add("confirm-message"),m.message.innerHTML=i,m.footer=document.createElement("div"),m.footer.classList.add("modal-footer"),m.closeButton=document.createElement("button"),m.closeButton.setAttribute("type","button"),m.closeButton.classList.add("btn","btn-outline-secondary","btn-lg"),m.closeButton.dataset.dismiss="modal",m.closeButton.innerHTML=s,m.confirmButton=document.createElement("button"),m.confirmButton.setAttribute("type","button"),m.confirmButton.classList.add("btn",f,"btn-lg","btn-confirm-submit"),m.confirmButton.dataset.dismiss="modal",m.confirmButton.innerHTML=l,a?m.header.append(m.title,m.closeIcon):m.header.appendChild(m.closeIcon),m.body.appendChild(m.message),(t=m.footer).append.apply(t,[m.closeButton].concat((0,o.default)(v),[m.confirmButton])),m.content.append(m.header,m.body,m.footer),m.dialog.appendChild(m.content),m.container.appendChild(m.dialog),m}(e),this.$modal=a(this.modal.container),this.show=function(){n.$modal.modal()},this.modal.confirmButton.addEventListener("click",t),this.$modal.modal({backdrop:!!i||"static",keyboard:void 0===i||i,closable:void 0===i||i,show:!1}),this.$modal.on("hidden.bs.modal",(function(){document.querySelector("#"+d).remove(),r&&r()})),document.body.appendChild(this.modal.container)};var a=window.$},95778:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=u(r(52945)),o=u(r(99663)),a=u(r(22600)),d=u(r(2564)),i=u(r(57208));function u(e){return e&&e.__esModule?e:{default:e}}var s=window.$,c=function(){function e(){return(0,o.default)(this,e),window.prestashop&&window.prestashop.customRoutes&&(0,n.default)(i.default.routes,window.prestashop.customRoutes),d.default.setData(i.default),d.default.setBaseUrl(s(document).find("body").data("base-url")),this}return(0,a.default)(e,[{key:"generate",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=(0,n.default)(t,{_token:s(document).find("body").data("token")});return d.default.generate(e,r)}}]),e}();t.default=c},60425:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={mainDiv:"#order-view-page",orderPaymentDetailsBtn:".js-payment-details-btn",orderPaymentFormAmountInput:"#order_payment_amount",orderPaymentInvoiceSelect:"#order_payment_id_invoice",viewOrderPaymentsBlock:"#view_order_payments_block",viewOrderPaymentsAlert:".js-view-order-payments-alert",privateNoteToggleBtn:".js-private-note-toggle-btn",privateNoteBlock:".js-private-note-block",privateNoteInput:"#private_note_note",privateNoteSubmitBtn:".js-private-note-btn",addCartRuleModal:"#addOrderDiscountModal",addCartRuleInvoiceIdSelect:"#add_order_cart_rule_invoice_id",addCartRuleNameInput:"#add_order_cart_rule_name",addCartRuleTypeSelect:"#add_order_cart_rule_type",addCartRuleValueInput:"#add_order_cart_rule_value",addCartRuleValueUnit:"#add_order_cart_rule_value_unit",addCartRuleSubmit:"#add_order_cart_rule_submit",cartRuleHelpText:".js-cart-rule-value-help",updateOrderStatusActionBtn:"#update_order_status_action_btn",updateOrderStatusActionInput:"#update_order_status_action_input",updateOrderStatusActionInputWrapper:"#update_order_status_action_input_wrapper",updateOrderStatusActionForm:"#update_order_status_action_form",showOrderShippingUpdateModalBtn:".js-update-shipping-btn",updateOrderShippingTrackingNumberInput:"#update_order_shipping_tracking_number",updateOrderShippingCurrentOrderCarrierIdInput:"#update_order_shipping_current_order_carrier_id",updateCustomerAddressModal:"#updateCustomerAddressModal",openOrderAddressUpdateModalBtn:".js-update-customer-address-modal-btn",updateOrderAddressTypeInput:"#change_order_address_address_type",deliveryAddressEditBtn:"#js-delivery-address-edit-btn",invoiceAddressEditBtn:"#js-invoice-address-edit-btn",orderMessageNameSelect:"#order_message_order_message",orderMessagesContainer:".js-order-messages-container",orderMessage:"#order_message_message",orderMessageChangeWarning:".js-message-change-warning",orderDocumentsTabCount:"#orderDocumentsTab .count",orderDocumentsTabBody:"#orderDocumentsTabContent .card-body",orderShippingTabCount:"#orderShippingTab .count",orderShippingTabBody:"#orderShippingTabContent .card-body",allMessagesModal:"#view_all_messages_modal",allMessagesList:"#all-messages-list",openAllMessagesBtn:".js-open-all-messages-btn",productOriginalPosition:"#orderProductsOriginalPosition",productModificationPosition:"#orderProductsModificationPosition",productsPanel:"#orderProductsPanel",productsCount:"#orderProductsPanelCount",productDeleteBtn:".js-order-product-delete-btn",productsTable:"#orderProductsTable",productsPagination:".order-product-pagination",productsNavPagination:"#orderProductsNavPagination",productsTablePagination:"#orderProductsTablePagination",productsTablePaginationNext:"#orderProductsTablePaginationNext",productsTablePaginationPrev:"#orderProductsTablePaginationPrev",productsTablePaginationLink:".page-item:not(.d-none):not(#orderProductsTablePaginationNext):not(#orderProductsTablePaginationPrev) .page-link",productsTablePaginationActive:"#orderProductsTablePagination .page-item.active span",productsTablePaginationTemplate:"#orderProductsTablePagination .page-item.d-none",productsTablePaginationNumberSelector:"#orderProductsTablePaginationNumberSelector",productsTableRow:function(e){return"#orderProduct_"+e},productsTableRowEdited:function(e){return"#editOrderProduct_"+e},productsTableRows:"tr.cellProduct",productsCellLocation:"tr .cellProductLocation",productsCellRefunded:"tr .cellProductRefunded",productsCellLocationDisplayed:"tr:not(.d-none) .cellProductLocation",productsCellRefundedDisplayed:"tr:not(.d-none) .cellProductRefunded",productsTableCustomizationRows:"#orderProductsTable .order-product-customization",productEditButtons:".js-order-product-edit-btn",productEditBtn:function(e){return"#orderProduct_"+e+" .js-order-product-edit-btn"},productAddBtn:"#addProductBtn",productActionBtn:".js-product-action-btn",productAddActionBtn:"#add_product_row_add",productCancelAddBtn:"#add_product_row_cancel",productAddRow:"#addProductTableRow",productSearchInput:"#add_product_row_search",productSearchInputAutocomplete:"#addProductTableRow .dropdown",productSearchInputAutocompleteMenu:"#addProductTableRow .dropdown .dropdown-menu",productAddIdInput:"#add_product_row_product_id",productAddTaxRateInput:"#add_product_row_tax_rate",productAddCombinationsBlock:"#addProductCombinations",productAddCombinationsSelect:"#addProductCombinationId",productAddPriceTaxExclInput:"#add_product_row_price_tax_excluded",productAddPriceTaxInclInput:"#add_product_row_price_tax_included",productAddQuantityInput:"#add_product_row_quantity",productAddAvailableText:"#addProductAvailable",productAddLocationText:"#addProductLocation",productAddTotalPriceText:"#addProductTotalPrice",productAddInvoiceSelect:"#add_product_row_invoice",productAddFreeShippingSelect:"#add_product_row_free_shipping",productAddNewInvoiceInfo:"#addProductNewInvoiceInfo",productEditSaveBtn:".productEditSaveBtn",productEditCancelBtn:".productEditCancelBtn",productEditRowTemplate:"#editProductTableRowTemplate",productEditRow:".editProductRow",productEditImage:".cellProductImg",productEditName:".cellProductName",productEditUnitPrice:".cellProductUnitPrice",productEditQuantity:".cellProductQuantity",productEditAvailableQuantity:".cellProductAvailableQuantity",productEditTotalPrice:".cellProductTotalPrice",productEditPriceTaxExclInput:".editProductPriceTaxExcl",productEditPriceTaxInclInput:".editProductPriceTaxIncl",productEditInvoiceSelect:".editProductInvoice",productEditQuantityInput:".editProductQuantity",productEditLocationText:".editProductLocation",productEditAvailableText:".editProductAvailable",productEditTotalPriceText:".editProductTotalPrice",productDiscountList:{list:".table.discountList"},productPackModal:{modal:"#product-pack-modal",table:"#product-pack-modal-table tbody",rows:"#product-pack-modal-table tbody tr:not(#template-pack-table-row)",template:"#template-pack-table-row",product:{img:".cell-product-img img",link:".cell-product-name a",name:".cell-product-name .product-name",ref:".cell-product-name .product-reference",supplierRef:".cell-product-name .product-supplier-reference",quantity:".cell-product-quantity",availableQuantity:".cell-product-available-quantity"}},orderProductsTotal:"#orderProductsTotal",orderDiscountsTotalContainer:"#order-discounts-total-container",orderDiscountsTotal:"#orderDiscountsTotal",orderWrappingTotal:"#orderWrappingTotal",orderShippingTotalContainer:"#order-shipping-total-container",orderShippingTotal:"#orderShippingTotal",orderTaxesTotal:"#orderTaxesTotal",orderTotal:"#orderTotal",orderHookTabsContainer:"#order_hook_tabs",cancelProduct:{form:'form[name="cancel_product"]',buttons:{abort:"button.cancel-product-element-abort",save:"#cancel_product_save",partialRefund:"button.partial-refund-display",standardRefund:"button.standard-refund-display",returnProduct:"button.return-product-display",cancelProducts:"button.cancel-product-display"},inputs:{quantity:".cancel-product-quantity input",amount:".cancel-product-amount input",selector:".cancel-product-selector input"},table:{cell:".cancel-product-cell",header:"th.cancel-product-element p",actions:"td.cellProductActions, th.product_actions"},checkboxes:{restock:"#cancel_product_restock",creditSlip:"#cancel_product_credit_slip",voucher:"#cancel_product_voucher"},radios:{voucherRefundType:{productPrices:'input[voucher-refund-type="0"]',productPricesVoucherExcluded:'input[voucher-refund-type="1"]',negativeErrorMessage:".voucher-refund-type-negative-error"}},toggle:{partialRefund:".cancel-product-element:not(.hidden):not(.shipping-refund), .cancel-product-amount",standardRefund:".cancel-product-element:not(.hidden):not(.shipping-refund-amount):not(.restock-products), .cancel-product-selector",returnProduct:".cancel-product-element:not(.hidden):not(.shipping-refund-amount), .cancel-product-selector",cancelProducts:".cancel-product-element:not(.hidden):not(.shipping-refund-amount):not(.shipping-refund):not(.restock-products):not(.refund-credit-slip):not(.refund-voucher):not(.voucher-refund-type), .cancel-product-selector"}},printOrderViewPageButton:".js-print-order-view-page",orderNoteToggleBtn:".js-order-notes-toggle-btn",orderNoteBlock:".js-order-notes-block",orderNoteInput:"#internal_note_note",orderNoteSubmitBtn:".js-order-notes-btn",refreshProductsListLoadingSpinner:"#orderProductsPanel .spinner-order-products-container#orderProductsLoading"}},54749:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(r(99663)),o=d(r(22600)),a=d(r(60425));function d(e){return e&&e.__esModule?e:{default:e}}var i=window.$,u=function(){function e(){(0,n.default)(this,e),this.setupListeners()}return(0,o.default)(e,[{key:"setupListeners",value:function(){this.initShowNoteFormEventHandler(),this.initCloseNoteFormEventHandler(),this.initEnterPaymentEventHandler()}},{key:"initShowNoteFormEventHandler",value:function(){i(".js-open-invoice-note-btn").on("click",(function(e){e.preventDefault(),i(e.currentTarget).closest("tr").next().removeClass("d-none")}))}},{key:"initCloseNoteFormEventHandler",value:function(){i(".js-cancel-invoice-note-btn").on("click",(function(e){i(e.currentTarget).closest("tr").addClass("d-none")}))}},{key:"initEnterPaymentEventHandler",value:function(){i(".js-enter-payment-btn").on("click",(function(e){var t=i(e.currentTarget).data("payment-amount");i(a.default.viewOrderPaymentsBlock).get(0).scrollIntoView({behavior:"smooth"}),i(a.default.orderPaymentFormAmountInput).val(t)}))}}]),e}();t.default=u},26266:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(r(99663)),o=d(r(22600)),a=d(r(60425));function d(e){return e&&e.__esModule?e:{default:e}}var i=window.$,u=function(){function e(){var t=this;return(0,n.default)(this,e),this.$orderMessageChangeWarning=i(a.default.orderMessageChangeWarning),this.$messagesContainer=i(a.default.orderMessagesContainer),{listenForPredefinedMessageSelection:function(){return t.handlePredefinedMessageSelection()},listenForFullMessagesOpen:function(){return t.onFullMessagesOpen()}}}return(0,o.default)(e,[{key:"handlePredefinedMessageSelection",value:function(){var e=this;i(document).on("change",a.default.orderMessageNameSelect,(function(t){var r=i(t.currentTarget).val();if(r){var n=e.$messagesContainer.find("div[data-id="+r+"]").text().trim(),o=i(a.default.orderMessage);o.val().trim()===n||o.val()&&!window.confirm(e.$orderMessageChangeWarning.text())||(o.val(n),o.trigger("input"))}}))}},{key:"onFullMessagesOpen",value:function(){var e=this;i(document).on("click",a.default.openAllMessagesBtn,(function(){return e.scrollToMsgListBottom()}))}},{key:"scrollToMsgListBottom",value:function(){var e=i(a.default.allMessagesModal),t=document.querySelector(a.default.allMessagesList),r=window.setInterval((function(){e.hasClass("show")&&(t.scrollTop=t.scrollHeight,clearInterval(r))}),10)}}]),e}();t.default=u},60139:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(r(99663)),o=d(r(22600)),a=d(r(60425));function d(e){return e&&e.__esModule?e:{default:e}}var i=window.$,u=function(){function e(){(0,n.default)(this,e),this.initOrderShippingUpdateEventHandler()}return(0,o.default)(e,[{key:"initOrderShippingUpdateEventHandler",value:function(){i(a.default.mainDiv).on("click",a.default.showOrderShippingUpdateModalBtn,(function(e){var t=i(e.currentTarget);i(a.default.updateOrderShippingTrackingNumberInput).val(t.data("order-tracking-number")),i(a.default.updateOrderShippingCurrentOrderCarrierIdInput).val(t.data("order-carrier-id"))}))}}]),e}();t.default=u},95047:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(r(99663)),o=i(r(22600)),a=i(r(95778)),d=i(r(60425));function i(e){return e&&e.__esModule?e:{default:e}}var u=window.$,s=function(){function e(){(0,n.default)(this,e),this.router=new a.default}return(0,o.default)(e,[{key:"refresh",value:function(e){u.ajax(this.router.generate("admin_orders_get_discounts",{orderId:e})).then((function(e){u(d.default.productDiscountList.list).replaceWith(e)}))}}]),e}();t.default=s},31643:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=u(r(99663)),o=u(r(22600)),a=u(r(95778)),d=u(r(60425)),i=u(r(54749));function u(e){return e&&e.__esModule?e:{default:e}}var s=window.$,c=function(){function e(){(0,n.default)(this,e),this.router=new a.default,this.invoiceNoteManager=new i.default}return(0,o.default)(e,[{key:"refresh",value:function(e){var t=this;s.getJSON(this.router.generate("admin_orders_get_documents",{orderId:e})).then((function(e){s(d.default.orderDocumentsTabCount).text(e.total),s(d.default.orderDocumentsTabBody).html(e.html),t.invoiceNoteManager.setupListeners()}))}}]),e}();t.default=c},86084:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=u(r(88902)),o=u(r(99663)),a=u(r(22600)),d=u(r(95778)),i=u(r(60425));function u(e){return e&&e.__esModule?e:{default:e}}var s=window.$,c=function(){function e(){(0,o.default)(this,e),this.router=new d.default}return(0,a.default)(e,[{key:"refresh",value:function(e){s.getJSON(this.router.generate("admin_orders_get_invoices",{orderId:e})).then((function(e){if(e&&e.invoices&&!((0,n.default)(e.invoices).length<=0)){var t=s(i.default.orderPaymentInvoiceSelect),r=s(i.default.productAddInvoiceSelect).find("optgroup:first"),o=s(i.default.productEditInvoiceSelect),a=s(i.default.addCartRuleInvoiceIdSelect);r.empty(),t.empty(),o.empty(),a.empty(),(0,n.default)(e.invoices).forEach((function(n){var d=e.invoices[n],i=n.split(" - ")[0];r.append('<option value="'+d+'">'+i+"</option>"),t.append('<option value="'+d+'">'+i+"</option>"),o.append('<option value="'+d+'">'+i+"</option>"),a.append('<option value="'+d+'">'+n+"</option>")})),document.querySelector(i.default.productAddInvoiceSelect).selectedIndex=0}}))}}]),e}();t.default=c},78455:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(r(99663)),o=i(r(22600)),a=i(r(95778)),d=i(r(60425));function i(e){return e&&e.__esModule?e:{default:e}}var u=window.$,s=function(){function e(){(0,n.default)(this,e),this.router=new a.default}return(0,o.default)(e,[{key:"refresh",value:function(e){u.ajax(this.router.generate("admin_orders_get_payments",{orderId:e})).then((function(e){u(d.default.viewOrderPaymentsAlert).remove(),u(d.default.viewOrderPaymentsBlock+" .card-body").prepend(e)}),(function(e){e.responseJSON&&e.responseJSON.message&&u.growl.error({message:e.responseJSON.message})}))}}]),e}();t.default=s},33188:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(r(99663)),o=i(r(22600)),a=i(r(95778)),d=i(r(60425));function i(e){return e&&e.__esModule?e:{default:e}}var u=window.$,s=function(){function e(){(0,n.default)(this,e),this.router=new a.default}return(0,o.default)(e,[{key:"refresh",value:function(e){u.getJSON(this.router.generate("admin_orders_get_prices",{orderId:e})).then((function(e){u(d.default.orderTotal).text(e.orderTotalFormatted),u(d.default.orderDiscountsTotal).text("-"+e.discountsAmountFormatted),u(d.default.orderDiscountsTotalContainer).toggleClass("d-none",!e.discountsAmountDisplayed),u(d.default.orderProductsTotal).text(e.productsTotalFormatted),u(d.default.orderShippingTotal).text(e.shippingTotalFormatted),u(d.default.orderShippingTotalContainer).toggleClass("d-none",!e.shippingTotalDisplayed),u(d.default.orderTaxesTotal).text(e.taxesTotalFormatted)}))}},{key:"refreshProductPrices",value:function(e){u.getJSON(this.router.generate("admin_orders_product_prices",{orderId:e})).then((function(e){e.forEach((function(e){var t=d.default.productsTableRow(e.orderDetailId),r=u(e.quantity);e.quantity>1&&(r=r.wrap('<span class="badge badge-secondary rounded-circle"></span>')),u(t+" "+d.default.productEditUnitPrice).text(e.unitPrice),u(t+" "+d.default.productEditQuantity).html(r.html()),u(t+" "+d.default.productEditAvailableQuantity).text(e.availableQuantity),u(t+" "+d.default.productEditTotalPrice).text(e.totalPrice);var n=u(d.default.productEditBtn(e.orderDetailId));n.data("product-price-tax-incl",e.unitPriceTaxInclRaw),n.data("product-price-tax-excl",e.unitPriceTaxExclRaw),n.data("product-quantity",e.quantity)}))}))}},{key:"checkOtherProductPricesMatch",value:function(e,t,r,n,o){var a=document.querySelectorAll("tr.cellProduct"),i=Number(t),s=Number(r),c=Number(e),l=!1,p=!1;return a.forEach((function(e){var t=u(e).attr("id");if(!o||t!=="orderProduct_"+o){var r=u("#"+t+" "+d.default.productEditButtons),a=Number(r.data("order-invoice-id")),f=Number(r.data("product-id")),h=Number(r.data("combination-id"));f===i&&h===s&&c!==Number(r.data("product-price-tax-incl"))&&(""===n||n&&a&&n===a?p=!0:l=!0)}})),l?"invoice":p?"product":null}}]),e}();t.default=s},370:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(r(65425)),o=d(r(99663)),a=d(r(22600));function d(e){return e&&e.__esModule?e:{default:e}}var i=function(){function e(){(0,o.default)(this,e)}return(0,a.default)(e,[{key:"calculateTaxExcluded",value:function(e,t,r){var o=parseFloat(e);(o<0||(0,n.default)(o))&&(o=0);var a=t/100+1;return window.ps_round(o/a,r)}},{key:"calculateTaxIncluded",value:function(e,t,r){var o=parseFloat(e);(o<0||(0,n.default)(o))&&(o=0);var a=t/100+1;return window.ps_round(o*a,r)}},{key:"calculateTotalPrice",value:function(e,t,r){return window.ps_round(t*e,r)}}]),e}();t.default=i},79623:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=s(r(47518)),o=s(r(88902)),a=s(r(99663)),d=s(r(22600)),i=s(r(95778)),u=s(r(60425));function s(e){return e&&e.__esModule?e:{default:e}}var c=window.$,l=function(){function e(t){(0,a.default)(this,e),this.activeSearchRequest=null,this.router=new i.default,this.input=t,this.results=[],this.dropdownMenu=c(u.default.productSearchInputAutocompleteMenu),this.onItemClickedCallback=function(){}}return(0,d.default)(e,[{key:"listenForSearch",value:function(){var e=this;this.input.on("click",(function(t){t.stopImmediatePropagation(),e.updateResults(e.results)})),this.input.on("keyup",(function(t){return e.delaySearch(t.currentTarget)})),c(document).on("click",(function(){return e.dropdownMenu.hide()}))}},{key:"delaySearch",value:function(e){var t=this;clearTimeout(this.searchTimeoutId),e.value.length<2||(this.searchTimeoutId=setTimeout((function(){t.search(e.value,c(e).data("currency"),c(e).data("order"))}),300))}},{key:"search",value:function(e,t,r){var n=this,o={search_phrase:e};t&&(o.currency_id=t),r&&(o.order_id=r),null!==this.activeSearchRequest&&this.activeSearchRequest.abort(),this.activeSearchRequest=c.get(this.router.generate("admin_orders_products_search",o)),this.activeSearchRequest.then((function(e){return n.updateResults(e)})).always((function(){n.activeSearchRequest=null}))}},{key:"updateResults",value:function(e){var t=this;this.dropdownMenu.empty(),!e||!e.products||(0,o.default)(e.products).length<=0?this.dropdownMenu.hide():(this.results=e.products,(0,n.default)(this.results).forEach((function(e){var r=c('<a class="dropdown-item" data-id="'+e.productId+'" href="#">'+e.name+"</a>");r.on("click",(function(e){e.preventDefault(),t.onItemClicked(c(e.target).data("id"))})),t.dropdownMenu.append(r)})),this.dropdownMenu.show())}},{key:"onItemClicked",value:function(e){var t=this.results.filter((function(t){return t.productId===e}));0!==t.length&&(this.input.val(t[0].name),this.onItemClickedCallback(t[0]))}}]),e}();t.default=l},44670:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=v(r(88902)),o=v(r(47518)),a=v(r(99663)),d=v(r(22600)),i=v(r(95778)),u=v(r(60425)),s=r(76544),c=v(r(65315)),l=v(r(370)),p=v(r(92837)),f=v(r(68840)),h=v(r(33188));function v(e){return e&&e.__esModule?e:{default:e}}var m=window.$,g=function(){function e(){(0,a.default)(this,e),this.router=new i.default,this.productAddActionBtn=m(u.default.productAddActionBtn),this.productIdInput=m(u.default.productAddIdInput),this.combinationsBlock=m(u.default.productAddCombinationsBlock),this.combinationsSelect=m(u.default.productAddCombinationsSelect),this.priceTaxIncludedInput=m(u.default.productAddPriceTaxInclInput),this.priceTaxExcludedInput=m(u.default.productAddPriceTaxExclInput),this.taxRateInput=m(u.default.productAddTaxRateInput),this.quantityInput=m(u.default.productAddQuantityInput),this.availableText=m(u.default.productAddAvailableText),this.locationText=m(u.default.productAddLocationText),this.totalPriceText=m(u.default.productAddTotalPriceText),this.invoiceSelect=m(u.default.productAddInvoiceSelect),this.freeShippingSelect=m(u.default.productAddFreeShippingSelect),this.productAddMenuBtn=m(u.default.productAddBtn),this.available=null,this.setupListener(),this.product={},this.currencyPrecision=m(u.default.productsTable).data("currencyPrecision"),this.priceTaxCalculator=new l.default,this.orderProductRenderer=new p.default,this.orderPricesRefresher=new h.default,this.isOrderTaxIncluded=m(u.default.productAddRow).data("isOrderTaxIncluded"),this.taxExcluded=null,this.taxIncluded=null}return(0,d.default)(e,[{key:"setupListener",value:function(){var e=this;this.combinationsSelect.on("change",(function(t){var r=window.ps_round(m(t.currentTarget).find(":selected").data("priceTaxExcluded"),e.currencyPrecision);e.priceTaxExcludedInput.val(r),e.taxExcluded=parseFloat(r);var n=window.ps_round(m(t.currentTarget).find(":selected").data("priceTaxIncluded"),e.currencyPrecision);e.priceTaxIncludedInput.val(n),e.taxIncluded=parseFloat(n),e.locationText.html(m(t.currentTarget).find(":selected").data("location")),e.available=m(t.currentTarget).find(":selected").data("stock"),e.quantityInput.trigger("change"),e.orderProductRenderer.toggleColumn(u.default.productsCellLocation)})),this.quantityInput.on("change keyup",(function(t){if(null!==e.available){var r=Number(t.target.value),n=e.available-r,o=e.availableText.data("availableOutOfStock");e.availableText.text(n),e.availableText.toggleClass("text-danger font-weight-bold",n<0);var a=r<=0||n<0&&!o;e.productAddActionBtn.prop("disabled",a),e.invoiceSelect.prop("disabled",!o&&n<0),e.taxIncluded=parseFloat(e.priceTaxIncludedInput.val()),e.totalPriceText.html(e.priceTaxCalculator.calculateTotalPrice(r,e.isOrderTaxIncluded?e.taxIncluded:e.taxExcluded,e.currencyPrecision))}})),this.productIdInput.on("change",(function(){e.productAddActionBtn.removeAttr("disabled"),e.invoiceSelect.removeAttr("disabled")})),this.priceTaxIncludedInput.on("change keyup",(function(t){e.taxIncluded=parseFloat(t.target.value),e.taxExcluded=e.priceTaxCalculator.calculateTaxExcluded(e.taxIncluded,e.taxRateInput.val(),e.currencyPrecision);var r=parseInt(e.quantityInput.val(),10);e.priceTaxExcludedInput.val(e.taxExcluded),e.totalPriceText.html(e.priceTaxCalculator.calculateTotalPrice(r,e.isOrderTaxIncluded?e.taxIncluded:e.taxExcluded,e.currencyPrecision))})),this.priceTaxExcludedInput.on("change keyup",(function(t){e.taxExcluded=parseFloat(t.target.value),e.taxIncluded=e.priceTaxCalculator.calculateTaxIncluded(e.taxExcluded,e.taxRateInput.val(),e.currencyPrecision);var r=parseInt(e.quantityInput.val(),10);e.priceTaxIncludedInput.val(e.taxIncluded),e.totalPriceText.html(e.priceTaxCalculator.calculateTotalPrice(r,e.isOrderTaxIncluded?e.taxIncluded:e.taxExcluded,e.currencyPrecision))})),this.productAddActionBtn.on("click",(function(t){return e.confirmNewInvoice(t)})),this.invoiceSelect.on("change",(function(){return e.orderProductRenderer.toggleProductAddNewInvoiceInfo()}))}},{key:"setProduct",value:function(e){this.productIdInput.val(e.productId).trigger("change");var t=window.ps_round(e.priceTaxExcl,this.currencyPrecision);this.priceTaxExcludedInput.val(t),this.taxExcluded=parseFloat(t);var r=window.ps_round(e.priceTaxIncl,this.currencyPrecision);this.priceTaxIncludedInput.val(r),this.taxIncluded=parseFloat(r),this.taxRateInput.val(e.taxRate),this.locationText.html(e.location),this.available=e.stock,this.availableText.data("availableOutOfStock",e.availableOutOfStock),this.quantityInput.val(1),this.quantityInput.trigger("change"),this.setCombinations(e.combinations),this.orderProductRenderer.toggleColumn(u.default.productsCellLocation)}},{key:"setCombinations",value:function(e){var t=this;this.combinationsSelect.empty(),(0,o.default)(e).forEach((function(e){t.combinationsSelect.append('<option value="'+e.attributeCombinationId+'" data-price-tax-excluded="'+e.priceTaxExcluded+'" data-price-tax-included="'+e.priceTaxIncluded+'" data-stock="'+e.stock+'" data-location="'+e.location+'">'+e.attribute+"</option>")})),this.combinationsBlock.toggleClass("d-none",0===(0,n.default)(e).length),(0,n.default)(e).length>0&&this.combinationsSelect.trigger("change")}},{key:"addProduct",value:function(e){var t=this;this.productAddActionBtn.prop("disabled",!0),this.invoiceSelect.prop("disabled",!0),this.combinationsSelect.prop("disabled",!0);var r={product_id:this.productIdInput.val(),combination_id:m(":selected",this.combinationsSelect).val(),price_tax_incl:this.priceTaxIncludedInput.val(),price_tax_excl:this.priceTaxExcludedInput.val(),quantity:this.quantityInput.val(),invoice_id:this.invoiceSelect.val(),free_shipping:this.freeShippingSelect.prop("checked")};m.ajax({url:this.router.generate("admin_orders_add_product",{orderId:e}),method:"POST",data:r}).then((function(t){s.EventEmitter.emit(c.default.productAddedToOrder,{orderId:e,orderProductId:r.product_id,newRow:t})}),(function(e){t.productAddActionBtn.prop("disabled",!1),t.invoiceSelect.prop("disabled",!1),t.combinationsSelect.prop("disabled",!1),e.responseJSON&&e.responseJSON.message&&m.growl.error({message:e.responseJSON.message})}))}},{key:"confirmNewInvoice",value:function(e){var t=this,r=parseInt(this.invoiceSelect.val(),10),n=m(e.currentTarget).data("orderId");0===r?new f.default({id:"modal-confirm-new-invoice",confirmTitle:this.invoiceSelect.data("modal-title"),confirmMessage:this.invoiceSelect.data("modal-body"),confirmButtonLabel:this.invoiceSelect.data("modal-apply"),closeButtonLabel:this.invoiceSelect.data("modal-cancel")},(function(){t.confirmNewPrice(n,r)})).show():this.addProduct(n)}},{key:"confirmNewPrice",value:function(e,t){var r=this,n=m(":selected",this.combinationsSelect).val(),o=void 0===n?0:n;"invoice"===this.orderPricesRefresher.checkOtherProductPricesMatch(this.priceTaxIncludedInput.val(),this.productIdInput.val(),o,t)?new f.default({id:"modal-confirm-new-price",confirmTitle:this.invoiceSelect.data("modal-edit-price-title"),confirmMessage:this.invoiceSelect.data("modal-edit-price-body"),confirmButtonLabel:this.invoiceSelect.data("modal-edit-price-apply"),closeButtonLabel:this.invoiceSelect.data("modal-edit-price-cancel")},(function(){r.addProduct(e)})).show():this.addProduct(e)}}]),e}();t.default=g},56075:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=s(r(65425)),o=s(r(99663)),a=s(r(22600)),d=s(r(95778)),i=s(r(60425)),u=r(65693);function s(e){return e&&e.__esModule?e:{default:e}}var c=window.$,l=function(){function e(){(0,o.default)(this,e),this.router=new d.default,this.cancelProductForm=c(i.default.cancelProduct.form),this.orderId=this.cancelProductForm.data("orderId"),this.orderDelivered=1===parseInt(this.cancelProductForm.data("isDelivered"),10),this.isTaxIncluded=1===parseInt(this.cancelProductForm.data("isTaxIncluded"),10),this.discountsAmount=parseFloat(this.cancelProductForm.data("discountsAmount")),this.currencyFormatter=u.NumberFormatter.build(this.cancelProductForm.data("priceSpecification")),this.useAmountInputs=!0,this.listenForInputs()}return(0,a.default)(e,[{key:"showPartialRefund",value:function(){this.hideCancelElements(),c(i.default.cancelProduct.toggle.partialRefund).show(),this.useAmountInputs=!0,this.initForm(c(i.default.cancelProduct.buttons.save).data("partialRefundLabel"),this.router.generate("admin_orders_partial_refund",{orderId:this.orderId}),"partial-refund")}},{key:"showStandardRefund",value:function(){this.hideCancelElements(),c(i.default.cancelProduct.toggle.standardRefund).show(),this.useAmountInputs=!1,this.initForm(c(i.default.cancelProduct.buttons.save).data("standardRefundLabel"),this.router.generate("admin_orders_standard_refund",{orderId:this.orderId}),"standard-refund")}},{key:"showReturnProduct",value:function(){this.hideCancelElements(),c(i.default.cancelProduct.toggle.returnProduct).show(),this.useAmountInputs=!1,this.initForm(c(i.default.cancelProduct.buttons.save).data("returnProductLabel"),this.router.generate("admin_orders_return_product",{orderId:this.orderId}),"return-product")}},{key:"hideRefund",value:function(){this.hideCancelElements(),c(i.default.cancelProduct.table.actions).show()}},{key:"hideCancelElements",value:function(){c(i.default.cancelProduct.toggle.standardRefund).hide(),c(i.default.cancelProduct.toggle.partialRefund).hide(),c(i.default.cancelProduct.toggle.returnProduct).hide(),c(i.default.cancelProduct.table.actions).hide()}},{key:"initForm",value:function(e,t,r){this.updateVoucherRefund(),this.cancelProductForm.prop("action",t),this.cancelProductForm.removeClass("standard-refund partial-refund return-product cancel-product").addClass(r),c(i.default.cancelProduct.buttons.save).html(e),c(i.default.cancelProduct.table.header).html(e),c(i.default.cancelProduct.checkboxes.restock).prop("checked",this.orderDelivered),c(i.default.cancelProduct.checkboxes.creditSlip).prop("checked",!0),c(i.default.cancelProduct.checkboxes.voucher).prop("checked",!1)}},{key:"listenForInputs",value:function(){var e=this;c(document).on("change",i.default.cancelProduct.inputs.quantity,(function(t){var r=c(t.target),n=r.parents(i.default.cancelProduct.table.cell).find(i.default.cancelProduct.inputs.amount),o=parseInt(r.val(),10);if(o<=0)return n.val(0),void e.updateVoucherRefund();var a=e.isTaxIncluded?"productPriceTaxIncl":"productPriceTaxExcl",d=parseFloat(r.data(a)),u=parseFloat(r.data("amountRefundable")),s=d*o<u?d*o:u,l=parseFloat(n.val());e.useAmountInputs&&e.updateAmountInput(r),(""===n.val()||0===l||l>s)&&(n.val(s),e.updateVoucherRefund())})),c(document).on("change",i.default.cancelProduct.inputs.amount,(function(){e.updateVoucherRefund()})),c(document).on("change",i.default.cancelProduct.inputs.selector,(function(t){var r=c(t.target),o=r.parents(i.default.cancelProduct.table.cell).find(i.default.cancelProduct.inputs.quantity),a=parseInt(o.data("quantityRefundable"),10),d=parseInt(o.val(),10);r.is(":checked")?((0,n.default)(d)||0===d)&&o.val(a):o.val(0),e.updateVoucherRefund()}))}},{key:"updateAmountInput",value:function(e){var t=e.parents(i.default.cancelProduct.table.cell).find(i.default.cancelProduct.inputs.amount),r=parseInt(e.val(),10);if(r<=0)t.val(0);else{var n=this.isTaxIncluded?"productPriceTaxIncl":"productPriceTaxExcl",o=parseFloat(e.data(n)),a=parseFloat(e.data("amountRefundable")),d=o*r<a?o*r:a,u=parseFloat(t.val());(""===t.val()||0===u||u>d)&&t.val(d)}}},{key:"getRefundAmount",value:function(){var e=this,t=0;return this.useAmountInputs?c(i.default.cancelProduct.inputs.amount).each((function(e,r){var o=parseFloat(r.value);t+=(0,n.default)(o)?0:o})):c(i.default.cancelProduct.inputs.quantity).each((function(r,n){var o=c(n),a=e.isTaxIncluded?"productPriceTaxIncl":"productPriceTaxExcl",d=parseFloat(o.data(a)),i=parseInt(o.val(),10);t+=i*d})),t}},{key:"updateVoucherRefund",value:function(){var e=this.getRefundAmount();this.updateVoucherRefundTypeLabel(c(i.default.cancelProduct.radios.voucherRefundType.productPrices),e);var t=e-this.discountsAmount;this.updateVoucherRefundTypeLabel(c(i.default.cancelProduct.radios.voucherRefundType.productPricesVoucherExcluded),t),t<0?(c(i.default.cancelProduct.radios.voucherRefundType.productPricesVoucherExcluded).prop("checked",!1).prop("disabled",!0),c(i.default.cancelProduct.radios.voucherRefundType.productPrices).prop("checked",!0),c(i.default.cancelProduct.radios.voucherRefundType.negativeErrorMessage).show()):(c(i.default.cancelProduct.radios.voucherRefundType.productPricesVoucherExcluded).prop("disabled",!1),c(i.default.cancelProduct.radios.voucherRefundType.negativeErrorMessage).hide())}},{key:"updateVoucherRefundTypeLabel",value:function(e,t){var r=e.data("defaultLabel"),n=e.parents("label"),o=this.currencyFormatter.format(t);n.get(0).lastChild.nodeValue="\n "+r+" "+o}},{key:"showCancelProductForm",value:function(){var e=this.router.generate("admin_orders_cancellation",{orderId:this.orderId});this.initForm(c(i.default.cancelProduct.buttons.save).data("cancelLabel"),e,"cancel-product"),this.hideCancelElements(),c(i.default.cancelProduct.toggle.cancelProducts).show()}}]),e}();t.default=l},74746:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=p(r(99663)),o=p(r(22600)),a=p(r(95778)),d=p(r(60425)),i=r(76544),u=p(r(65315)),s=p(r(370)),c=p(r(68840)),l=p(r(33188));function p(e){return e&&e.__esModule?e:{default:e}}var f=window.$,h=function(){function e(t){(0,n.default)(this,e),this.router=new a.default,this.orderDetailId=t,this.productRow=f("#orderProduct_"+this.orderDetailId),this.product={},this.currencyPrecision=f(d.default.productsTable).data("currencyPrecision"),this.priceTaxCalculator=new s.default,this.productEditSaveBtn=f(d.default.productEditSaveBtn),this.quantityInput=f(d.default.productEditQuantityInput),this.orderPricesRefresher=new l.default}return(0,o.default)(e,[{key:"setupListener",value:function(){var e=this;this.quantityInput.on("change keyup",(function(t){var r=Number(t.target.value),n=parseInt(f(t.currentTarget).data("availableQuantity"),10)-(r-parseInt(e.quantityInput.data("previousQuantity"),10)),o=e.availableText.data("availableOutOfStock");e.quantity=r,e.availableText.text(n),e.availableText.toggleClass("text-danger font-weight-bold",n<0),e.updateTotal();var a=r<=0||n<0&&!o;e.productEditSaveBtn.prop("disabled",a)})),this.productEditInvoiceSelect.on("change",(function(){e.productEditSaveBtn.prop("disabled",!1)})),this.priceTaxIncludedInput.on("change keyup",(function(t){e.taxIncluded=parseFloat(t.target.value),e.taxExcluded=e.priceTaxCalculator.calculateTaxExcluded(e.taxIncluded,e.taxRate,e.currencyPrecision),e.priceTaxExcludedInput.val(e.taxExcluded),e.updateTotal()})),this.priceTaxExcludedInput.on("change keyup",(function(t){e.taxExcluded=parseFloat(t.target.value),e.taxIncluded=e.priceTaxCalculator.calculateTaxIncluded(e.taxExcluded,e.taxRate,e.currencyPrecision),e.priceTaxIncludedInput.val(e.taxIncluded),e.updateTotal()})),this.productEditSaveBtn.on("click",(function(t){var r=f(t.currentTarget);window.confirm(r.data("updateMessage"))&&(r.prop("disabled",!0),e.handleEditProductWithConfirmationModal(t))})),this.productEditCancelBtn.on("click",(function(){i.EventEmitter.emit(u.default.productEditionCanceled,{orderDetailId:e.orderDetailId})}))}},{key:"updateTotal",value:function(){var e=this.priceTaxCalculator.calculateTotalPrice(this.quantity,this.isOrderTaxIncluded?this.taxIncluded:this.taxExcluded,this.currencyPrecision);this.priceTotalText.html(e),this.productEditSaveBtn.prop("disabled",e===this.initialTotal)}},{key:"displayProduct",value:function(e){this.productRowEdit=f(d.default.productEditRowTemplate).clone(!0),this.productRowEdit.attr("id","editOrderProduct_"+this.orderDetailId),this.productRowEdit.find("*[id]").each((function(){f(this).removeAttr("id")})),this.productEditSaveBtn=this.productRowEdit.find(d.default.productEditSaveBtn),this.productEditCancelBtn=this.productRowEdit.find(d.default.productEditCancelBtn),this.productEditInvoiceSelect=this.productRowEdit.find(d.default.productEditInvoiceSelect),this.productEditImage=this.productRowEdit.find(d.default.productEditImage),this.productEditName=this.productRowEdit.find(d.default.productEditName),this.priceTaxIncludedInput=this.productRowEdit.find(d.default.productEditPriceTaxInclInput),this.priceTaxExcludedInput=this.productRowEdit.find(d.default.productEditPriceTaxExclInput),this.quantityInput=this.productRowEdit.find(d.default.productEditQuantityInput),this.locationText=this.productRowEdit.find(d.default.productEditLocationText),this.availableText=this.productRowEdit.find(d.default.productEditAvailableText),this.priceTotalText=this.productRowEdit.find(d.default.productEditTotalPriceText),this.priceTaxExcludedInput.val(window.ps_round(e.price_tax_excl,this.currencyPrecision)),this.priceTaxIncludedInput.val(window.ps_round(e.price_tax_incl,this.currencyPrecision)),this.quantityInput.val(e.quantity).data("availableQuantity",e.availableQuantity).data("previousQuantity",e.quantity),this.availableText.data("availableOutOfStock",e.availableOutOfStock),e.orderInvoiceId&&this.productEditInvoiceSelect.val(e.orderInvoiceId),this.taxRate=e.tax_rate,this.initialTotal=this.priceTaxCalculator.calculateTotalPrice(e.quantity,e.isOrderTaxIncluded?e.price_tax_incl:e.price_tax_excl,this.currencyPrecision),this.isOrderTaxIncluded=e.isOrderTaxIncluded,this.quantity=e.quantity,this.taxIncluded=e.price_tax_incl,this.taxExcluded=e.price_tax_excl,this.productEditImage.html(this.productRow.find(d.default.productEditImage).html()),this.productEditName.html(this.productRow.find(d.default.productEditName).html()),this.locationText.html(e.location),this.availableText.html(e.availableQuantity),this.priceTotalText.html(this.initialTotal),this.productRow.addClass("d-none").after(this.productRowEdit.removeClass("d-none")),this.setupListener()}},{key:"handleEditProductWithConfirmationModal",value:function(e){var t=this,r=f("#orderProduct_"+this.orderDetailId+" "+d.default.productEditButtons),n=r.data("product-id"),o=r.data("combination-id"),a=r.data("order-invoice-id"),i=this.orderPricesRefresher.checkOtherProductPricesMatch(this.priceTaxIncludedInput.val(),n,o,a,this.orderDetailId);if(null!==i){var u="product"===i?this.priceTaxExcludedInput:this.productEditInvoiceSelect;new c.default({id:"modal-confirm-new-price",confirmTitle:u.data("modal-edit-price-title"),confirmMessage:u.data("modal-edit-price-body"),confirmButtonLabel:u.data("modal-edit-price-apply"),closeButtonLabel:u.data("modal-edit-price-cancel")},(function(){t.editProduct(f(e.currentTarget).data("orderId"),t.orderDetailId)})).show()}else this.editProduct(f(e.currentTarget).data("orderId"),this.orderDetailId)}},{key:"editProduct",value:function(e,t){var r={price_tax_incl:this.priceTaxIncludedInput.val(),price_tax_excl:this.priceTaxExcludedInput.val(),quantity:this.quantityInput.val(),invoice:this.productEditInvoiceSelect.val()};f.ajax({url:this.router.generate("admin_orders_update_product",{orderId:e,orderDetailId:t}),method:"POST",data:r}).then((function(){i.EventEmitter.emit(u.default.productUpdated,{orderId:e,orderDetailId:t})}),(function(e){e.responseJSON&&e.responseJSON.message&&f.growl.error({message:e.responseJSON.message})}))}}]),e}();t.default=h},25618:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=u(r(99663)),o=u(r(22600)),a=u(r(95778)),d=r(76544),i=u(r(65315));function u(e){return e&&e.__esModule?e:{default:e}}var s=window.$,c=function(){function e(){(0,n.default)(this,e),this.router=new a.default}return(0,o.default)(e,[{key:"handleDeleteProductEvent",value:function(e){e.preventDefault();var t=s(e.currentTarget);window.confirm(t.data("deleteMessage"))&&(t.pstooltip("dispose"),t.prop("disabled",!0),this.deleteProduct(t.data("orderId"),t.data("orderDetailId")))}},{key:"deleteProduct",value:function(e,t){s.ajax(this.router.generate("admin_orders_delete_product",{orderId:e,orderDetailId:t}),{method:"POST"}).then((function(){d.EventEmitter.emit(i.default.productDeletedFromOrder,{oldOrderDetailId:t,orderId:e})}),(function(e){e.message&&s.growl.error({message:e.message})}))}}]),e}();t.default=c},92837:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=u(r(99663)),o=u(r(22600)),a=u(r(60425)),d=u(r(74746)),i=u(r(95778));function u(e){return e&&e.__esModule?e:{default:e}}var s=window.$,c=function(){function e(){(0,n.default)(this,e),this.router=new i.default}return(0,o.default)(e,[{key:"addOrUpdateProductToList",value:function(e,t){e.length>0?e.html(s(t).html()):s(a.default.productAddRow).before(s(t).hide().fadeIn())}},{key:"updateNumProducts",value:function(e){s(a.default.productsCount).html(e)}},{key:"editProductFromList",value:function(e,t,r,n,o,i,u,c,l,p){new d.default(e).displayProduct({price_tax_excl:n,price_tax_incl:r,tax_rate:o,quantity:t,location:i,availableQuantity:u,availableOutOfStock:c,orderInvoiceId:l,isOrderTaxIncluded:p}),s(a.default.productAddActionBtn).addClass("d-none"),s(a.default.productAddRow).addClass("d-none")}},{key:"moveProductsPanelToModificationPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"body";s(a.default.productActionBtn).addClass("d-none"),s(a.default.productAddActionBtn+", "+a.default.productAddRow).removeClass("d-none"),this.moveProductPanelToTop(e)}},{key:"moveProductsPanelToRefundPosition",value:function(){this.resetAllEditRows(),s(a.default.productAddActionBtn+", "+a.default.productAddRow+", "+a.default.productActionBtn).addClass("d-none"),this.moveProductPanelToTop()}},{key:"moveProductPanelToTop",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"body",t=s(a.default.productModificationPosition);if(!(t.find(a.default.productsPanel).length>0)){s(a.default.productsPanel).detach().appendTo(t),t.closest(".row").removeClass("d-none"),this.toggleColumn(a.default.productsCellLocation),this.toggleColumn(a.default.productsCellRefunded);var r=s(a.default.productsTable).find('tr[id^="orderProduct_"]');r.removeClass("d-none"),s(a.default.productsPagination).addClass("d-none");var n=s(e).offset().top-s(".header-toolbar").height()-100;s("html,body").animate({scrollTop:n},"slow")}}},{key:"moveProductPanelToOriginalPosition",value:function(){s(a.default.productAddNewInvoiceInfo).addClass("d-none"),s(a.default.productModificationPosition).closest(".row").addClass("d-none"),s(a.default.productsPanel).detach().appendTo(a.default.productOriginalPosition),s(a.default.productsPagination).removeClass("d-none"),s(a.default.productActionBtn).removeClass("d-none"),s(a.default.productAddActionBtn+", "+a.default.productAddRow).addClass("d-none"),this.paginate(1)}},{key:"resetAddRow",value:function(){s(a.default.productAddIdInput).val(""),s(a.default.productSearchInput).val(""),s(a.default.productAddCombinationsBlock).addClass("d-none"),s(a.default.productAddCombinationsSelect).val(""),s(a.default.productAddCombinationsSelect).prop("disabled",!1),s(a.default.productAddPriceTaxExclInput).val(""),s(a.default.productAddPriceTaxInclInput).val(""),s(a.default.productAddQuantityInput).val(""),s(a.default.productAddAvailableText).html(""),s(a.default.productAddLocationText).html(""),s(a.default.productAddNewInvoiceInfo).addClass("d-none"),s(a.default.productAddActionBtn).prop("disabled",!0)}},{key:"resetAllEditRows",value:function(){var e=this;s(a.default.productEditButtons).each((function(t,r){e.resetEditRow(s(r).data("orderDetailId"))}))}},{key:"resetEditRow",value:function(e){var t=s(a.default.productsTableRow(e));s(a.default.productsTableRowEdited(e)).remove(),t.removeClass("d-none")}},{key:"paginate",value:function(e){var t=s(a.default.productsTable).find('tr[id^="orderProduct_"]'),r=s(a.default.productsTableCustomizationRows),n=s(a.default.productsTablePagination),o=parseInt(n.data("numPerPage"),10),d=Math.ceil(t.length/o),i=Math.max(1,Math.min(e,d));this.paginateUpdateControls(i),t.addClass("d-none"),r.addClass("d-none");for(var u=i*o,c=(i-1)*o+1-1;c<Math.min(u,t.length);c+=1)s(t[c]).removeClass("d-none");r.each((function(){s(this).prev().hasClass("d-none")||s(this).removeClass("d-none")})),s(a.default.productEditRow).not(a.default.productEditRowTemplate).remove(),this.toggleColumn(a.default.productsCellLocationDisplayed),this.toggleColumn(a.default.productsCellRefundedDisplayed)}},{key:"paginateUpdateControls",value:function(e){var t=s(a.default.productsTablePagination).find("li.page-item").length-3;s(a.default.productsTablePagination).find(".active").removeClass("active"),s(a.default.productsTablePagination).find('li:has(> [data-page="'+e+'"])').addClass("active"),s(a.default.productsTablePaginationPrev).removeClass("disabled"),1===e&&s(a.default.productsTablePaginationPrev).addClass("disabled"),s(a.default.productsTablePaginationNext).removeClass("disabled"),e===t&&s(a.default.productsTablePaginationNext).addClass("disabled"),this.togglePaginationControls()}},{key:"updateNumPerPage",value:function(e){s(a.default.productsTablePagination).data("numPerPage",e),this.updatePaginationControls()}},{key:"togglePaginationControls",value:function(){var e=s(a.default.productsTablePagination).find("li.page-item").length-3;s(a.default.productsNavPagination).toggleClass("d-none",e<=1)}},{key:"toggleProductAddNewInvoiceInfo",value:function(){s(a.default.productAddNewInvoiceInfo).toggleClass("d-none",0!==parseInt(s(a.default.productAddInvoiceSelect).val(),10))}},{key:"toggleColumn",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=!1;null===t?s(e).filter("td").each((function(){return""===s(this).html()||(r=!0,!1)})):r=t,s(e).toggleClass("d-none",!r)}},{key:"updatePaginationControls",value:function(){var e=s(a.default.productsTablePagination),t=e.data("numPerPage"),r=s(a.default.productsTable).find('tr[id^="orderProduct_"]'),n=Math.ceil(r.length/t);e.data("numPages",n);var o=s(a.default.productsTablePaginationTemplate);s(a.default.productsTablePagination).find("li:has(> [data-page])").remove(),s(a.default.productsTablePaginationNext).before(o);for(var d=1;d<=n;d+=1){var i=o.clone();i.find("span").attr("data-page",d),i.find("span").html(d),o.before(i.removeClass("d-none"))}this.togglePaginationControls()}}]),e}();t.default=c},58686:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(r(99663)),o=i(r(22600)),a=i(r(95778)),d=i(r(60425));function i(e){return e&&e.__esModule?e:{default:e}}var u=window.$,s=function(){function e(){(0,n.default)(this,e),this.router=new a.default}return(0,o.default)(e,[{key:"refresh",value:function(e){u.getJSON(this.router.generate("admin_orders_get_shipping",{orderId:e})).then((function(e){u(d.default.orderShippingTabCount).text(e.total),u(d.default.orderShippingTabBody).html(e.html)}))}}]),e}();t.default=s},65315:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={productDeletedFromOrder:"productDeletedFromOrder",productAddedToOrder:"productAddedToOrder",productUpdated:"productUpdated",productEditionCanceled:"productEditionCanceled",productListPaginated:"productListPaginated",productListNumberPerPage:"productListNumberPerPage"}},84503:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=y(r(99663)),o=y(r(22600)),a=y(r(25618)),d=y(r(60425)),i=y(r(65315)),u=r(76544),s=y(r(95047)),c=y(r(92837)),l=y(r(33188)),p=y(r(78455)),f=y(r(58686)),h=y(r(95778)),v=y(r(86084)),m=y(r(56075)),g=y(r(31643));function y(e){return e&&e.__esModule?e:{default:e}}var b=window.$,_=function(){function e(){(0,n.default)(this,e),this.orderDiscountsRefresher=new s.default,this.orderProductManager=new a.default,this.orderProductRenderer=new c.default,this.orderPricesRefresher=new l.default,this.orderPaymentsRefresher=new p.default,this.orderShippingRefresher=new f.default,this.orderDocumentsRefresher=new g.default,this.orderInvoicesRefresher=new v.default,this.orderProductCancel=new m.default,this.router=new h.default,this.listenToEvents()}return(0,o.default)(e,[{key:"listenToEvents",value:function(){var e=this;b(d.default.invoiceAddressEditBtn).fancybox({type:"iframe",width:"90%",height:"90%"}),b(d.default.deliveryAddressEditBtn).fancybox({type:"iframe",width:"90%",height:"90%"}),u.EventEmitter.on(i.default.productDeletedFromOrder,(function(t){e.orderPricesRefresher.refresh(t.orderId),e.orderPaymentsRefresher.refresh(t.orderId),e.refreshProductsList(t.orderId),e.orderDiscountsRefresher.refresh(t.orderId),e.orderDocumentsRefresher.refresh(t.orderId),e.orderShippingRefresher.refresh(t.orderId)})),u.EventEmitter.on(i.default.productEditionCanceled,(function(t){e.orderProductRenderer.resetEditRow(t.orderDetailId),b(d.default.productEditRow).not(d.default.productEditRowTemplate).length>0||e.orderProductRenderer.moveProductPanelToOriginalPosition()})),u.EventEmitter.on(i.default.productUpdated,(function(t){e.orderProductRenderer.resetEditRow(t.orderDetailId),e.orderPricesRefresher.refresh(t.orderId),e.orderPricesRefresher.refreshProductPrices(t.orderId),e.refreshProductsList(t.orderId),e.orderPaymentsRefresher.refresh(t.orderId),e.orderDiscountsRefresher.refresh(t.orderId),e.orderInvoicesRefresher.refresh(t.orderId),e.orderDocumentsRefresher.refresh(t.orderId),e.orderShippingRefresher.refresh(t.orderId),e.listenForProductDelete(),e.listenForProductEdit(),e.resetToolTips(),b(d.default.productEditRow).not(d.default.productEditRowTemplate).length>0||e.orderProductRenderer.moveProductPanelToOriginalPosition()})),u.EventEmitter.on(i.default.productAddedToOrder,(function(t){e.orderProductRenderer.resetAddRow(),e.orderPricesRefresher.refreshProductPrices(t.orderId),e.orderPricesRefresher.refresh(t.orderId),e.refreshProductsList(t.orderId),e.orderPaymentsRefresher.refresh(t.orderId),e.orderDiscountsRefresher.refresh(t.orderId),e.orderInvoicesRefresher.refresh(t.orderId),e.orderDocumentsRefresher.refresh(t.orderId),e.orderShippingRefresher.refresh(t.orderId),e.orderProductRenderer.moveProductPanelToOriginalPosition()}))}},{key:"listenForProductDelete",value:function(){var e=this;b(d.default.productDeleteBtn).off("click").on("click",(function(t){return e.orderProductManager.handleDeleteProductEvent(t)}))}},{key:"resetToolTips",value:function(){b(d.default.productEditButtons).pstooltip(),b(d.default.productDeleteBtn).pstooltip()}},{key:"listenForProductEdit",value:function(){var e=this;b(d.default.productEditButtons).off("click").on("click",(function(t){var r=b(t.currentTarget);e.orderProductRenderer.moveProductsPanelToModificationPosition(),e.orderProductRenderer.editProductFromList(r.data("orderDetailId"),r.data("productQuantity"),r.data("productPriceTaxIncl"),r.data("productPriceTaxExcl"),r.data("taxRate"),r.data("location"),r.data("availableQuantity"),r.data("availableOutOfStock"),r.data("orderInvoiceId"),r.data("isOrderTaxIncluded"))}))}},{key:"listenForProductPack",value:function(){var e=this;b(d.default.productPackModal.modal).on("show.bs.modal",(function(t){var r=b(t.relatedTarget).data("packItems");b(d.default.productPackModal.rows).remove(),r.forEach((function(t){var r=b(d.default.productPackModal.template).clone();r.attr("id","productpack_"+t.id).removeClass("d-none"),r.find(d.default.productPackModal.product.img).attr("src",t.imagePath),r.find(d.default.productPackModal.product.name).html(t.name),r.find(d.default.productPackModal.product.link).attr("href",e.router.generate("admin_product_form",{id:t.id})),""!==t.reference?r.find(d.default.productPackModal.product.ref).append(t.reference):r.find(d.default.productPackModal.product.ref).remove(),""!==t.supplierReference?r.find(d.default.productPackModal.product.supplierRef).append(t.supplierReference):r.find(d.default.productPackModal.product.supplierRef).remove(),t.quantity>1?r.find(d.default.productPackModal.product.quantity+" span").html(t.quantity):r.find(d.default.productPackModal.product.quantity).html(t.quantity),r.find(d.default.productPackModal.product.availableQuantity).html(t.availableQuantity),b(d.default.productPackModal.template).before(r)}))}))}},{key:"listenForProductAdd",value:function(){var e=this;b(d.default.productAddBtn).on("click",(function(){e.orderProductRenderer.toggleProductAddNewInvoiceInfo(),e.orderProductRenderer.moveProductsPanelToModificationPosition(d.default.productSearchInput)})),b(d.default.productCancelAddBtn).on("click",(function(){return e.orderProductRenderer.moveProductPanelToOriginalPosition()}))}},{key:"listenForProductPagination",value:function(){var e=this;b(d.default.productsTablePagination).on("click",d.default.productsTablePaginationLink,(function(e){e.preventDefault();var t=b(e.currentTarget);u.EventEmitter.emit(i.default.productListPaginated,{numPage:t.data("page")})})),b(d.default.productsTablePaginationNext).on("click",(function(t){if(t.preventDefault(),!b(t.currentTarget).hasClass("disabled")){var r=e.getActivePage();u.EventEmitter.emit(i.default.productListPaginated,{numPage:parseInt(b(r).html(),10)+1})}})),b(d.default.productsTablePaginationPrev).on("click",(function(t){if(t.preventDefault(),!b(t.currentTarget).hasClass("disabled")){var r=e.getActivePage();u.EventEmitter.emit(i.default.productListPaginated,{numPage:parseInt(b(r).html(),10)-1})}})),b(d.default.productsTablePaginationNumberSelector).on("change",(function(e){e.preventDefault();var t=b(e.currentTarget),r=parseInt(t.val(),10);u.EventEmitter.emit(i.default.productListNumberPerPage,{numPerPage:r})})),u.EventEmitter.on(i.default.productListPaginated,(function(t){e.orderProductRenderer.paginate(t.numPage),e.listenForProductDelete(),e.listenForProductEdit(),e.resetToolTips()})),u.EventEmitter.on(i.default.productListNumberPerPage,(function(t){e.orderProductRenderer.updateNumPerPage(t.numPerPage),u.EventEmitter.emit(i.default.productListPaginated,{numPage:1}),b.ajax({url:e.router.generate("admin_orders_configure_product_pagination"),method:"POST",data:{numPerPage:t.numPerPage}})}))}},{key:"listenForRefund",value:function(){var e=this;b(d.default.cancelProduct.buttons.partialRefund).on("click",(function(){e.orderProductRenderer.moveProductsPanelToRefundPosition(),e.orderProductCancel.showPartialRefund()})),b(d.default.cancelProduct.buttons.standardRefund).on("click",(function(){e.orderProductRenderer.moveProductsPanelToRefundPosition(),e.orderProductCancel.showStandardRefund()})),b(d.default.cancelProduct.buttons.returnProduct).on("click",(function(){e.orderProductRenderer.moveProductsPanelToRefundPosition(),e.orderProductCancel.showReturnProduct()})),b(d.default.cancelProduct.buttons.abort).on("click",(function(){e.orderProductRenderer.moveProductPanelToOriginalPosition(),e.orderProductCancel.hideRefund()}))}},{key:"listenForCancelProduct",value:function(){var e=this;b(d.default.cancelProduct.buttons.cancelProducts).on("click",(function(){e.orderProductRenderer.moveProductsPanelToRefundPosition(),e.orderProductCancel.showCancelProductForm()}))}},{key:"getActivePage",value:function(){return b(d.default.productsTablePagination).find(".active span").get(0)}},{key:"refreshProductsList",value:function(e){var t=this;b(d.default.refreshProductsListLoadingSpinner).show();var r=b(d.default.productsTablePagination).data("numPerPage"),n=b(d.default.productsTableRows).length,o=parseInt(b(d.default.productsTablePaginationActive).html(),10);b.ajax(this.router.generate("admin_orders_get_products",{orderId:e})).done((function(e){b(d.default.productsTable).find(d.default.productsTableRows).remove(),b(d.default.productsTableCustomizationRows).remove(),b(d.default.productsTable+" tbody").prepend(e),b(d.default.refreshProductsListLoadingSpinner).hide();var a=b(d.default.productsTableRows).length,s=Math.ceil(a/r);t.orderProductRenderer.updateNumProducts(a),t.orderProductRenderer.updatePaginationControls();var c=1,l="";n>a?(l=n-a==1?window.translate_javascripts["The product was successfully removed."]:window.translate_javascripts["[1] products were successfully removed."].replace("[1]",n-a),c=1===s?1:o):n<a&&(l=a-n==1?window.translate_javascripts["The product was successfully added."]:window.translate_javascripts["[1] products were successfully added."].replace("[1]",a-n),c=1),""!==l&&b.growl.notice({title:"",message:l}),u.EventEmitter.emit(i.default.productListPaginated,{numPage:c}),t.resetToolTips()})).fail((function(){b.growl.error({title:"",message:"Failed to reload the products list. Please reload the page"})}))}}]),e}();t.default=_},24043:(e,t,r)=>{e.exports={default:r(47185),__esModule:!0}},26378:(e,t,r)=>{e.exports={default:r(3597),__esModule:!0}},40863:(e,t,r)=>{e.exports={default:r(21035),__esModule:!0}},65425:(e,t,r)=>{e.exports={default:r(24334),__esModule:!0}},52945:(e,t,r)=>{e.exports={default:r(56981),__esModule:!0}},85861:(e,t,r)=>{e.exports={default:r(45627),__esModule:!0}},32242:(e,t,r)=>{e.exports={default:r(33391),__esModule:!0}},85105:(e,t,r)=>{e.exports={default:r(30381),__esModule:!0}},88902:(e,t,r)=>{e.exports={default:r(98613),__esModule:!0}},85345:(e,t,r)=>{e.exports={default:r(70433),__esModule:!0}},47518:(e,t,r)=>{e.exports={default:r(48056),__esModule:!0}},93516:(e,t,r)=>{e.exports={default:r(80025),__esModule:!0}},64275:(e,t,r)=>{e.exports={default:r(52392),__esModule:!0}},99663:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},22600:(e,t,r)=>{"use strict";t.__esModule=!0;var n,o=(n=r(32242))&&n.__esModule?n:{default:n};t.default=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),(0,o.default)(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}()},93196:(e,t,r)=>{"use strict";t.__esModule=!0;var n=d(r(85345)),o=d(r(85861)),a=d(r(72444));function d(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,a.default)(t)));e.prototype=(0,o.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(n.default?(0,n.default)(e,t):e.__proto__=t)}},49135:(e,t,r)=>{"use strict";t.__esModule=!0;var n,o=(n=r(72444))&&n.__esModule?n:{default:n};t.default=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,o.default)(t))&&"function"!=typeof t?e:t}},12424:(e,t,r)=>{"use strict";t.__esModule=!0;var n=a(r(40863)),o=a(r(26378));function a(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if(Array.isArray(e))return e;if((0,n.default)(Object(e)))return function(e,t){var r=[],n=!0,a=!1,d=void 0;try{for(var i,u=(0,o.default)(e);!(n=(i=u.next()).done)&&(r.push(i.value),!t||r.length!==t);n=!0);}catch(e){a=!0,d=e}finally{try{!n&&u.return&&u.return()}finally{if(a)throw d}}return r}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}},85315:(e,t,r)=>{"use strict";t.__esModule=!0;var n,o=(n=r(24043))&&n.__esModule?n:{default:n};t.default=function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return(0,o.default)(e)}},72444:(e,t,r)=>{"use strict";t.__esModule=!0;var n=d(r(64275)),o=d(r(93516)),a="function"==typeof o.default&&"symbol"==typeof n.default?function(e){return typeof e}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":typeof e};function d(e){return e&&e.__esModule?e:{default:e}}t.default="function"==typeof o.default&&"symbol"===a(n.default)?function(e){return void 0===e?"undefined":a(e)}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":void 0===e?"undefined":a(e)}},47185:(e,t,r)=>{r(91867),r(2586),e.exports=r(34579).Array.from},3597:(e,t,r)=>{r(73871),r(91867),e.exports=r(46459)},21035:(e,t,r)=>{r(73871),r(91867),e.exports=r(89553)},24334:(e,t,r)=>{r(22960),e.exports=r(34579).Number.isNaN},56981:(e,t,r)=>{r(72699),e.exports=r(34579).Object.assign},45627:(e,t,r)=>{r(86760);var n=r(34579).Object;e.exports=function(e,t){return n.create(e,t)}},33391:(e,t,r)=>{r(31477);var n=r(34579).Object;e.exports=function(e,t,r){return n.defineProperty(e,t,r)}},30381:(e,t,r)=>{r(77220),e.exports=r(34579).Object.getPrototypeOf},98613:(e,t,r)=>{r(40961),e.exports=r(34579).Object.keys},70433:(e,t,r)=>{r(59349),e.exports=r(34579).Object.setPrototypeOf},48056:(e,t,r)=>{r(21013),e.exports=r(34579).Object.values},80025:(e,t,r)=>{r(46840),r(94058),r(8174),r(36461),e.exports=r(34579).Symbol},52392:(e,t,r)=>{r(91867),r(73871),e.exports=r(25103).f("iterator")},85663:e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},79003:e=>{e.exports=function(){}},12159:(e,t,r)=>{var n=r(36727);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},57428:(e,t,r)=>{var n=r(7932),o=r(78728),a=r(16531);e.exports=function(e){return function(t,r,d){var i,u=n(t),s=o(u.length),c=a(d,s);if(e&&r!=r){for(;s>c;)if((i=u[c++])!=i)return!0}else for(;s>c;c++)if((e||c in u)&&u[c]===r)return e||c||0;return!e&&-1}}},14677:(e,t,r)=>{var n=r(32894),o=r(22939)("toStringTag"),a="Arguments"==n(function(){return arguments}());e.exports=function(e){var t,r,d;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?r:a?n(t):"Object"==(d=n(t))&&"function"==typeof t.callee?"Arguments":d}},32894:e=>{var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},34579:e=>{var t=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=t)},52445:(e,t,r)=>{"use strict";var n=r(4743),o=r(83101);e.exports=function(e,t,r){t in e?n.f(e,t,o(0,r)):e[t]=r}},19216:(e,t,r)=>{var n=r(85663);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},8333:e=>{e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},89666:(e,t,r)=>{e.exports=!r(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(e,t,r)=>{var n=r(36727),o=r(33938).document,a=n(o)&&n(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},73338:e=>{e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},70337:(e,t,r)=>{var n=r(46162),o=r(48195),a=r(86274);e.exports=function(e){var t=n(e),r=o.f;if(r)for(var d,i=r(e),u=a.f,s=0;i.length>s;)u.call(e,d=i[s++])&&t.push(d);return t}},83856:(e,t,r)=>{var n=r(33938),o=r(34579),a=r(19216),d=r(41818),i=r(27069),u=function(e,t,r){var s,c,l,p=e&u.F,f=e&u.G,h=e&u.S,v=e&u.P,m=e&u.B,g=e&u.W,y=f?o:o[t]||(o[t]={}),b=y.prototype,_=f?n:h?n[t]:(n[t]||{}).prototype;for(s in f&&(r=t),r)(c=!p&&_&&void 0!==_[s])&&i(y,s)||(l=c?_[s]:r[s],y[s]=f&&"function"!=typeof _[s]?r[s]:m&&c?a(l,n):g&&_[s]==l?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(l):v&&"function"==typeof l?a(Function.call,l):l,v&&((y.virtual||(y.virtual={}))[s]=l,e&u.R&&b&&!b[s]&&d(b,s,l)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},7929:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},33938:e=>{var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},27069:e=>{var t={}.hasOwnProperty;e.exports=function(e,r){return t.call(e,r)}},41818:(e,t,r)=>{var n=r(4743),o=r(83101);e.exports=r(89666)?function(e,t,r){return n.f(e,t,o(1,r))}:function(e,t,r){return e[t]=r,e}},54881:(e,t,r)=>{var n=r(33938).document;e.exports=n&&n.documentElement},33758:(e,t,r)=>{e.exports=!r(89666)&&!r(7929)((function(){return 7!=Object.defineProperty(r(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(e,t,r)=>{var n=r(32894);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},45991:(e,t,r)=>{var n=r(15449),o=r(22939)("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(n.Array===e||a[o]===e)}},71421:(e,t,r)=>{var n=r(32894);e.exports=Array.isArray||function(e){return"Array"==n(e)}},36727:e=>{e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},95602:(e,t,r)=>{var n=r(12159);e.exports=function(e,t,r,o){try{return o?t(n(r)[0],r[1]):t(r)}catch(t){var a=e.return;throw void 0!==a&&n(a.call(e)),t}}},33945:(e,t,r)=>{"use strict";var n=r(98989),o=r(83101),a=r(25378),d={};r(41818)(d,r(22939)("iterator"),(function(){return this})),e.exports=function(e,t,r){e.prototype=n(d,{next:o(1,r)}),a(e,t+" Iterator")}},45700:(e,t,r)=>{"use strict";var n=r(16227),o=r(83856),a=r(57470),d=r(41818),i=r(15449),u=r(33945),s=r(25378),c=r(95089),l=r(22939)("iterator"),p=!([].keys&&"next"in[].keys()),f="keys",h="values",v=function(){return this};e.exports=function(e,t,r,m,g,y,b){u(r,t,m);var _,P,x,I=function(e){if(!p&&e in S)return S[e];switch(e){case f:case h:return function(){return new r(this,e)}}return function(){return new r(this,e)}},T=t+" Iterator",w=g==h,k=!1,S=e.prototype,E=S[l]||S["@@iterator"]||g&&S[g],O=E||I(g),R=g?w?I("entries"):O:void 0,C="Array"==t&&S.entries||E;if(C&&(x=c(C.call(new e)))!==Object.prototype&&x.next&&(s(x,T,!0),n||"function"==typeof x[l]||d(x,l,v)),w&&E&&E.name!==h&&(k=!0,O=function(){return E.call(this)}),n&&!b||!p&&!k&&S[l]||d(S,l,O),i[t]=O,i[T]=v,g)if(_={values:w?O:I(h),keys:y?O:I(f),entries:R},b)for(P in _)P in S||a(S,P,_[P]);else o(o.P+o.F*(p||k),t,_);return _}},96630:(e,t,r)=>{var n=r(22939)("iterator"),o=!1;try{var a=[7][n]();a.return=function(){o=!0},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var a=[7],d=a[n]();d.next=function(){return{done:r=!0}},a[n]=function(){return d},e(a)}catch(e){}return r}},85084:e=>{e.exports=function(e,t){return{value:t,done:!!e}}},15449:e=>{e.exports={}},16227:e=>{e.exports=!0},77177:(e,t,r)=>{var n=r(65730)("meta"),o=r(36727),a=r(27069),d=r(4743).f,i=0,u=Object.isExtensible||function(){return!0},s=!r(7929)((function(){return u(Object.preventExtensions({}))})),c=function(e){d(e,n,{value:{i:"O"+ ++i,w:{}}})},l=e.exports={KEY:n,NEED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,n)){if(!u(e))return"F";if(!t)return"E";c(e)}return e[n].i},getWeak:function(e,t){if(!a(e,n)){if(!u(e))return!0;if(!t)return!1;c(e)}return e[n].w},onFreeze:function(e){return s&&l.NEED&&u(e)&&!a(e,n)&&c(e),e}}},88082:(e,t,r)=>{"use strict";var n=r(89666),o=r(46162),a=r(48195),d=r(86274),i=r(66530),u=r(50799),s=Object.assign;e.exports=!s||r(7929)((function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach((function(e){t[e]=e})),7!=s({},e)[r]||Object.keys(s({},t)).join("")!=n}))?function(e,t){for(var r=i(e),s=arguments.length,c=1,l=a.f,p=d.f;s>c;)for(var f,h=u(arguments[c++]),v=l?o(h).concat(l(h)):o(h),m=v.length,g=0;m>g;)f=v[g++],n&&!p.call(h,f)||(r[f]=h[f]);return r}:s},98989:(e,t,r)=>{var n=r(12159),o=r(57856),a=r(73338),d=r(58989)("IE_PROTO"),i=function(){},u=function(){var e,t=r(97467)("iframe"),n=a.length;for(t.style.display="none",r(54881).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),u=e.F;n--;)delete u.prototype[a[n]];return u()};e.exports=Object.create||function(e,t){var r;return null!==e?(i.prototype=n(e),r=new i,i.prototype=null,r[d]=e):r=u(),void 0===t?r:o(r,t)}},4743:(e,t,r)=>{var n=r(12159),o=r(33758),a=r(33206),d=Object.defineProperty;t.f=r(89666)?Object.defineProperty:function(e,t,r){if(n(e),t=a(t,!0),n(r),o)try{return d(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},57856:(e,t,r)=>{var n=r(4743),o=r(12159),a=r(46162);e.exports=r(89666)?Object.defineProperties:function(e,t){o(e);for(var r,d=a(t),i=d.length,u=0;i>u;)n.f(e,r=d[u++],t[r]);return e}},76183:(e,t,r)=>{var n=r(86274),o=r(83101),a=r(7932),d=r(33206),i=r(27069),u=r(33758),s=Object.getOwnPropertyDescriptor;t.f=r(89666)?s:function(e,t){if(e=a(e),t=d(t,!0),u)try{return s(e,t)}catch(e){}if(i(e,t))return o(!n.f.call(e,t),e[t])}},94368:(e,t,r)=>{var n=r(7932),o=r(33230).f,a={}.toString,d="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return d&&"[object Window]"==a.call(e)?function(e){try{return o(e)}catch(e){return d.slice()}}(e):o(n(e))}},33230:(e,t,r)=>{var n=r(12963),o=r(73338).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},48195:(e,t)=>{t.f=Object.getOwnPropertySymbols},95089:(e,t,r)=>{var n=r(27069),o=r(66530),a=r(58989)("IE_PROTO"),d=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),n(e,a)?e[a]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?d:null}},12963:(e,t,r)=>{var n=r(27069),o=r(7932),a=r(57428)(!1),d=r(58989)("IE_PROTO");e.exports=function(e,t){var r,i=o(e),u=0,s=[];for(r in i)r!=d&&n(i,r)&&s.push(r);for(;t.length>u;)n(i,r=t[u++])&&(~a(s,r)||s.push(r));return s}},46162:(e,t,r)=>{var n=r(12963),o=r(73338);e.exports=Object.keys||function(e){return n(e,o)}},86274:(e,t)=>{t.f={}.propertyIsEnumerable},12584:(e,t,r)=>{var n=r(83856),o=r(34579),a=r(7929);e.exports=function(e,t){var r=(o.Object||{})[e]||Object[e],d={};d[e]=t(r),n(n.S+n.F*a((function(){r(1)})),"Object",d)}},52050:(e,t,r)=>{var n=r(89666),o=r(46162),a=r(7932),d=r(86274).f;e.exports=function(e){return function(t){for(var r,i=a(t),u=o(i),s=u.length,c=0,l=[];s>c;)r=u[c++],n&&!d.call(i,r)||l.push(e?[r,i[r]]:i[r]);return l}}},83101:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},57470:(e,t,r)=>{e.exports=r(41818)},62906:(e,t,r)=>{var n=r(36727),o=r(12159),a=function(e,t){if(o(e),!n(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=r(19216)(Function.call,r(76183).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,r){return a(e,r),t?e.__proto__=r:n(e,r),e}}({},!1):void 0),check:a}},25378:(e,t,r)=>{var n=r(4743).f,o=r(27069),a=r(22939)("toStringTag");e.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,a)&&n(e,a,{configurable:!0,value:t})}},58989:(e,t,r)=>{var n=r(20250)("keys"),o=r(65730);e.exports=function(e){return n[e]||(n[e]=o(e))}},20250:(e,t,r)=>{var n=r(34579),o=r(33938),a="__core-js_shared__",d=o[a]||(o[a]={});(e.exports=function(e,t){return d[e]||(d[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:r(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},90510:(e,t,r)=>{var n=r(11052),o=r(8333);e.exports=function(e){return function(t,r){var a,d,i=String(o(t)),u=n(r),s=i.length;return u<0||u>=s?e?"":void 0:(a=i.charCodeAt(u))<55296||a>56319||u+1===s||(d=i.charCodeAt(u+1))<56320||d>57343?e?i.charAt(u):a:e?i.slice(u,u+2):d-56320+(a-55296<<10)+65536}}},16531:(e,t,r)=>{var n=r(11052),o=Math.max,a=Math.min;e.exports=function(e,t){return(e=n(e))<0?o(e+t,0):a(e,t)}},11052:e=>{var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},7932:(e,t,r)=>{var n=r(50799),o=r(8333);e.exports=function(e){return n(o(e))}},78728:(e,t,r)=>{var n=r(11052),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},66530:(e,t,r)=>{var n=r(8333);e.exports=function(e){return Object(n(e))}},33206:(e,t,r)=>{var n=r(36727);e.exports=function(e,t){if(!n(e))return e;var r,o;if(t&&"function"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if("function"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(!t&&"function"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},65730:e=>{var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},76347:(e,t,r)=>{var n=r(33938),o=r(34579),a=r(16227),d=r(25103),i=r(4743).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=a?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||i(t,e,{value:d.f(e)})}},25103:(e,t,r)=>{t.f=r(22939)},22939:(e,t,r)=>{var n=r(20250)("wks"),o=r(65730),a=r(33938).Symbol,d="function"==typeof a;(e.exports=function(e){return n[e]||(n[e]=d&&a[e]||(d?a:o)("Symbol."+e))}).store=n},83728:(e,t,r)=>{var n=r(14677),o=r(22939)("iterator"),a=r(15449);e.exports=r(34579).getIteratorMethod=function(e){if(null!=e)return e[o]||e["@@iterator"]||a[n(e)]}},46459:(e,t,r)=>{var n=r(12159),o=r(83728);e.exports=r(34579).getIterator=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return n(t.call(e))}},89553:(e,t,r)=>{var n=r(14677),o=r(22939)("iterator"),a=r(15449);e.exports=r(34579).isIterable=function(e){var t=Object(e);return void 0!==t[o]||"@@iterator"in t||a.hasOwnProperty(n(t))}},2586:(e,t,r)=>{"use strict";var n=r(19216),o=r(83856),a=r(66530),d=r(95602),i=r(45991),u=r(78728),s=r(52445),c=r(83728);o(o.S+o.F*!r(96630)((function(e){Array.from(e)})),"Array",{from:function(e){var t,r,o,l,p=a(e),f="function"==typeof this?this:Array,h=arguments.length,v=h>1?arguments[1]:void 0,m=void 0!==v,g=0,y=c(p);if(m&&(v=n(v,h>2?arguments[2]:void 0,2)),null==y||f==Array&&i(y))for(r=new f(t=u(p.length));t>g;g++)s(r,g,m?v(p[g],g):p[g]);else for(l=y.call(p),r=new f;!(o=l.next()).done;g++)s(r,g,m?d(l,v,[o.value,g],!0):o.value);return r.length=g,r}})},3882:(e,t,r)=>{"use strict";var n=r(79003),o=r(85084),a=r(15449),d=r(7932);e.exports=r(45700)(Array,"Array",(function(e,t){this._t=d(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,o(1)):o(0,"keys"==t?r:"values"==t?e[r]:[r,e[r]])}),"values"),a.Arguments=a.Array,n("keys"),n("values"),n("entries")},22960:(e,t,r)=>{var n=r(83856);n(n.S,"Number",{isNaN:function(e){return e!=e}})},72699:(e,t,r)=>{var n=r(83856);n(n.S+n.F,"Object",{assign:r(88082)})},86760:(e,t,r)=>{var n=r(83856);n(n.S,"Object",{create:r(98989)})},31477:(e,t,r)=>{var n=r(83856);n(n.S+n.F*!r(89666),"Object",{defineProperty:r(4743).f})},77220:(e,t,r)=>{var n=r(66530),o=r(95089);r(12584)("getPrototypeOf",(function(){return function(e){return o(n(e))}}))},40961:(e,t,r)=>{var n=r(66530),o=r(46162);r(12584)("keys",(function(){return function(e){return o(n(e))}}))},59349:(e,t,r)=>{var n=r(83856);n(n.S,"Object",{setPrototypeOf:r(62906).set})},94058:()=>{},91867:(e,t,r)=>{"use strict";var n=r(90510)(!0);r(45700)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})}))},46840:(e,t,r)=>{"use strict";var n=r(33938),o=r(27069),a=r(89666),d=r(83856),i=r(57470),u=r(77177).KEY,s=r(7929),c=r(20250),l=r(25378),p=r(65730),f=r(22939),h=r(25103),v=r(76347),m=r(70337),g=r(71421),y=r(12159),b=r(36727),_=r(66530),P=r(7932),x=r(33206),I=r(83101),T=r(98989),w=r(94368),k=r(76183),S=r(48195),E=r(4743),O=r(46162),R=k.f,C=E.f,M=w.f,A=n.Symbol,j=n.JSON,L=j&&j.stringify,F=f("_hidden"),N=f("toPrimitive"),B={}.propertyIsEnumerable,q=c("symbol-registry"),D=c("symbols"),G=c("op-symbols"),U=Object.prototype,$="function"==typeof A&&!!S.f,Q=n.QObject,H=!Q||!Q.prototype||!Q.prototype.findChild,V=a&&s((function(){return 7!=T(C({},"a",{get:function(){return C(this,"a",{value:7}).a}})).a}))?function(e,t,r){var n=R(U,t);n&&delete U[t],C(e,t,r),n&&e!==U&&C(U,t,n)}:C,z=function(e){var t=D[e]=T(A.prototype);return t._k=e,t},J=$&&"symbol"==typeof A.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof A},W=function(e,t,r){return e===U&&W(G,t,r),y(e),t=x(t,!0),y(r),o(D,t)?(r.enumerable?(o(e,F)&&e[F][t]&&(e[F][t]=!1),r=T(r,{enumerable:I(0,!1)})):(o(e,F)||C(e,F,I(1,{})),e[F][t]=!0),V(e,t,r)):C(e,t,r)},K=function(e,t){y(e);for(var r,n=m(t=P(t)),o=0,a=n.length;a>o;)W(e,r=n[o++],t[r]);return e},Y=function(e){var t=B.call(this,e=x(e,!0));return!(this===U&&o(D,e)&&!o(G,e))&&(!(t||!o(this,e)||!o(D,e)||o(this,F)&&this[F][e])||t)},Z=function(e,t){if(e=P(e),t=x(t,!0),e!==U||!o(D,t)||o(G,t)){var r=R(e,t);return!r||!o(D,t)||o(e,F)&&e[F][t]||(r.enumerable=!0),r}},X=function(e){for(var t,r=M(P(e)),n=[],a=0;r.length>a;)o(D,t=r[a++])||t==F||t==u||n.push(t);return n},ee=function(e){for(var t,r=e===U,n=M(r?G:P(e)),a=[],d=0;n.length>d;)!o(D,t=n[d++])||r&&!o(U,t)||a.push(D[t]);return a};$||(i((A=function(){if(this instanceof A)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(r){this===U&&t.call(G,r),o(this,F)&&o(this[F],e)&&(this[F][e]=!1),V(this,e,I(1,r))};return a&&H&&V(U,e,{configurable:!0,set:t}),z(e)}).prototype,"toString",(function(){return this._k})),k.f=Z,E.f=W,r(33230).f=w.f=X,r(86274).f=Y,S.f=ee,a&&!r(16227)&&i(U,"propertyIsEnumerable",Y,!0),h.f=function(e){return z(f(e))}),d(d.G+d.W+d.F*!$,{Symbol:A});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;te.length>re;)f(te[re++]);for(var ne=O(f.store),oe=0;ne.length>oe;)v(ne[oe++]);d(d.S+d.F*!$,"Symbol",{for:function(e){return o(q,e+="")?q[e]:q[e]=A(e)},keyFor:function(e){if(!J(e))throw TypeError(e+" is not a symbol!");for(var t in q)if(q[t]===e)return t},useSetter:function(){H=!0},useSimple:function(){H=!1}}),d(d.S+d.F*!$,"Object",{create:function(e,t){return void 0===t?T(e):K(T(e),t)},defineProperty:W,defineProperties:K,getOwnPropertyDescriptor:Z,getOwnPropertyNames:X,getOwnPropertySymbols:ee});var ae=s((function(){S.f(1)}));d(d.S+d.F*ae,"Object",{getOwnPropertySymbols:function(e){return S.f(_(e))}}),j&&d(d.S+d.F*(!$||s((function(){var e=A();return"[null]"!=L([e])||"{}"!=L({a:e})||"{}"!=L(Object(e))}))),"JSON",{stringify:function(e){for(var t,r,n=[e],o=1;arguments.length>o;)n.push(arguments[o++]);if(r=t=n[1],(b(t)||void 0!==e)&&!J(e))return g(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!J(t))return t}),n[1]=t,L.apply(j,n)}}),A.prototype[N]||r(41818)(A.prototype,N,A.prototype.valueOf),l(A,"Symbol"),l(Math,"Math",!0),l(n.JSON,"JSON",!0)},21013:(e,t,r)=>{var n=r(83856),o=r(52050)(!1);n(n.S,"Object",{values:function(e){return o(e)}})},8174:(e,t,r)=>{r(76347)("asyncIterator")},36461:(e,t,r)=>{r(76347)("observable")},73871:(e,t,r)=>{r(3882);for(var n=r(33938),o=r(41818),a=r(15449),d=r(22939)("toStringTag"),i="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),u=0;u<i.length;u++){var s=i[u],c=n[s],l=c&&c.prototype;l&&!l[d]&&o(l,d,s),a[s]=a.Array}},17187:e=>{"use strict";var t,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};t=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}e.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var d=10;function i(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function u(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function s(e,t,r,n){var o,a,d,s;if(i(r),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),a=e._events),d=a[t]),void 0===d)d=a[t]=r,++e._eventsCount;else if("function"==typeof d?d=a[t]=n?[r,d]:[d,r]:n?d.unshift(r):d.push(r),(o=u(e))>0&&d.length>o&&!d.warned){d.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+d.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=d.length,s=c,console&&console.warn&&console.warn(s)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},o=c.bind(n);return o.listener=r,n.wrapFn=o,o}function p(e,t,r){var n=e._events;if(void 0===n)return[];var o=n[t];return void 0===o?[]:"function"==typeof o?r?[o.listener||o]:[o]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(o):h(o,o.length)}function f(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function h(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}Object.defineProperty(a,"defaultMaxListeners",{enumerable:!0,get:function(){return d},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");d=e}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},a.prototype.getMaxListeners=function(){return u(this)},a.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var o="error"===e,a=this._events;if(void 0!==a)o=o&&void 0===a.error;else if(!o)return!1;if(o){var d;if(t.length>0&&(d=t[0]),d instanceof Error)throw d;var i=new Error("Unhandled error."+(d?" ("+d.message+")":""));throw i.context=d,i}var u=a[e];if(void 0===u)return!1;if("function"==typeof u)n(u,this,t);else{var s=u.length,c=h(u,s);for(r=0;r<s;++r)n(c[r],this,t)}return!0},a.prototype.addListener=function(e,t){return s(this,e,t,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(e,t){return s(this,e,t,!0)},a.prototype.once=function(e,t){return i(t),this.on(e,l(this,e,t)),this},a.prototype.prependOnceListener=function(e,t){return i(t),this.prependListener(e,l(this,e,t)),this},a.prototype.removeListener=function(e,t){var r,n,o,a,d;if(i(t),void 0===(n=this._events))return this;if(void 0===(r=n[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(o=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){d=r[a].listener,o=a;break}if(o<0)return this;0===o?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,o),1===r.length&&(n[e]=r[0]),void 0!==n.removeListener&&this.emit("removeListener",e,d||t)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(e){var t,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var o,a=Object.keys(r);for(n=0;n<a.length;++n)"removeListener"!==(o=a[n])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},a.prototype.listeners=function(e){return p(this,e,!0)},a.prototype.rawListeners=function(e){return p(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},a.prototype.listenerCount=f,a.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},2564:e=>{"use strict";var t=Object.assign||function(e){for(var t,r=1;r<arguments.length;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=new function e(){var n=this;(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")})(this,e),this.setRoutes=function(e){n.routesRouting=e||[]},this.getRoutes=function(){return n.routesRouting},this.setBaseUrl=function(e){n.contextRouting.base_url=e},this.getBaseUrl=function(){return n.contextRouting.base_url},this.setPrefix=function(e){n.contextRouting.prefix=e},this.setScheme=function(e){n.contextRouting.scheme=e},this.getScheme=function(){return n.contextRouting.scheme},this.setHost=function(e){n.contextRouting.host=e},this.getHost=function(){return n.contextRouting.host},this.buildQueryParams=function(e,t,o){var a=new RegExp(/\[]$/);t instanceof Array?t.forEach((function(t,d){a.test(e)?o(e,t):n.buildQueryParams(e+"["+("object"===(void 0===t?"undefined":r(t))?d:"")+"]",t,o)})):"object"===(void 0===t?"undefined":r(t))?Object.keys(t).forEach((function(r){return n.buildQueryParams(e+"["+r+"]",t[r],o)})):o(e,t)},this.getRoute=function(e){var t=n.contextRouting.prefix+e;if(n.routesRouting[t])return n.routesRouting[t];if(!n.routesRouting[e])throw new Error('The route "'+e+'" does not exist.');return n.routesRouting[e]},this.generate=function(e,r,o){var a=n.getRoute(e),d=r||{},i=t({},d),u="_scheme",s="",c=!0,l="";if((a.tokens||[]).forEach((function(t){if("text"===t[0])return s=t[1]+s,void(c=!1);if("variable"!==t[0])throw new Error('The token type "'+t[0]+'" is not supported.');var r=(a.defaults||{})[t[3]];if(0==c||!r||(d||{})[t[3]]&&d[t[3]]!==a.defaults[t[3]]){var n;if((d||{})[t[3]])n=d[t[3]],delete i[t[3]];else{if(!r){if(c)return;throw new Error('The route "'+e+'" requires the parameter "'+t[3]+'".')}n=a.defaults[t[3]]}if(!0!==n&&!1!==n&&""!==n||!c){var o=encodeURIComponent(n).replace(/%2F/g,"/");"null"===o&&null===n&&(o=""),s=t[1]+o+s}c=!1}else r&&delete i[t[3]]})),""==s&&(s="/"),(a.hosttokens||[]).forEach((function(e){var t;return"text"===e[0]?void(l=e[1]+l):void("variable"===e[0]&&((d||{})[e[3]]?(t=d[e[3]],delete i[e[3]]):a.defaults[e[3]]&&(t=a.defaults[e[3]]),l=e[1]+t+l))})),s=n.contextRouting.base_url+s,a.requirements[u]&&n.getScheme()!==a.requirements[u]?s=a.requirements[u]+"://"+(l||n.getHost())+s:l&&n.getHost()!==l?s=n.getScheme()+"://"+l+s:!0===o&&(s=n.getScheme()+"://"+n.getHost()+s),0<Object.keys(i).length){var p=[],f=function(e,t){var r=t;r=null===(r="function"==typeof r?r():r)?"":r,p.push(encodeURIComponent(e)+"="+encodeURIComponent(r))};Object.keys(i).forEach((function(e){return n.buildQueryParams(e,i[e],f)})),s=s+"?"+p.join("&").replace(/%20/g,"+")}return s},this.setData=function(e){n.setBaseUrl(e.base_url),n.setRoutes(e.routes),"prefix"in e&&n.setPrefix(e.prefix),n.setHost(e.host),n.setScheme(e.scheme)},this.contextRouting={base_url:"",prefix:"",host:"",scheme:""}}},91658:(e,t,r)=>{var n=/[\\^$.*+?()[\]{}|]/g,o=RegExp(n.source),a="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,d="object"==typeof self&&self&&self.Object===Object&&self,i=a||d||Function("return this")(),u=Object.prototype.toString,s=i.Symbol,c=s?s.prototype:void 0,l=c?c.toString:void 0;e.exports=function(e){var t;return(e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==u.call(e)}(e))return l?l.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t))&&o.test(e)?e.replace(n,"\\$&"):e}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";var e=s(r(60425)),t=s(r(60139)),n=s(r(54749)),o=s(r(84503)),a=s(r(79623)),d=s(r(44670)),i=s(r(9400)),u=s(r(26266));function s(e){return e&&e.__esModule?e:{default:e}}var c=window.$;c((function(){new t.default,new i.default;var r,s,l,p=new o.default,f=new a.default(c(e.default.productSearchInput)),h=new d.default;p.listenForProductPack(),p.listenForProductDelete(),p.listenForProductEdit(),p.listenForProductAdd(),p.listenForProductPagination(),p.listenForRefund(),p.listenForCancelProduct(),f.listenForSearch(),f.onItemClickedCallback=function(e){return h.setProduct(e)},c(e.default.orderPaymentDetailsBtn).on("click",(function(e){c(e.currentTarget).closest("tr").next(":first").toggleClass("d-none")})),r=c(e.default.privateNoteSubmitBtn),c(e.default.privateNoteInput).on("input",(function(){r.prop("disabled",!1)})),function(){var t=c(e.default.orderNoteSubmitBtn);c(e.default.orderNoteInput).on("input",(function(){t.prop("disabled",!1)}))}(),s=c(e.default.updateOrderStatusActionBtn),l=c(e.default.updateOrderStatusActionInputWrapper),c(e.default.updateOrderStatusActionInput).on("change",(function(e){var t=c(e.currentTarget),r=c("option:selected",t),n=t.val();l.css("background-color",r.data("background-color")),l.toggleClass("is-bright",void 0!==r.data("is-bright")),s.prop("disabled",parseInt(n,10)===s.data("orderStatusId"))})),new n.default;var v,m,g,y,b,_,P=new u.default;P.listenForPredefinedMessageSelection(),P.listenForFullMessagesOpen(),c(e.default.privateNoteToggleBtn).on("click",(function(t){t.preventDefault(),function(){var t=c(e.default.privateNoteBlock),r=c(e.default.privateNoteToggleBtn),n=r.hasClass("is-opened");n?(r.removeClass("is-opened"),t.addClass("d-none")):(r.addClass("is-opened"),t.removeClass("d-none")),r.find(".material-icons").text(n?"add":"remove")}()})),c(e.default.orderNoteToggleBtn).on("click",(function(t){t.preventDefault(),function(){var t=c(e.default.orderNoteBlock),r=c(e.default.orderNoteToggleBtn),n=r.hasClass("is-opened");r.toggleClass("is-opened",!n),t.toggleClass("d-none",n),r.find(".material-icons").text(n?"add":"remove")}()})),c(e.default.printOrderViewPageButton).on("click",(function(){var t=document.title;document.title=c(e.default.mainDiv).data("orderTitle"),window.print(),document.title=t})),v=c(e.default.addCartRuleModal),m=v.find("form"),g=v.find(e.default.addCartRuleInvoiceIdSelect),y=v.find(e.default.cartRuleHelpText),b=m.find(e.default.addCartRuleValueInput),_=b.closest(".form-group"),v.on("shown.bs.modal",(function(){c(e.default.addCartRuleSubmit).attr("disabled",!0)})),m.find(e.default.addCartRuleNameInput).on("keyup",(function(t){var r=c(t.currentTarget).val();c(e.default.addCartRuleSubmit).attr("disabled",0===r.trim().length)})),m.find(e.default.addCartRuleApplyOnAllInvoicesCheckbox).on("change",(function(e){var t=c(e.currentTarget).is(":checked");g.attr("disabled",t)})),m.find(e.default.addCartRuleTypeSelect).on("change",(function(t){var r=c(t.currentTarget).val(),n=m.find(e.default.addCartRuleValueUnit);"amount"===r?(y.removeClass("d-none"),n.html(n.data("currencySymbol"))):y.addClass("d-none"),"percent"===r&&n.html("%"),"free_shipping"===r?(_.addClass("d-none"),b.attr("disabled",!0)):(_.removeClass("d-none"),b.attr("disabled",!1))})),function(){var t=c(e.default.updateCustomerAddressModal);c(e.default.openOrderAddressUpdateModalBtn).on("click",(function(r){t.find(e.default.updateOrderAddressTypeInput).val(c(r.currentTarget).data("addressType"))}))}(),c(e.default.orderHookTabsContainer).find(".nav-tabs li:first-child a").tab("show")}))})(),window.order_view={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvY2xkci9leGNlcHRpb24vbG9jYWxpemF0aW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9jbGRyL2luZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9jbGRyL251bWJlci1mb3JtYXR0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL2NsZHIvbnVtYmVyLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvY2xkci9zcGVjaWZpY2F0aW9ucy9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL2NsZHIvc3BlY2lmaWNhdGlvbnMvcHJpY2UuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ldmVudC1lbWl0dGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZm9ybS90ZXh0LXdpdGgtbGVuZ3RoLWNvdW50ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9tb2RhbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL3JvdXRlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9vcmRlci9PcmRlclZpZXdQYWdlTWFwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL2ludm9pY2Utbm90ZS1tYW5hZ2VyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL21lc3NhZ2Uvb3JkZXItdmlldy1wYWdlLW1lc3NhZ2VzLWhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvb3JkZXIvb3JkZXItc2hpcHBpbmctbWFuYWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9vcmRlci92aWV3L29yZGVyLWRpc2NvdW50cy1yZWZyZXNoZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvb3JkZXIvdmlldy9vcmRlci1kb2N1bWVudHMtcmVmcmVzaGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL3ZpZXcvb3JkZXItaW52b2ljZXMtcmVmcmVzaGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcGF5bWVudHMtcmVmcmVzaGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcHJpY2VzLXJlZnJlc2hlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9vcmRlci92aWV3L29yZGVyLXByaWNlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9vcmRlci92aWV3L29yZGVyLXByb2R1Y3QtYWRkLWF1dG9jb21wbGV0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9vcmRlci92aWV3L29yZGVyLXByb2R1Y3QtYWRkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcHJvZHVjdC1jYW5jZWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcm9kdWN0LWVkaXQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcm9kdWN0LW1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcm9kdWN0LXJlbmRlcmVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL3ZpZXcvb3JkZXItc2hpcHBpbmctcmVmcmVzaGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL29yZGVyL3ZpZXcvb3JkZXItdmlldy1ldmVudC1tYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvb3JkZXIvdmlldy9vcmRlci12aWV3LXBhZ2UuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9udW1iZXIvaXMtbmFuLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9udW1iZXIvaXMtbmFuLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19odG1sLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvZm9zLXJvdXRpbmcvZGlzdC9yb3V0aW5nLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9sb2Rhc2guZXNjYXBlcmVnZXhwL2luZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9vcmRlci92aWV3LmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJ0aGlzIiwibmFtZSIsIlByaWNlU3BlY2lmaWNhdGlvbiIsIk51bWJlclNwZWNpZmljYXRpb24iLCJOdW1iZXJGb3JtYXR0ZXIiLCJOdW1iZXJTeW1ib2wiLCJlc2NhcGVSRSIsInJlcXVpcmUiLCJzcGVjaWZpY2F0aW9uIiwibnVtYmVyU3BlY2lmaWNhdGlvbiIsIm51bWJlciIsInVuZGVmaW5lZCIsIm51bSIsIk1hdGgiLCJhYnMiLCJ0b0ZpeGVkIiwiZ2V0TWF4RnJhY3Rpb25EaWdpdHMiLCJleHRyYWN0TWFqb3JNaW5vckRpZ2l0cyIsIm1ham9yRGlnaXRzIiwibWlub3JEaWdpdHMiLCJmb3JtYXR0ZWROdW1iZXIiLCJzcGxpdE1ham9yR3JvdXBzIiwiYWRqdXN0TWlub3JEaWdpdHNaZXJvZXMiLCJwYXR0ZXJuIiwiZ2V0Q2xkclBhdHRlcm4iLCJhZGRQbGFjZWhvbGRlcnMiLCJyZXBsYWNlU3ltYm9scyIsInBlcmZvcm1TcGVjaWZpY1JlcGxhY2VtZW50cyIsInJlc3VsdCIsInRvU3RyaW5nIiwic3BsaXQiLCJkaWdpdCIsImlzR3JvdXBpbmdVc2VkIiwicmV2ZXJzZSIsImdyb3VwcyIsInB1c2giLCJzcGxpY2UiLCJnZXRQcmltYXJ5R3JvdXBTaXplIiwibGVuZ3RoIiwiZ2V0U2Vjb25kYXJ5R3JvdXBTaXplIiwibmV3R3JvdXBzIiwiZm9yRWFjaCIsImdyb3VwIiwiam9pbiIsInJlcGxhY2UiLCJnZXRNaW5GcmFjdGlvbkRpZ2l0cyIsInBhZEVuZCIsImlzTmVnYXRpdmUiLCJnZXROZWdhdGl2ZVBhdHRlcm4iLCJnZXRQb3NpdGl2ZVBhdHRlcm4iLCJzeW1ib2xzIiwiZ2V0U3ltYm9sIiwibWFwIiwiZ2V0RGVjaW1hbCIsImdldEdyb3VwIiwiZ2V0TWludXNTaWduIiwiZ2V0UGVyY2VudFNpZ24iLCJnZXRQbHVzU2lnbiIsInN0cnRyIiwic3RyIiwicGFpcnMiLCJzdWJzdHJzIiwiUmVnRXhwIiwicGFydCIsImdldEN1cnJlbmN5U3ltYm9sIiwic3BlY2lmaWNhdGlvbnMiLCJzeW1ib2wiLCJudW1iZXJTeW1ib2xzIiwiY3VycmVuY3lTeW1ib2wiLCJwb3NpdGl2ZVBhdHRlcm4iLCJuZWdhdGl2ZVBhdHRlcm4iLCJwYXJzZUludCIsIm1heEZyYWN0aW9uRGlnaXRzIiwibWluRnJhY3Rpb25EaWdpdHMiLCJncm91cGluZ1VzZWQiLCJwcmltYXJ5R3JvdXBTaXplIiwic2Vjb25kYXJ5R3JvdXBTaXplIiwiY3VycmVuY3lDb2RlIiwiZGVjaW1hbCIsImxpc3QiLCJwZXJjZW50U2lnbiIsIm1pbnVzU2lnbiIsInBsdXNTaWduIiwiZXhwb25lbnRpYWwiLCJzdXBlcnNjcmlwdGluZ0V4cG9uZW50IiwicGVyTWlsbGUiLCJpbmZpbml0eSIsIm5hbiIsInZhbGlkYXRlRGF0YSIsIkxvY2FsaXphdGlvbkV4Y2VwdGlvbiIsIkV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlckNsYXNzIiwiJCIsIndpbmRvdyIsIndyYXBwZXJTZWxlY3RvciIsInRleHRTZWxlY3RvciIsImlucHV0U2VsZWN0b3IiLCJkb2N1bWVudCIsIm9uIiwiZSIsIiRpbnB1dCIsImN1cnJlbnRUYXJnZXQiLCJyZW1haW5pbmdMZW5ndGgiLCJkYXRhIiwidmFsIiwiY2xvc2VzdCIsImZpbmQiLCJ0ZXh0IiwicGFyYW1zIiwiY29uZmlybUNhbGxiYWNrIiwiY2FuY2VsQ2FsbGJhY2siLCJpZCIsImNsb3NhYmxlIiwibW9kYWwiLCJjb25maXJtVGl0bGUiLCJjb25maXJtTWVzc2FnZSIsImNsb3NlQnV0dG9uTGFiZWwiLCJjb25maXJtQnV0dG9uTGFiZWwiLCJjb25maXJtQnV0dG9uQ2xhc3MiLCJjdXN0b21CdXR0b25zIiwiY29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImRpYWxvZyIsImNvbnRlbnQiLCJoZWFkZXIiLCJ0aXRsZSIsImlubmVySFRNTCIsImNsb3NlSWNvbiIsInNldEF0dHJpYnV0ZSIsImRhdGFzZXQiLCJkaXNtaXNzIiwiYm9keSIsImZvb3RlciIsImNsb3NlQnV0dG9uIiwiY29uZmlybUJ1dHRvbiIsImFwcGVuZCIsImFwcGVuZENoaWxkIiwiTW9kYWwiLCIkbW9kYWwiLCJzaG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImJhY2tkcm9wIiwia2V5Ym9hcmQiLCJxdWVyeVNlbGVjdG9yIiwicmVtb3ZlIiwiUm91dGVyIiwicHJlc3Rhc2hvcCIsImN1c3RvbVJvdXRlcyIsInJvdXRlcyIsIlJvdXRpbmciLCJzZXREYXRhIiwic2V0QmFzZVVybCIsInJvdXRlIiwidG9rZW5pemVkUGFyYW1zIiwiX3Rva2VuIiwiZ2VuZXJhdGUiLCJtYWluRGl2Iiwib3JkZXJQYXltZW50RGV0YWlsc0J0biIsIm9yZGVyUGF5bWVudEZvcm1BbW91bnRJbnB1dCIsIm9yZGVyUGF5bWVudEludm9pY2VTZWxlY3QiLCJ2aWV3T3JkZXJQYXltZW50c0Jsb2NrIiwidmlld09yZGVyUGF5bWVudHNBbGVydCIsInByaXZhdGVOb3RlVG9nZ2xlQnRuIiwicHJpdmF0ZU5vdGVCbG9jayIsInByaXZhdGVOb3RlSW5wdXQiLCJwcml2YXRlTm90ZVN1Ym1pdEJ0biIsImFkZENhcnRSdWxlTW9kYWwiLCJhZGRDYXJ0UnVsZUludm9pY2VJZFNlbGVjdCIsImFkZENhcnRSdWxlTmFtZUlucHV0IiwiYWRkQ2FydFJ1bGVUeXBlU2VsZWN0IiwiYWRkQ2FydFJ1bGVWYWx1ZUlucHV0IiwiYWRkQ2FydFJ1bGVWYWx1ZVVuaXQiLCJhZGRDYXJ0UnVsZVN1Ym1pdCIsImNhcnRSdWxlSGVscFRleHQiLCJ1cGRhdGVPcmRlclN0YXR1c0FjdGlvbkJ0biIsInVwZGF0ZU9yZGVyU3RhdHVzQWN0aW9uSW5wdXQiLCJ1cGRhdGVPcmRlclN0YXR1c0FjdGlvbklucHV0V3JhcHBlciIsInVwZGF0ZU9yZGVyU3RhdHVzQWN0aW9uRm9ybSIsInNob3dPcmRlclNoaXBwaW5nVXBkYXRlTW9kYWxCdG4iLCJ1cGRhdGVPcmRlclNoaXBwaW5nVHJhY2tpbmdOdW1iZXJJbnB1dCIsInVwZGF0ZU9yZGVyU2hpcHBpbmdDdXJyZW50T3JkZXJDYXJyaWVySWRJbnB1dCIsInVwZGF0ZUN1c3RvbWVyQWRkcmVzc01vZGFsIiwib3Blbk9yZGVyQWRkcmVzc1VwZGF0ZU1vZGFsQnRuIiwidXBkYXRlT3JkZXJBZGRyZXNzVHlwZUlucHV0IiwiZGVsaXZlcnlBZGRyZXNzRWRpdEJ0biIsImludm9pY2VBZGRyZXNzRWRpdEJ0biIsIm9yZGVyTWVzc2FnZU5hbWVTZWxlY3QiLCJvcmRlck1lc3NhZ2VzQ29udGFpbmVyIiwib3JkZXJNZXNzYWdlIiwib3JkZXJNZXNzYWdlQ2hhbmdlV2FybmluZyIsIm9yZGVyRG9jdW1lbnRzVGFiQ291bnQiLCJvcmRlckRvY3VtZW50c1RhYkJvZHkiLCJvcmRlclNoaXBwaW5nVGFiQ291bnQiLCJvcmRlclNoaXBwaW5nVGFiQm9keSIsImFsbE1lc3NhZ2VzTW9kYWwiLCJhbGxNZXNzYWdlc0xpc3QiLCJvcGVuQWxsTWVzc2FnZXNCdG4iLCJwcm9kdWN0T3JpZ2luYWxQb3NpdGlvbiIsInByb2R1Y3RNb2RpZmljYXRpb25Qb3NpdGlvbiIsInByb2R1Y3RzUGFuZWwiLCJwcm9kdWN0c0NvdW50IiwicHJvZHVjdERlbGV0ZUJ0biIsInByb2R1Y3RzVGFibGUiLCJwcm9kdWN0c1BhZ2luYXRpb24iLCJwcm9kdWN0c05hdlBhZ2luYXRpb24iLCJwcm9kdWN0c1RhYmxlUGFnaW5hdGlvbiIsInByb2R1Y3RzVGFibGVQYWdpbmF0aW9uTmV4dCIsInByb2R1Y3RzVGFibGVQYWdpbmF0aW9uUHJldiIsInByb2R1Y3RzVGFibGVQYWdpbmF0aW9uTGluayIsInByb2R1Y3RzVGFibGVQYWdpbmF0aW9uQWN0aXZlIiwicHJvZHVjdHNUYWJsZVBhZ2luYXRpb25UZW1wbGF0ZSIsInByb2R1Y3RzVGFibGVQYWdpbmF0aW9uTnVtYmVyU2VsZWN0b3IiLCJwcm9kdWN0c1RhYmxlUm93IiwicHJvZHVjdElkIiwicHJvZHVjdHNUYWJsZVJvd0VkaXRlZCIsInByb2R1Y3RzVGFibGVSb3dzIiwicHJvZHVjdHNDZWxsTG9jYXRpb24iLCJwcm9kdWN0c0NlbGxSZWZ1bmRlZCIsInByb2R1Y3RzQ2VsbExvY2F0aW9uRGlzcGxheWVkIiwicHJvZHVjdHNDZWxsUmVmdW5kZWREaXNwbGF5ZWQiLCJwcm9kdWN0c1RhYmxlQ3VzdG9taXphdGlvblJvd3MiLCJwcm9kdWN0RWRpdEJ1dHRvbnMiLCJwcm9kdWN0RWRpdEJ0biIsInByb2R1Y3RBZGRCdG4iLCJwcm9kdWN0QWN0aW9uQnRuIiwicHJvZHVjdEFkZEFjdGlvbkJ0biIsInByb2R1Y3RDYW5jZWxBZGRCdG4iLCJwcm9kdWN0QWRkUm93IiwicHJvZHVjdFNlYXJjaElucHV0IiwicHJvZHVjdFNlYXJjaElucHV0QXV0b2NvbXBsZXRlIiwicHJvZHVjdFNlYXJjaElucHV0QXV0b2NvbXBsZXRlTWVudSIsInByb2R1Y3RBZGRJZElucHV0IiwicHJvZHVjdEFkZFRheFJhdGVJbnB1dCIsInByb2R1Y3RBZGRDb21iaW5hdGlvbnNCbG9jayIsInByb2R1Y3RBZGRDb21iaW5hdGlvbnNTZWxlY3QiLCJwcm9kdWN0QWRkUHJpY2VUYXhFeGNsSW5wdXQiLCJwcm9kdWN0QWRkUHJpY2VUYXhJbmNsSW5wdXQiLCJwcm9kdWN0QWRkUXVhbnRpdHlJbnB1dCIsInByb2R1Y3RBZGRBdmFpbGFibGVUZXh0IiwicHJvZHVjdEFkZExvY2F0aW9uVGV4dCIsInByb2R1Y3RBZGRUb3RhbFByaWNlVGV4dCIsInByb2R1Y3RBZGRJbnZvaWNlU2VsZWN0IiwicHJvZHVjdEFkZEZyZWVTaGlwcGluZ1NlbGVjdCIsInByb2R1Y3RBZGROZXdJbnZvaWNlSW5mbyIsInByb2R1Y3RFZGl0U2F2ZUJ0biIsInByb2R1Y3RFZGl0Q2FuY2VsQnRuIiwicHJvZHVjdEVkaXRSb3dUZW1wbGF0ZSIsInByb2R1Y3RFZGl0Um93IiwicHJvZHVjdEVkaXRJbWFnZSIsInByb2R1Y3RFZGl0TmFtZSIsInByb2R1Y3RFZGl0VW5pdFByaWNlIiwicHJvZHVjdEVkaXRRdWFudGl0eSIsInByb2R1Y3RFZGl0QXZhaWxhYmxlUXVhbnRpdHkiLCJwcm9kdWN0RWRpdFRvdGFsUHJpY2UiLCJwcm9kdWN0RWRpdFByaWNlVGF4RXhjbElucHV0IiwicHJvZHVjdEVkaXRQcmljZVRheEluY2xJbnB1dCIsInByb2R1Y3RFZGl0SW52b2ljZVNlbGVjdCIsInByb2R1Y3RFZGl0UXVhbnRpdHlJbnB1dCIsInByb2R1Y3RFZGl0TG9jYXRpb25UZXh0IiwicHJvZHVjdEVkaXRBdmFpbGFibGVUZXh0IiwicHJvZHVjdEVkaXRUb3RhbFByaWNlVGV4dCIsInByb2R1Y3REaXNjb3VudExpc3QiLCJwcm9kdWN0UGFja01vZGFsIiwidGFibGUiLCJyb3dzIiwidGVtcGxhdGUiLCJwcm9kdWN0IiwiaW1nIiwibGluayIsInJlZiIsInN1cHBsaWVyUmVmIiwicXVhbnRpdHkiLCJhdmFpbGFibGVRdWFudGl0eSIsIm9yZGVyUHJvZHVjdHNUb3RhbCIsIm9yZGVyRGlzY291bnRzVG90YWxDb250YWluZXIiLCJvcmRlckRpc2NvdW50c1RvdGFsIiwib3JkZXJXcmFwcGluZ1RvdGFsIiwib3JkZXJTaGlwcGluZ1RvdGFsQ29udGFpbmVyIiwib3JkZXJTaGlwcGluZ1RvdGFsIiwib3JkZXJUYXhlc1RvdGFsIiwib3JkZXJUb3RhbCIsIm9yZGVySG9va1RhYnNDb250YWluZXIiLCJjYW5jZWxQcm9kdWN0IiwiZm9ybSIsImJ1dHRvbnMiLCJhYm9ydCIsInNhdmUiLCJwYXJ0aWFsUmVmdW5kIiwic3RhbmRhcmRSZWZ1bmQiLCJyZXR1cm5Qcm9kdWN0IiwiY2FuY2VsUHJvZHVjdHMiLCJpbnB1dHMiLCJhbW91bnQiLCJzZWxlY3RvciIsImNlbGwiLCJhY3Rpb25zIiwiY2hlY2tib3hlcyIsInJlc3RvY2siLCJjcmVkaXRTbGlwIiwidm91Y2hlciIsInJhZGlvcyIsInZvdWNoZXJSZWZ1bmRUeXBlIiwicHJvZHVjdFByaWNlcyIsInByb2R1Y3RQcmljZXNWb3VjaGVyRXhjbHVkZWQiLCJuZWdhdGl2ZUVycm9yTWVzc2FnZSIsInRvZ2dsZSIsInByaW50T3JkZXJWaWV3UGFnZUJ1dHRvbiIsIm9yZGVyTm90ZVRvZ2dsZUJ0biIsIm9yZGVyTm90ZUJsb2NrIiwib3JkZXJOb3RlSW5wdXQiLCJvcmRlck5vdGVTdWJtaXRCdG4iLCJyZWZyZXNoUHJvZHVjdHNMaXN0TG9hZGluZ1NwaW5uZXIiLCJJbnZvaWNlTm90ZU1hbmFnZXIiLCJzZXR1cExpc3RlbmVycyIsImluaXRTaG93Tm90ZUZvcm1FdmVudEhhbmRsZXIiLCJpbml0Q2xvc2VOb3RlRm9ybUV2ZW50SGFuZGxlciIsImluaXRFbnRlclBheW1lbnRFdmVudEhhbmRsZXIiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwibmV4dCIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJwYXltZW50QW1vdW50IiwiT3JkZXJWaWV3UGFnZU1hcCIsImdldCIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJPcmRlclZpZXdQYWdlTWVzc2FnZXNIYW5kbGVyIiwiJG9yZGVyTWVzc2FnZUNoYW5nZVdhcm5pbmciLCIkbWVzc2FnZXNDb250YWluZXIiLCJsaXN0ZW5Gb3JQcmVkZWZpbmVkTWVzc2FnZVNlbGVjdGlvbiIsImhhbmRsZVByZWRlZmluZWRNZXNzYWdlU2VsZWN0aW9uIiwibGlzdGVuRm9yRnVsbE1lc3NhZ2VzT3BlbiIsIm9uRnVsbE1lc3NhZ2VzT3BlbiIsInZhbHVlSWQiLCJ0cmltIiwiJG9yZGVyTWVzc2FnZSIsImNvbmZpcm0iLCJ0cmlnZ2VyIiwic2Nyb2xsVG9Nc2dMaXN0Qm90dG9tIiwiJG1zZ01vZGFsIiwibXNnTGlzdCIsImNsYXNzQ2hlY2tJbnRlcnZhbCIsInNldEludGVydmFsIiwiaGFzQ2xhc3MiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGVhckludGVydmFsIiwiT3JkZXJTaGlwcGluZ01hbmFnZXIiLCJpbml0T3JkZXJTaGlwcGluZ1VwZGF0ZUV2ZW50SGFuZGxlciIsIiRidG4iLCJPcmRlckRpc2NvdW50c1JlZnJlc2hlciIsInJvdXRlciIsIm9yZGVySWQiLCJhamF4IiwidGhlbiIsInJlc3BvbnNlIiwicmVwbGFjZVdpdGgiLCJPcmRlckRvY3VtZW50c1JlZnJlc2hlciIsImludm9pY2VOb3RlTWFuYWdlciIsImdldEpTT04iLCJ0b3RhbCIsImh0bWwiLCJPcmRlckludm9pY2VzUmVmcmVzaGVyIiwiaW52b2ljZXMiLCIkcGF5bWVudEludm9pY2VTZWxlY3QiLCIkZXhpc3RpbmdJbnZvaWNlc0dyb3VwIiwiJHByb2R1Y3RFZGl0SW52b2ljZVNlbGVjdCIsIiRhZGREaXNjb3VudEludm9pY2VTZWxlY3QiLCJlbXB0eSIsImludm9pY2VOYW1lIiwiaW52b2ljZUlkIiwiaW52b2ljZU5hbWVXaXRob3V0UHJpY2UiLCJzZWxlY3RlZEluZGV4IiwiT3JkZXJQYXltZW50c1JlZnJlc2hlciIsInByZXBlbmQiLCJyZXNwb25zZUpTT04iLCJncm93bCIsImVycm9yIiwiT3JkZXJQcmljZXNSZWZyZXNoZXIiLCJvcmRlclRvdGFsRm9ybWF0dGVkIiwiZGlzY291bnRzQW1vdW50Rm9ybWF0dGVkIiwidG9nZ2xlQ2xhc3MiLCJkaXNjb3VudHNBbW91bnREaXNwbGF5ZWQiLCJwcm9kdWN0c1RvdGFsRm9ybWF0dGVkIiwic2hpcHBpbmdUb3RhbEZvcm1hdHRlZCIsInNoaXBwaW5nVG90YWxEaXNwbGF5ZWQiLCJ0YXhlc1RvdGFsRm9ybWF0dGVkIiwicHJvZHVjdFByaWNlc0xpc3QiLCJvcmRlclByb2R1Y3RUcklkIiwib3JkZXJEZXRhaWxJZCIsIiRxdWFudGl0eSIsIndyYXAiLCJ1bml0UHJpY2UiLCJ0b3RhbFByaWNlIiwicHJvZHVjdEVkaXRCdXR0b24iLCJ1bml0UHJpY2VUYXhJbmNsUmF3IiwidW5pdFByaWNlVGF4RXhjbFJhdyIsImdpdmVuUHJpY2UiLCJjb21iaW5hdGlvbklkIiwicHJvZHVjdFJvd3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZXhwZWN0ZWRQcm9kdWN0SWQiLCJOdW1iZXIiLCJleHBlY3RlZENvbWJpbmF0aW9uSWQiLCJleHBlY3RlZEdpdmVuUHJpY2UiLCJ1bm1hdGNoaW5nSW52b2ljZVByaWNlRXhpc3RzIiwidW5tYXRjaGluZ1Byb2R1Y3RQcmljZUV4aXN0cyIsInByb2R1Y3RSb3ciLCJwcm9kdWN0Um93SWQiLCJhdHRyIiwiY3VycmVudE9yZGVySW52b2ljZUlkIiwiY3VycmVudFByb2R1Y3RJZCIsImN1cnJlbnRDb21iaW5hdGlvbklkIiwiT3JkZXJQcmljZXMiLCJ0YXhJbmNsdWRlZCIsInRheFJhdGVQZXJDZW50IiwiY3VycmVuY3lQcmVjaXNpb24iLCJwcmljZVRheEluY2wiLCJwYXJzZUZsb2F0IiwidGF4UmF0ZSIsInBzX3JvdW5kIiwidGF4RXhjbHVkZWQiLCJwcmljZVRheEV4Y2wiLCJPcmRlclByb2R1Y3RBdXRvY29tcGxldGUiLCJpbnB1dCIsImFjdGl2ZVNlYXJjaFJlcXVlc3QiLCJyZXN1bHRzIiwiZHJvcGRvd25NZW51Iiwib25JdGVtQ2xpY2tlZENhbGxiYWNrIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwidXBkYXRlUmVzdWx0cyIsImRlbGF5U2VhcmNoIiwiaGlkZSIsImNsZWFyVGltZW91dCIsInNlYXJjaFRpbWVvdXRJZCIsInZhbHVlIiwic2V0VGltZW91dCIsInNlYXJjaCIsImN1cnJlbmN5Iiwic2VhcmNoX3BocmFzZSIsImN1cnJlbmN5X2lkIiwib3JkZXJfaWQiLCJhbHdheXMiLCJwcm9kdWN0cyIsIm9uSXRlbUNsaWNrZWQiLCJ0YXJnZXQiLCJzZWxlY3RlZFByb2R1Y3QiLCJmaWx0ZXIiLCJPcmRlclByb2R1Y3RBZGQiLCJwcm9kdWN0SWRJbnB1dCIsImNvbWJpbmF0aW9uc0Jsb2NrIiwiY29tYmluYXRpb25zU2VsZWN0IiwicHJpY2VUYXhJbmNsdWRlZElucHV0IiwicHJpY2VUYXhFeGNsdWRlZElucHV0IiwidGF4UmF0ZUlucHV0IiwicXVhbnRpdHlJbnB1dCIsImF2YWlsYWJsZVRleHQiLCJsb2NhdGlvblRleHQiLCJ0b3RhbFByaWNlVGV4dCIsImludm9pY2VTZWxlY3QiLCJmcmVlU2hpcHBpbmdTZWxlY3QiLCJwcm9kdWN0QWRkTWVudUJ0biIsImF2YWlsYWJsZSIsInNldHVwTGlzdGVuZXIiLCJwcmljZVRheENhbGN1bGF0b3IiLCJvcmRlclByb2R1Y3RSZW5kZXJlciIsIk9yZGVyUHJvZHVjdFJlbmRlcmVyIiwib3JkZXJQcmljZXNSZWZyZXNoZXIiLCJpc09yZGVyVGF4SW5jbHVkZWQiLCJ0b2dnbGVDb2x1bW4iLCJuZXdRdWFudGl0eSIsInJlbWFpbmluZ0F2YWlsYWJsZSIsImF2YWlsYWJsZU91dE9mU3RvY2siLCJkaXNhYmxlQWRkQWN0aW9uQnRuIiwicHJvcCIsImNhbGN1bGF0ZVRvdGFsUHJpY2UiLCJyZW1vdmVBdHRyIiwiY2FsY3VsYXRlVGF4RXhjbHVkZWQiLCJjYWxjdWxhdGVUYXhJbmNsdWRlZCIsImNvbmZpcm1OZXdJbnZvaWNlIiwidG9nZ2xlUHJvZHVjdEFkZE5ld0ludm9pY2VJbmZvIiwibG9jYXRpb24iLCJzdG9jayIsInNldENvbWJpbmF0aW9ucyIsImNvbWJpbmF0aW9ucyIsImF0dHJpYnV0ZUNvbWJpbmF0aW9uSWQiLCJwcmljZVRheEV4Y2x1ZGVkIiwicHJpY2VUYXhJbmNsdWRlZCIsImF0dHJpYnV0ZSIsInByb2R1Y3RfaWQiLCJjb21iaW5hdGlvbl9pZCIsInByaWNlX3RheF9pbmNsIiwicHJpY2VfdGF4X2V4Y2wiLCJpbnZvaWNlX2lkIiwiZnJlZV9zaGlwcGluZyIsInVybCIsIm1ldGhvZCIsImVtaXQiLCJPcmRlclZpZXdFdmVudE1hcCIsInByb2R1Y3RBZGRlZFRvT3JkZXIiLCJvcmRlclByb2R1Y3RJZCIsIm5ld1JvdyIsIkNvbmZpcm1Nb2RhbCIsImNvbmZpcm1OZXdQcmljZSIsImFkZFByb2R1Y3QiLCJjb21iaW5hdGlvblZhbHVlIiwiY2hlY2tPdGhlclByb2R1Y3RQcmljZXNNYXRjaCIsIk9yZGVyUHJvZHVjdENhbmNlbCIsImNhbmNlbFByb2R1Y3RGb3JtIiwib3JkZXJEZWxpdmVyZWQiLCJpc1RheEluY2x1ZGVkIiwiZGlzY291bnRzQW1vdW50IiwiY3VycmVuY3lGb3JtYXR0ZXIiLCJidWlsZCIsInVzZUFtb3VudElucHV0cyIsImxpc3RlbkZvcklucHV0cyIsImhpZGVDYW5jZWxFbGVtZW50cyIsImluaXRGb3JtIiwiYWN0aW9uTmFtZSIsImZvcm1BY3Rpb24iLCJmb3JtQ2xhc3MiLCJ1cGRhdGVWb3VjaGVyUmVmdW5kIiwiJHByb2R1Y3RRdWFudGl0eUlucHV0IiwiJHByb2R1Y3RBbW91bnQiLCJwYXJlbnRzIiwicHJvZHVjdFF1YW50aXR5IiwicHJpY2VGaWVsZE5hbWUiLCJwcm9kdWN0VW5pdFByaWNlIiwiYW1vdW50UmVmdW5kYWJsZSIsImd1ZXNzZWRBbW91bnQiLCJhbW91bnRWYWx1ZSIsInVwZGF0ZUFtb3VudElucHV0IiwiJHByb2R1Y3RDaGVja2JveCIsInByb2R1Y3RRdWFudGl0eUlucHV0IiwicmVmdW5kYWJsZVF1YW50aXR5IiwiaXMiLCJ0b3RhbEFtb3VudCIsImVhY2giLCJpbmRleCIsImZsb2F0VmFsdWUiLCIkcXVhbnRpdHlJbnB1dCIsInJlZnVuZEFtb3VudCIsImdldFJlZnVuZEFtb3VudCIsInVwZGF0ZVZvdWNoZXJSZWZ1bmRUeXBlTGFiZWwiLCJyZWZ1bmRWb3VjaGVyRXhjbHVkZWQiLCJkZWZhdWx0TGFiZWwiLCIkbGFiZWwiLCJmb3JtYXR0ZWRBbW91bnQiLCJmb3JtYXQiLCJsYXN0Q2hpbGQiLCJub2RlVmFsdWUiLCJjYW5jZWxQcm9kdWN0Um91dGUiLCJPcmRlclByb2R1Y3RFZGl0IiwidXBkYXRlVG90YWwiLCJkaXNhYmxlRWRpdEFjdGlvbkJ0biIsImhhbmRsZUVkaXRQcm9kdWN0V2l0aENvbmZpcm1hdGlvbk1vZGFsIiwicHJvZHVjdEVkaXRpb25DYW5jZWxlZCIsInVwZGF0ZWRUb3RhbCIsInByaWNlVG90YWxUZXh0IiwiaW5pdGlhbFRvdGFsIiwicHJvZHVjdFJvd0VkaXQiLCJjbG9uZSIsIm9yZGVySW52b2ljZUlkIiwidGF4X3JhdGUiLCJhZnRlciIsInByb2R1Y3RQcmljZU1hdGNoIiwiZGF0YVNlbGVjdG9yIiwiZWRpdFByb2R1Y3QiLCJpbnZvaWNlIiwicHJvZHVjdFVwZGF0ZWQiLCJPcmRlclByb2R1Y3RNYW5hZ2VyIiwicHN0b29sdGlwIiwiZGVsZXRlUHJvZHVjdCIsInByb2R1Y3REZWxldGVkRnJvbU9yZGVyIiwib2xkT3JkZXJEZXRhaWxJZCIsIiRwcm9kdWN0Um93IiwiYmVmb3JlIiwiZmFkZUluIiwibnVtUHJvZHVjdHMiLCJkaXNwbGF5UHJvZHVjdCIsInNjcm9sbFRhcmdldCIsIm1vdmVQcm9kdWN0UGFuZWxUb1RvcCIsInJlc2V0QWxsRWRpdFJvd3MiLCIkbW9kaWZpY2F0aW9uUG9zaXRpb24iLCJkZXRhY2giLCJhcHBlbmRUbyIsIiRyb3dzIiwic2Nyb2xsVmFsdWUiLCJvZmZzZXQiLCJ0b3AiLCJoZWlnaHQiLCJhbmltYXRlIiwicGFnaW5hdGUiLCJrZXkiLCJlZGl0QnV0dG9uIiwicmVzZXRFZGl0Um93Iiwib3JpZ2luYWxOdW1QYWdlIiwiJGN1c3RvbWl6YXRpb25Sb3dzIiwiJHRhYmxlUGFnaW5hdGlvbiIsIm51bVJvd3NQZXJQYWdlIiwibWF4UGFnZSIsImNlaWwiLCJudW1QYWdlIiwibWF4IiwibWluIiwicGFnaW5hdGVVcGRhdGVDb250cm9scyIsImVuZFJvdyIsImkiLCJwcmV2Iiwibm90IiwidG90YWxQYWdlIiwidG9nZ2xlUGFnaW5hdGlvbkNvbnRyb2xzIiwibnVtUGVyUGFnZSIsInVwZGF0ZVBhZ2luYXRpb25Db250cm9scyIsImZvcmNlRGlzcGxheSIsImlzQ29sdW1uRGlzcGxheWVkIiwibnVtUGFnZXMiLCIkbGlua1BhZ2luYXRpb25UZW1wbGF0ZSIsIiRsaW5rUGFnaW5hdGlvbiIsIk9yZGVyU2hpcHBpbmdSZWZyZXNoZXIiLCJwcm9kdWN0TGlzdFBhZ2luYXRlZCIsInByb2R1Y3RMaXN0TnVtYmVyUGVyUGFnZSIsIk9yZGVyVmlld1BhZ2UiLCJvcmRlckRpc2NvdW50c1JlZnJlc2hlciIsIm9yZGVyUHJvZHVjdE1hbmFnZXIiLCJvcmRlclBheW1lbnRzUmVmcmVzaGVyIiwib3JkZXJTaGlwcGluZ1JlZnJlc2hlciIsIm9yZGVyRG9jdW1lbnRzUmVmcmVzaGVyIiwib3JkZXJJbnZvaWNlc1JlZnJlc2hlciIsIm9yZGVyUHJvZHVjdENhbmNlbCIsImxpc3RlblRvRXZlbnRzIiwiZmFuY3lib3giLCJ0eXBlIiwid2lkdGgiLCJyZWZyZXNoIiwicmVmcmVzaFByb2R1Y3RzTGlzdCIsIm1vdmVQcm9kdWN0UGFuZWxUb09yaWdpbmFsUG9zaXRpb24iLCJyZWZyZXNoUHJvZHVjdFByaWNlcyIsImxpc3RlbkZvclByb2R1Y3REZWxldGUiLCJsaXN0ZW5Gb3JQcm9kdWN0RWRpdCIsInJlc2V0VG9vbFRpcHMiLCJyZXNldEFkZFJvdyIsIm9mZiIsImhhbmRsZURlbGV0ZVByb2R1Y3RFdmVudCIsIm1vdmVQcm9kdWN0c1BhbmVsVG9Nb2RpZmljYXRpb25Qb3NpdGlvbiIsImVkaXRQcm9kdWN0RnJvbUxpc3QiLCJwYWNrSXRlbXMiLCJyZWxhdGVkVGFyZ2V0IiwiaXRlbSIsIiRpdGVtIiwiaW1hZ2VQYXRoIiwicmVmZXJlbmNlIiwic3VwcGxpZXJSZWZlcmVuY2UiLCJhY3RpdmVQYWdlIiwiZ2V0QWN0aXZlUGFnZSIsIiRzZWxlY3QiLCJ1cGRhdGVOdW1QZXJQYWdlIiwibW92ZVByb2R1Y3RzUGFuZWxUb1JlZnVuZFBvc2l0aW9uIiwic2hvd1BhcnRpYWxSZWZ1bmQiLCJzaG93U3RhbmRhcmRSZWZ1bmQiLCJzaG93UmV0dXJuUHJvZHVjdCIsImhpZGVSZWZ1bmQiLCJzaG93Q2FuY2VsUHJvZHVjdEZvcm0iLCJpbml0aWFsTnVtUHJvZHVjdHMiLCJjdXJyZW50UGFnZSIsImRvbmUiLCJuZXdOdW1Qcm9kdWN0cyIsIm5ld1BhZ2VzTnVtIiwidXBkYXRlTnVtUHJvZHVjdHMiLCJ0cmFuc2xhdGVfamF2YXNjcmlwdHMiLCJub3RpY2UiLCJmYWlsIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicHJvdG90eXBlIiwiX3NldFByb3RvdHlwZU9mMiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3JlYXRlMiIsIl90eXBlb2YzIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY29uc3RydWN0b3IiLCJfX3Byb3RvX18iLCJzZWxmIiwiY2FsbCIsIlJlZmVyZW5jZUVycm9yIiwiX2lzSXRlcmFibGUzIiwiX2dldEl0ZXJhdG9yMyIsImFyciIsIkFycmF5IiwiaXNBcnJheSIsIk9iamVjdCIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIl9pIiwiZXJyIiwic2xpY2VJdGVyYXRvciIsIl9mcm9tMiIsImFycjIiLCJfaXRlcmF0b3IyIiwiX3N5bWJvbDIiLCJfdHlwZW9mIiwiJE9iamVjdCIsIlAiLCJEIiwiY3JlYXRlIiwiaXQiLCJkZXNjIiwiZGVmaW5lUHJvcGVydHkiLCJpc09iamVjdCIsInRvSU9iamVjdCIsInRvTGVuZ3RoIiwidG9BYnNvbHV0ZUluZGV4IiwiSVNfSU5DTFVERVMiLCIkdGhpcyIsImVsIiwiZnJvbUluZGV4IiwiTyIsImNvZiIsIlRBRyIsIkFSRyIsImFyZ3VtZW50cyIsIlQiLCJCIiwidHJ5R2V0IiwiY2FsbGVlIiwic2xpY2UiLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsIiRkZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZURlc2MiLCJvYmplY3QiLCJmIiwiYUZ1bmN0aW9uIiwiZm4iLCJ0aGF0IiwiYSIsImIiLCJjIiwiYXBwbHkiLCJnZXRLZXlzIiwiZ09QUyIsInBJRSIsImdldFN5bWJvbHMiLCJpc0VudW0iLCJnbG9iYWwiLCJjdHgiLCJoYXMiLCIkZXhwb3J0Iiwic291cmNlIiwib3duIiwib3V0IiwiSVNfRk9SQ0VEIiwiRiIsIklTX0dMT0JBTCIsIkciLCJJU19TVEFUSUMiLCJTIiwiSVNfUFJPVE8iLCJJU19CSU5EIiwiSVNfV1JBUCIsIlciLCJleHBQcm90byIsIkMiLCJGdW5jdGlvbiIsInZpcnR1YWwiLCJSIiwiVSIsImV4ZWMiLCJfX2ciLCJoYXNPd25Qcm9wZXJ0eSIsImRQIiwiZG9jdW1lbnRFbGVtZW50IiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJJdGVyYXRvcnMiLCJJVEVSQVRPUiIsIkFycmF5UHJvdG8iLCJhcmciLCJhbk9iamVjdCIsIml0ZXJhdG9yIiwiZW50cmllcyIsInJldCIsInNldFRvU3RyaW5nVGFnIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJOQU1FIiwiTElCUkFSWSIsInJlZGVmaW5lIiwiJGl0ZXJDcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsIkJVR0dZIiwia2V5cyIsIktFWVMiLCJWQUxVRVMiLCJyZXR1cm5UaGlzIiwiQmFzZSIsIkRFRkFVTFQiLCJJU19TRVQiLCJGT1JDRUQiLCJtZXRob2RzIiwiZ2V0TWV0aG9kIiwia2luZCIsInByb3RvIiwiREVGX1ZBTFVFUyIsIlZBTFVFU19CVUciLCIkbmF0aXZlIiwiJGRlZmF1bHQiLCIkZW50cmllcyIsIiRhbnlOYXRpdmUiLCJ2YWx1ZXMiLCJTQUZFX0NMT1NJTkciLCJyaXRlciIsImZyb20iLCJza2lwQ2xvc2luZyIsInNhZmUiLCJpdGVyIiwiTUVUQSIsInNldERlc2MiLCJpc0V4dGVuc2libGUiLCJGUkVFWkUiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsInNldE1ldGEiLCJ3IiwibWV0YSIsIktFWSIsIk5FRUQiLCJmYXN0S2V5IiwiZ2V0V2VhayIsIm9uRnJlZXplIiwiREVTQ1JJUFRPUlMiLCJ0b09iamVjdCIsIklPYmplY3QiLCIkYXNzaWduIiwiYXNzaWduIiwiQSIsIlN5bWJvbCIsIksiLCJrIiwiYUxlbiIsImNvbmNhdCIsImoiLCJkUHMiLCJlbnVtQnVnS2V5cyIsIklFX1BST1RPIiwiRW1wdHkiLCJjcmVhdGVEaWN0IiwiaWZyYW1lRG9jdW1lbnQiLCJpZnJhbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJzcmMiLCJjb250ZW50V2luZG93Iiwib3BlbiIsIndyaXRlIiwibHQiLCJjbG9zZSIsIlByb3BlcnRpZXMiLCJJRThfRE9NX0RFRklORSIsInRvUHJpbWl0aXZlIiwiQXR0cmlidXRlcyIsImdPUEQiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnT1BOIiwid2luZG93TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZ2V0V2luZG93TmFtZXMiLCIka2V5cyIsImhpZGRlbktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJPYmplY3RQcm90byIsImFycmF5SW5kZXhPZiIsIm5hbWVzIiwiZmFpbHMiLCJleHAiLCJpc0VudHJpZXMiLCJiaXRtYXAiLCJjaGVjayIsInNldCIsInNldFByb3RvdHlwZU9mIiwidGVzdCIsImJ1Z2d5IiwiZGVmIiwidGFnIiwic3RhdCIsInNoYXJlZCIsInVpZCIsIlNIQVJFRCIsInN0b3JlIiwibW9kZSIsImNvcHlyaWdodCIsInRvSW50ZWdlciIsImRlZmluZWQiLCJUT19TVFJJTkciLCJwb3MiLCJzIiwiU3RyaW5nIiwibCIsImNoYXJDb2RlQXQiLCJjaGFyQXQiLCJmbG9vciIsImlzTmFOIiwidmFsdWVPZiIsInB4IiwicmFuZG9tIiwid2tzRXh0IiwiJFN5bWJvbCIsIlVTRV9TWU1CT0wiLCJjbGFzc29mIiwiaXRlckZuIiwiaXNBcnJheUl0ZXIiLCJjcmVhdGVQcm9wZXJ0eSIsImdldEl0ZXJGbiIsImFycmF5TGlrZSIsInN0ZXAiLCJtYXBmbiIsIm1hcHBpbmciLCJhZGRUb1Vuc2NvcGFibGVzIiwiaXRlcmF0ZWQiLCJfdCIsIl9rIiwiQXJndW1lbnRzIiwiJGdldFByb3RvdHlwZU9mIiwiJGF0IiwicG9pbnQiLCIkZmFpbHMiLCJ3a3MiLCJ3a3NEZWZpbmUiLCJlbnVtS2V5cyIsIl9jcmVhdGUiLCJnT1BORXh0IiwiJEdPUEQiLCIkR09QUyIsIiREUCIsIiRKU09OIiwiSlNPTiIsIl9zdHJpbmdpZnkiLCJzdHJpbmdpZnkiLCJISURERU4iLCJUT19QUklNSVRJVkUiLCJTeW1ib2xSZWdpc3RyeSIsIkFsbFN5bWJvbHMiLCJPUFN5bWJvbHMiLCJVU0VfTkFUSVZFIiwiUU9iamVjdCIsInNldHRlciIsImZpbmRDaGlsZCIsInNldFN5bWJvbERlc2MiLCJwcm90b0Rlc2MiLCJzeW0iLCJpc1N5bWJvbCIsIiRkZWZpbmVQcm9wZXJ0aWVzIiwiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwiRSIsIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCIkZ2V0T3duUHJvcGVydHlOYW1lcyIsIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJJU19PUCIsIiRzZXQiLCJlczZTeW1ib2xzIiwid2VsbEtub3duU3ltYm9scyIsImtleUZvciIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZBSUxTX09OX1BSSU1JVElWRVMiLCJyZXBsYWNlciIsIiRyZXBsYWNlciIsImFyZ3MiLCIkdmFsdWVzIiwiVE9fU1RSSU5HX1RBRyIsIkRPTUl0ZXJhYmxlcyIsIkNvbGxlY3Rpb24iLCJSZWZsZWN0T3duS2V5cyIsIlJlZmxlY3QiLCJSZWZsZWN0QXBwbHkiLCJyZWNlaXZlciIsIm93bktleXMiLCJOdW1iZXJJc05hTiIsImluaXQiLCJfZXZlbnRzIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJjaGVja0xpc3RlbmVyIiwibGlzdGVuZXIiLCJfZ2V0TWF4TGlzdGVuZXJzIiwiX2FkZExpc3RlbmVyIiwibSIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsIm5ld0xpc3RlbmVyIiwidW5zaGlmdCIsIndhcm5lZCIsIkVycm9yIiwiZW1pdHRlciIsImNvdW50IiwiY29uc29sZSIsIndhcm4iLCJvbmNlV3JhcHBlciIsImZpcmVkIiwicmVtb3ZlTGlzdGVuZXIiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJzdGF0ZSIsIndyYXBwZWQiLCJiaW5kIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5IiwiUmFuZ2VFcnJvciIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlciIsImNvbnRleHQiLCJoYW5kbGVyIiwibGVuIiwibGlzdGVuZXJzIiwiYWRkTGlzdGVuZXIiLCJwcmVwZW5kTGlzdGVuZXIiLCJvbmNlIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsInBvc2l0aW9uIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0IiwicG9wIiwic3BsaWNlT25lIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIl9leHRlbmRzIiwiZCIsIl9jbGFzc0NhbGxDaGVjayIsInNldFJvdXRlcyIsInJvdXRlc1JvdXRpbmciLCJnZXRSb3V0ZXMiLCJjb250ZXh0Um91dGluZyIsImJhc2VfdXJsIiwiZ2V0QmFzZVVybCIsInNldFByZWZpeCIsInByZWZpeCIsInNldFNjaGVtZSIsInNjaGVtZSIsImdldFNjaGVtZSIsInNldEhvc3QiLCJob3N0IiwiZ2V0SG9zdCIsImJ1aWxkUXVlcnlQYXJhbXMiLCJnZXRSb3V0ZSIsImciLCJoIiwidG9rZW5zIiwiZGVmYXVsdHMiLCJlbmNvZGVVUklDb21wb25lbnQiLCJob3N0dG9rZW5zIiwicmVxdWlyZW1lbnRzIiwicmVSZWdFeHBDaGFyIiwicmVIYXNSZWdFeHBDaGFyIiwiZnJlZUdsb2JhbCIsImZyZWVTZWxmIiwicm9vdCIsIm9iamVjdFRvU3RyaW5nIiwic3ltYm9sUHJvdG8iLCJzeW1ib2xUb1N0cmluZyIsInN0cmluZyIsImlzT2JqZWN0TGlrZSIsImJhc2VUb1N0cmluZyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnbG9iYWxUaGlzIiwiVGV4dFdpdGhMZW5ndGhDb3VudGVyIiwiJHN1Ym1pdEJ0biIsIiR3cmFwcGVyIiwib3JkZXJWaWV3UGFnZSIsIm9yZGVyQWRkQXV0b2NvbXBsZXRlIiwib3JkZXJBZGQiLCJsaXN0ZW5Gb3JQcm9kdWN0UGFjayIsImxpc3RlbkZvclByb2R1Y3RBZGQiLCJsaXN0ZW5Gb3JQcm9kdWN0UGFnaW5hdGlvbiIsImxpc3RlbkZvclJlZnVuZCIsImxpc3RlbkZvckNhbmNlbFByb2R1Y3QiLCJsaXN0ZW5Gb3JTZWFyY2giLCJzZXRQcm9kdWN0IiwiaGFuZGxlT3JkZXJOb3RlQ2hhbmdlIiwiJGVsZW1lbnQiLCIkb3B0aW9uIiwic2VsZWN0ZWRPcmRlclN0YXR1c0lkIiwiY3NzIiwiJGZvcm0iLCIkaW52b2ljZVNlbGVjdCIsIiR2YWx1ZUhlbHAiLCIkdmFsdWVJbnB1dCIsIiR2YWx1ZUZvcm1Hcm91cCIsIm9yZGVyVmlld1BhZ2VNZXNzYWdlSGFuZGxlciIsIiRibG9jayIsImlzUHJpdmF0ZU5vdGVPcGVuZWQiLCJ0b2dnbGVQcml2YXRlTm90ZUJsb2NrIiwiaXNOb3RlT3BlbmVkIiwidG9nZ2xlT3JkZXJOb3RlQmxvY2siLCJ0ZW1wVGl0bGUiLCJwcmludCIsImNhcnRSdWxlTmFtZSIsImFkZENhcnRSdWxlQXBwbHlPbkFsbEludm9pY2VzQ2hlY2tib3giLCJpc0NoZWNrZWQiLCJzZWxlY3RlZENhcnRSdWxlVHlwZSIsIiR2YWx1ZVVuaXQiLCJpbml0Q2hhbmdlQWRkcmVzc0Zvcm1IYW5kbGVyIiwidGFiIl0sIm1hcHBpbmdzIjoiOzBxYkF5QkUsV0FBWUEsSUFBUyxxQkFDbkJDLEtBQUtELFFBQVVBLEVBQ2ZDLEtBQUtDLEtBQU8sMEIsaUtDSGhCLEksSUFBQSxVLElBQ0EsVSxJQUNBLFUsSUFDQSxVLHdFQUdFQyxVLHNCQUNBQyxVLGtCQUNBQyxVLGVBQ0FDLFcsNEpDTEYsVSxJQUNBLFUsSUFDQSxVLG1EQUVBLElBQU1DLEVBQVdDLEVBQVEsT0FTbkJILEUsV0FLSixXQUFZSSxJQUFlLHFCQUN6QlIsS0FBS1Msb0JBQXNCRCxFLG9EQWF0QkUsRUFBUUYsUUFDU0csSUFBbEJILElBQ0ZSLEtBQUtTLG9CQUFzQkQsR0FPN0IsSUFBTUksRUFBTUMsS0FBS0MsSUFBSUosR0FBUUssUUFBUWYsS0FBS1Msb0JBQW9CTyx3QkFUbEMsRUFXS2hCLEtBQUtpQix3QkFBd0JMLEdBWGxDLHFCQVd2Qk0sRUFYdUIsS0FXVkMsRUFYVSxLQWdCeEJDLEVB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QUFVLFNBQUM2TixHQUMvRCxJQUFNOHlCLEVBQXVCamhDLEVBQUVtTyxFQUFNMU4sZUFBZUcsTUFDOUNzZ0MsRUFBYWpCLEVBQU1uL0IsS0FBSzJOLFVBQWlCeEosc0JBeEl0QixXQTBJckJnOEIsR0FDRmQsRUFBVzd4QixZQUFZLFVBQ3ZCNHlCLEVBQVdsd0IsS0FBS2t3QixFQUFXdmdDLEtBQUssb0JBRWhDdy9CLEVBQVc1eEIsU0FBUyxVQTdJSSxZQWdKdEIweUIsR0FDRkMsRUFBV2x3QixLQUFLLEtBaEpjLGtCQW1KNUJpd0IsR0FDRlosRUFBZ0I5eEIsU0FBUyxVQUN6QjZ4QixFQUFZcHNCLEtBQUssWUFBWSxLQUU3QnFzQixFQUFnQi94QixZQUFZLFVBQzVCOHhCLEVBQVlwc0IsS0FBSyxZQUFZLE9BcUJuQyxXQUNFLElBQU1oUixFQUFTaEQsRUFBRXlPLFVBQWlCOUksNEJBRWxDM0YsRUFBRXlPLFVBQWlCN0ksZ0NBQWdDdEYsR0FBRyxTQUFTLFNBQUM2TixHQUM5RG5MLEVBQU9sQyxLQUFLMk4sVUFBaUI1SSw2QkFBNkJqRixJQUFJWixFQUFFbU8sRUFBTTFOLGVBQWVFLEtBQUssbUJBbkk5RndnQyxHQUlFbmhDLEVBQUV5TyxVQUFpQjFDLHdCQUNoQmpMLEtBQUssOEJBQ0xzZ0MsSUFBSSxZIiwiZmlsZSI6Im9yZGVyX3ZpZXcuYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuY2xhc3MgTG9jYWxpemF0aW9uRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5uYW1lID0gJ0xvY2FsaXphdGlvbkV4Y2VwdGlvbic7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9jYWxpemF0aW9uRXhjZXB0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IE51bWJlckZvcm1hdHRlciBmcm9tICdAYXBwL2NsZHIvbnVtYmVyLWZvcm1hdHRlcic7XG5pbXBvcnQgTnVtYmVyU3ltYm9sIGZyb20gJ0BhcHAvY2xkci9udW1iZXItc3ltYm9sJztcbmltcG9ydCBQcmljZVNwZWNpZmljYXRpb24gZnJvbSAnQGFwcC9jbGRyL3NwZWNpZmljYXRpb25zL3ByaWNlJztcbmltcG9ydCBOdW1iZXJTcGVjaWZpY2F0aW9uIGZyb20gJ0BhcHAvY2xkci9zcGVjaWZpY2F0aW9ucy9udW1iZXInO1xuXG5leHBvcnQge1xuICBQcmljZVNwZWNpZmljYXRpb24sXG4gIE51bWJlclNwZWNpZmljYXRpb24sXG4gIE51bWJlckZvcm1hdHRlcixcbiAgTnVtYmVyU3ltYm9sLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbi8qKlxuICogVGhlc2UgcGxhY2Vob2xkZXJzIGFyZSB1c2VkIGluIENMRFIgbnVtYmVyIGZvcm1hdHRpbmcgdGVtcGxhdGVzLlxuICogVGhleSBhcmUgbWVhbnQgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgbG9jYWxpemVkIHN5bWJvbHMgaW4gdGhlIG51bWJlciBmb3JtYXR0aW5nIHByb2Nlc3MuXG4gKi9cbmltcG9ydCBOdW1iZXJTeW1ib2wgZnJvbSAnQGFwcC9jbGRyL251bWJlci1zeW1ib2wnO1xuaW1wb3J0IFByaWNlU3BlY2lmaWNhdGlvbiBmcm9tICdAYXBwL2NsZHIvc3BlY2lmaWNhdGlvbnMvcHJpY2UnO1xuaW1wb3J0IE51bWJlclNwZWNpZmljYXRpb24gZnJvbSAnQGFwcC9jbGRyL3NwZWNpZmljYXRpb25zL251bWJlcic7XG5cbmNvbnN0IGVzY2FwZVJFID0gcmVxdWlyZSgnbG9kYXNoLmVzY2FwZXJlZ2V4cCcpO1xuXG5jb25zdCBDVVJSRU5DWV9TWU1CT0xfUExBQ0VIT0xERVIgPSAnwqQnO1xuY29uc3QgREVDSU1BTF9TRVBBUkFUT1JfUExBQ0VIT0xERVIgPSAnLic7XG5jb25zdCBHUk9VUF9TRVBBUkFUT1JfUExBQ0VIT0xERVIgPSAnLCc7XG5jb25zdCBNSU5VU19TSUdOX1BMQUNFSE9MREVSID0gJy0nO1xuY29uc3QgUEVSQ0VOVF9TWU1CT0xfUExBQ0VIT0xERVIgPSAnJSc7XG5jb25zdCBQTFVTX1NJR05fUExBQ0VIT0xERVIgPSAnKyc7XG5cbmNsYXNzIE51bWJlckZvcm1hdHRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0gTnVtYmVyU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uIE51bWJlciBzcGVjaWZpY2F0aW9uIHRvIGJlIHVzZWRcbiAgICogICAoY2FuIGJlIGEgbnVtYmVyIHNwZWMsIGEgcHJpY2Ugc3BlYywgYSBwZXJjZW50YWdlIHNwZWMpXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uKSB7XG4gICAgdGhpcy5udW1iZXJTcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIHRoZSBwYXNzZWQgbnVtYmVyIGFjY29yZGluZyB0byBzcGVjaWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGludHxmbG9hdHxzdHJpbmcgbnVtYmVyIFRoZSBudW1iZXIgdG8gZm9ybWF0XG4gICAqIEBwYXJhbSBOdW1iZXJTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24gTnVtYmVyIHNwZWNpZmljYXRpb24gdG8gYmUgdXNlZFxuICAgKiAgIChjYW4gYmUgYSBudW1iZXIgc3BlYywgYSBwcmljZSBzcGVjLCBhIHBlcmNlbnRhZ2Ugc3BlYylcbiAgICpcbiAgICogQHJldHVybiBzdHJpbmcgVGhlIGZvcm1hdHRlZCBudW1iZXJcbiAgICogICAgICAgICAgICAgICAgWW91IHNob3VsZCB1c2UgdGhpcyB0aGlzIHZhbHVlIGZvciBkaXNwbGF5LCB3aXRob3V0IG1vZGlmeWluZyBpdFxuICAgKi9cbiAgZm9ybWF0KG51bWJlciwgc3BlY2lmaWNhdGlvbikge1xuICAgIGlmIChzcGVjaWZpY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubnVtYmVyU3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBXZSBuZWVkIHRvIHdvcmsgb24gdGhlIGFic29sdXRlIHZhbHVlIGZpcnN0LlxuICAgICAqIFRoZW4gdGhlIENMRFIgcGF0dGVybiB3aWxsIGFkZCB0aGUgc2lnbiBpZiByZWxldmFudCAoYXQgdGhlIGVuZCkuXG4gICAgICovXG4gICAgY29uc3QgbnVtID0gTWF0aC5hYnMobnVtYmVyKS50b0ZpeGVkKHRoaXMubnVtYmVyU3BlY2lmaWNhdGlvbi5nZXRNYXhGcmFjdGlvbkRpZ2l0cygpKTtcblxuICAgIGxldCBbbWFqb3JEaWdpdHMsIG1pbm9yRGlnaXRzXSA9IHRoaXMuZXh0cmFjdE1ham9yTWlub3JEaWdpdHMobnVtKTtcbiAgICBtYWpvckRpZ2l0cyA9IHRoaXMuc3BsaXRNYWpvckdyb3VwcyhtYWpvckRpZ2l0cyk7XG4gICAgbWlub3JEaWdpdHMgPSB0aGlzLmFkanVzdE1pbm9yRGlnaXRzWmVyb2VzKG1pbm9yRGlnaXRzKTtcblxuICAgIC8vIEFzc2VtYmxlIHRoZSBmaW5hbCBudW1iZXJcbiAgICBsZXQgZm9ybWF0dGVkTnVtYmVyID0gbWFqb3JEaWdpdHM7XG5cbiAgICBpZiAobWlub3JEaWdpdHMpIHtcbiAgICAgIGZvcm1hdHRlZE51bWJlciArPSBERUNJTUFMX1NFUEFSQVRPUl9QTEFDRUhPTERFUiArIG1pbm9yRGlnaXRzO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgZ29vZCBDTERSIGZvcm1hdHRpbmcgcGF0dGVybi4gU2lnbiBpcyBpbXBvcnRhbnQgaGVyZSAhXG4gICAgY29uc3QgcGF0dGVybiA9IHRoaXMuZ2V0Q2xkclBhdHRlcm4obnVtYmVyIDwgMCk7XG4gICAgZm9ybWF0dGVkTnVtYmVyID0gdGhpcy5hZGRQbGFjZWhvbGRlcnMoZm9ybWF0dGVkTnVtYmVyLCBwYXR0ZXJuKTtcbiAgICBmb3JtYXR0ZWROdW1iZXIgPSB0aGlzLnJlcGxhY2VTeW1ib2xzKGZvcm1hdHRlZE51bWJlcik7XG5cbiAgICBmb3JtYXR0ZWROdW1iZXIgPSB0aGlzLnBlcmZvcm1TcGVjaWZpY1JlcGxhY2VtZW50cyhmb3JtYXR0ZWROdW1iZXIpO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRlZE51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbnVtYmVyJ3MgbWFqb3IgYW5kIG1pbm9yIGRpZ2l0cy5cbiAgICpcbiAgICogTWFqb3IgZGlnaXRzIGFyZSB0aGUgXCJpbnRlZ2VyXCIgcGFydCAoYmVmb3JlIGRlY2ltYWwgc2VwYXJhdG9yKSxcbiAgICogbWlub3IgZGlnaXRzIGFyZSB0aGUgZnJhY3Rpb25hbCBwYXJ0XG4gICAqIFJlc3VsdCB3aWxsIGJlIGFuIGFycmF5IG9mIGV4YWN0bHkgMiBpdGVtczogW21ham9yRGlnaXRzLCBtaW5vckRpZ2l0c11cbiAgICpcbiAgICogVXNhZ2UgZXhhbXBsZTpcbiAgICogIGxpc3QobWFqb3JEaWdpdHMsIG1pbm9yRGlnaXRzKSA9IHRoaXMuZ2V0TWFqb3JNaW5vckRpZ2l0cyhkZWNpbWFsTnVtYmVyKTtcbiAgICpcbiAgICogQHBhcmFtIERlY2ltYWxOdW1iZXIgbnVtYmVyXG4gICAqXG4gICAqIEByZXR1cm4gc3RyaW5nW11cbiAgICovXG4gIGV4dHJhY3RNYWpvck1pbm9yRGlnaXRzKG51bWJlcikge1xuICAgIC8vIEdldCB0aGUgbnVtYmVyJ3MgbWFqb3IgYW5kIG1pbm9yIGRpZ2l0cy5cbiAgICBjb25zdCByZXN1bHQgPSBudW1iZXIudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IG1ham9yRGlnaXRzID0gcmVzdWx0WzBdO1xuICAgIGNvbnN0IG1pbm9yRGlnaXRzID0gKHJlc3VsdFsxXSA9PT0gdW5kZWZpbmVkKSA/ICcnIDogcmVzdWx0WzFdO1xuXG4gICAgcmV0dXJuIFttYWpvckRpZ2l0cywgbWlub3JEaWdpdHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBtYWpvciBkaWdpdHMgaW50byBncm91cHMuXG4gICAqXG4gICAqIGUuZy46IEdpdmVuIHRoZSBtYWpvciBkaWdpdHMgXCIxMjM0NTY3XCIsIGFuZCBtYWpvciBncm91cCBzaXplXG4gICAqICBjb25maWd1cmVkIHRvIDMgZGlnaXRzLCB0aGUgcmVzdWx0IHdvdWxkIGJlIFwiMSAyMzQgNTY3XCJcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyBtYWpvckRpZ2l0cyBUaGUgbWFqb3IgZGlnaXRzIHRvIGJlIGdyb3VwZWRcbiAgICpcbiAgICogQHJldHVybiBzdHJpbmcgVGhlIGdyb3VwZWQgbWFqb3IgZGlnaXRzXG4gICAqL1xuICBzcGxpdE1ham9yR3JvdXBzKGRpZ2l0KSB7XG4gICAgaWYgKCF0aGlzLm51bWJlclNwZWNpZmljYXRpb24uaXNHcm91cGluZ1VzZWQoKSkge1xuICAgICAgcmV0dXJuIGRpZ2l0O1xuICAgIH1cblxuICAgIC8vIFJldmVyc2UgdGhlIG1ham9yIGRpZ2l0cywgc2luY2UgdGhleSBhcmUgZ3JvdXBlZCBmcm9tIHRoZSByaWdodC5cbiAgICBjb25zdCBtYWpvckRpZ2l0cyA9IGRpZ2l0LnNwbGl0KCcnKS5yZXZlcnNlKCk7XG5cbiAgICAvLyBHcm91cCB0aGUgbWFqb3IgZGlnaXRzLlxuICAgIGxldCBncm91cHMgPSBbXTtcbiAgICBncm91cHMucHVzaChtYWpvckRpZ2l0cy5zcGxpY2UoMCwgdGhpcy5udW1iZXJTcGVjaWZpY2F0aW9uLmdldFByaW1hcnlHcm91cFNpemUoKSkpO1xuICAgIHdoaWxlIChtYWpvckRpZ2l0cy5sZW5ndGgpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKG1ham9yRGlnaXRzLnNwbGljZSgwLCB0aGlzLm51bWJlclNwZWNpZmljYXRpb24uZ2V0U2Vjb25kYXJ5R3JvdXBTaXplKCkpKTtcbiAgICB9XG5cbiAgICAvLyBSZXZlcnNlIGJhY2sgdGhlIGRpZ2l0cyBhbmQgdGhlIGdyb3Vwc1xuICAgIGdyb3VwcyA9IGdyb3Vwcy5yZXZlcnNlKCk7XG4gICAgY29uc3QgbmV3R3JvdXBzID0gW107XG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICBuZXdHcm91cHMucHVzaChncm91cC5yZXZlcnNlKCkuam9pbignJykpO1xuICAgIH0pO1xuXG4gICAgLy8gUmVjb25zdHJ1Y3QgdGhlIG1ham9yIGRpZ2l0cy5cbiAgICByZXR1cm4gbmV3R3JvdXBzLmpvaW4oR1JPVVBfU0VQQVJBVE9SX1BMQUNFSE9MREVSKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXMsIGRlcGVuZGluZyBvbiBzcGVjaWZpZWQgbWluIGFuZCBtYXggZnJhY3Rpb24gZGlnaXRzIG51bWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBzdHJpbmcgbWlub3JEaWdpdHMgRGlnaXRzIHRvIGJlIGFkanVzdGVkIHdpdGggKHRyaW1tZWQgb3IgcGFkZGVkKSB6ZXJvZXNcbiAgICpcbiAgICogQHJldHVybiBzdHJpbmcgVGhlIGFkanVzdGVkIG1pbm9yIGRpZ2l0c1xuICAgKi9cbiAgYWRqdXN0TWlub3JEaWdpdHNaZXJvZXMobWlub3JEaWdpdHMpIHtcbiAgICBsZXQgZGlnaXQgPSBtaW5vckRpZ2l0cztcblxuICAgIGlmIChkaWdpdC5sZW5ndGggPiB0aGlzLm51bWJlclNwZWNpZmljYXRpb24uZ2V0TWF4RnJhY3Rpb25EaWdpdHMoKSkge1xuICAgICAgLy8gU3RyaXAgYW55IHRyYWlsaW5nIHplcm9lcy5cbiAgICAgIGRpZ2l0ID0gZGlnaXQucmVwbGFjZSgvMCskLywgJycpO1xuICAgIH1cblxuICAgIGlmIChkaWdpdC5sZW5ndGggPCB0aGlzLm51bWJlclNwZWNpZmljYXRpb24uZ2V0TWluRnJhY3Rpb25EaWdpdHMoKSkge1xuICAgICAgLy8gUmUtYWRkIG5lZWRlZCB6ZXJvZXNcbiAgICAgIGRpZ2l0ID0gZGlnaXQucGFkRW5kKFxuICAgICAgICB0aGlzLm51bWJlclNwZWNpZmljYXRpb24uZ2V0TWluRnJhY3Rpb25EaWdpdHMoKSxcbiAgICAgICAgJzAnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnaXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBDTERSIGZvcm1hdHRpbmcgcGF0dGVybi5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vY2xkci51bmljb2RlLm9yZy90cmFuc2xhdGlvbi9udW1iZXItcGF0dGVybnNcbiAgICpcbiAgICogQHBhcmFtIGJvb2wgaXNOZWdhdGl2ZSBJZiB0cnVlLCB0aGUgbmVnYXRpdmUgcGF0dGVyblxuICAgKiB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIHBvc2l0aXZlIG9uZVxuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgQ0xEUiBmb3JtYXR0aW5nIHBhdHRlcm5cbiAgICovXG4gIGdldENsZHJQYXR0ZXJuKGlzTmVnYXRpdmUpIHtcbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtYmVyU3BlY2lmaWNhdGlvbi5nZXROZWdhdGl2ZVBhdHRlcm4oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5udW1iZXJTcGVjaWZpY2F0aW9uLmdldFBvc2l0aXZlUGF0dGVybigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgcGxhY2Vob2xkZXIgbnVtYmVyIHN5bWJvbHMgd2l0aCByZWxldmFudCBudW1iZXJpbmcgc3lzdGVtJ3Mgc3ltYm9scy5cbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyBudW1iZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgdG8gcHJvY2Vzc1xuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKiAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIHdpdGggcmVwbGFjZWQgc3ltYm9sc1xuICAgKi9cbiAgcmVwbGFjZVN5bWJvbHMobnVtYmVyKSB7XG4gICAgY29uc3Qgc3ltYm9scyA9IHRoaXMubnVtYmVyU3BlY2lmaWNhdGlvbi5nZXRTeW1ib2woKTtcblxuICAgIGNvbnN0IG1hcCA9IHt9O1xuICAgIG1hcFtERUNJTUFMX1NFUEFSQVRPUl9QTEFDRUhPTERFUl0gPSBzeW1ib2xzLmdldERlY2ltYWwoKTtcbiAgICBtYXBbR1JPVVBfU0VQQVJBVE9SX1BMQUNFSE9MREVSXSA9IHN5bWJvbHMuZ2V0R3JvdXAoKTtcbiAgICBtYXBbTUlOVVNfU0lHTl9QTEFDRUhPTERFUl0gPSBzeW1ib2xzLmdldE1pbnVzU2lnbigpO1xuICAgIG1hcFtQRVJDRU5UX1NZTUJPTF9QTEFDRUhPTERFUl0gPSBzeW1ib2xzLmdldFBlcmNlbnRTaWduKCk7XG4gICAgbWFwW1BMVVNfU0lHTl9QTEFDRUhPTERFUl0gPSBzeW1ib2xzLmdldFBsdXNTaWduKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJ0cihudW1iZXIsIG1hcCk7XG4gIH1cblxuICAvKipcbiAgICogc3RydHIoKSBmb3IgSmF2YVNjcmlwdFxuICAgKiBUcmFuc2xhdGUgY2hhcmFjdGVycyBvciByZXBsYWNlIHN1YnN0cmluZ3NcbiAgICpcbiAgICogQHBhcmFtIHN0clxuICAgKiAgU3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSBwYWlyc1xuICAgKiAgSGFzaCBvZiAoJ2Zyb20nID0+ICd0bycsIC4uLikuXG4gICAqXG4gICAqIEByZXR1cm4gc3RyaW5nXG4gICAqL1xuICBzdHJ0cihzdHIsIHBhaXJzKSB7XG4gICAgY29uc3Qgc3Vic3RycyA9IE9iamVjdC5rZXlzKHBhaXJzKS5tYXAoZXNjYXBlUkUpO1xuXG4gICAgcmV0dXJuIHN0ci5zcGxpdChSZWdFeHAoYCgke3N1YnN0cnMuam9pbignfCcpfSlgKSlcbiAgICAgIC5tYXAoKHBhcnQpID0+IHBhaXJzW3BhcnRdIHx8IHBhcnQpXG4gICAgICAuam9pbignJyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG1pc3NpbmcgcGxhY2Vob2xkZXJzIHRvIHRoZSBudW1iZXIgdXNpbmcgdGhlIHBhc3NlZCBDTERSIHBhdHRlcm4uXG4gICAqXG4gICAqIE1pc3NpbmcgcGxhY2Vob2xkZXJzIGNhbiBiZSB0aGUgcGVyY2VudCBzaWduLCBjdXJyZW5jeSBzeW1ib2wsIGV0Yy5cbiAgICpcbiAgICogZS5nLiB3aXRoIGEgY3VycmVuY3kgQ0xEUiBwYXR0ZXJuOlxuICAgKiAgLSBQYXNzZWQgbnVtYmVyIChwYXJ0aWFsbHkgZm9ybWF0dGVkKTogMSwyMzQuNTY3XG4gICAqICAtIFJldHVybmVkIG51bWJlcjogMSwyMzQuNTY3IMKkXG4gICAqICAoXCLCpFwiIHN5bWJvbCBpcyB0aGUgY3VycmVuY3kgc3ltYm9sIHBsYWNlaG9sZGVyKVxuICAgKlxuICAgKiBAc2VlIGh0dHA6Ly9jbGRyLnVuaWNvZGUub3JnL3RyYW5zbGF0aW9uL251bWJlci1wYXR0ZXJuc1xuICAgKlxuICAgKiBAcGFyYW0gZm9ybWF0dGVkTnVtYmVyXG4gICAqICBOdW1iZXIgdG8gcHJvY2Vzc1xuICAgKiBAcGFyYW0gcGF0dGVyblxuICAgKiAgQ0xEUiBmb3JtYXR0aW5nIHBhdHRlcm4gdG8gdXNlXG4gICAqXG4gICAqIEByZXR1cm4gc3RyaW5nXG4gICAqL1xuICBhZGRQbGFjZWhvbGRlcnMoZm9ybWF0dGVkTnVtYmVyLCBwYXR0ZXJuKSB7XG4gICAgLypcbiAgICAgKiBSZWdleCBncm91cHMgZXhwbGFuYXRpb246XG4gICAgICogIyAgICAgICAgICA6IGxpdGVyYWwgXCIjXCIgY2hhcmFjdGVyLiBPbmNlLlxuICAgICAqICgsIyspKiAgICAgOiBhbnkgb3RoZXIgXCIjXCIgY2hhcmFjdGVycyBncm91cCwgc2VwYXJhdGVkIGJ5IFwiLFwiLiBaZXJvIHRvIGluZmluaXR5IHRpbWVzLlxuICAgICAqIDAgICAgICAgICAgOiBsaXRlcmFsIFwiMFwiIGNoYXJhY3Rlci4gT25jZS5cbiAgICAgKiAoXFwuWzAjXSspKiA6IGFueSBjb21iaW5hdGlvbiBvZiBcIjBcIiBhbmQgXCIjXCIgY2hhcmFjdGVycyBncm91cHMsIHNlcGFyYXRlZCBieSAnLicuXG4gICAgICogICAgICAgICAgICAgIFplcm8gdG8gaW5maW5pdHkgdGltZXMuXG4gICAgICovXG4gICAgcmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvIz8oLCMrKSowKFxcLlswI10rKSovLCBmb3JtYXR0ZWROdW1iZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gc29tZSBtb3JlIHNwZWNpZmljIHJlcGxhY2VtZW50cy5cbiAgICpcbiAgICogU3BlY2lmaWMgcmVwbGFjZW1lbnRzIGFyZSBuZWVkZWQgd2hlbiBudW1iZXIgc3BlY2lmaWNhdGlvbiBpcyBleHRlbmRlZC5cbiAgICogRm9yIGluc3RhbmNlLCBwcmljZXMgaGF2ZSBhbiBleHRlbmRlZCBudW1iZXIgc3BlY2lmaWNhdGlvbiBpbiBvcmRlciB0b1xuICAgKiBhZGQgY3VycmVuY3kgc3ltYm9sIHRvIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gc3RyaW5nIGZvcm1hdHRlZE51bWJlclxuICAgKlxuICAgKiBAcmV0dXJuIG1peGVkXG4gICAqL1xuICBwZXJmb3JtU3BlY2lmaWNSZXBsYWNlbWVudHMoZm9ybWF0dGVkTnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubnVtYmVyU3BlY2lmaWNhdGlvbiBpbnN0YW5jZW9mIFByaWNlU3BlY2lmaWNhdGlvbikge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlZE51bWJlclxuICAgICAgICAuc3BsaXQoQ1VSUkVOQ1lfU1lNQk9MX1BMQUNFSE9MREVSKVxuICAgICAgICAuam9pbih0aGlzLm51bWJlclNwZWNpZmljYXRpb24uZ2V0Q3VycmVuY3lTeW1ib2woKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZE51bWJlcjtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChzcGVjaWZpY2F0aW9ucykge1xuICAgIGxldCBzeW1ib2w7XG5cbiAgICBpZiAodW5kZWZpbmVkICE9PSBzcGVjaWZpY2F0aW9ucy5udW1iZXJTeW1ib2xzKSB7XG4gICAgICBzeW1ib2wgPSBuZXcgTnVtYmVyU3ltYm9sKC4uLnNwZWNpZmljYXRpb25zLm51bWJlclN5bWJvbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzeW1ib2wgPSBuZXcgTnVtYmVyU3ltYm9sKC4uLnNwZWNpZmljYXRpb25zLnN5bWJvbCk7XG4gICAgfVxuXG4gICAgbGV0IHNwZWNpZmljYXRpb247XG5cbiAgICBpZiAoc3BlY2lmaWNhdGlvbnMuY3VycmVuY3lTeW1ib2wpIHtcbiAgICAgIHNwZWNpZmljYXRpb24gPSBuZXcgUHJpY2VTcGVjaWZpY2F0aW9uKFxuICAgICAgICBzcGVjaWZpY2F0aW9ucy5wb3NpdGl2ZVBhdHRlcm4sXG4gICAgICAgIHNwZWNpZmljYXRpb25zLm5lZ2F0aXZlUGF0dGVybixcbiAgICAgICAgc3ltYm9sLFxuICAgICAgICBwYXJzZUludChzcGVjaWZpY2F0aW9ucy5tYXhGcmFjdGlvbkRpZ2l0cywgMTApLFxuICAgICAgICBwYXJzZUludChzcGVjaWZpY2F0aW9ucy5taW5GcmFjdGlvbkRpZ2l0cywgMTApLFxuICAgICAgICBzcGVjaWZpY2F0aW9ucy5ncm91cGluZ1VzZWQsXG4gICAgICAgIHNwZWNpZmljYXRpb25zLnByaW1hcnlHcm91cFNpemUsXG4gICAgICAgIHNwZWNpZmljYXRpb25zLnNlY29uZGFyeUdyb3VwU2l6ZSxcbiAgICAgICAgc3BlY2lmaWNhdGlvbnMuY3VycmVuY3lTeW1ib2wsXG4gICAgICAgIHNwZWNpZmljYXRpb25zLmN1cnJlbmN5Q29kZSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwZWNpZmljYXRpb24gPSBuZXcgTnVtYmVyU3BlY2lmaWNhdGlvbihcbiAgICAgICAgc3BlY2lmaWNhdGlvbnMucG9zaXRpdmVQYXR0ZXJuLFxuICAgICAgICBzcGVjaWZpY2F0aW9ucy5uZWdhdGl2ZVBhdHRlcm4sXG4gICAgICAgIHN5bWJvbCxcbiAgICAgICAgcGFyc2VJbnQoc3BlY2lmaWNhdGlvbnMubWF4RnJhY3Rpb25EaWdpdHMsIDEwKSxcbiAgICAgICAgcGFyc2VJbnQoc3BlY2lmaWNhdGlvbnMubWluRnJhY3Rpb25EaWdpdHMsIDEwKSxcbiAgICAgICAgc3BlY2lmaWNhdGlvbnMuZ3JvdXBpbmdVc2VkLFxuICAgICAgICBzcGVjaWZpY2F0aW9ucy5wcmltYXJ5R3JvdXBTaXplLFxuICAgICAgICBzcGVjaWZpY2F0aW9ucy5zZWNvbmRhcnlHcm91cFNpemUsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTnVtYmVyRm9ybWF0dGVyKHNwZWNpZmljYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckZvcm1hdHRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBMb2NhbGl6YXRpb25FeGNlcHRpb24gZnJvbSAnQGFwcC9jbGRyL2V4Y2VwdGlvbi9sb2NhbGl6YXRpb24nO1xuXG5jbGFzcyBOdW1iZXJTeW1ib2wge1xuICAvKipcbiAgICogTnVtYmVyU3ltYm9sTGlzdCBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyBkZWNpbWFsIERlY2ltYWwgc2VwYXJhdG9yIGNoYXJhY3RlclxuICAgKiBAcGFyYW0gc3RyaW5nIGdyb3VwIERpZ2l0cyBncm91cCBzZXBhcmF0b3IgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSBzdHJpbmcgbGlzdCBMaXN0IGVsZW1lbnRzIHNlcGFyYXRvciBjaGFyYWN0ZXJcbiAgICogQHBhcmFtIHN0cmluZyBwZXJjZW50U2lnbiBQZXJjZW50IHNpZ24gY2hhcmFjdGVyXG4gICAqIEBwYXJhbSBzdHJpbmcgbWludXNTaWduIE1pbnVzIHNpZ24gY2hhcmFjdGVyXG4gICAqIEBwYXJhbSBzdHJpbmcgcGx1c1NpZ24gUGx1cyBzaWduIGNoYXJhY3RlclxuICAgKiBAcGFyYW0gc3RyaW5nIGV4cG9uZW50aWFsIEV4cG9uZW50aWFsIGNoYXJhY3RlclxuICAgKiBAcGFyYW0gc3RyaW5nIHN1cGVyc2NyaXB0aW5nRXhwb25lbnQgU3VwZXJzY3JpcHRpbmcgZXhwb25lbnQgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSBzdHJpbmcgcGVyTWlsbGUgUGVybWlsbGUgc2lnbiBjaGFyYWN0ZXJcbiAgICogQHBhcmFtIHN0cmluZyBpbmZpbml0eSBUaGUgaW5maW5pdHkgc2lnbi4gQ29ycmVzcG9uZHMgdG8gdGhlIElFRUUgaW5maW5pdHkgYml0IHBhdHRlcm4uXG4gICAqIEBwYXJhbSBzdHJpbmcgbmFuIFRoZSBOYU4gKE5vdCBBIE51bWJlcikgc2lnbi4gQ29ycmVzcG9uZHMgdG8gdGhlIElFRUUgTmFOIGJpdCBwYXR0ZXJuLlxuICAgKlxuICAgKiBAdGhyb3dzIExvY2FsaXphdGlvbkV4Y2VwdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgZGVjaW1hbCxcbiAgICBncm91cCxcbiAgICBsaXN0LFxuICAgIHBlcmNlbnRTaWduLFxuICAgIG1pbnVzU2lnbixcbiAgICBwbHVzU2lnbixcbiAgICBleHBvbmVudGlhbCxcbiAgICBzdXBlcnNjcmlwdGluZ0V4cG9uZW50LFxuICAgIHBlck1pbGxlLFxuICAgIGluZmluaXR5LFxuICAgIG5hbixcbiAgKSB7XG4gICAgdGhpcy5kZWNpbWFsID0gZGVjaW1hbDtcbiAgICB0aGlzLmdyb3VwID0gZ3JvdXA7XG4gICAgdGhpcy5saXN0ID0gbGlzdDtcbiAgICB0aGlzLnBlcmNlbnRTaWduID0gcGVyY2VudFNpZ247XG4gICAgdGhpcy5taW51c1NpZ24gPSBtaW51c1NpZ247XG4gICAgdGhpcy5wbHVzU2lnbiA9IHBsdXNTaWduO1xuICAgIHRoaXMuZXhwb25lbnRpYWwgPSBleHBvbmVudGlhbDtcbiAgICB0aGlzLnN1cGVyc2NyaXB0aW5nRXhwb25lbnQgPSBzdXBlcnNjcmlwdGluZ0V4cG9uZW50O1xuICAgIHRoaXMucGVyTWlsbGUgPSBwZXJNaWxsZTtcbiAgICB0aGlzLmluZmluaXR5ID0gaW5maW5pdHk7XG4gICAgdGhpcy5uYW4gPSBuYW47XG5cbiAgICB0aGlzLnZhbGlkYXRlRGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqXG4gICAqIEByZXR1cm4gc3RyaW5nXG4gICAqL1xuICBnZXREZWNpbWFsKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2ltYWw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkaWdpdCBncm91cHMgc2VwYXJhdG9yLlxuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgZ2V0R3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IGVsZW1lbnRzIHNlcGFyYXRvci5cbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIGdldExpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBlcmNlbnQgc2lnbi5cbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIGdldFBlcmNlbnRTaWduKCkge1xuICAgIHJldHVybiB0aGlzLnBlcmNlbnRTaWduO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWludXMgc2lnbi5cbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIGdldE1pbnVzU2lnbigpIHtcbiAgICByZXR1cm4gdGhpcy5taW51c1NpZ247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwbHVzIHNpZ24uXG4gICAqXG4gICAqIEByZXR1cm4gc3RyaW5nXG4gICAqL1xuICBnZXRQbHVzU2lnbigpIHtcbiAgICByZXR1cm4gdGhpcy5wbHVzU2lnbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4cG9uZW50aWFsIGNoYXJhY3Rlci5cbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIGdldEV4cG9uZW50aWFsKCkge1xuICAgIHJldHVybiB0aGlzLmV4cG9uZW50aWFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZXhwb25lbnQgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgZ2V0U3VwZXJzY3JpcHRpbmdFeHBvbmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlcnNjcmlwdGluZ0V4cG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlcnQgdGhlIHBlciBtaWxsZSBzeW1ib2wgKG9mdGVuIFwi4oCwXCIpLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Blcl9taWxsZVxuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgZ2V0UGVyTWlsbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGVyTWlsbGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpbmZpbml0eSBzeW1ib2wgKG9mdGVuIFwi4oieXCIpLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0luZmluaXR5X3N5bWJvbFxuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgZ2V0SW5maW5pdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5maW5pdHk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBOYU4gKG5vdCBhIG51bWJlcikgc2lnbi5cbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIGdldE5hbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYW47XG4gIH1cblxuICAvKipcbiAgICogU3ltYm9scyBsaXN0IHZhbGlkYXRpb24uXG4gICAqXG4gICAqIEB0aHJvd3MgTG9jYWxpemF0aW9uRXhjZXB0aW9uXG4gICAqL1xuICB2YWxpZGF0ZURhdGEoKSB7XG4gICAgaWYgKCF0aGlzLmRlY2ltYWwgfHwgdHlwZW9mIHRoaXMuZGVjaW1hbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgZGVjaW1hbCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5ncm91cCB8fCB0eXBlb2YgdGhpcy5ncm91cCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgZ3JvdXAnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubGlzdCB8fCB0eXBlb2YgdGhpcy5saXN0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IExvY2FsaXphdGlvbkV4Y2VwdGlvbignSW52YWxpZCBzeW1ib2wgbGlzdCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wZXJjZW50U2lnbiB8fCB0eXBlb2YgdGhpcy5wZXJjZW50U2lnbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgcGVyY2VudFNpZ24nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWludXNTaWduIHx8IHR5cGVvZiB0aGlzLm1pbnVzU2lnbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgbWludXNTaWduJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBsdXNTaWduIHx8IHR5cGVvZiB0aGlzLnBsdXNTaWduICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IExvY2FsaXphdGlvbkV4Y2VwdGlvbignSW52YWxpZCBwbHVzU2lnbicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5leHBvbmVudGlhbCB8fCB0eXBlb2YgdGhpcy5leHBvbmVudGlhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgZXhwb25lbnRpYWwnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3VwZXJzY3JpcHRpbmdFeHBvbmVudCB8fCB0eXBlb2YgdGhpcy5zdXBlcnNjcmlwdGluZ0V4cG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IExvY2FsaXphdGlvbkV4Y2VwdGlvbignSW52YWxpZCBzdXBlcnNjcmlwdGluZ0V4cG9uZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBlck1pbGxlIHx8IHR5cGVvZiB0aGlzLnBlck1pbGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IExvY2FsaXphdGlvbkV4Y2VwdGlvbignSW52YWxpZCBwZXJNaWxsZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pbmZpbml0eSB8fCB0eXBlb2YgdGhpcy5pbmZpbml0eSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgaW5maW5pdHknKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubmFuIHx8IHR5cGVvZiB0aGlzLm5hbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgbmFuJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlclN5bWJvbDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBMb2NhbGl6YXRpb25FeGNlcHRpb24gZnJvbSAnQGFwcC9jbGRyL2V4Y2VwdGlvbi9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IE51bWJlclN5bWJvbCBmcm9tICdAYXBwL2NsZHIvbnVtYmVyLXN5bWJvbCc7XG5cbmNsYXNzIE51bWJlclNwZWNpZmljYXRpb24ge1xuICAvKipcbiAgICogTnVtYmVyIHNwZWNpZmljYXRpb24gY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBzdHJpbmcgcG9zaXRpdmVQYXR0ZXJuIENMRFIgZm9ybWF0dGluZyBwYXR0ZXJuIGZvciBwb3NpdGl2ZSBhbW91bnRzXG4gICAqIEBwYXJhbSBzdHJpbmcgbmVnYXRpdmVQYXR0ZXJuIENMRFIgZm9ybWF0dGluZyBwYXR0ZXJuIGZvciBuZWdhdGl2ZSBhbW91bnRzXG4gICAqIEBwYXJhbSBOdW1iZXJTeW1ib2wgc3ltYm9sIE51bWJlciBzeW1ib2xcbiAgICogQHBhcmFtIGludCBtYXhGcmFjdGlvbkRpZ2l0cyBNYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICogQHBhcmFtIGludCBtaW5GcmFjdGlvbkRpZ2l0cyBNaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICogQHBhcmFtIGJvb2wgZ3JvdXBpbmdVc2VkIElzIGRpZ2l0cyBncm91cGluZyB1c2VkID9cbiAgICogQHBhcmFtIGludCBwcmltYXJ5R3JvdXBTaXplIFNpemUgb2YgcHJpbWFyeSBkaWdpdHMgZ3JvdXAgaW4gdGhlIG51bWJlclxuICAgKiBAcGFyYW0gaW50IHNlY29uZGFyeUdyb3VwU2l6ZSBTaXplIG9mIHNlY29uZGFyeSBkaWdpdHMgZ3JvdXAgaW4gdGhlIG51bWJlclxuICAgKlxuICAgKiBAdGhyb3dzIExvY2FsaXphdGlvbkV4Y2VwdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcG9zaXRpdmVQYXR0ZXJuLFxuICAgIG5lZ2F0aXZlUGF0dGVybixcbiAgICBzeW1ib2wsXG4gICAgbWF4RnJhY3Rpb25EaWdpdHMsXG4gICAgbWluRnJhY3Rpb25EaWdpdHMsXG4gICAgZ3JvdXBpbmdVc2VkLFxuICAgIHByaW1hcnlHcm91cFNpemUsXG4gICAgc2Vjb25kYXJ5R3JvdXBTaXplLFxuICApIHtcbiAgICB0aGlzLnBvc2l0aXZlUGF0dGVybiA9IHBvc2l0aXZlUGF0dGVybjtcbiAgICB0aGlzLm5lZ2F0aXZlUGF0dGVybiA9IG5lZ2F0aXZlUGF0dGVybjtcbiAgICB0aGlzLnN5bWJvbCA9IHN5bWJvbDtcblxuICAgIHRoaXMubWF4RnJhY3Rpb25EaWdpdHMgPSBtYXhGcmFjdGlvbkRpZ2l0cztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzID0gbWF4RnJhY3Rpb25EaWdpdHMgPCBtaW5GcmFjdGlvbkRpZ2l0cyA/IG1heEZyYWN0aW9uRGlnaXRzIDogbWluRnJhY3Rpb25EaWdpdHM7XG5cbiAgICB0aGlzLmdyb3VwaW5nVXNlZCA9IGdyb3VwaW5nVXNlZDtcbiAgICB0aGlzLnByaW1hcnlHcm91cFNpemUgPSBwcmltYXJ5R3JvdXBTaXplO1xuICAgIHRoaXMuc2Vjb25kYXJ5R3JvdXBTaXplID0gc2Vjb25kYXJ5R3JvdXBTaXplO1xuXG4gICAgaWYgKCF0aGlzLnBvc2l0aXZlUGF0dGVybiB8fCB0eXBlb2YgdGhpcy5wb3NpdGl2ZVBhdHRlcm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgTG9jYWxpemF0aW9uRXhjZXB0aW9uKCdJbnZhbGlkIHBvc2l0aXZlUGF0dGVybicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5uZWdhdGl2ZVBhdHRlcm4gfHwgdHlwZW9mIHRoaXMubmVnYXRpdmVQYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IExvY2FsaXphdGlvbkV4Y2VwdGlvbignSW52YWxpZCBuZWdhdGl2ZVBhdHRlcm4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3ltYm9sIHx8ICEodGhpcy5zeW1ib2wgaW5zdGFuY2VvZiBOdW1iZXJTeW1ib2wpKSB7XG4gICAgICB0aHJvdyBuZXcgTG9jYWxpemF0aW9uRXhjZXB0aW9uKCdJbnZhbGlkIHN5bWJvbCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgbWF4RnJhY3Rpb25EaWdpdHMnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgTG9jYWxpemF0aW9uRXhjZXB0aW9uKCdJbnZhbGlkIG1pbkZyYWN0aW9uRGlnaXRzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmdyb3VwaW5nVXNlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgTG9jYWxpemF0aW9uRXhjZXB0aW9uKCdJbnZhbGlkIGdyb3VwaW5nVXNlZCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5wcmltYXJ5R3JvdXBTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IExvY2FsaXphdGlvbkV4Y2VwdGlvbignSW52YWxpZCBwcmltYXJ5R3JvdXBTaXplJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNlY29uZGFyeUdyb3VwU2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgc2Vjb25kYXJ5R3JvdXBTaXplJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzeW1ib2wuXG4gICAqXG4gICAqIEByZXR1cm4gTnVtYmVyU3ltYm9sXG4gICAqL1xuICBnZXRTeW1ib2woKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZm9ybWF0dGluZyBydWxlcyBmb3IgdGhpcyBudW1iZXIgKHdoZW4gcG9zaXRpdmUpLlxuICAgKlxuICAgKiBUaGlzIHBhdHRlcm4gdXNlcyB0aGUgVW5pY29kZSBDTERSIG51bWJlciBwYXR0ZXJuIHN5bnRheFxuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgZ2V0UG9zaXRpdmVQYXR0ZXJuKCkge1xuICAgIHJldHVybiB0aGlzLnBvc2l0aXZlUGF0dGVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZvcm1hdHRpbmcgcnVsZXMgZm9yIHRoaXMgbnVtYmVyICh3aGVuIG5lZ2F0aXZlKS5cbiAgICpcbiAgICogVGhpcyBwYXR0ZXJuIHVzZXMgdGhlIFVuaWNvZGUgQ0xEUiBudW1iZXIgcGF0dGVybiBzeW50YXhcbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIGdldE5lZ2F0aXZlUGF0dGVybigpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZVBhdHRlcm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBzZXBhcmF0b3IgKHJvdW5kaW5nIGlmIG5lZWRlZCkuXG4gICAqXG4gICAqIEByZXR1cm4gaW50XG4gICAqL1xuICBnZXRNYXhGcmFjdGlvbkRpZ2l0cygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciBkZWNpbWFsIHNlcGFyYXRvciAoZmlsbCB3aXRoIFwiMFwiIGlmIG5lZWRlZCkuXG4gICAqXG4gICAqIEByZXR1cm4gaW50XG4gICAqL1xuICBnZXRNaW5GcmFjdGlvbkRpZ2l0cygpIHtcbiAgICByZXR1cm4gdGhpcy5taW5GcmFjdGlvbkRpZ2l0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFwiZ3JvdXBpbmdcIiBmbGFnLiBUaGlzIGZsYWcgZGVmaW5lcyBpZiBkaWdpdHNcbiAgICogZ3JvdXBpbmcgc2hvdWxkIGJlIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoaXMgbnVtYmVyLlxuICAgKlxuICAgKiBAcmV0dXJuIGJvb2xcbiAgICovXG4gIGlzR3JvdXBpbmdVc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwaW5nVXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpemUgb2YgcHJpbWFyeSBkaWdpdHMgZ3JvdXAgaW4gdGhlIG51bWJlci5cbiAgICpcbiAgICogQHJldHVybiBpbnRcbiAgICovXG4gIGdldFByaW1hcnlHcm91cFNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJpbWFyeUdyb3VwU2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpemUgb2Ygc2Vjb25kYXJ5IGRpZ2l0cyBncm91cHMgaW4gdGhlIG51bWJlci5cbiAgICpcbiAgICogQHJldHVybiBpbnRcbiAgICovXG4gIGdldFNlY29uZGFyeUdyb3VwU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWNvbmRhcnlHcm91cFNpemU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyU3BlY2lmaWNhdGlvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBMb2NhbGl6YXRpb25FeGNlcHRpb24gZnJvbSAnQGFwcC9jbGRyL2V4Y2VwdGlvbi9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IE51bWJlclNwZWNpZmljYXRpb24gZnJvbSAnQGFwcC9jbGRyL3NwZWNpZmljYXRpb25zL251bWJlcic7XG5cbi8qKlxuICogQ3VycmVuY3kgZGlzcGxheSBvcHRpb246IHN5bWJvbCBub3RhdGlvbi5cbiAqL1xuY29uc3QgQ1VSUkVOQ1lfRElTUExBWV9TWU1CT0wgPSAnc3ltYm9sJztcblxuY2xhc3MgUHJpY2VTcGVjaWZpY2F0aW9uIGV4dGVuZHMgTnVtYmVyU3BlY2lmaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBQcmljZSBzcGVjaWZpY2F0aW9uIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gc3RyaW5nIHBvc2l0aXZlUGF0dGVybiBDTERSIGZvcm1hdHRpbmcgcGF0dGVybiBmb3IgcG9zaXRpdmUgYW1vdW50c1xuICAgKiBAcGFyYW0gc3RyaW5nIG5lZ2F0aXZlUGF0dGVybiBDTERSIGZvcm1hdHRpbmcgcGF0dGVybiBmb3IgbmVnYXRpdmUgYW1vdW50c1xuICAgKiBAcGFyYW0gTnVtYmVyU3ltYm9sIHN5bWJvbCBOdW1iZXIgc3ltYm9sXG4gICAqIEBwYXJhbSBpbnQgbWF4RnJhY3Rpb25EaWdpdHMgTWF4aW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAqIEBwYXJhbSBpbnQgbWluRnJhY3Rpb25EaWdpdHMgTWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAqIEBwYXJhbSBib29sIGdyb3VwaW5nVXNlZCBJcyBkaWdpdHMgZ3JvdXBpbmcgdXNlZCA/XG4gICAqIEBwYXJhbSBpbnQgcHJpbWFyeUdyb3VwU2l6ZSBTaXplIG9mIHByaW1hcnkgZGlnaXRzIGdyb3VwIGluIHRoZSBudW1iZXJcbiAgICogQHBhcmFtIGludCBzZWNvbmRhcnlHcm91cFNpemUgU2l6ZSBvZiBzZWNvbmRhcnkgZGlnaXRzIGdyb3VwIGluIHRoZSBudW1iZXJcbiAgICogQHBhcmFtIHN0cmluZyBjdXJyZW5jeVN5bWJvbCBDdXJyZW5jeSBzeW1ib2wgb2YgdGhpcyBwcmljZSAoZWcuIDog4oKsKVxuICAgKiBAcGFyYW0gY3VycmVuY3lDb2RlIEN1cnJlbmN5IGNvZGUgb2YgdGhpcyBwcmljZSAoZS5nLjogRVVSKVxuICAgKlxuICAgKiBAdGhyb3dzIExvY2FsaXphdGlvbkV4Y2VwdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcG9zaXRpdmVQYXR0ZXJuLFxuICAgIG5lZ2F0aXZlUGF0dGVybixcbiAgICBzeW1ib2wsXG4gICAgbWF4RnJhY3Rpb25EaWdpdHMsXG4gICAgbWluRnJhY3Rpb25EaWdpdHMsXG4gICAgZ3JvdXBpbmdVc2VkLFxuICAgIHByaW1hcnlHcm91cFNpemUsXG4gICAgc2Vjb25kYXJ5R3JvdXBTaXplLFxuICAgIGN1cnJlbmN5U3ltYm9sLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBwb3NpdGl2ZVBhdHRlcm4sXG4gICAgICBuZWdhdGl2ZVBhdHRlcm4sXG4gICAgICBzeW1ib2wsXG4gICAgICBtYXhGcmFjdGlvbkRpZ2l0cyxcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzLFxuICAgICAgZ3JvdXBpbmdVc2VkLFxuICAgICAgcHJpbWFyeUdyb3VwU2l6ZSxcbiAgICAgIHNlY29uZGFyeUdyb3VwU2l6ZSxcbiAgICApO1xuICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBjdXJyZW5jeVN5bWJvbDtcbiAgICB0aGlzLmN1cnJlbmN5Q29kZSA9IGN1cnJlbmN5Q29kZTtcblxuICAgIGlmICghdGhpcy5jdXJyZW5jeVN5bWJvbCB8fCB0eXBlb2YgdGhpcy5jdXJyZW5jeVN5bWJvbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgY3VycmVuY3lTeW1ib2wnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY3VycmVuY3lDb2RlIHx8IHR5cGVvZiB0aGlzLmN1cnJlbmN5Q29kZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBMb2NhbGl6YXRpb25FeGNlcHRpb24oJ0ludmFsaWQgY3VycmVuY3lDb2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0eXBlIG9mIGRpc3BsYXkgZm9yIGN1cnJlbmN5IHN5bWJvbC5cbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBnZXRDdXJyZW5jeURpc3BsYXkoKSB7XG4gICAgcmV0dXJuIENVUlJFTkNZX0RJU1BMQVlfU1lNQk9MO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVuY3kgc3ltYm9sXG4gICAqIGUuZy46IOKCrC5cbiAgICpcbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gIGdldEN1cnJlbmN5U3ltYm9sKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbmN5U3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVuY3kgSVNPIGNvZGVcbiAgICogZS5nLjogRVVSLlxuICAgKlxuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgZ2V0Q3VycmVuY3lDb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbmN5Q29kZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcmljZVNwZWNpZmljYXRpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBFdmVudEVtaXR0ZXJDbGFzcyBmcm9tICdldmVudHMnO1xuXG4vKipcbiAqIFdlIGluc3RhbmNpYXRlIG9uZSBFdmVudEVtaXR0ZXIgKHJlc3RyaWN0ZWQgdmlhIGEgY29uc3QpIHNvIHRoYXQgZXZlcnkgY29tcG9uZW50c1xuICogcmVnaXN0ZXIvZGlzcGF0Y2ggb24gdGhlIHNhbWUgb25lIGFuZCBjYW4gY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyLlxuICovXG5leHBvcnQgY29uc3QgRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlckNsYXNzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIFRleHRXaXRoTGVuZ3RoQ291bnRlciBoYW5kbGVzIGlucHV0IHdpdGggbGVuZ3RoIGNvdW50ZXIgVUkuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogVGhlcmUgbXVzdCBiZSBhbiBlbGVtZW50IHRoYXQgd3JhcHMgYm90aCBpbnB1dCAmIGNvdW50ZXIgZGlzcGxheSB3aXRoIFwiLmpzLXRleHQtd2l0aC1sZW5ndGgtY291bnRlclwiIGNsYXNzLlxuICogQ291bnRlciBkaXNwbGF5IG11c3QgaGF2ZSBcIi5qcy1jb3VudGFibGUtdGV4dC1kaXNwbGF5XCIgY2xhc3MgYW5kIGlucHV0IG11c3QgaGF2ZSBcIi5qcy1jb3VudGFibGUtdGV4dC1pbnB1dFwiIGNsYXNzLlxuICogVGV4dCBpbnB1dCBtdXN0IGhhdmUgXCJkYXRhLW1heC1sZW5ndGhcIiBhdHRyaWJ1dGUuXG4gKlxuICogPGRpdiBjbGFzcz1cImpzLXRleHQtd2l0aC1sZW5ndGgtY291bnRlclwiPlxuICogIDxzcGFuIGNsYXNzPVwianMtY291bnRhYmxlLXRleHRcIj48L3NwYW4+XG4gKiAgPGlucHV0IGNsYXNzPVwianMtY291bnRhYmxlLWlucHV0XCIgZGF0YS1tYXgtbGVuZ3RoPVwiMjU1XCI+XG4gKiA8L2Rpdj5cbiAqXG4gKiBJbiBKYXZhc2NyaXB0IHlvdSBtdXN0IGVuYWJsZSB0aGlzIGNvbXBvbmVudDpcbiAqXG4gKiBuZXcgVGV4dFdpdGhMZW5ndGhDb3VudGVyKCk7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRXaXRoTGVuZ3RoQ291bnRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMud3JhcHBlclNlbGVjdG9yID0gJy5qcy10ZXh0LXdpdGgtbGVuZ3RoLWNvdW50ZXInO1xuICAgIHRoaXMudGV4dFNlbGVjdG9yID0gJy5qcy1jb3VudGFibGUtdGV4dCc7XG4gICAgdGhpcy5pbnB1dFNlbGVjdG9yID0gJy5qcy1jb3VudGFibGUtaW5wdXQnO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2lucHV0JywgYCR7dGhpcy53cmFwcGVyU2VsZWN0b3J9ICR7dGhpcy5pbnB1dFNlbGVjdG9yfWAsIChlKSA9PiB7XG4gICAgICBjb25zdCAkaW5wdXQgPSAkKGUuY3VycmVudFRhcmdldCk7XG4gICAgICBjb25zdCByZW1haW5pbmdMZW5ndGggPSAkaW5wdXQuZGF0YSgnbWF4LWxlbmd0aCcpIC0gJGlucHV0LnZhbCgpLmxlbmd0aDtcblxuICAgICAgJGlucHV0LmNsb3Nlc3QodGhpcy53cmFwcGVyU2VsZWN0b3IpLmZpbmQodGhpcy50ZXh0U2VsZWN0b3IpLnRleHQocmVtYWluaW5nTGVuZ3RoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogQ29uZmlybU1vZGFsIGNvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1UaXRsZVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1NZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gY2xvc2VCdXR0b25MYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1CdXR0b25MYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1CdXR0b25DbGFzc1xuICogQHBhcmFtIHtBcnJheX0gY3VzdG9tQnV0dG9uc1xuICogQHBhcmFtIHtCb29sZWFufSBjbG9zYWJsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlybUNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYW5jZWxDYWxsYmFja1xuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29uZmlybU1vZGFsKHBhcmFtcywgY29uZmlybUNhbGxiYWNrLCBjYW5jZWxDYWxsYmFjaykge1xuICAvLyBDb25zdHJ1Y3QgdGhlIG1vZGFsXG4gIGNvbnN0IHtpZCwgY2xvc2FibGV9ID0gcGFyYW1zO1xuICB0aGlzLm1vZGFsID0gTW9kYWwocGFyYW1zKTtcblxuICAvLyBqUXVlcnkgbW9kYWwgb2JqZWN0XG4gIHRoaXMuJG1vZGFsID0gJCh0aGlzLm1vZGFsLmNvbnRhaW5lcik7XG5cbiAgdGhpcy5zaG93ID0gKCkgPT4ge1xuICAgIHRoaXMuJG1vZGFsLm1vZGFsKCk7XG4gIH07XG5cbiAgdGhpcy5tb2RhbC5jb25maXJtQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybUNhbGxiYWNrKTtcblxuICB0aGlzLiRtb2RhbC5tb2RhbCh7XG4gICAgYmFja2Ryb3A6IGNsb3NhYmxlID8gdHJ1ZSA6ICdzdGF0aWMnLFxuICAgIGtleWJvYXJkOiBjbG9zYWJsZSAhPT0gdW5kZWZpbmVkID8gY2xvc2FibGUgOiB0cnVlLFxuICAgIGNsb3NhYmxlOiBjbG9zYWJsZSAhPT0gdW5kZWZpbmVkID8gY2xvc2FibGUgOiB0cnVlLFxuICAgIHNob3c6IGZhbHNlLFxuICB9KTtcblxuICB0aGlzLiRtb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgKCkgPT4ge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfWApLnJlbW92ZSgpO1xuICAgIGlmIChjYW5jZWxDYWxsYmFjaykge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5tb2RhbC5jb250YWluZXIpO1xufVxuXG4vKipcbiAqIE1vZGFsIGNvbXBvbmVudCB0byBpbXByb3ZlIGxpc2liaWxpdHkgYnkgY29uc3RydWN0aW5nIHRoZSBtb2RhbCBvdXRzaWRlIHRoZSBtYWluIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqL1xuZnVuY3Rpb24gTW9kYWwoe1xuICBpZCA9ICdjb25maXJtLW1vZGFsJyxcbiAgY29uZmlybVRpdGxlLFxuICBjb25maXJtTWVzc2FnZSA9ICcnLFxuICBjbG9zZUJ1dHRvbkxhYmVsID0gJ0Nsb3NlJyxcbiAgY29uZmlybUJ1dHRvbkxhYmVsID0gJ0FjY2VwdCcsXG4gIGNvbmZpcm1CdXR0b25DbGFzcyA9ICdidG4tcHJpbWFyeScsXG4gIGN1c3RvbUJ1dHRvbnMgPSBbXSxcbn0pIHtcbiAgY29uc3QgbW9kYWwgPSB7fTtcblxuICAvLyBNYWluIG1vZGFsIGVsZW1lbnRcbiAgbW9kYWwuY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtb2RhbCcsICdmYWRlJyk7XG4gIG1vZGFsLmNvbnRhaW5lci5pZCA9IGlkO1xuXG4gIC8vIE1vZGFsIGRpYWxvZyBlbGVtZW50XG4gIG1vZGFsLmRpYWxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5kaWFsb2cuY2xhc3NMaXN0LmFkZCgnbW9kYWwtZGlhbG9nJyk7XG5cbiAgLy8gTW9kYWwgY29udGVudCBlbGVtZW50XG4gIG1vZGFsLmNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWwuY29udGVudC5jbGFzc0xpc3QuYWRkKCdtb2RhbC1jb250ZW50Jyk7XG5cbiAgLy8gTW9kYWwgaGVhZGVyIGVsZW1lbnRcbiAgbW9kYWwuaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmhlYWRlci5jbGFzc0xpc3QuYWRkKCdtb2RhbC1oZWFkZXInKTtcblxuICAvLyBNb2RhbCB0aXRsZSBlbGVtZW50XG4gIGlmIChjb25maXJtVGl0bGUpIHtcbiAgICBtb2RhbC50aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2g0Jyk7XG4gICAgbW9kYWwudGl0bGUuY2xhc3NMaXN0LmFkZCgnbW9kYWwtdGl0bGUnKTtcbiAgICBtb2RhbC50aXRsZS5pbm5lckhUTUwgPSBjb25maXJtVGl0bGU7XG4gIH1cblxuICAvLyBNb2RhbCBjbG9zZSBidXR0b24gaWNvblxuICBtb2RhbC5jbG9zZUljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgbW9kYWwuY2xvc2VJY29uLmNsYXNzTGlzdC5hZGQoJ2Nsb3NlJyk7XG4gIG1vZGFsLmNsb3NlSWNvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gIG1vZGFsLmNsb3NlSWNvbi5kYXRhc2V0LmRpc21pc3MgPSAnbW9kYWwnO1xuICBtb2RhbC5jbG9zZUljb24uaW5uZXJIVE1MID0gJ8OXJztcblxuICAvLyBNb2RhbCBib2R5IGVsZW1lbnRcbiAgbW9kYWwuYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5ib2R5LmNsYXNzTGlzdC5hZGQoJ21vZGFsLWJvZHknLCAndGV4dC1sZWZ0JywgJ2ZvbnQtd2VpZ2h0LW5vcm1hbCcpO1xuXG4gIC8vIE1vZGFsIG1lc3NhZ2UgZWxlbWVudFxuICBtb2RhbC5tZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICBtb2RhbC5tZXNzYWdlLmNsYXNzTGlzdC5hZGQoJ2NvbmZpcm0tbWVzc2FnZScpO1xuICBtb2RhbC5tZXNzYWdlLmlubmVySFRNTCA9IGNvbmZpcm1NZXNzYWdlO1xuXG4gIC8vIE1vZGFsIGZvb3RlciBlbGVtZW50XG4gIG1vZGFsLmZvb3RlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5mb290ZXIuY2xhc3NMaXN0LmFkZCgnbW9kYWwtZm9vdGVyJyk7XG5cbiAgLy8gTW9kYWwgY2xvc2UgYnV0dG9uIGVsZW1lbnRcbiAgbW9kYWwuY2xvc2VCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgbW9kYWwuY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuICBtb2RhbC5jbG9zZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdidG4nLCAnYnRuLW91dGxpbmUtc2Vjb25kYXJ5JywgJ2J0bi1sZycpO1xuICBtb2RhbC5jbG9zZUJ1dHRvbi5kYXRhc2V0LmRpc21pc3MgPSAnbW9kYWwnO1xuICBtb2RhbC5jbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSBjbG9zZUJ1dHRvbkxhYmVsO1xuXG4gIC8vIE1vZGFsIGNvbmZpcm0gYnV0dG9uIGVsZW1lbnRcbiAgbW9kYWwuY29uZmlybUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICBtb2RhbC5jb25maXJtQnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcbiAgbW9kYWwuY29uZmlybUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdidG4nLCBjb25maXJtQnV0dG9uQ2xhc3MsICdidG4tbGcnLCAnYnRuLWNvbmZpcm0tc3VibWl0Jyk7XG4gIG1vZGFsLmNvbmZpcm1CdXR0b24uZGF0YXNldC5kaXNtaXNzID0gJ21vZGFsJztcbiAgbW9kYWwuY29uZmlybUJ1dHRvbi5pbm5lckhUTUwgPSBjb25maXJtQnV0dG9uTGFiZWw7XG5cbiAgLy8gQ29uc3RydWN0aW5nIHRoZSBtb2RhbFxuICBpZiAoY29uZmlybVRpdGxlKSB7XG4gICAgbW9kYWwuaGVhZGVyLmFwcGVuZChtb2RhbC50aXRsZSwgbW9kYWwuY2xvc2VJY29uKTtcbiAgfSBlbHNlIHtcbiAgICBtb2RhbC5oZWFkZXIuYXBwZW5kQ2hpbGQobW9kYWwuY2xvc2VJY29uKTtcbiAgfVxuXG4gIG1vZGFsLmJvZHkuYXBwZW5kQ2hpbGQobW9kYWwubWVzc2FnZSk7XG4gIG1vZGFsLmZvb3Rlci5hcHBlbmQobW9kYWwuY2xvc2VCdXR0b24sIC4uLmN1c3RvbUJ1dHRvbnMsIG1vZGFsLmNvbmZpcm1CdXR0b24pO1xuICBtb2RhbC5jb250ZW50LmFwcGVuZChtb2RhbC5oZWFkZXIsIG1vZGFsLmJvZHksIG1vZGFsLmZvb3Rlcik7XG4gIG1vZGFsLmRpYWxvZy5hcHBlbmRDaGlsZChtb2RhbC5jb250ZW50KTtcbiAgbW9kYWwuY29udGFpbmVyLmFwcGVuZENoaWxkKG1vZGFsLmRpYWxvZyk7XG5cbiAgcmV0dXJuIG1vZGFsO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgUm91dGluZyBmcm9tICdmb3Mtcm91dGluZyc7XG5pbXBvcnQgcm91dGVzIGZyb20gJ0Bqcy9mb3NfanNfcm91dGVzLmpzb24nO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogV3JhcHMgRk9TSnNSb3V0aW5nYnVuZGxlIHdpdGggZXhwb3NlZCByb3V0ZXMuXG4gKiBUbyBleHBvc2Ugcm91dGUgYWRkIG9wdGlvbiBgZXhwb3NlOiB0cnVlYCBpbiAueW1sIHJvdXRpbmcgY29uZmlnXG4gKlxuICogZS5nLlxuICpcbiAqIGBteV9yb3V0ZVxuICogICAgcGF0aDogL215LXBhdGhcbiAqICAgIG9wdGlvbnM6XG4gKiAgICAgIGV4cG9zZTogdHJ1ZVxuICogYFxuICogQW5kIHJ1biBgYmluL2NvbnNvbGUgZm9zOmpzLXJvdXRpbmc6ZHVtcCAtLWZvcm1hdD1qc29uIC0tdGFyZ2V0PWFkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL2pzL2Zvc19qc19yb3V0ZXMuanNvbmBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHdpbmRvdy5wcmVzdGFzaG9wICYmIHdpbmRvdy5wcmVzdGFzaG9wLmN1c3RvbVJvdXRlcykge1xuICAgICAgT2JqZWN0LmFzc2lnbihyb3V0ZXMucm91dGVzLCB3aW5kb3cucHJlc3Rhc2hvcC5jdXN0b21Sb3V0ZXMpO1xuICAgIH1cblxuICAgIFJvdXRpbmcuc2V0RGF0YShyb3V0ZXMpO1xuICAgIFJvdXRpbmcuc2V0QmFzZVVybChcbiAgICAgICQoZG9jdW1lbnQpXG4gICAgICAgIC5maW5kKCdib2R5JylcbiAgICAgICAgLmRhdGEoJ2Jhc2UtdXJsJyksXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29yYXRlZCBcImdlbmVyYXRlXCIgbWV0aG9kLCB3aXRoIHByZWRlZmluZWQgc2VjdXJpdHkgdG9rZW4gaW4gcGFyYW1zXG4gICAqXG4gICAqIEBwYXJhbSByb3V0ZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAqL1xuICBnZW5lcmF0ZShyb3V0ZSwgcGFyYW1zID0ge30pIHtcbiAgICBjb25zdCB0b2tlbml6ZWRQYXJhbXMgPSBPYmplY3QuYXNzaWduKHBhcmFtcywge1xuICAgICAgX3Rva2VuOiAkKGRvY3VtZW50KVxuICAgICAgICAuZmluZCgnYm9keScpXG4gICAgICAgIC5kYXRhKCd0b2tlbicpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFJvdXRpbmcuZ2VuZXJhdGUocm91dGUsIHRva2VuaXplZFBhcmFtcyk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1haW5EaXY6ICcjb3JkZXItdmlldy1wYWdlJyxcbiAgb3JkZXJQYXltZW50RGV0YWlsc0J0bjogJy5qcy1wYXltZW50LWRldGFpbHMtYnRuJyxcbiAgb3JkZXJQYXltZW50Rm9ybUFtb3VudElucHV0OiAnI29yZGVyX3BheW1lbnRfYW1vdW50JyxcbiAgb3JkZXJQYXltZW50SW52b2ljZVNlbGVjdDogJyNvcmRlcl9wYXltZW50X2lkX2ludm9pY2UnLFxuICB2aWV3T3JkZXJQYXltZW50c0Jsb2NrOiAnI3ZpZXdfb3JkZXJfcGF5bWVudHNfYmxvY2snLFxuICB2aWV3T3JkZXJQYXltZW50c0FsZXJ0OiAnLmpzLXZpZXctb3JkZXItcGF5bWVudHMtYWxlcnQnLFxuICBwcml2YXRlTm90ZVRvZ2dsZUJ0bjogJy5qcy1wcml2YXRlLW5vdGUtdG9nZ2xlLWJ0bicsXG4gIHByaXZhdGVOb3RlQmxvY2s6ICcuanMtcHJpdmF0ZS1ub3RlLWJsb2NrJyxcbiAgcHJpdmF0ZU5vdGVJbnB1dDogJyNwcml2YXRlX25vdGVfbm90ZScsXG4gIHByaXZhdGVOb3RlU3VibWl0QnRuOiAnLmpzLXByaXZhdGUtbm90ZS1idG4nLFxuICBhZGRDYXJ0UnVsZU1vZGFsOiAnI2FkZE9yZGVyRGlzY291bnRNb2RhbCcsXG4gIGFkZENhcnRSdWxlSW52b2ljZUlkU2VsZWN0OiAnI2FkZF9vcmRlcl9jYXJ0X3J1bGVfaW52b2ljZV9pZCcsXG4gIGFkZENhcnRSdWxlTmFtZUlucHV0OiAnI2FkZF9vcmRlcl9jYXJ0X3J1bGVfbmFtZScsXG4gIGFkZENhcnRSdWxlVHlwZVNlbGVjdDogJyNhZGRfb3JkZXJfY2FydF9ydWxlX3R5cGUnLFxuICBhZGRDYXJ0UnVsZVZhbHVlSW5wdXQ6ICcjYWRkX29yZGVyX2NhcnRfcnVsZV92YWx1ZScsXG4gIGFkZENhcnRSdWxlVmFsdWVVbml0OiAnI2FkZF9vcmRlcl9jYXJ0X3J1bGVfdmFsdWVfdW5pdCcsXG4gIGFkZENhcnRSdWxlU3VibWl0OiAnI2FkZF9vcmRlcl9jYXJ0X3J1bGVfc3VibWl0JyxcbiAgY2FydFJ1bGVIZWxwVGV4dDogJy5qcy1jYXJ0LXJ1bGUtdmFsdWUtaGVscCcsXG4gIHVwZGF0ZU9yZGVyU3RhdHVzQWN0aW9uQnRuOiAnI3VwZGF0ZV9vcmRlcl9zdGF0dXNfYWN0aW9uX2J0bicsXG4gIHVwZGF0ZU9yZGVyU3RhdHVzQWN0aW9uSW5wdXQ6ICcjdXBkYXRlX29yZGVyX3N0YXR1c19hY3Rpb25faW5wdXQnLFxuICB1cGRhdGVPcmRlclN0YXR1c0FjdGlvbklucHV0V3JhcHBlcjogJyN1cGRhdGVfb3JkZXJfc3RhdHVzX2FjdGlvbl9pbnB1dF93cmFwcGVyJyxcbiAgdXBkYXRlT3JkZXJTdGF0dXNBY3Rpb25Gb3JtOiAnI3VwZGF0ZV9vcmRlcl9zdGF0dXNfYWN0aW9uX2Zvcm0nLFxuICBzaG93T3JkZXJTaGlwcGluZ1VwZGF0ZU1vZGFsQnRuOiAnLmpzLXVwZGF0ZS1zaGlwcGluZy1idG4nLFxuICB1cGRhdGVPcmRlclNoaXBwaW5nVHJhY2tpbmdOdW1iZXJJbnB1dDogJyN1cGRhdGVfb3JkZXJfc2hpcHBpbmdfdHJhY2tpbmdfbnVtYmVyJyxcbiAgdXBkYXRlT3JkZXJTaGlwcGluZ0N1cnJlbnRPcmRlckNhcnJpZXJJZElucHV0OiAnI3VwZGF0ZV9vcmRlcl9zaGlwcGluZ19jdXJyZW50X29yZGVyX2NhcnJpZXJfaWQnLFxuICB1cGRhdGVDdXN0b21lckFkZHJlc3NNb2RhbDogJyN1cGRhdGVDdXN0b21lckFkZHJlc3NNb2RhbCcsXG4gIG9wZW5PcmRlckFkZHJlc3NVcGRhdGVNb2RhbEJ0bjogJy5qcy11cGRhdGUtY3VzdG9tZXItYWRkcmVzcy1tb2RhbC1idG4nLFxuICB1cGRhdGVPcmRlckFkZHJlc3NUeXBlSW5wdXQ6ICcjY2hhbmdlX29yZGVyX2FkZHJlc3NfYWRkcmVzc190eXBlJyxcbiAgZGVsaXZlcnlBZGRyZXNzRWRpdEJ0bjogJyNqcy1kZWxpdmVyeS1hZGRyZXNzLWVkaXQtYnRuJyxcbiAgaW52b2ljZUFkZHJlc3NFZGl0QnRuOiAnI2pzLWludm9pY2UtYWRkcmVzcy1lZGl0LWJ0bicsXG4gIG9yZGVyTWVzc2FnZU5hbWVTZWxlY3Q6ICcjb3JkZXJfbWVzc2FnZV9vcmRlcl9tZXNzYWdlJyxcbiAgb3JkZXJNZXNzYWdlc0NvbnRhaW5lcjogJy5qcy1vcmRlci1tZXNzYWdlcy1jb250YWluZXInLFxuICBvcmRlck1lc3NhZ2U6ICcjb3JkZXJfbWVzc2FnZV9tZXNzYWdlJyxcbiAgb3JkZXJNZXNzYWdlQ2hhbmdlV2FybmluZzogJy5qcy1tZXNzYWdlLWNoYW5nZS13YXJuaW5nJyxcbiAgb3JkZXJEb2N1bWVudHNUYWJDb3VudDogJyNvcmRlckRvY3VtZW50c1RhYiAuY291bnQnLFxuICBvcmRlckRvY3VtZW50c1RhYkJvZHk6ICcjb3JkZXJEb2N1bWVudHNUYWJDb250ZW50IC5jYXJkLWJvZHknLFxuICBvcmRlclNoaXBwaW5nVGFiQ291bnQ6ICcjb3JkZXJTaGlwcGluZ1RhYiAuY291bnQnLFxuICBvcmRlclNoaXBwaW5nVGFiQm9keTogJyNvcmRlclNoaXBwaW5nVGFiQ29udGVudCAuY2FyZC1ib2R5JyxcbiAgYWxsTWVzc2FnZXNNb2RhbDogJyN2aWV3X2FsbF9tZXNzYWdlc19tb2RhbCcsXG4gIGFsbE1lc3NhZ2VzTGlzdDogJyNhbGwtbWVzc2FnZXMtbGlzdCcsXG4gIG9wZW5BbGxNZXNzYWdlc0J0bjogJy5qcy1vcGVuLWFsbC1tZXNzYWdlcy1idG4nLFxuICAvLyBQcm9kdWN0cyB0YWJsZSBlbGVtZW50c1xuICBwcm9kdWN0T3JpZ2luYWxQb3NpdGlvbjogJyNvcmRlclByb2R1Y3RzT3JpZ2luYWxQb3NpdGlvbicsXG4gIHByb2R1Y3RNb2RpZmljYXRpb25Qb3NpdGlvbjogJyNvcmRlclByb2R1Y3RzTW9kaWZpY2F0aW9uUG9zaXRpb24nLFxuICBwcm9kdWN0c1BhbmVsOiAnI29yZGVyUHJvZHVjdHNQYW5lbCcsXG4gIHByb2R1Y3RzQ291bnQ6ICcjb3JkZXJQcm9kdWN0c1BhbmVsQ291bnQnLFxuICBwcm9kdWN0RGVsZXRlQnRuOiAnLmpzLW9yZGVyLXByb2R1Y3QtZGVsZXRlLWJ0bicsXG4gIHByb2R1Y3RzVGFibGU6ICcjb3JkZXJQcm9kdWN0c1RhYmxlJyxcbiAgcHJvZHVjdHNQYWdpbmF0aW9uOiAnLm9yZGVyLXByb2R1Y3QtcGFnaW5hdGlvbicsXG4gIHByb2R1Y3RzTmF2UGFnaW5hdGlvbjogJyNvcmRlclByb2R1Y3RzTmF2UGFnaW5hdGlvbicsXG4gIHByb2R1Y3RzVGFibGVQYWdpbmF0aW9uOiAnI29yZGVyUHJvZHVjdHNUYWJsZVBhZ2luYXRpb24nLFxuICBwcm9kdWN0c1RhYmxlUGFnaW5hdGlvbk5leHQ6ICcjb3JkZXJQcm9kdWN0c1RhYmxlUGFnaW5hdGlvbk5leHQnLFxuICBwcm9kdWN0c1RhYmxlUGFnaW5hdGlvblByZXY6ICcjb3JkZXJQcm9kdWN0c1RhYmxlUGFnaW5hdGlvblByZXYnLFxuICBwcm9kdWN0c1RhYmxlUGFnaW5hdGlvbkxpbms6ICcucGFnZS1pdGVtOm5vdCguZC1ub25lKTpub3QoI29yZGVyUHJvZHVjdHNUYWJsZVBhZ2luYXRpb25OZXh0KTpub3QoI29yZGVyUHJvZHVjdHNUYWJsZVBhZ2luYXRpb25QcmV2KSAucGFnZS1saW5rJyxcbiAgcHJvZHVjdHNUYWJsZVBhZ2luYXRpb25BY3RpdmU6ICcjb3JkZXJQcm9kdWN0c1RhYmxlUGFnaW5hdGlvbiAucGFnZS1pdGVtLmFjdGl2ZSBzcGFuJyxcbiAgcHJvZHVjdHNUYWJsZVBhZ2luYXRpb25UZW1wbGF0ZTogJyNvcmRlclByb2R1Y3RzVGFibGVQYWdpbmF0aW9uIC5wYWdlLWl0ZW0uZC1ub25lJyxcbiAgcHJvZHVjdHNUYWJsZVBhZ2luYXRpb25OdW1iZXJTZWxlY3RvcjogJyNvcmRlclByb2R1Y3RzVGFibGVQYWdpbmF0aW9uTnVtYmVyU2VsZWN0b3InLFxuICBwcm9kdWN0c1RhYmxlUm93OiAocHJvZHVjdElkKSA9PiBgI29yZGVyUHJvZHVjdF8ke3Byb2R1Y3RJZH1gLFxuICBwcm9kdWN0c1RhYmxlUm93RWRpdGVkOiAocHJvZHVjdElkKSA9PiBgI2VkaXRPcmRlclByb2R1Y3RfJHtwcm9kdWN0SWR9YCxcbiAgcHJvZHVjdHNUYWJsZVJvd3M6ICd0ci5jZWxsUHJvZHVjdCcsXG4gIHByb2R1Y3RzQ2VsbExvY2F0aW9uOiAndHIgLmNlbGxQcm9kdWN0TG9jYXRpb24nLFxuICBwcm9kdWN0c0NlbGxSZWZ1bmRlZDogJ3RyIC5jZWxsUHJvZHVjdFJlZnVuZGVkJyxcbiAgcHJvZHVjdHNDZWxsTG9jYXRpb25EaXNwbGF5ZWQ6ICd0cjpub3QoLmQtbm9uZSkgLmNlbGxQcm9kdWN0TG9jYXRpb24nLFxuICBwcm9kdWN0c0NlbGxSZWZ1bmRlZERpc3BsYXllZDogJ3RyOm5vdCguZC1ub25lKSAuY2VsbFByb2R1Y3RSZWZ1bmRlZCcsXG4gIHByb2R1Y3RzVGFibGVDdXN0b21pemF0aW9uUm93czogJyNvcmRlclByb2R1Y3RzVGFibGUgLm9yZGVyLXByb2R1Y3QtY3VzdG9taXphdGlvbicsXG4gIHByb2R1Y3RFZGl0QnV0dG9uczogJy5qcy1vcmRlci1wcm9kdWN0LWVkaXQtYnRuJyxcbiAgcHJvZHVjdEVkaXRCdG46IChwcm9kdWN0SWQpID0+IGAjb3JkZXJQcm9kdWN0XyR7cHJvZHVjdElkfSAuanMtb3JkZXItcHJvZHVjdC1lZGl0LWJ0bmAsXG4gIHByb2R1Y3RBZGRCdG46ICcjYWRkUHJvZHVjdEJ0bicsXG4gIHByb2R1Y3RBY3Rpb25CdG46ICcuanMtcHJvZHVjdC1hY3Rpb24tYnRuJyxcbiAgcHJvZHVjdEFkZEFjdGlvbkJ0bjogJyNhZGRfcHJvZHVjdF9yb3dfYWRkJyxcbiAgcHJvZHVjdENhbmNlbEFkZEJ0bjogJyNhZGRfcHJvZHVjdF9yb3dfY2FuY2VsJyxcbiAgcHJvZHVjdEFkZFJvdzogJyNhZGRQcm9kdWN0VGFibGVSb3cnLFxuICBwcm9kdWN0U2VhcmNoSW5wdXQ6ICcjYWRkX3Byb2R1Y3Rfcm93X3NlYXJjaCcsXG4gIHByb2R1Y3RTZWFyY2hJbnB1dEF1dG9jb21wbGV0ZTogJyNhZGRQcm9kdWN0VGFibGVSb3cgLmRyb3Bkb3duJyxcbiAgcHJvZHVjdFNlYXJjaElucHV0QXV0b2NvbXBsZXRlTWVudTogJyNhZGRQcm9kdWN0VGFibGVSb3cgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51JyxcbiAgcHJvZHVjdEFkZElkSW5wdXQ6ICcjYWRkX3Byb2R1Y3Rfcm93X3Byb2R1Y3RfaWQnLFxuICBwcm9kdWN0QWRkVGF4UmF0ZUlucHV0OiAnI2FkZF9wcm9kdWN0X3Jvd190YXhfcmF0ZScsXG4gIHByb2R1Y3RBZGRDb21iaW5hdGlvbnNCbG9jazogJyNhZGRQcm9kdWN0Q29tYmluYXRpb25zJyxcbiAgcHJvZHVjdEFkZENvbWJpbmF0aW9uc1NlbGVjdDogJyNhZGRQcm9kdWN0Q29tYmluYXRpb25JZCcsXG4gIHByb2R1Y3RBZGRQcmljZVRheEV4Y2xJbnB1dDogJyNhZGRfcHJvZHVjdF9yb3dfcHJpY2VfdGF4X2V4Y2x1ZGVkJyxcbiAgcHJvZHVjdEFkZFByaWNlVGF4SW5jbElucHV0OiAnI2FkZF9wcm9kdWN0X3Jvd19wcmljZV90YXhfaW5jbHVkZWQnLFxuICBwcm9kdWN0QWRkUXVhbnRpdHlJbnB1dDogJyNhZGRfcHJvZHVjdF9yb3dfcXVhbnRpdHknLFxuICBwcm9kdWN0QWRkQXZhaWxhYmxlVGV4dDogJyNhZGRQcm9kdWN0QXZhaWxhYmxlJyxcbiAgcHJvZHVjdEFkZExvY2F0aW9uVGV4dDogJyNhZGRQcm9kdWN0TG9jYXRpb24nLFxuICBwcm9kdWN0QWRkVG90YWxQcmljZVRleHQ6ICcjYWRkUHJvZHVjdFRvdGFsUHJpY2UnLFxuICBwcm9kdWN0QWRkSW52b2ljZVNlbGVjdDogJyNhZGRfcHJvZHVjdF9yb3dfaW52b2ljZScsXG4gIHByb2R1Y3RBZGRGcmVlU2hpcHBpbmdTZWxlY3Q6ICcjYWRkX3Byb2R1Y3Rfcm93X2ZyZWVfc2hpcHBpbmcnLFxuICBwcm9kdWN0QWRkTmV3SW52b2ljZUluZm86ICcjYWRkUHJvZHVjdE5ld0ludm9pY2VJbmZvJyxcbiAgcHJvZHVjdEVkaXRTYXZlQnRuOiAnLnByb2R1Y3RFZGl0U2F2ZUJ0bicsXG4gIHByb2R1Y3RFZGl0Q2FuY2VsQnRuOiAnLnByb2R1Y3RFZGl0Q2FuY2VsQnRuJyxcbiAgcHJvZHVjdEVkaXRSb3dUZW1wbGF0ZTogJyNlZGl0UHJvZHVjdFRhYmxlUm93VGVtcGxhdGUnLFxuICBwcm9kdWN0RWRpdFJvdzogJy5lZGl0UHJvZHVjdFJvdycsXG4gIHByb2R1Y3RFZGl0SW1hZ2U6ICcuY2VsbFByb2R1Y3RJbWcnLFxuICBwcm9kdWN0RWRpdE5hbWU6ICcuY2VsbFByb2R1Y3ROYW1lJyxcbiAgcHJvZHVjdEVkaXRVbml0UHJpY2U6ICcuY2VsbFByb2R1Y3RVbml0UHJpY2UnLFxuICBwcm9kdWN0RWRpdFF1YW50aXR5OiAnLmNlbGxQcm9kdWN0UXVhbnRpdHknLFxuICBwcm9kdWN0RWRpdEF2YWlsYWJsZVF1YW50aXR5OiAnLmNlbGxQcm9kdWN0QXZhaWxhYmxlUXVhbnRpdHknLFxuICBwcm9kdWN0RWRpdFRvdGFsUHJpY2U6ICcuY2VsbFByb2R1Y3RUb3RhbFByaWNlJyxcbiAgcHJvZHVjdEVkaXRQcmljZVRheEV4Y2xJbnB1dDogJy5lZGl0UHJvZHVjdFByaWNlVGF4RXhjbCcsXG4gIHByb2R1Y3RFZGl0UHJpY2VUYXhJbmNsSW5wdXQ6ICcuZWRpdFByb2R1Y3RQcmljZVRheEluY2wnLFxuICBwcm9kdWN0RWRpdEludm9pY2VTZWxlY3Q6ICcuZWRpdFByb2R1Y3RJbnZvaWNlJyxcbiAgcHJvZHVjdEVkaXRRdWFudGl0eUlucHV0OiAnLmVkaXRQcm9kdWN0UXVhbnRpdHknLFxuICBwcm9kdWN0RWRpdExvY2F0aW9uVGV4dDogJy5lZGl0UHJvZHVjdExvY2F0aW9uJyxcbiAgcHJvZHVjdEVkaXRBdmFpbGFibGVUZXh0OiAnLmVkaXRQcm9kdWN0QXZhaWxhYmxlJyxcbiAgcHJvZHVjdEVkaXRUb3RhbFByaWNlVGV4dDogJy5lZGl0UHJvZHVjdFRvdGFsUHJpY2UnLFxuICAvLyBQcm9kdWN0IERpc2NvdW50IExpc3RcbiAgcHJvZHVjdERpc2NvdW50TGlzdDoge1xuICAgIGxpc3Q6ICcudGFibGUuZGlzY291bnRMaXN0JyxcbiAgfSxcbiAgLy8gUHJvZHVjdCBQYWNrIE1vZGFsXG4gIHByb2R1Y3RQYWNrTW9kYWw6IHtcbiAgICBtb2RhbDogJyNwcm9kdWN0LXBhY2stbW9kYWwnLFxuICAgIHRhYmxlOiAnI3Byb2R1Y3QtcGFjay1tb2RhbC10YWJsZSB0Ym9keScsXG4gICAgcm93czogJyNwcm9kdWN0LXBhY2stbW9kYWwtdGFibGUgdGJvZHkgdHI6bm90KCN0ZW1wbGF0ZS1wYWNrLXRhYmxlLXJvdyknLFxuICAgIHRlbXBsYXRlOiAnI3RlbXBsYXRlLXBhY2stdGFibGUtcm93JyxcbiAgICBwcm9kdWN0OiB7XG4gICAgICBpbWc6ICcuY2VsbC1wcm9kdWN0LWltZyBpbWcnLFxuICAgICAgbGluazogJy5jZWxsLXByb2R1Y3QtbmFtZSBhJyxcbiAgICAgIG5hbWU6ICcuY2VsbC1wcm9kdWN0LW5hbWUgLnByb2R1Y3QtbmFtZScsXG4gICAgICByZWY6ICcuY2VsbC1wcm9kdWN0LW5hbWUgLnByb2R1Y3QtcmVmZXJlbmNlJyxcbiAgICAgIHN1cHBsaWVyUmVmOiAnLmNlbGwtcHJvZHVjdC1uYW1lIC5wcm9kdWN0LXN1cHBsaWVyLXJlZmVyZW5jZScsXG4gICAgICBxdWFudGl0eTogJy5jZWxsLXByb2R1Y3QtcXVhbnRpdHknLFxuICAgICAgYXZhaWxhYmxlUXVhbnRpdHk6ICcuY2VsbC1wcm9kdWN0LWF2YWlsYWJsZS1xdWFudGl0eScsXG4gICAgfSxcbiAgfSxcbiAgLy8gT3JkZXIgcHJpY2UgZWxlbWVudHNcbiAgb3JkZXJQcm9kdWN0c1RvdGFsOiAnI29yZGVyUHJvZHVjdHNUb3RhbCcsXG4gIG9yZGVyRGlzY291bnRzVG90YWxDb250YWluZXI6ICcjb3JkZXItZGlzY291bnRzLXRvdGFsLWNvbnRhaW5lcicsXG4gIG9yZGVyRGlzY291bnRzVG90YWw6ICcjb3JkZXJEaXNjb3VudHNUb3RhbCcsXG4gIG9yZGVyV3JhcHBpbmdUb3RhbDogJyNvcmRlcldyYXBwaW5nVG90YWwnLFxuICBvcmRlclNoaXBwaW5nVG90YWxDb250YWluZXI6ICcjb3JkZXItc2hpcHBpbmctdG90YWwtY29udGFpbmVyJyxcbiAgb3JkZXJTaGlwcGluZ1RvdGFsOiAnI29yZGVyU2hpcHBpbmdUb3RhbCcsXG4gIG9yZGVyVGF4ZXNUb3RhbDogJyNvcmRlclRheGVzVG90YWwnLFxuICBvcmRlclRvdGFsOiAnI29yZGVyVG90YWwnLFxuICBvcmRlckhvb2tUYWJzQ29udGFpbmVyOiAnI29yZGVyX2hvb2tfdGFicycsXG4gIC8vIFByb2R1Y3QgY2FuY2VsL3JlZnVuZCBlbGVtZW50c1xuICBjYW5jZWxQcm9kdWN0OiB7XG4gICAgZm9ybTogJ2Zvcm1bbmFtZT1cImNhbmNlbF9wcm9kdWN0XCJdJyxcbiAgICBidXR0b25zOiB7XG4gICAgICBhYm9ydDogJ2J1dHRvbi5jYW5jZWwtcHJvZHVjdC1lbGVtZW50LWFib3J0JyxcbiAgICAgIHNhdmU6ICcjY2FuY2VsX3Byb2R1Y3Rfc2F2ZScsXG4gICAgICBwYXJ0aWFsUmVmdW5kOiAnYnV0dG9uLnBhcnRpYWwtcmVmdW5kLWRpc3BsYXknLFxuICAgICAgc3RhbmRhcmRSZWZ1bmQ6ICdidXR0b24uc3RhbmRhcmQtcmVmdW5kLWRpc3BsYXknLFxuICAgICAgcmV0dXJuUHJvZHVjdDogJ2J1dHRvbi5yZXR1cm4tcHJvZHVjdC1kaXNwbGF5JyxcbiAgICAgIGNhbmNlbFByb2R1Y3RzOiAnYnV0dG9uLmNhbmNlbC1wcm9kdWN0LWRpc3BsYXknLFxuICAgIH0sXG4gICAgaW5wdXRzOiB7XG4gICAgICBxdWFudGl0eTogJy5jYW5jZWwtcHJvZHVjdC1xdWFudGl0eSBpbnB1dCcsXG4gICAgICBhbW91bnQ6ICcuY2FuY2VsLXByb2R1Y3QtYW1vdW50IGlucHV0JyxcbiAgICAgIHNlbGVjdG9yOiAnLmNhbmNlbC1wcm9kdWN0LXNlbGVjdG9yIGlucHV0JyxcbiAgICB9LFxuICAgIHRhYmxlOiB7XG4gICAgICBjZWxsOiAnLmNhbmNlbC1wcm9kdWN0LWNlbGwnLFxuICAgICAgaGVhZGVyOiAndGguY2FuY2VsLXByb2R1Y3QtZWxlbWVudCBwJyxcbiAgICAgIGFjdGlvbnM6ICd0ZC5jZWxsUHJvZHVjdEFjdGlvbnMsIHRoLnByb2R1Y3RfYWN0aW9ucycsXG4gICAgfSxcbiAgICBjaGVja2JveGVzOiB7XG4gICAgICByZXN0b2NrOiAnI2NhbmNlbF9wcm9kdWN0X3Jlc3RvY2snLFxuICAgICAgY3JlZGl0U2xpcDogJyNjYW5jZWxfcHJvZHVjdF9jcmVkaXRfc2xpcCcsXG4gICAgICB2b3VjaGVyOiAnI2NhbmNlbF9wcm9kdWN0X3ZvdWNoZXInLFxuICAgIH0sXG4gICAgcmFkaW9zOiB7XG4gICAgICB2b3VjaGVyUmVmdW5kVHlwZToge1xuICAgICAgICBwcm9kdWN0UHJpY2VzOiAnaW5wdXRbdm91Y2hlci1yZWZ1bmQtdHlwZT1cIjBcIl0nLFxuICAgICAgICBwcm9kdWN0UHJpY2VzVm91Y2hlckV4Y2x1ZGVkOiAnaW5wdXRbdm91Y2hlci1yZWZ1bmQtdHlwZT1cIjFcIl0nLFxuICAgICAgICBuZWdhdGl2ZUVycm9yTWVzc2FnZTogJy52b3VjaGVyLXJlZnVuZC10eXBlLW5lZ2F0aXZlLWVycm9yJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0b2dnbGU6IHtcbiAgICAgIHBhcnRpYWxSZWZ1bmQ6ICcuY2FuY2VsLXByb2R1Y3QtZWxlbWVudDpub3QoLmhpZGRlbik6bm90KC5zaGlwcGluZy1yZWZ1bmQpLCAuY2FuY2VsLXByb2R1Y3QtYW1vdW50JyxcbiAgICAgIHN0YW5kYXJkUmVmdW5kOiAnLmNhbmNlbC1wcm9kdWN0LWVsZW1lbnQ6bm90KC5oaWRkZW4pOm5vdCguc2hpcHBpbmctcmVmdW5kLWFtb3VudCk6bm90KC5yZXN0b2NrLXByb2R1Y3RzKSwgLmNhbmNlbC1wcm9kdWN0LXNlbGVjdG9yJyxcbiAgICAgIHJldHVyblByb2R1Y3Q6ICcuY2FuY2VsLXByb2R1Y3QtZWxlbWVudDpub3QoLmhpZGRlbik6bm90KC5zaGlwcGluZy1yZWZ1bmQtYW1vdW50KSwgLmNhbmNlbC1wcm9kdWN0LXNlbGVjdG9yJyxcbiAgICAgIGNhbmNlbFByb2R1Y3RzOiAnLmNhbmNlbC1wcm9kdWN0LWVsZW1lbnQ6bm90KC5oaWRkZW4pOm5vdCguc2hpcHBpbmctcmVmdW5kLWFtb3VudCk6bm90KC5zaGlwcGluZy1yZWZ1bmQpOm5vdCgucmVzdG9jay1wcm9kdWN0cyk6bm90KC5yZWZ1bmQtY3JlZGl0LXNsaXApOm5vdCgucmVmdW5kLXZvdWNoZXIpOm5vdCgudm91Y2hlci1yZWZ1bmQtdHlwZSksIC5jYW5jZWwtcHJvZHVjdC1zZWxlY3RvcicsXG4gICAgfSxcbiAgfSxcbiAgcHJpbnRPcmRlclZpZXdQYWdlQnV0dG9uOiAnLmpzLXByaW50LW9yZGVyLXZpZXctcGFnZScsXG4gIG9yZGVyTm90ZVRvZ2dsZUJ0bjogJy5qcy1vcmRlci1ub3Rlcy10b2dnbGUtYnRuJyxcbiAgb3JkZXJOb3RlQmxvY2s6ICcuanMtb3JkZXItbm90ZXMtYmxvY2snLFxuICBvcmRlck5vdGVJbnB1dDogJyNpbnRlcm5hbF9ub3RlX25vdGUnLFxuICBvcmRlck5vdGVTdWJtaXRCdG46ICcuanMtb3JkZXItbm90ZXMtYnRuJyxcbiAgcmVmcmVzaFByb2R1Y3RzTGlzdExvYWRpbmdTcGlubmVyOiAnI29yZGVyUHJvZHVjdHNQYW5lbCAuc3Bpbm5lci1vcmRlci1wcm9kdWN0cy1jb250YWluZXIjb3JkZXJQcm9kdWN0c0xvYWRpbmcnLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBPcmRlclZpZXdQYWdlTWFwIGZyb20gJy4vT3JkZXJWaWV3UGFnZU1hcCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBNYW5hZ2VzIGFkZGluZy9lZGl0aW5nIG5vdGUgZm9yIGludm9pY2UgZG9jdW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZvaWNlTm90ZU1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldHVwTGlzdGVuZXJzKCk7XG4gIH1cblxuICBzZXR1cExpc3RlbmVycygpIHtcbiAgICB0aGlzLmluaXRTaG93Tm90ZUZvcm1FdmVudEhhbmRsZXIoKTtcbiAgICB0aGlzLmluaXRDbG9zZU5vdGVGb3JtRXZlbnRIYW5kbGVyKCk7XG4gICAgdGhpcy5pbml0RW50ZXJQYXltZW50RXZlbnRIYW5kbGVyKCk7XG4gIH1cblxuICBpbml0U2hvd05vdGVGb3JtRXZlbnRIYW5kbGVyKCkge1xuICAgICQoJy5qcy1vcGVuLWludm9pY2Utbm90ZS1idG4nKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCAkYnRuID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIGNvbnN0ICRub3RlUm93ID0gJGJ0bi5jbG9zZXN0KCd0cicpLm5leHQoKTtcblxuICAgICAgJG5vdGVSb3cucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdENsb3NlTm90ZUZvcm1FdmVudEhhbmRsZXIoKSB7XG4gICAgJCgnLmpzLWNhbmNlbC1pbnZvaWNlLW5vdGUtYnRuJykub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoJ3RyJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdEVudGVyUGF5bWVudEV2ZW50SGFuZGxlcigpIHtcbiAgICAkKCcuanMtZW50ZXItcGF5bWVudC1idG4nKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0ICRidG4gPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgY29uc3QgcGF5bWVudEFtb3VudCA9ICRidG4uZGF0YSgncGF5bWVudC1hbW91bnQnKTtcblxuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLnZpZXdPcmRlclBheW1lbnRzQmxvY2spLmdldCgwKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICdzbW9vdGgnfSk7XG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAub3JkZXJQYXltZW50Rm9ybUFtb3VudElucHV0KS52YWwocGF5bWVudEFtb3VudCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnLi4vT3JkZXJWaWV3UGFnZU1hcCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBBbGwgYWN0aW9ucyBmb3Igb3JkZXIgdmlldyBwYWdlIG1lc3NhZ2VzIGFyZSByZWdpc3RlcmVkIGluIHRoaXMgY2xhc3MuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZGVyVmlld1BhZ2VNZXNzYWdlc0hhbmRsZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiRvcmRlck1lc3NhZ2VDaGFuZ2VXYXJuaW5nID0gJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyTWVzc2FnZUNoYW5nZVdhcm5pbmcpO1xuICAgIHRoaXMuJG1lc3NhZ2VzQ29udGFpbmVyID0gJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyTWVzc2FnZXNDb250YWluZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RlbkZvclByZWRlZmluZWRNZXNzYWdlU2VsZWN0aW9uOiAoKSA9PiB0aGlzLmhhbmRsZVByZWRlZmluZWRNZXNzYWdlU2VsZWN0aW9uKCksXG4gICAgICBsaXN0ZW5Gb3JGdWxsTWVzc2FnZXNPcGVuOiAoKSA9PiB0aGlzLm9uRnVsbE1lc3NhZ2VzT3BlbigpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBwcmVkZWZpbmVkIG9yZGVyIG1lc3NhZ2Ugc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGFuZGxlUHJlZGVmaW5lZE1lc3NhZ2VTZWxlY3Rpb24oKSB7XG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsIE9yZGVyVmlld1BhZ2VNYXAub3JkZXJNZXNzYWdlTmFtZVNlbGVjdCwgKGUpID0+IHtcbiAgICAgIGNvbnN0ICRjdXJyZW50SXRlbSA9ICQoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIGNvbnN0IHZhbHVlSWQgPSAkY3VycmVudEl0ZW0udmFsKCk7XG5cbiAgICAgIGlmICghdmFsdWVJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLiRtZXNzYWdlc0NvbnRhaW5lci5maW5kKGBkaXZbZGF0YS1pZD0ke3ZhbHVlSWR9XWApLnRleHQoKS50cmltKCk7XG4gICAgICBjb25zdCAkb3JkZXJNZXNzYWdlID0gJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyTWVzc2FnZSk7XG4gICAgICBjb25zdCBpc1NhbWVNZXNzYWdlID0gJG9yZGVyTWVzc2FnZS52YWwoKS50cmltKCkgPT09IG1lc3NhZ2U7XG5cbiAgICAgIGlmIChpc1NhbWVNZXNzYWdlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCRvcmRlck1lc3NhZ2UudmFsKCkgJiYgIXdpbmRvdy5jb25maXJtKHRoaXMuJG9yZGVyTWVzc2FnZUNoYW5nZVdhcm5pbmcudGV4dCgpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICRvcmRlck1lc3NhZ2UudmFsKG1lc3NhZ2UpO1xuICAgICAgJG9yZGVyTWVzc2FnZS50cmlnZ2VyKCdpbnB1dCcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgZm9yIGV2ZW50IHdoZW4gYWxsIG1lc3NhZ2VzIG1vZGFsIGlzIGJlaW5nIG9wZW5lZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25GdWxsTWVzc2FnZXNPcGVuKCkge1xuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIE9yZGVyVmlld1BhZ2VNYXAub3BlbkFsbE1lc3NhZ2VzQnRuLCAoKSA9PiB0aGlzLnNjcm9sbFRvTXNnTGlzdEJvdHRvbSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIGRvd24gdG8gdGhlIGJvdHRvbSBvZiBhbGwgbWVzc2FnZXMgbGlzdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2Nyb2xsVG9Nc2dMaXN0Qm90dG9tKCkge1xuICAgIGNvbnN0ICRtc2dNb2RhbCA9ICQoT3JkZXJWaWV3UGFnZU1hcC5hbGxNZXNzYWdlc01vZGFsKTtcbiAgICBjb25zdCBtc2dMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihPcmRlclZpZXdQYWdlTWFwLmFsbE1lc3NhZ2VzTGlzdCk7XG5cbiAgICBjb25zdCBjbGFzc0NoZWNrSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKCRtc2dNb2RhbC5oYXNDbGFzcygnc2hvdycpKSB7XG4gICAgICAgIG1zZ0xpc3Quc2Nyb2xsVG9wID0gbXNnTGlzdC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoY2xhc3NDaGVja0ludGVydmFsKTtcbiAgICAgIH1cbiAgICB9LCAxMCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBPcmRlclZpZXdQYWdlTWFwIGZyb20gJy4vT3JkZXJWaWV3UGFnZU1hcCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JkZXJTaGlwcGluZ01hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXRPcmRlclNoaXBwaW5nVXBkYXRlRXZlbnRIYW5kbGVyKCk7XG4gIH1cblxuICBpbml0T3JkZXJTaGlwcGluZ1VwZGF0ZUV2ZW50SGFuZGxlcigpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAubWFpbkRpdikub24oJ2NsaWNrJywgT3JkZXJWaWV3UGFnZU1hcC5zaG93T3JkZXJTaGlwcGluZ1VwZGF0ZU1vZGFsQnRuLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0ICRidG4gPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAudXBkYXRlT3JkZXJTaGlwcGluZ1RyYWNraW5nTnVtYmVySW5wdXQpLnZhbCgkYnRuLmRhdGEoJ29yZGVyLXRyYWNraW5nLW51bWJlcicpKTtcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC51cGRhdGVPcmRlclNoaXBwaW5nQ3VycmVudE9yZGVyQ2FycmllcklkSW5wdXQpLnZhbCgkYnRuLmRhdGEoJ29yZGVyLWNhcnJpZXItaWQnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnQHBhZ2VzL29yZGVyL09yZGVyVmlld1BhZ2VNYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZGVyRGlzY291bnRzUmVmcmVzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yb3V0ZXIgPSBuZXcgUm91dGVyKCk7XG4gIH1cblxuICByZWZyZXNoKG9yZGVySWQpIHtcbiAgICAkLmFqYXgodGhpcy5yb3V0ZXIuZ2VuZXJhdGUoJ2FkbWluX29yZGVyc19nZXRfZGlzY291bnRzJywge29yZGVySWR9KSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdERpc2NvdW50TGlzdC5saXN0KS5yZXBsYWNlV2l0aChyZXNwb25zZSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgUm91dGVyIGZyb20gJ0Bjb21wb25lbnRzL3JvdXRlcic7XG5pbXBvcnQgT3JkZXJWaWV3UGFnZU1hcCBmcm9tICdAcGFnZXMvb3JkZXIvT3JkZXJWaWV3UGFnZU1hcCc7XG5pbXBvcnQgSW52b2ljZU5vdGVNYW5hZ2VyIGZyb20gJy4uL2ludm9pY2Utbm90ZS1tYW5hZ2VyJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmRlckRvY3VtZW50c1JlZnJlc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucm91dGVyID0gbmV3IFJvdXRlcigpO1xuICAgIHRoaXMuaW52b2ljZU5vdGVNYW5hZ2VyID0gbmV3IEludm9pY2VOb3RlTWFuYWdlcigpO1xuICB9XG5cbiAgcmVmcmVzaChvcmRlcklkKSB7XG4gICAgJC5nZXRKU09OKHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9vcmRlcnNfZ2V0X2RvY3VtZW50cycsIHtvcmRlcklkfSkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyRG9jdW1lbnRzVGFiQ291bnQpLnRleHQocmVzcG9uc2UudG90YWwpO1xuICAgICAgICAkKE9yZGVyVmlld1BhZ2VNYXAub3JkZXJEb2N1bWVudHNUYWJCb2R5KS5odG1sKHJlc3BvbnNlLmh0bWwpO1xuICAgICAgICB0aGlzLmludm9pY2VOb3RlTWFuYWdlci5zZXR1cExpc3RlbmVycygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnQHBhZ2VzL29yZGVyL09yZGVyVmlld1BhZ2VNYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZGVySW52b2ljZXNSZWZyZXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgfVxuXG4gIHJlZnJlc2gob3JkZXJJZCkge1xuICAgICQuZ2V0SlNPTih0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX2dldF9pbnZvaWNlcycsIHtvcmRlcklkfSkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuaW52b2ljZXMgfHwgT2JqZWN0LmtleXMocmVzcG9uc2UuaW52b2ljZXMpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgJHBheW1lbnRJbnZvaWNlU2VsZWN0ID0gJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyUGF5bWVudEludm9pY2VTZWxlY3QpO1xuICAgICAgICBjb25zdCAkYWRkUHJvZHVjdEludm9pY2VTZWxlY3QgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZEludm9pY2VTZWxlY3QpO1xuICAgICAgICBjb25zdCAkZXhpc3RpbmdJbnZvaWNlc0dyb3VwID0gJGFkZFByb2R1Y3RJbnZvaWNlU2VsZWN0LmZpbmQoJ29wdGdyb3VwOmZpcnN0Jyk7XG4gICAgICAgIGNvbnN0ICRwcm9kdWN0RWRpdEludm9pY2VTZWxlY3QgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRJbnZvaWNlU2VsZWN0KTtcbiAgICAgICAgY29uc3QgJGFkZERpc2NvdW50SW52b2ljZVNlbGVjdCA9ICQoT3JkZXJWaWV3UGFnZU1hcC5hZGRDYXJ0UnVsZUludm9pY2VJZFNlbGVjdCk7XG4gICAgICAgICRleGlzdGluZ0ludm9pY2VzR3JvdXAuZW1wdHkoKTtcbiAgICAgICAgJHBheW1lbnRJbnZvaWNlU2VsZWN0LmVtcHR5KCk7XG4gICAgICAgICRwcm9kdWN0RWRpdEludm9pY2VTZWxlY3QuZW1wdHkoKTtcbiAgICAgICAgJGFkZERpc2NvdW50SW52b2ljZVNlbGVjdC5lbXB0eSgpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3BvbnNlLmludm9pY2VzKS5mb3JFYWNoKChpbnZvaWNlTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludm9pY2VJZCA9IHJlc3BvbnNlLmludm9pY2VzW2ludm9pY2VOYW1lXTtcbiAgICAgICAgICBjb25zdCBpbnZvaWNlTmFtZVdpdGhvdXRQcmljZSA9IGludm9pY2VOYW1lLnNwbGl0KCcgLSAnKVswXTtcblxuICAgICAgICAgICRleGlzdGluZ0ludm9pY2VzR3JvdXAuYXBwZW5kKGA8b3B0aW9uIHZhbHVlPVwiJHtpbnZvaWNlSWR9XCI+JHtpbnZvaWNlTmFtZVdpdGhvdXRQcmljZX08L29wdGlvbj5gKTtcbiAgICAgICAgICAkcGF5bWVudEludm9pY2VTZWxlY3QuYXBwZW5kKGA8b3B0aW9uIHZhbHVlPVwiJHtpbnZvaWNlSWR9XCI+JHtpbnZvaWNlTmFtZVdpdGhvdXRQcmljZX08L29wdGlvbj5gKTtcbiAgICAgICAgICAkcHJvZHVjdEVkaXRJbnZvaWNlU2VsZWN0LmFwcGVuZChgPG9wdGlvbiB2YWx1ZT1cIiR7aW52b2ljZUlkfVwiPiR7aW52b2ljZU5hbWVXaXRob3V0UHJpY2V9PC9vcHRpb24+YCk7XG4gICAgICAgICAgJGFkZERpc2NvdW50SW52b2ljZVNlbGVjdC5hcHBlbmQoYDxvcHRpb24gdmFsdWU9XCIke2ludm9pY2VJZH1cIj4ke2ludm9pY2VOYW1lfTwvb3B0aW9uPmApO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZEludm9pY2VTZWxlY3QpLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnQHBhZ2VzL29yZGVyL09yZGVyVmlld1BhZ2VNYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZGVyUGF5bWVudHNSZWZyZXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgfVxuXG4gIHJlZnJlc2gob3JkZXJJZCkge1xuICAgICQuYWpheCh0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX2dldF9wYXltZW50cycsIHtvcmRlcklkfSkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgJChPcmRlclZpZXdQYWdlTWFwLnZpZXdPcmRlclBheW1lbnRzQWxlcnQpLnJlbW92ZSgpO1xuICAgICAgICAgICQoYCR7T3JkZXJWaWV3UGFnZU1hcC52aWV3T3JkZXJQYXltZW50c0Jsb2NrfSAuY2FyZC1ib2R5YCkucHJlcGVuZChyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZUpTT04gJiYgcmVzcG9uc2UucmVzcG9uc2VKU09OLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICQuZ3Jvd2wuZXJyb3Ioe21lc3NhZ2U6IHJlc3BvbnNlLnJlc3BvbnNlSlNPTi5tZXNzYWdlfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgUm91dGVyIGZyb20gJ0Bjb21wb25lbnRzL3JvdXRlcic7XG5pbXBvcnQgT3JkZXJWaWV3UGFnZU1hcCBmcm9tICdAcGFnZXMvb3JkZXIvT3JkZXJWaWV3UGFnZU1hcCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JkZXJQcmljZXNSZWZyZXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgfVxuXG4gIHJlZnJlc2gob3JkZXJJZCkge1xuICAgICQuZ2V0SlNPTih0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX2dldF9wcmljZXMnLCB7b3JkZXJJZH0pKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyVG90YWwpLnRleHQocmVzcG9uc2Uub3JkZXJUb3RhbEZvcm1hdHRlZCk7XG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAub3JkZXJEaXNjb3VudHNUb3RhbCkudGV4dChgLSR7cmVzcG9uc2UuZGlzY291bnRzQW1vdW50Rm9ybWF0dGVkfWApO1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyRGlzY291bnRzVG90YWxDb250YWluZXIpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnLCAhcmVzcG9uc2UuZGlzY291bnRzQW1vdW50RGlzcGxheWVkKTtcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5vcmRlclByb2R1Y3RzVG90YWwpLnRleHQocmVzcG9uc2UucHJvZHVjdHNUb3RhbEZvcm1hdHRlZCk7XG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAub3JkZXJTaGlwcGluZ1RvdGFsKS50ZXh0KHJlc3BvbnNlLnNoaXBwaW5nVG90YWxGb3JtYXR0ZWQpO1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyU2hpcHBpbmdUb3RhbENvbnRhaW5lcikudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScsICFyZXNwb25zZS5zaGlwcGluZ1RvdGFsRGlzcGxheWVkKTtcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5vcmRlclRheGVzVG90YWwpLnRleHQocmVzcG9uc2UudGF4ZXNUb3RhbEZvcm1hdHRlZCk7XG4gICAgfSk7XG4gIH1cblxuICByZWZyZXNoUHJvZHVjdFByaWNlcyhvcmRlcklkKSB7XG4gICAgJC5nZXRKU09OKHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9vcmRlcnNfcHJvZHVjdF9wcmljZXMnLCB7b3JkZXJJZH0pKS50aGVuKChwcm9kdWN0UHJpY2VzTGlzdCkgPT4ge1xuICAgICAgcHJvZHVjdFByaWNlc0xpc3QuZm9yRWFjaCgocHJvZHVjdFByaWNlcykgPT4ge1xuICAgICAgICBjb25zdCBvcmRlclByb2R1Y3RUcklkID0gT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUm93KHByb2R1Y3RQcmljZXMub3JkZXJEZXRhaWxJZCk7XG4gICAgICAgIGxldCAkcXVhbnRpdHkgPSAkKHByb2R1Y3RQcmljZXMucXVhbnRpdHkpO1xuXG4gICAgICAgIGlmIChwcm9kdWN0UHJpY2VzLnF1YW50aXR5ID4gMSkge1xuICAgICAgICAgICRxdWFudGl0eSA9ICRxdWFudGl0eS53cmFwKCc8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXNlY29uZGFyeSByb3VuZGVkLWNpcmNsZVwiPjwvc3Bhbj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoYCR7b3JkZXJQcm9kdWN0VHJJZH0gJHtPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0VW5pdFByaWNlfWApLnRleHQocHJvZHVjdFByaWNlcy51bml0UHJpY2UpO1xuICAgICAgICAkKGAke29yZGVyUHJvZHVjdFRySWR9ICR7T3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdFF1YW50aXR5fWApLmh0bWwoJHF1YW50aXR5Lmh0bWwoKSk7XG4gICAgICAgICQoYCR7b3JkZXJQcm9kdWN0VHJJZH0gJHtPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0QXZhaWxhYmxlUXVhbnRpdHl9YCkudGV4dChwcm9kdWN0UHJpY2VzLmF2YWlsYWJsZVF1YW50aXR5KTtcbiAgICAgICAgJChgJHtvcmRlclByb2R1Y3RUcklkfSAke09yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRUb3RhbFByaWNlfWApLnRleHQocHJvZHVjdFByaWNlcy50b3RhbFByaWNlKTtcblxuICAgICAgICAvLyB1cGRhdGUgb3JkZXIgcm93IHByaWNlIHZhbHVlc1xuICAgICAgICBjb25zdCBwcm9kdWN0RWRpdEJ1dHRvbiA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdEJ0bihwcm9kdWN0UHJpY2VzLm9yZGVyRGV0YWlsSWQpKTtcblxuICAgICAgICBwcm9kdWN0RWRpdEJ1dHRvbi5kYXRhKCdwcm9kdWN0LXByaWNlLXRheC1pbmNsJywgcHJvZHVjdFByaWNlcy51bml0UHJpY2VUYXhJbmNsUmF3KTtcbiAgICAgICAgcHJvZHVjdEVkaXRCdXR0b24uZGF0YSgncHJvZHVjdC1wcmljZS10YXgtZXhjbCcsIHByb2R1Y3RQcmljZXMudW5pdFByaWNlVGF4RXhjbFJhdyk7XG4gICAgICAgIHByb2R1Y3RFZGl0QnV0dG9uLmRhdGEoJ3Byb2R1Y3QtcXVhbnRpdHknLCBwcm9kdWN0UHJpY2VzLnF1YW50aXR5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgY2hlY2sgaWYgdGhlIHNhbWUgcHJvZHVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG9yZGVyXG4gICAqIGFuZCBpZiBzbyBhbmQgaWYgdGhlIHByaWNlIG9mIHRoZSAyIHByb2R1Y3RzIGRvZXNuJ3QgbWF0Y2ggd2lsbCByZXR1cm4gZWl0aGVyXG4gICAqICdpbnZvaWNlJyBpZiB0aGUgMiBwcm9kdWN0cyBhcmUgaW4gMiBkaWZmZXJlbnQgaW52b2ljZXMgb3IgJ3Byb2R1Y3QnIGlmIHRoZSAyIHByb2R1Y3RzXG4gICAqIGFyZSBpbiB0aGUgc2FtZSBpbnZvaWNlIChvciBubyBpbnZvaWNlIHlldCkuIE9ubHkgcHJvZHVjdHMgdGhhdCBoYXZlIGRpZmZlcmVudCBjdXN0b21pemF0aW9uc1xuICAgKiBjYW4gYmUgdHdpY2UgaW4gYSBzYW1lIGludm9pY2UuXG4gICAqIFdpbGwgcmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgcHJvZHVjdHMgYXJlIGZvdW5kLlxuICAgKi9cbiAgY2hlY2tPdGhlclByb2R1Y3RQcmljZXNNYXRjaChnaXZlblByaWNlLCBwcm9kdWN0SWQsIGNvbWJpbmF0aW9uSWQsIGludm9pY2VJZCwgb3JkZXJEZXRhaWxJZCkge1xuICAgIGNvbnN0IHByb2R1Y3RSb3dzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgndHIuY2VsbFByb2R1Y3QnKTtcbiAgICAvLyBXZSBjb252ZXJ0IHRoZSBleHBlY3RlZCB2YWx1ZXMgaW50byBpbnQvZmxvYXQgdG8gYXZvaWQgYSB0eXBlIG1pc21hdGNoIHRoYXQgd291bGQgYmUgd3JvbmdseSBpbnRlcnByZXRlZFxuICAgIGNvbnN0IGV4cGVjdGVkUHJvZHVjdElkID0gTnVtYmVyKHByb2R1Y3RJZCk7XG4gICAgY29uc3QgZXhwZWN0ZWRDb21iaW5hdGlvbklkID0gTnVtYmVyKGNvbWJpbmF0aW9uSWQpO1xuICAgIGNvbnN0IGV4cGVjdGVkR2l2ZW5QcmljZSA9IE51bWJlcihnaXZlblByaWNlKTtcbiAgICBsZXQgdW5tYXRjaGluZ0ludm9pY2VQcmljZUV4aXN0cyA9IGZhbHNlO1xuICAgIGxldCB1bm1hdGNoaW5nUHJvZHVjdFByaWNlRXhpc3RzID0gZmFsc2U7XG5cbiAgICBwcm9kdWN0Um93cy5mb3JFYWNoKChwcm9kdWN0Um93KSA9PiB7XG4gICAgICBjb25zdCBwcm9kdWN0Um93SWQgPSAkKHByb2R1Y3RSb3cpLmF0dHIoJ2lkJyk7XG5cbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZWRpdGVkIHJvdyAoZXNwZWNpYWxseSBpZiBpdCdzIHRoZSBvbmx5IG9uZSBmb3IgdGhpcyBwcm9kdWN0KVxuICAgICAgaWYgKG9yZGVyRGV0YWlsSWQgJiYgcHJvZHVjdFJvd0lkID09PSBgb3JkZXJQcm9kdWN0XyR7b3JkZXJEZXRhaWxJZH1gKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvZHVjdEVkaXRCdG4gPSAkKGAjJHtwcm9kdWN0Um93SWR9ICR7T3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdEJ1dHRvbnN9YCk7XG4gICAgICBjb25zdCBjdXJyZW50T3JkZXJJbnZvaWNlSWQgPSBOdW1iZXIocHJvZHVjdEVkaXRCdG4uZGF0YSgnb3JkZXItaW52b2ljZS1pZCcpKTtcblxuICAgICAgY29uc3QgY3VycmVudFByb2R1Y3RJZCA9IE51bWJlcihwcm9kdWN0RWRpdEJ0bi5kYXRhKCdwcm9kdWN0LWlkJykpO1xuICAgICAgY29uc3QgY3VycmVudENvbWJpbmF0aW9uSWQgPSBOdW1iZXIocHJvZHVjdEVkaXRCdG4uZGF0YSgnY29tYmluYXRpb24taWQnKSk7XG5cbiAgICAgIGlmIChjdXJyZW50UHJvZHVjdElkICE9PSBleHBlY3RlZFByb2R1Y3RJZCB8fCBjdXJyZW50Q29tYmluYXRpb25JZCAhPT0gZXhwZWN0ZWRDb21iaW5hdGlvbklkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4cGVjdGVkR2l2ZW5QcmljZSAhPT0gTnVtYmVyKHByb2R1Y3RFZGl0QnRuLmRhdGEoJ3Byb2R1Y3QtcHJpY2UtdGF4LWluY2wnKSkpIHtcbiAgICAgICAgaWYgKGludm9pY2VJZCA9PT0gJycgfHwgKGludm9pY2VJZCAmJiBjdXJyZW50T3JkZXJJbnZvaWNlSWQgJiYgaW52b2ljZUlkID09PSBjdXJyZW50T3JkZXJJbnZvaWNlSWQpKSB7XG4gICAgICAgICAgdW5tYXRjaGluZ1Byb2R1Y3RQcmljZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5tYXRjaGluZ0ludm9pY2VQcmljZUV4aXN0cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh1bm1hdGNoaW5nSW52b2ljZVByaWNlRXhpc3RzKSB7XG4gICAgICByZXR1cm4gJ2ludm9pY2UnO1xuICAgIH1cbiAgICBpZiAodW5tYXRjaGluZ1Byb2R1Y3RQcmljZUV4aXN0cykge1xuICAgICAgcmV0dXJuICdwcm9kdWN0JztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmRlclByaWNlcyB7XG4gIGNhbGN1bGF0ZVRheEV4Y2x1ZGVkKHRheEluY2x1ZGVkLCB0YXhSYXRlUGVyQ2VudCwgY3VycmVuY3lQcmVjaXNpb24pIHtcbiAgICBsZXQgcHJpY2VUYXhJbmNsID0gcGFyc2VGbG9hdCh0YXhJbmNsdWRlZCk7XG5cbiAgICBpZiAocHJpY2VUYXhJbmNsIDwgMCB8fCBOdW1iZXIuaXNOYU4ocHJpY2VUYXhJbmNsKSkge1xuICAgICAgcHJpY2VUYXhJbmNsID0gMDtcbiAgICB9XG4gICAgY29uc3QgdGF4UmF0ZSA9IHRheFJhdGVQZXJDZW50IC8gMTAwICsgMTtcblxuICAgIHJldHVybiB3aW5kb3cucHNfcm91bmQocHJpY2VUYXhJbmNsIC8gdGF4UmF0ZSwgY3VycmVuY3lQcmVjaXNpb24pO1xuICB9XG5cbiAgY2FsY3VsYXRlVGF4SW5jbHVkZWQodGF4RXhjbHVkZWQsIHRheFJhdGVQZXJDZW50LCBjdXJyZW5jeVByZWNpc2lvbikge1xuICAgIGxldCBwcmljZVRheEV4Y2wgPSBwYXJzZUZsb2F0KHRheEV4Y2x1ZGVkKTtcblxuICAgIGlmIChwcmljZVRheEV4Y2wgPCAwIHx8IE51bWJlci5pc05hTihwcmljZVRheEV4Y2wpKSB7XG4gICAgICBwcmljZVRheEV4Y2wgPSAwO1xuICAgIH1cbiAgICBjb25zdCB0YXhSYXRlID0gdGF4UmF0ZVBlckNlbnQgLyAxMDAgKyAxO1xuXG4gICAgcmV0dXJuIHdpbmRvdy5wc19yb3VuZChwcmljZVRheEV4Y2wgKiB0YXhSYXRlLCBjdXJyZW5jeVByZWNpc2lvbik7XG4gIH1cblxuICBjYWxjdWxhdGVUb3RhbFByaWNlKHF1YW50aXR5LCB1bml0UHJpY2UsIGN1cnJlbmN5UHJlY2lzaW9uKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5wc19yb3VuZCh1bml0UHJpY2UgKiBxdWFudGl0eSwgY3VycmVuY3lQcmVjaXNpb24pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5pbXBvcnQgUm91dGVyIGZyb20gJ0Bjb21wb25lbnRzL3JvdXRlcic7XG5pbXBvcnQgT3JkZXJWaWV3UGFnZU1hcCBmcm9tICdAcGFnZXMvb3JkZXIvT3JkZXJWaWV3UGFnZU1hcCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JkZXJQcm9kdWN0QXV0b2NvbXBsZXRlIHtcbiAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICB0aGlzLmFjdGl2ZVNlYXJjaFJlcXVlc3QgPSBudWxsO1xuICAgIHRoaXMucm91dGVyID0gbmV3IFJvdXRlcigpO1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB0aGlzLnJlc3VsdHMgPSBbXTtcbiAgICB0aGlzLmRyb3Bkb3duTWVudSA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0U2VhcmNoSW5wdXRBdXRvY29tcGxldGVNZW51KTtcbiAgICAvKipcbiAgICAgKiBQZXJtaXQgdG8gbGluayB0byBlYWNoIHZhbHVlIG9mIGRyb3Bkb3duIGEgY2FsbGJhY2sgYWZ0ZXIgaXRlbSBpcyBjbGlja2VkXG4gICAgICovXG4gICAgdGhpcy5vbkl0ZW1DbGlja2VkQ2FsbGJhY2sgPSAoKSA9PiB7fTtcbiAgfVxuXG4gIGxpc3RlbkZvclNlYXJjaCgpIHtcbiAgICB0aGlzLmlucHV0Lm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlc3VsdHModGhpcy5yZXN1bHRzKTtcbiAgICB9KTtcblxuICAgIHRoaXMuaW5wdXQub24oJ2tleXVwJywgKGV2ZW50KSA9PiB0aGlzLmRlbGF5U2VhcmNoKGV2ZW50LmN1cnJlbnRUYXJnZXQpKTtcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAoKSA9PiB0aGlzLmRyb3Bkb3duTWVudS5oaWRlKCkpO1xuICB9XG5cbiAgZGVsYXlTZWFyY2goaW5wdXQpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0SWQpO1xuXG4gICAgLy8gU2VhcmNoIG9ubHkgaWYgdGhlIHNlYXJjaCBwaHJhc2UgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAyIGNoYXJhY3RlcnNcbiAgICBpZiAoaW5wdXQudmFsdWUubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaChpbnB1dC52YWx1ZSwgJChpbnB1dCkuZGF0YSgnY3VycmVuY3knKSwgJChpbnB1dCkuZGF0YSgnb3JkZXInKSk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHNlYXJjaChzZWFyY2gsIGN1cnJlbmN5LCBvcmRlcklkKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge3NlYXJjaF9waHJhc2U6IHNlYXJjaH07XG5cbiAgICBpZiAoY3VycmVuY3kpIHtcbiAgICAgIHBhcmFtcy5jdXJyZW5jeV9pZCA9IGN1cnJlbmN5O1xuICAgIH1cblxuICAgIGlmIChvcmRlcklkKSB7XG4gICAgICBwYXJhbXMub3JkZXJfaWQgPSBvcmRlcklkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZVNlYXJjaFJlcXVlc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuYWN0aXZlU2VhcmNoUmVxdWVzdC5hYm9ydCgpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlU2VhcmNoUmVxdWVzdCA9ICQuZ2V0KHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9vcmRlcnNfcHJvZHVjdHNfc2VhcmNoJywgcGFyYW1zKSk7XG4gICAgdGhpcy5hY3RpdmVTZWFyY2hSZXF1ZXN0XG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHRoaXMudXBkYXRlUmVzdWx0cyhyZXNwb25zZSkpXG4gICAgICAuYWx3YXlzKCgpID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVTZWFyY2hSZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUmVzdWx0cyhyZXN1bHRzKSB7XG4gICAgdGhpcy5kcm9wZG93bk1lbnUuZW1wdHkoKTtcblxuICAgIGlmICghcmVzdWx0cyB8fCAhcmVzdWx0cy5wcm9kdWN0cyB8fCBPYmplY3Qua2V5cyhyZXN1bHRzLnByb2R1Y3RzKS5sZW5ndGggPD0gMCkge1xuICAgICAgdGhpcy5kcm9wZG93bk1lbnUuaGlkZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzdWx0cyA9IHJlc3VsdHMucHJvZHVjdHM7XG5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMucmVzdWx0cykuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gJChgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgZGF0YS1pZD1cIiR7dmFsLnByb2R1Y3RJZH1cIiBocmVmPVwiI1wiPiR7dmFsLm5hbWV9PC9hPmApO1xuXG4gICAgICBsaW5rLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrZWQoJChldmVudC50YXJnZXQpLmRhdGEoJ2lkJykpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZHJvcGRvd25NZW51LmFwcGVuZChsaW5rKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJvcGRvd25NZW51LnNob3coKTtcbiAgfVxuXG4gIG9uSXRlbUNsaWNrZWQoaWQpIHtcbiAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3QgPSB0aGlzLnJlc3VsdHMuZmlsdGVyKChwcm9kdWN0KSA9PiBwcm9kdWN0LnByb2R1Y3RJZCA9PT0gaWQpO1xuXG4gICAgaWYgKHNlbGVjdGVkUHJvZHVjdC5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuaW5wdXQudmFsKHNlbGVjdGVkUHJvZHVjdFswXS5uYW1lKTtcbiAgICAgIHRoaXMub25JdGVtQ2xpY2tlZENhbGxiYWNrKHNlbGVjdGVkUHJvZHVjdFswXSk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBSb3V0ZXIgZnJvbSAnQGNvbXBvbmVudHMvcm91dGVyJztcbmltcG9ydCBPcmRlclZpZXdQYWdlTWFwIGZyb20gJ0BwYWdlcy9vcmRlci9PcmRlclZpZXdQYWdlTWFwJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdAY29tcG9uZW50cy9ldmVudC1lbWl0dGVyJztcbmltcG9ydCBPcmRlclZpZXdFdmVudE1hcCBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci12aWV3LWV2ZW50LW1hcCc7XG5pbXBvcnQgT3JkZXJQcmljZXMgZnJvbSAnQHBhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcHJpY2VzJztcbmltcG9ydCBPcmRlclByb2R1Y3RSZW5kZXJlciBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcm9kdWN0LXJlbmRlcmVyJztcbmltcG9ydCBDb25maXJtTW9kYWwgZnJvbSAnQGNvbXBvbmVudHMvbW9kYWwnO1xuaW1wb3J0IE9yZGVyUHJpY2VzUmVmcmVzaGVyIGZyb20gJ0BwYWdlcy9vcmRlci92aWV3L29yZGVyLXByaWNlcy1yZWZyZXNoZXInO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZGVyUHJvZHVjdEFkZCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucm91dGVyID0gbmV3IFJvdXRlcigpO1xuICAgIHRoaXMucHJvZHVjdEFkZEFjdGlvbkJ0biA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkQWN0aW9uQnRuKTtcbiAgICB0aGlzLnByb2R1Y3RJZElucHV0ID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRJZElucHV0KTtcbiAgICB0aGlzLmNvbWJpbmF0aW9uc0Jsb2NrID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRDb21iaW5hdGlvbnNCbG9jayk7XG4gICAgdGhpcy5jb21iaW5hdGlvbnNTZWxlY3QgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZENvbWJpbmF0aW9uc1NlbGVjdCk7XG4gICAgdGhpcy5wcmljZVRheEluY2x1ZGVkSW5wdXQgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZFByaWNlVGF4SW5jbElucHV0KTtcbiAgICB0aGlzLnByaWNlVGF4RXhjbHVkZWRJbnB1dCA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkUHJpY2VUYXhFeGNsSW5wdXQpO1xuICAgIHRoaXMudGF4UmF0ZUlucHV0ID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRUYXhSYXRlSW5wdXQpO1xuICAgIHRoaXMucXVhbnRpdHlJbnB1dCA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkUXVhbnRpdHlJbnB1dCk7XG4gICAgdGhpcy5hdmFpbGFibGVUZXh0ID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRBdmFpbGFibGVUZXh0KTtcbiAgICB0aGlzLmxvY2F0aW9uVGV4dCA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkTG9jYXRpb25UZXh0KTtcbiAgICB0aGlzLnRvdGFsUHJpY2VUZXh0ID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRUb3RhbFByaWNlVGV4dCk7XG4gICAgdGhpcy5pbnZvaWNlU2VsZWN0ID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRJbnZvaWNlU2VsZWN0KTtcbiAgICB0aGlzLmZyZWVTaGlwcGluZ1NlbGVjdCA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkRnJlZVNoaXBwaW5nU2VsZWN0KTtcbiAgICB0aGlzLnByb2R1Y3RBZGRNZW51QnRuID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRCdG4pO1xuICAgIHRoaXMuYXZhaWxhYmxlID0gbnVsbDtcbiAgICB0aGlzLnNldHVwTGlzdGVuZXIoKTtcbiAgICB0aGlzLnByb2R1Y3QgPSB7fTtcbiAgICB0aGlzLmN1cnJlbmN5UHJlY2lzaW9uID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGUpLmRhdGEoJ2N1cnJlbmN5UHJlY2lzaW9uJyk7XG4gICAgdGhpcy5wcmljZVRheENhbGN1bGF0b3IgPSBuZXcgT3JkZXJQcmljZXMoKTtcbiAgICB0aGlzLm9yZGVyUHJvZHVjdFJlbmRlcmVyID0gbmV3IE9yZGVyUHJvZHVjdFJlbmRlcmVyKCk7XG4gICAgdGhpcy5vcmRlclByaWNlc1JlZnJlc2hlciA9IG5ldyBPcmRlclByaWNlc1JlZnJlc2hlcigpO1xuICAgIHRoaXMuaXNPcmRlclRheEluY2x1ZGVkID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRSb3cpLmRhdGEoJ2lzT3JkZXJUYXhJbmNsdWRlZCcpO1xuICAgIHRoaXMudGF4RXhjbHVkZWQgPSBudWxsO1xuICAgIHRoaXMudGF4SW5jbHVkZWQgPSBudWxsO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lcigpIHtcbiAgICB0aGlzLmNvbWJpbmF0aW9uc1NlbGVjdC5vbignY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXhFeGNsdWRlZCA9IHdpbmRvdy5wc19yb3VuZChcbiAgICAgICAgJChldmVudC5jdXJyZW50VGFyZ2V0KVxuICAgICAgICAgIC5maW5kKCc6c2VsZWN0ZWQnKVxuICAgICAgICAgIC5kYXRhKCdwcmljZVRheEV4Y2x1ZGVkJyksXG4gICAgICAgIHRoaXMuY3VycmVuY3lQcmVjaXNpb24sXG4gICAgICApO1xuICAgICAgdGhpcy5wcmljZVRheEV4Y2x1ZGVkSW5wdXQudmFsKHRheEV4Y2x1ZGVkKTtcbiAgICAgIHRoaXMudGF4RXhjbHVkZWQgPSBwYXJzZUZsb2F0KHRheEV4Y2x1ZGVkKTtcblxuICAgICAgY29uc3QgdGF4SW5jbHVkZWQgPSB3aW5kb3cucHNfcm91bmQoXG4gICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldClcbiAgICAgICAgICAuZmluZCgnOnNlbGVjdGVkJylcbiAgICAgICAgICAuZGF0YSgncHJpY2VUYXhJbmNsdWRlZCcpLFxuICAgICAgICB0aGlzLmN1cnJlbmN5UHJlY2lzaW9uLFxuICAgICAgKTtcbiAgICAgIHRoaXMucHJpY2VUYXhJbmNsdWRlZElucHV0LnZhbCh0YXhJbmNsdWRlZCk7XG4gICAgICB0aGlzLnRheEluY2x1ZGVkID0gcGFyc2VGbG9hdCh0YXhJbmNsdWRlZCk7XG5cbiAgICAgIHRoaXMubG9jYXRpb25UZXh0Lmh0bWwoXG4gICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldClcbiAgICAgICAgICAuZmluZCgnOnNlbGVjdGVkJylcbiAgICAgICAgICAuZGF0YSgnbG9jYXRpb24nKSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYXZhaWxhYmxlID0gJChldmVudC5jdXJyZW50VGFyZ2V0KVxuICAgICAgICAuZmluZCgnOnNlbGVjdGVkJylcbiAgICAgICAgLmRhdGEoJ3N0b2NrJyk7XG5cbiAgICAgIHRoaXMucXVhbnRpdHlJbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0UmVuZGVyZXIudG9nZ2xlQ29sdW1uKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNDZWxsTG9jYXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5xdWFudGl0eUlucHV0Lm9uKCdjaGFuZ2Uga2V5dXAnLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmF2YWlsYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuZXdRdWFudGl0eSA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdBdmFpbGFibGUgPSB0aGlzLmF2YWlsYWJsZSAtIG5ld1F1YW50aXR5O1xuICAgICAgICBjb25zdCBhdmFpbGFibGVPdXRPZlN0b2NrID0gdGhpcy5hdmFpbGFibGVUZXh0LmRhdGEoJ2F2YWlsYWJsZU91dE9mU3RvY2snKTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVUZXh0LnRleHQocmVtYWluaW5nQXZhaWxhYmxlKTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVUZXh0LnRvZ2dsZUNsYXNzKCd0ZXh0LWRhbmdlciBmb250LXdlaWdodC1ib2xkJywgcmVtYWluaW5nQXZhaWxhYmxlIDwgMCk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVBZGRBY3Rpb25CdG4gPSBuZXdRdWFudGl0eSA8PSAwIHx8IChyZW1haW5pbmdBdmFpbGFibGUgPCAwICYmICFhdmFpbGFibGVPdXRPZlN0b2NrKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0QWRkQWN0aW9uQnRuLnByb3AoJ2Rpc2FibGVkJywgZGlzYWJsZUFkZEFjdGlvbkJ0bik7XG4gICAgICAgIHRoaXMuaW52b2ljZVNlbGVjdC5wcm9wKCdkaXNhYmxlZCcsICFhdmFpbGFibGVPdXRPZlN0b2NrICYmIHJlbWFpbmluZ0F2YWlsYWJsZSA8IDApO1xuXG4gICAgICAgIHRoaXMudGF4SW5jbHVkZWQgPSBwYXJzZUZsb2F0KHRoaXMucHJpY2VUYXhJbmNsdWRlZElucHV0LnZhbCgpKTtcbiAgICAgICAgdGhpcy50b3RhbFByaWNlVGV4dC5odG1sKFxuICAgICAgICAgIHRoaXMucHJpY2VUYXhDYWxjdWxhdG9yLmNhbGN1bGF0ZVRvdGFsUHJpY2UoXG4gICAgICAgICAgICBuZXdRdWFudGl0eSxcbiAgICAgICAgICAgIHRoaXMuaXNPcmRlclRheEluY2x1ZGVkID8gdGhpcy50YXhJbmNsdWRlZCA6IHRoaXMudGF4RXhjbHVkZWQsXG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5UHJlY2lzaW9uLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2R1Y3RJZElucHV0Lm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICB0aGlzLnByb2R1Y3RBZGRBY3Rpb25CdG4ucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgIHRoaXMuaW52b2ljZVNlbGVjdC5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcmljZVRheEluY2x1ZGVkSW5wdXQub24oJ2NoYW5nZSBrZXl1cCcsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy50YXhJbmNsdWRlZCA9IHBhcnNlRmxvYXQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIHRoaXMudGF4RXhjbHVkZWQgPSB0aGlzLnByaWNlVGF4Q2FsY3VsYXRvci5jYWxjdWxhdGVUYXhFeGNsdWRlZChcbiAgICAgICAgdGhpcy50YXhJbmNsdWRlZCxcbiAgICAgICAgdGhpcy50YXhSYXRlSW5wdXQudmFsKCksXG4gICAgICAgIHRoaXMuY3VycmVuY3lQcmVjaXNpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgcXVhbnRpdHkgPSBwYXJzZUludCh0aGlzLnF1YW50aXR5SW5wdXQudmFsKCksIDEwKTtcblxuICAgICAgdGhpcy5wcmljZVRheEV4Y2x1ZGVkSW5wdXQudmFsKHRoaXMudGF4RXhjbHVkZWQpO1xuICAgICAgdGhpcy50b3RhbFByaWNlVGV4dC5odG1sKFxuICAgICAgICB0aGlzLnByaWNlVGF4Q2FsY3VsYXRvci5jYWxjdWxhdGVUb3RhbFByaWNlKFxuICAgICAgICAgIHF1YW50aXR5LFxuICAgICAgICAgIHRoaXMuaXNPcmRlclRheEluY2x1ZGVkID8gdGhpcy50YXhJbmNsdWRlZCA6IHRoaXMudGF4RXhjbHVkZWQsXG4gICAgICAgICAgdGhpcy5jdXJyZW5jeVByZWNpc2lvbixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByaWNlVGF4RXhjbHVkZWRJbnB1dC5vbignY2hhbmdlIGtleXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnRheEV4Y2x1ZGVkID0gcGFyc2VGbG9hdChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgdGhpcy50YXhJbmNsdWRlZCA9IHRoaXMucHJpY2VUYXhDYWxjdWxhdG9yLmNhbGN1bGF0ZVRheEluY2x1ZGVkKFxuICAgICAgICB0aGlzLnRheEV4Y2x1ZGVkLFxuICAgICAgICB0aGlzLnRheFJhdGVJbnB1dC52YWwoKSxcbiAgICAgICAgdGhpcy5jdXJyZW5jeVByZWNpc2lvbixcbiAgICAgICk7XG4gICAgICBjb25zdCBxdWFudGl0eSA9IHBhcnNlSW50KHRoaXMucXVhbnRpdHlJbnB1dC52YWwoKSwgMTApO1xuXG4gICAgICB0aGlzLnByaWNlVGF4SW5jbHVkZWRJbnB1dC52YWwodGhpcy50YXhJbmNsdWRlZCk7XG4gICAgICB0aGlzLnRvdGFsUHJpY2VUZXh0Lmh0bWwoXG4gICAgICAgIHRoaXMucHJpY2VUYXhDYWxjdWxhdG9yLmNhbGN1bGF0ZVRvdGFsUHJpY2UoXG4gICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgdGhpcy5pc09yZGVyVGF4SW5jbHVkZWQgPyB0aGlzLnRheEluY2x1ZGVkIDogdGhpcy50YXhFeGNsdWRlZCxcbiAgICAgICAgICB0aGlzLmN1cnJlbmN5UHJlY2lzaW9uLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvZHVjdEFkZEFjdGlvbkJ0bi5vbignY2xpY2snLCAoZXZlbnQpID0+IHRoaXMuY29uZmlybU5ld0ludm9pY2UoZXZlbnQpKTtcbiAgICB0aGlzLmludm9pY2VTZWxlY3Qub24oJ2NoYW5nZScsICgpID0+IHRoaXMub3JkZXJQcm9kdWN0UmVuZGVyZXIudG9nZ2xlUHJvZHVjdEFkZE5ld0ludm9pY2VJbmZvKCkpO1xuICB9XG5cbiAgc2V0UHJvZHVjdChwcm9kdWN0KSB7XG4gICAgdGhpcy5wcm9kdWN0SWRJbnB1dC52YWwocHJvZHVjdC5wcm9kdWN0SWQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXG4gICAgY29uc3QgdGF4RXhjbHVkZWQgPSB3aW5kb3cucHNfcm91bmQocHJvZHVjdC5wcmljZVRheEV4Y2wsIHRoaXMuY3VycmVuY3lQcmVjaXNpb24pO1xuICAgIHRoaXMucHJpY2VUYXhFeGNsdWRlZElucHV0LnZhbCh0YXhFeGNsdWRlZCk7XG4gICAgdGhpcy50YXhFeGNsdWRlZCA9IHBhcnNlRmxvYXQodGF4RXhjbHVkZWQpO1xuXG4gICAgY29uc3QgdGF4SW5jbHVkZWQgPSB3aW5kb3cucHNfcm91bmQocHJvZHVjdC5wcmljZVRheEluY2wsIHRoaXMuY3VycmVuY3lQcmVjaXNpb24pO1xuICAgIHRoaXMucHJpY2VUYXhJbmNsdWRlZElucHV0LnZhbCh0YXhJbmNsdWRlZCk7XG4gICAgdGhpcy50YXhJbmNsdWRlZCA9IHBhcnNlRmxvYXQodGF4SW5jbHVkZWQpO1xuXG4gICAgdGhpcy50YXhSYXRlSW5wdXQudmFsKHByb2R1Y3QudGF4UmF0ZSk7XG4gICAgdGhpcy5sb2NhdGlvblRleHQuaHRtbChwcm9kdWN0LmxvY2F0aW9uKTtcbiAgICB0aGlzLmF2YWlsYWJsZSA9IHByb2R1Y3Quc3RvY2s7XG4gICAgdGhpcy5hdmFpbGFibGVUZXh0LmRhdGEoJ2F2YWlsYWJsZU91dE9mU3RvY2snLCBwcm9kdWN0LmF2YWlsYWJsZU91dE9mU3RvY2spO1xuICAgIHRoaXMucXVhbnRpdHlJbnB1dC52YWwoMSk7XG4gICAgdGhpcy5xdWFudGl0eUlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgIHRoaXMuc2V0Q29tYmluYXRpb25zKHByb2R1Y3QuY29tYmluYXRpb25zKTtcbiAgICB0aGlzLm9yZGVyUHJvZHVjdFJlbmRlcmVyLnRvZ2dsZUNvbHVtbihPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzQ2VsbExvY2F0aW9uKTtcbiAgfVxuXG4gIHNldENvbWJpbmF0aW9ucyhjb21iaW5hdGlvbnMpIHtcbiAgICB0aGlzLmNvbWJpbmF0aW9uc1NlbGVjdC5lbXB0eSgpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyhjb21iaW5hdGlvbnMpLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgdGhpcy5jb21iaW5hdGlvbnNTZWxlY3QuYXBwZW5kKFxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlbiAqL1xuICAgICAgICBgPG9wdGlvbiB2YWx1ZT1cIiR7dmFsLmF0dHJpYnV0ZUNvbWJpbmF0aW9uSWR9XCIgZGF0YS1wcmljZS10YXgtZXhjbHVkZWQ9XCIke3ZhbC5wcmljZVRheEV4Y2x1ZGVkfVwiIGRhdGEtcHJpY2UtdGF4LWluY2x1ZGVkPVwiJHt2YWwucHJpY2VUYXhJbmNsdWRlZH1cIiBkYXRhLXN0b2NrPVwiJHt2YWwuc3RvY2t9XCIgZGF0YS1sb2NhdGlvbj1cIiR7dmFsLmxvY2F0aW9ufVwiPiR7dmFsLmF0dHJpYnV0ZX08L29wdGlvbj5gLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29tYmluYXRpb25zQmxvY2sudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScsIE9iamVjdC5rZXlzKGNvbWJpbmF0aW9ucykubGVuZ3RoID09PSAwKTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjb21iaW5hdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29tYmluYXRpb25zU2VsZWN0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFByb2R1Y3Qob3JkZXJJZCkge1xuICAgIHRoaXMucHJvZHVjdEFkZEFjdGlvbkJ0bi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgIHRoaXMuaW52b2ljZVNlbGVjdC5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgIHRoaXMuY29tYmluYXRpb25zU2VsZWN0LnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBwcm9kdWN0X2lkOiB0aGlzLnByb2R1Y3RJZElucHV0LnZhbCgpLFxuICAgICAgY29tYmluYXRpb25faWQ6ICQoJzpzZWxlY3RlZCcsIHRoaXMuY29tYmluYXRpb25zU2VsZWN0KS52YWwoKSxcbiAgICAgIHByaWNlX3RheF9pbmNsOiB0aGlzLnByaWNlVGF4SW5jbHVkZWRJbnB1dC52YWwoKSxcbiAgICAgIHByaWNlX3RheF9leGNsOiB0aGlzLnByaWNlVGF4RXhjbHVkZWRJbnB1dC52YWwoKSxcbiAgICAgIHF1YW50aXR5OiB0aGlzLnF1YW50aXR5SW5wdXQudmFsKCksXG4gICAgICBpbnZvaWNlX2lkOiB0aGlzLmludm9pY2VTZWxlY3QudmFsKCksXG4gICAgICBmcmVlX3NoaXBwaW5nOiB0aGlzLmZyZWVTaGlwcGluZ1NlbGVjdC5wcm9wKCdjaGVja2VkJyksXG4gICAgfTtcblxuICAgICQuYWpheCh7XG4gICAgICB1cmw6IHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9vcmRlcnNfYWRkX3Byb2R1Y3QnLCB7b3JkZXJJZH0pLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBkYXRhOiBwYXJhbXMsXG4gICAgfSkudGhlbihcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBFdmVudEVtaXR0ZXIuZW1pdChPcmRlclZpZXdFdmVudE1hcC5wcm9kdWN0QWRkZWRUb09yZGVyLCB7XG4gICAgICAgICAgb3JkZXJJZCxcbiAgICAgICAgICBvcmRlclByb2R1Y3RJZDogcGFyYW1zLnByb2R1Y3RfaWQsXG4gICAgICAgICAgbmV3Um93OiByZXNwb25zZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMucHJvZHVjdEFkZEFjdGlvbkJ0bi5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5pbnZvaWNlU2VsZWN0LnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgICB0aGlzLmNvbWJpbmF0aW9uc1NlbGVjdC5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblxuICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2VKU09OICYmIHJlc3BvbnNlLnJlc3BvbnNlSlNPTi5tZXNzYWdlKSB7XG4gICAgICAgICAgJC5ncm93bC5lcnJvcih7bWVzc2FnZTogcmVzcG9uc2UucmVzcG9uc2VKU09OLm1lc3NhZ2V9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgY29uZmlybU5ld0ludm9pY2UoZXZlbnQpIHtcbiAgICBjb25zdCBpbnZvaWNlSWQgPSBwYXJzZUludCh0aGlzLmludm9pY2VTZWxlY3QudmFsKCksIDEwKTtcbiAgICBjb25zdCBvcmRlcklkID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKCdvcmRlcklkJyk7XG5cbiAgICAvLyBFeHBsaWNpdCAwIHZhbHVlIGlzIHVzZWQgd2hlbiB3ZSB0aGUgdXNlciBzZWxlY3RlZCBOZXcgSW52b2ljZVxuICAgIGlmIChpbnZvaWNlSWQgPT09IDApIHtcbiAgICAgIGNvbnN0IG1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbChcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbW9kYWwtY29uZmlybS1uZXctaW52b2ljZScsXG4gICAgICAgICAgY29uZmlybVRpdGxlOiB0aGlzLmludm9pY2VTZWxlY3QuZGF0YSgnbW9kYWwtdGl0bGUnKSxcbiAgICAgICAgICBjb25maXJtTWVzc2FnZTogdGhpcy5pbnZvaWNlU2VsZWN0LmRhdGEoJ21vZGFsLWJvZHknKSxcbiAgICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6IHRoaXMuaW52b2ljZVNlbGVjdC5kYXRhKCdtb2RhbC1hcHBseScpLFxuICAgICAgICAgIGNsb3NlQnV0dG9uTGFiZWw6IHRoaXMuaW52b2ljZVNlbGVjdC5kYXRhKCdtb2RhbC1jYW5jZWwnKSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29uZmlybU5ld1ByaWNlKG9yZGVySWQsIGludm9pY2VJZCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbW9kYWwuc2hvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMYXN0IGNhc2UgaXMgTmFuLCB0aGUgc2VsZWN0b3IgaXMgbm90IGV2ZW4gcHJlc2VudCwgd2Ugc2ltcGx5IGFkZCBwcm9kdWN0IGFuZCBsZXQgdGhlIEJPIGhhbmRsZSBpdFxuICAgICAgdGhpcy5hZGRQcm9kdWN0KG9yZGVySWQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1OZXdQcmljZShvcmRlcklkLCBpbnZvaWNlSWQpIHtcbiAgICBjb25zdCBjb21iaW5hdGlvblZhbHVlID0gJCgnOnNlbGVjdGVkJywgdGhpcy5jb21iaW5hdGlvbnNTZWxlY3QpLnZhbCgpO1xuICAgIGNvbnN0IGNvbWJpbmF0aW9uSWQgPSB0eXBlb2YgY29tYmluYXRpb25WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgPyAwIDogY29tYmluYXRpb25WYWx1ZTtcbiAgICBjb25zdCBwcm9kdWN0UHJpY2VNYXRjaCA9IHRoaXMub3JkZXJQcmljZXNSZWZyZXNoZXIuY2hlY2tPdGhlclByb2R1Y3RQcmljZXNNYXRjaChcbiAgICAgIHRoaXMucHJpY2VUYXhJbmNsdWRlZElucHV0LnZhbCgpLFxuICAgICAgdGhpcy5wcm9kdWN0SWRJbnB1dC52YWwoKSxcbiAgICAgIGNvbWJpbmF0aW9uSWQsXG4gICAgICBpbnZvaWNlSWQsXG4gICAgKTtcblxuICAgIGlmIChwcm9kdWN0UHJpY2VNYXRjaCA9PT0gJ2ludm9pY2UnKSB7XG4gICAgICBjb25zdCBtb2RhbEVkaXRQcmljZSA9IG5ldyBDb25maXJtTW9kYWwoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ21vZGFsLWNvbmZpcm0tbmV3LXByaWNlJyxcbiAgICAgICAgICBjb25maXJtVGl0bGU6IHRoaXMuaW52b2ljZVNlbGVjdC5kYXRhKCdtb2RhbC1lZGl0LXByaWNlLXRpdGxlJyksXG4gICAgICAgICAgY29uZmlybU1lc3NhZ2U6IHRoaXMuaW52b2ljZVNlbGVjdC5kYXRhKCdtb2RhbC1lZGl0LXByaWNlLWJvZHknKSxcbiAgICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6IHRoaXMuaW52b2ljZVNlbGVjdC5kYXRhKCdtb2RhbC1lZGl0LXByaWNlLWFwcGx5JyksXG4gICAgICAgICAgY2xvc2VCdXR0b25MYWJlbDogdGhpcy5pbnZvaWNlU2VsZWN0LmRhdGEoJ21vZGFsLWVkaXQtcHJpY2UtY2FuY2VsJyksXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmFkZFByb2R1Y3Qob3JkZXJJZCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbW9kYWxFZGl0UHJpY2Uuc2hvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFByb2R1Y3Qob3JkZXJJZCk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBSb3V0ZXIgZnJvbSAnQGNvbXBvbmVudHMvcm91dGVyJztcbmltcG9ydCBPcmRlclZpZXdQYWdlTWFwIGZyb20gJ0BwYWdlcy9vcmRlci9PcmRlclZpZXdQYWdlTWFwJztcbmltcG9ydCB7TnVtYmVyRm9ybWF0dGVyfSBmcm9tICdAYXBwL2NsZHInO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogbWFuYWdlcyBhbGwgcHJvZHVjdCBjYW5jZWwgYWN0aW9ucywgdGhhdCBpbmNsdWRlcyBhbGwgcmVmdW5kIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JkZXJQcm9kdWN0Q2FuY2VsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yb3V0ZXIgPSBuZXcgUm91dGVyKCk7XG4gICAgdGhpcy5jYW5jZWxQcm9kdWN0Rm9ybSA9ICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmZvcm0pO1xuICAgIHRoaXMub3JkZXJJZCA9IHRoaXMuY2FuY2VsUHJvZHVjdEZvcm0uZGF0YSgnb3JkZXJJZCcpO1xuICAgIHRoaXMub3JkZXJEZWxpdmVyZWQgPSBwYXJzZUludCh0aGlzLmNhbmNlbFByb2R1Y3RGb3JtLmRhdGEoJ2lzRGVsaXZlcmVkJyksIDEwKSA9PT0gMTtcbiAgICB0aGlzLmlzVGF4SW5jbHVkZWQgPSBwYXJzZUludCh0aGlzLmNhbmNlbFByb2R1Y3RGb3JtLmRhdGEoJ2lzVGF4SW5jbHVkZWQnKSwgMTApID09PSAxO1xuICAgIHRoaXMuZGlzY291bnRzQW1vdW50ID0gcGFyc2VGbG9hdCh0aGlzLmNhbmNlbFByb2R1Y3RGb3JtLmRhdGEoJ2Rpc2NvdW50c0Ftb3VudCcpKTtcbiAgICB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0dGVyLmJ1aWxkKFxuICAgICAgdGhpcy5jYW5jZWxQcm9kdWN0Rm9ybS5kYXRhKCdwcmljZVNwZWNpZmljYXRpb24nKSxcbiAgICApO1xuICAgIHRoaXMudXNlQW1vdW50SW5wdXRzID0gdHJ1ZTtcbiAgICB0aGlzLmxpc3RlbkZvcklucHV0cygpO1xuICB9XG5cbiAgc2hvd1BhcnRpYWxSZWZ1bmQoKSB7XG4gICAgLy8gQWx3YXlzIHN0YXJ0IGJ5IGhpZGluZyBlbGVtZW50cyB0aGVuIHNob3cgdGhlIG90aGVycywgc2luY2Ugc29tZSBlbGVtZW50cyBhcmUgY29tbW9uXG4gICAgdGhpcy5oaWRlQ2FuY2VsRWxlbWVudHMoKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC50b2dnbGUucGFydGlhbFJlZnVuZCkuc2hvdygpO1xuICAgIHRoaXMudXNlQW1vdW50SW5wdXRzID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRGb3JtKFxuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuYnV0dG9ucy5zYXZlKS5kYXRhKCdwYXJ0aWFsUmVmdW5kTGFiZWwnKSxcbiAgICAgIHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9vcmRlcnNfcGFydGlhbF9yZWZ1bmQnLCB7XG4gICAgICAgIG9yZGVySWQ6IHRoaXMub3JkZXJJZCxcbiAgICAgIH0pLFxuICAgICAgJ3BhcnRpYWwtcmVmdW5kJyxcbiAgICApO1xuICB9XG5cbiAgc2hvd1N0YW5kYXJkUmVmdW5kKCkge1xuICAgIC8vIEFsd2F5cyBzdGFydCBieSBoaWRpbmcgZWxlbWVudHMgdGhlbiBzaG93IHRoZSBvdGhlcnMsIHNpbmNlIHNvbWUgZWxlbWVudHMgYXJlIGNvbW1vblxuICAgIHRoaXMuaGlkZUNhbmNlbEVsZW1lbnRzKCk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QudG9nZ2xlLnN0YW5kYXJkUmVmdW5kKS5zaG93KCk7XG4gICAgdGhpcy51c2VBbW91bnRJbnB1dHMgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRGb3JtKFxuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuYnV0dG9ucy5zYXZlKS5kYXRhKCdzdGFuZGFyZFJlZnVuZExhYmVsJyksXG4gICAgICB0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX3N0YW5kYXJkX3JlZnVuZCcsIHtcbiAgICAgICAgb3JkZXJJZDogdGhpcy5vcmRlcklkLFxuICAgICAgfSksXG4gICAgICAnc3RhbmRhcmQtcmVmdW5kJyxcbiAgICApO1xuICB9XG5cbiAgc2hvd1JldHVyblByb2R1Y3QoKSB7XG4gICAgLy8gQWx3YXlzIHN0YXJ0IGJ5IGhpZGluZyBlbGVtZW50cyB0aGVuIHNob3cgdGhlIG90aGVycywgc2luY2Ugc29tZSBlbGVtZW50cyBhcmUgY29tbW9uXG4gICAgdGhpcy5oaWRlQ2FuY2VsRWxlbWVudHMoKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC50b2dnbGUucmV0dXJuUHJvZHVjdCkuc2hvdygpO1xuICAgIHRoaXMudXNlQW1vdW50SW5wdXRzID0gZmFsc2U7XG4gICAgdGhpcy5pbml0Rm9ybShcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmJ1dHRvbnMuc2F2ZSkuZGF0YSgncmV0dXJuUHJvZHVjdExhYmVsJyksXG4gICAgICB0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX3JldHVybl9wcm9kdWN0Jywge1xuICAgICAgICBvcmRlcklkOiB0aGlzLm9yZGVySWQsXG4gICAgICB9KSxcbiAgICAgICdyZXR1cm4tcHJvZHVjdCcsXG4gICAgKTtcbiAgfVxuXG4gIGhpZGVSZWZ1bmQoKSB7XG4gICAgdGhpcy5oaWRlQ2FuY2VsRWxlbWVudHMoKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC50YWJsZS5hY3Rpb25zKS5zaG93KCk7XG4gIH1cblxuICBoaWRlQ2FuY2VsRWxlbWVudHMoKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QudG9nZ2xlLnN0YW5kYXJkUmVmdW5kKS5oaWRlKCk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QudG9nZ2xlLnBhcnRpYWxSZWZ1bmQpLmhpZGUoKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC50b2dnbGUucmV0dXJuUHJvZHVjdCkuaGlkZSgpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LnRhYmxlLmFjdGlvbnMpLmhpZGUoKTtcbiAgfVxuXG4gIGluaXRGb3JtKGFjdGlvbk5hbWUsIGZvcm1BY3Rpb24sIGZvcm1DbGFzcykge1xuICAgIHRoaXMudXBkYXRlVm91Y2hlclJlZnVuZCgpO1xuXG4gICAgdGhpcy5jYW5jZWxQcm9kdWN0Rm9ybS5wcm9wKCdhY3Rpb24nLCBmb3JtQWN0aW9uKTtcbiAgICB0aGlzLmNhbmNlbFByb2R1Y3RGb3JtXG4gICAgICAucmVtb3ZlQ2xhc3MoJ3N0YW5kYXJkLXJlZnVuZCBwYXJ0aWFsLXJlZnVuZCByZXR1cm4tcHJvZHVjdCBjYW5jZWwtcHJvZHVjdCcpXG4gICAgICAuYWRkQ2xhc3MoZm9ybUNsYXNzKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC5idXR0b25zLnNhdmUpLmh0bWwoYWN0aW9uTmFtZSk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QudGFibGUuaGVhZGVyKS5odG1sKGFjdGlvbk5hbWUpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmNoZWNrYm94ZXMucmVzdG9jaykucHJvcCgnY2hlY2tlZCcsIHRoaXMub3JkZXJEZWxpdmVyZWQpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmNoZWNrYm94ZXMuY3JlZGl0U2xpcCkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmNoZWNrYm94ZXMudm91Y2hlcikucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGxpc3RlbkZvcklucHV0cygpIHtcbiAgICAkKGRvY3VtZW50KS5vbignY2hhbmdlJywgT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmlucHV0cy5xdWFudGl0eSwgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCAkcHJvZHVjdFF1YW50aXR5SW5wdXQgPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgICBjb25zdCAkcGFyZW50Q2VsbCA9ICRwcm9kdWN0UXVhbnRpdHlJbnB1dC5wYXJlbnRzKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC50YWJsZS5jZWxsKTtcbiAgICAgIGNvbnN0ICRwcm9kdWN0QW1vdW50ID0gJHBhcmVudENlbGwuZmluZChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuaW5wdXRzLmFtb3VudCk7XG4gICAgICBjb25zdCBwcm9kdWN0UXVhbnRpdHkgPSBwYXJzZUludCgkcHJvZHVjdFF1YW50aXR5SW5wdXQudmFsKCksIDEwKTtcblxuICAgICAgaWYgKHByb2R1Y3RRdWFudGl0eSA8PSAwKSB7XG4gICAgICAgICRwcm9kdWN0QW1vdW50LnZhbCgwKTtcbiAgICAgICAgdGhpcy51cGRhdGVWb3VjaGVyUmVmdW5kKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJpY2VGaWVsZE5hbWUgPSB0aGlzLmlzVGF4SW5jbHVkZWQgPyAncHJvZHVjdFByaWNlVGF4SW5jbCcgOiAncHJvZHVjdFByaWNlVGF4RXhjbCc7XG4gICAgICBjb25zdCBwcm9kdWN0VW5pdFByaWNlID0gcGFyc2VGbG9hdCgkcHJvZHVjdFF1YW50aXR5SW5wdXQuZGF0YShwcmljZUZpZWxkTmFtZSkpO1xuICAgICAgY29uc3QgYW1vdW50UmVmdW5kYWJsZSA9IHBhcnNlRmxvYXQoJHByb2R1Y3RRdWFudGl0eUlucHV0LmRhdGEoJ2Ftb3VudFJlZnVuZGFibGUnKSk7XG4gICAgICBjb25zdCBndWVzc2VkQW1vdW50ID0gcHJvZHVjdFVuaXRQcmljZSAqIHByb2R1Y3RRdWFudGl0eSA8IGFtb3VudFJlZnVuZGFibGVcbiAgICAgICAgPyBwcm9kdWN0VW5pdFByaWNlICogcHJvZHVjdFF1YW50aXR5XG4gICAgICAgIDogYW1vdW50UmVmdW5kYWJsZTtcbiAgICAgIGNvbnN0IGFtb3VudFZhbHVlID0gcGFyc2VGbG9hdCgkcHJvZHVjdEFtb3VudC52YWwoKSk7XG5cbiAgICAgIGlmICh0aGlzLnVzZUFtb3VudElucHV0cykge1xuICAgICAgICB0aGlzLnVwZGF0ZUFtb3VudElucHV0KCRwcm9kdWN0UXVhbnRpdHlJbnB1dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJvZHVjdEFtb3VudC52YWwoKSA9PT0gJycgfHwgYW1vdW50VmFsdWUgPT09IDAgfHwgYW1vdW50VmFsdWUgPiBndWVzc2VkQW1vdW50KSB7XG4gICAgICAgICRwcm9kdWN0QW1vdW50LnZhbChndWVzc2VkQW1vdW50KTtcbiAgICAgICAgdGhpcy51cGRhdGVWb3VjaGVyUmVmdW5kKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2hhbmdlJywgT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmlucHV0cy5hbW91bnQsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVm91Y2hlclJlZnVuZCgpO1xuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsIE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC5pbnB1dHMuc2VsZWN0b3IsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgJHByb2R1Y3RDaGVja2JveCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGNvbnN0ICRwYXJlbnRDZWxsID0gJHByb2R1Y3RDaGVja2JveC5wYXJlbnRzKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC50YWJsZS5jZWxsKTtcbiAgICAgIGNvbnN0IHByb2R1Y3RRdWFudGl0eUlucHV0ID0gJHBhcmVudENlbGwuZmluZChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuaW5wdXRzLnF1YW50aXR5KTtcbiAgICAgIGNvbnN0IHJlZnVuZGFibGVRdWFudGl0eSA9IHBhcnNlSW50KHByb2R1Y3RRdWFudGl0eUlucHV0LmRhdGEoJ3F1YW50aXR5UmVmdW5kYWJsZScpLCAxMCk7XG4gICAgICBjb25zdCBwcm9kdWN0UXVhbnRpdHkgPSBwYXJzZUludChwcm9kdWN0UXVhbnRpdHlJbnB1dC52YWwoKSwgMTApO1xuXG4gICAgICBpZiAoISRwcm9kdWN0Q2hlY2tib3guaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgcHJvZHVjdFF1YW50aXR5SW5wdXQudmFsKDApO1xuICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNOYU4ocHJvZHVjdFF1YW50aXR5KSB8fCBwcm9kdWN0UXVhbnRpdHkgPT09IDApIHtcbiAgICAgICAgcHJvZHVjdFF1YW50aXR5SW5wdXQudmFsKHJlZnVuZGFibGVRdWFudGl0eSk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZvdWNoZXJSZWZ1bmQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUFtb3VudElucHV0KCRwcm9kdWN0UXVhbnRpdHlJbnB1dCkge1xuICAgIGNvbnN0ICRwYXJlbnRDZWxsID0gJHByb2R1Y3RRdWFudGl0eUlucHV0LnBhcmVudHMoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LnRhYmxlLmNlbGwpO1xuICAgIGNvbnN0ICRwcm9kdWN0QW1vdW50ID0gJHBhcmVudENlbGwuZmluZChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuaW5wdXRzLmFtb3VudCk7XG4gICAgY29uc3QgcHJvZHVjdFF1YW50aXR5ID0gcGFyc2VJbnQoJHByb2R1Y3RRdWFudGl0eUlucHV0LnZhbCgpLCAxMCk7XG5cbiAgICBpZiAocHJvZHVjdFF1YW50aXR5IDw9IDApIHtcbiAgICAgICRwcm9kdWN0QW1vdW50LnZhbCgwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByaWNlRmllbGROYW1lID0gdGhpcy5pc1RheEluY2x1ZGVkID8gJ3Byb2R1Y3RQcmljZVRheEluY2wnIDogJ3Byb2R1Y3RQcmljZVRheEV4Y2wnO1xuICAgIGNvbnN0IHByb2R1Y3RVbml0UHJpY2UgPSBwYXJzZUZsb2F0KCRwcm9kdWN0UXVhbnRpdHlJbnB1dC5kYXRhKHByaWNlRmllbGROYW1lKSk7XG4gICAgY29uc3QgYW1vdW50UmVmdW5kYWJsZSA9IHBhcnNlRmxvYXQoJHByb2R1Y3RRdWFudGl0eUlucHV0LmRhdGEoJ2Ftb3VudFJlZnVuZGFibGUnKSk7XG4gICAgY29uc3QgZ3Vlc3NlZEFtb3VudCA9IHByb2R1Y3RVbml0UHJpY2UgKiBwcm9kdWN0UXVhbnRpdHkgPCBhbW91bnRSZWZ1bmRhYmxlXG4gICAgICA/IHByb2R1Y3RVbml0UHJpY2UgKiBwcm9kdWN0UXVhbnRpdHlcbiAgICAgIDogYW1vdW50UmVmdW5kYWJsZTtcbiAgICBjb25zdCBhbW91bnRWYWx1ZSA9IHBhcnNlRmxvYXQoJHByb2R1Y3RBbW91bnQudmFsKCkpO1xuXG4gICAgaWYgKCRwcm9kdWN0QW1vdW50LnZhbCgpID09PSAnJyB8fCBhbW91bnRWYWx1ZSA9PT0gMCB8fCBhbW91bnRWYWx1ZSA+IGd1ZXNzZWRBbW91bnQpIHtcbiAgICAgICRwcm9kdWN0QW1vdW50LnZhbChndWVzc2VkQW1vdW50KTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZ1bmRBbW91bnQoKSB7XG4gICAgbGV0IHRvdGFsQW1vdW50ID0gMDtcblxuICAgIGlmICh0aGlzLnVzZUFtb3VudElucHV0cykge1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuaW5wdXRzLmFtb3VudCkuZWFjaCgoaW5kZXgsIGFtb3VudCkgPT4ge1xuICAgICAgICBjb25zdCBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChhbW91bnQudmFsdWUpO1xuICAgICAgICB0b3RhbEFtb3VudCArPSAhTnVtYmVyLmlzTmFOKGZsb2F0VmFsdWUpID8gZmxvYXRWYWx1ZSA6IDA7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuaW5wdXRzLnF1YW50aXR5KS5lYWNoKChpbmRleCwgcXVhbnRpdHkpID0+IHtcbiAgICAgICAgY29uc3QgJHF1YW50aXR5SW5wdXQgPSAkKHF1YW50aXR5KTtcbiAgICAgICAgY29uc3QgcHJpY2VGaWVsZE5hbWUgPSB0aGlzLmlzVGF4SW5jbHVkZWQgPyAncHJvZHVjdFByaWNlVGF4SW5jbCcgOiAncHJvZHVjdFByaWNlVGF4RXhjbCc7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RVbml0UHJpY2UgPSBwYXJzZUZsb2F0KCRxdWFudGl0eUlucHV0LmRhdGEocHJpY2VGaWVsZE5hbWUpKTtcbiAgICAgICAgY29uc3QgcHJvZHVjdFF1YW50aXR5ID0gcGFyc2VJbnQoJHF1YW50aXR5SW5wdXQudmFsKCksIDEwKTtcbiAgICAgICAgdG90YWxBbW91bnQgKz0gcHJvZHVjdFF1YW50aXR5ICogcHJvZHVjdFVuaXRQcmljZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0b3RhbEFtb3VudDtcbiAgfVxuXG4gIHVwZGF0ZVZvdWNoZXJSZWZ1bmQoKSB7XG4gICAgY29uc3QgcmVmdW5kQW1vdW50ID0gdGhpcy5nZXRSZWZ1bmRBbW91bnQoKTtcblxuICAgIHRoaXMudXBkYXRlVm91Y2hlclJlZnVuZFR5cGVMYWJlbChcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LnJhZGlvcy52b3VjaGVyUmVmdW5kVHlwZS5wcm9kdWN0UHJpY2VzKSxcbiAgICAgIHJlZnVuZEFtb3VudCxcbiAgICApO1xuICAgIGNvbnN0IHJlZnVuZFZvdWNoZXJFeGNsdWRlZCA9IHJlZnVuZEFtb3VudCAtIHRoaXMuZGlzY291bnRzQW1vdW50O1xuICAgIHRoaXMudXBkYXRlVm91Y2hlclJlZnVuZFR5cGVMYWJlbChcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LnJhZGlvcy52b3VjaGVyUmVmdW5kVHlwZS5wcm9kdWN0UHJpY2VzVm91Y2hlckV4Y2x1ZGVkKSxcbiAgICAgIHJlZnVuZFZvdWNoZXJFeGNsdWRlZCxcbiAgICApO1xuXG4gICAgLy8gRGlzYWJsZSB2b3VjaGVyIGV4Y2x1ZGVkIG9wdGlvbiB3aGVuIHRoZSB2b3VjaGVyIGFtb3VudCBpcyB0b28gaGlnaFxuICAgIGlmIChyZWZ1bmRWb3VjaGVyRXhjbHVkZWQgPCAwKSB7XG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC5yYWRpb3Mudm91Y2hlclJlZnVuZFR5cGUucHJvZHVjdFByaWNlc1ZvdWNoZXJFeGNsdWRlZClcbiAgICAgICAgLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSlcbiAgICAgICAgLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC5yYWRpb3Mudm91Y2hlclJlZnVuZFR5cGUucHJvZHVjdFByaWNlcykucHJvcChcbiAgICAgICAgJ2NoZWNrZWQnLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LnJhZGlvcy52b3VjaGVyUmVmdW5kVHlwZS5uZWdhdGl2ZUVycm9yTWVzc2FnZSkuc2hvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC5yYWRpb3Mudm91Y2hlclJlZnVuZFR5cGUucHJvZHVjdFByaWNlc1ZvdWNoZXJFeGNsdWRlZCkucHJvcChcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QucmFkaW9zLnZvdWNoZXJSZWZ1bmRUeXBlLm5lZ2F0aXZlRXJyb3JNZXNzYWdlKS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVm91Y2hlclJlZnVuZFR5cGVMYWJlbCgkaW5wdXQsIHJlZnVuZEFtb3VudCkge1xuICAgIGNvbnN0IGRlZmF1bHRMYWJlbCA9ICRpbnB1dC5kYXRhKCdkZWZhdWx0TGFiZWwnKTtcbiAgICBjb25zdCAkbGFiZWwgPSAkaW5wdXQucGFyZW50cygnbGFiZWwnKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRBbW91bnQgPSB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLmZvcm1hdChyZWZ1bmRBbW91bnQpO1xuXG4gICAgLy8gQ2hhbmdlIHRoZSBlbmRpbmcgdGV4dCBwYXJ0IG9ubHkgdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIGlucHV0ICh0aGUgRU9MIGlzIG9uIHB1cnBvc2UgZm9yIGJldHRlciBkaXNwbGF5KVxuICAgICRsYWJlbC5nZXQoMCkubGFzdENoaWxkLm5vZGVWYWx1ZSA9IGBcbiAgICAke2RlZmF1bHRMYWJlbH0gJHtmb3JtYXR0ZWRBbW91bnR9YDtcbiAgfVxuXG4gIHNob3dDYW5jZWxQcm9kdWN0Rm9ybSgpIHtcbiAgICBjb25zdCBjYW5jZWxQcm9kdWN0Um91dGUgPSB0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX2NhbmNlbGxhdGlvbicsIHtvcmRlcklkOiB0aGlzLm9yZGVySWR9KTtcbiAgICB0aGlzLmluaXRGb3JtKFxuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuYnV0dG9ucy5zYXZlKS5kYXRhKCdjYW5jZWxMYWJlbCcpLFxuICAgICAgY2FuY2VsUHJvZHVjdFJvdXRlLFxuICAgICAgJ2NhbmNlbC1wcm9kdWN0JyxcbiAgICApO1xuICAgIHRoaXMuaGlkZUNhbmNlbEVsZW1lbnRzKCk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QudG9nZ2xlLmNhbmNlbFByb2R1Y3RzKS5zaG93KCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnQHBhZ2VzL29yZGVyL09yZGVyVmlld1BhZ2VNYXAnO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bjb21wb25lbnRzL2V2ZW50LWVtaXR0ZXInO1xuaW1wb3J0IE9yZGVyVmlld0V2ZW50TWFwIGZyb20gJ0BwYWdlcy9vcmRlci92aWV3L29yZGVyLXZpZXctZXZlbnQtbWFwJztcbmltcG9ydCBPcmRlclByaWNlcyBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcmljZXMnO1xuaW1wb3J0IENvbmZpcm1Nb2RhbCBmcm9tICdAY29tcG9uZW50cy9tb2RhbCc7XG5pbXBvcnQgT3JkZXJQcmljZXNSZWZyZXNoZXIgZnJvbSAnQHBhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcHJpY2VzLXJlZnJlc2hlcic7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JkZXJQcm9kdWN0RWRpdCB7XG4gIGNvbnN0cnVjdG9yKG9yZGVyRGV0YWlsSWQpIHtcbiAgICB0aGlzLnJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgICB0aGlzLm9yZGVyRGV0YWlsSWQgPSBvcmRlckRldGFpbElkO1xuICAgIHRoaXMucHJvZHVjdFJvdyA9ICQoYCNvcmRlclByb2R1Y3RfJHt0aGlzLm9yZGVyRGV0YWlsSWR9YCk7XG4gICAgdGhpcy5wcm9kdWN0ID0ge307XG4gICAgdGhpcy5jdXJyZW5jeVByZWNpc2lvbiA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlKS5kYXRhKCdjdXJyZW5jeVByZWNpc2lvbicpO1xuICAgIHRoaXMucHJpY2VUYXhDYWxjdWxhdG9yID0gbmV3IE9yZGVyUHJpY2VzKCk7XG4gICAgdGhpcy5wcm9kdWN0RWRpdFNhdmVCdG4gPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRTYXZlQnRuKTtcbiAgICB0aGlzLnF1YW50aXR5SW5wdXQgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRRdWFudGl0eUlucHV0KTtcbiAgICB0aGlzLm9yZGVyUHJpY2VzUmVmcmVzaGVyID0gbmV3IE9yZGVyUHJpY2VzUmVmcmVzaGVyKCk7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyKCkge1xuICAgIHRoaXMucXVhbnRpdHlJbnB1dC5vbignY2hhbmdlIGtleXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXdRdWFudGl0eSA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgY29uc3QgYXZhaWxhYmxlUXVhbnRpdHkgPSBwYXJzZUludCgkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2F2YWlsYWJsZVF1YW50aXR5JyksIDEwKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzUXVhbnRpdHkgPSBwYXJzZUludCh0aGlzLnF1YW50aXR5SW5wdXQuZGF0YSgncHJldmlvdXNRdWFudGl0eScpLCAxMCk7XG4gICAgICBjb25zdCByZW1haW5pbmdBdmFpbGFibGUgPSBhdmFpbGFibGVRdWFudGl0eSAtIChuZXdRdWFudGl0eSAtIHByZXZpb3VzUXVhbnRpdHkpO1xuICAgICAgY29uc3QgYXZhaWxhYmxlT3V0T2ZTdG9jayA9IHRoaXMuYXZhaWxhYmxlVGV4dC5kYXRhKCdhdmFpbGFibGVPdXRPZlN0b2NrJyk7XG4gICAgICB0aGlzLnF1YW50aXR5ID0gbmV3UXVhbnRpdHk7XG4gICAgICB0aGlzLmF2YWlsYWJsZVRleHQudGV4dChyZW1haW5pbmdBdmFpbGFibGUpO1xuICAgICAgdGhpcy5hdmFpbGFibGVUZXh0LnRvZ2dsZUNsYXNzKCd0ZXh0LWRhbmdlciBmb250LXdlaWdodC1ib2xkJywgcmVtYWluaW5nQXZhaWxhYmxlIDwgMCk7XG4gICAgICB0aGlzLnVwZGF0ZVRvdGFsKCk7XG4gICAgICBjb25zdCBkaXNhYmxlRWRpdEFjdGlvbkJ0biA9IG5ld1F1YW50aXR5IDw9IDAgfHwgKHJlbWFpbmluZ0F2YWlsYWJsZSA8IDAgJiYgIWF2YWlsYWJsZU91dE9mU3RvY2spO1xuICAgICAgdGhpcy5wcm9kdWN0RWRpdFNhdmVCdG4ucHJvcCgnZGlzYWJsZWQnLCBkaXNhYmxlRWRpdEFjdGlvbkJ0bik7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2R1Y3RFZGl0SW52b2ljZVNlbGVjdC5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy5wcm9kdWN0RWRpdFNhdmVCdG4ucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByaWNlVGF4SW5jbHVkZWRJbnB1dC5vbignY2hhbmdlIGtleXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnRheEluY2x1ZGVkID0gcGFyc2VGbG9hdChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgdGhpcy50YXhFeGNsdWRlZCA9IHRoaXMucHJpY2VUYXhDYWxjdWxhdG9yLmNhbGN1bGF0ZVRheEV4Y2x1ZGVkKFxuICAgICAgICB0aGlzLnRheEluY2x1ZGVkLFxuICAgICAgICB0aGlzLnRheFJhdGUsXG4gICAgICAgIHRoaXMuY3VycmVuY3lQcmVjaXNpb24sXG4gICAgICApO1xuICAgICAgdGhpcy5wcmljZVRheEV4Y2x1ZGVkSW5wdXQudmFsKHRoaXMudGF4RXhjbHVkZWQpO1xuICAgICAgdGhpcy51cGRhdGVUb3RhbCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcmljZVRheEV4Y2x1ZGVkSW5wdXQub24oJ2NoYW5nZSBrZXl1cCcsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy50YXhFeGNsdWRlZCA9IHBhcnNlRmxvYXQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIHRoaXMudGF4SW5jbHVkZWQgPSB0aGlzLnByaWNlVGF4Q2FsY3VsYXRvci5jYWxjdWxhdGVUYXhJbmNsdWRlZChcbiAgICAgICAgdGhpcy50YXhFeGNsdWRlZCxcbiAgICAgICAgdGhpcy50YXhSYXRlLFxuICAgICAgICB0aGlzLmN1cnJlbmN5UHJlY2lzaW9uLFxuICAgICAgKTtcbiAgICAgIHRoaXMucHJpY2VUYXhJbmNsdWRlZElucHV0LnZhbCh0aGlzLnRheEluY2x1ZGVkKTtcbiAgICAgIHRoaXMudXBkYXRlVG90YWwoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvZHVjdEVkaXRTYXZlQnRuLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgJGJ0biA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSB3aW5kb3cuY29uZmlybSgkYnRuLmRhdGEoJ3VwZGF0ZU1lc3NhZ2UnKSk7XG5cbiAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJGJ0bi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgdGhpcy5oYW5kbGVFZGl0UHJvZHVjdFdpdGhDb25maXJtYXRpb25Nb2RhbChldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2R1Y3RFZGl0Q2FuY2VsQnRuLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgIEV2ZW50RW1pdHRlci5lbWl0KE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RFZGl0aW9uQ2FuY2VsZWQsIHtcbiAgICAgICAgb3JkZXJEZXRhaWxJZDogdGhpcy5vcmRlckRldGFpbElkLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVUb3RhbCgpIHtcbiAgICBjb25zdCB1cGRhdGVkVG90YWwgPSB0aGlzLnByaWNlVGF4Q2FsY3VsYXRvci5jYWxjdWxhdGVUb3RhbFByaWNlKFxuICAgICAgdGhpcy5xdWFudGl0eSxcbiAgICAgIHRoaXMuaXNPcmRlclRheEluY2x1ZGVkID8gdGhpcy50YXhJbmNsdWRlZCA6IHRoaXMudGF4RXhjbHVkZWQsXG4gICAgICB0aGlzLmN1cnJlbmN5UHJlY2lzaW9uLFxuICAgICk7XG4gICAgdGhpcy5wcmljZVRvdGFsVGV4dC5odG1sKHVwZGF0ZWRUb3RhbCk7XG4gICAgdGhpcy5wcm9kdWN0RWRpdFNhdmVCdG4ucHJvcCgnZGlzYWJsZWQnLCB1cGRhdGVkVG90YWwgPT09IHRoaXMuaW5pdGlhbFRvdGFsKTtcbiAgfVxuXG4gIGRpc3BsYXlQcm9kdWN0KHByb2R1Y3QpIHtcbiAgICB0aGlzLnByb2R1Y3RSb3dFZGl0ID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0Um93VGVtcGxhdGUpLmNsb25lKHRydWUpO1xuICAgIHRoaXMucHJvZHVjdFJvd0VkaXQuYXR0cignaWQnLCBgZWRpdE9yZGVyUHJvZHVjdF8ke3RoaXMub3JkZXJEZXRhaWxJZH1gKTtcbiAgICB0aGlzLnByb2R1Y3RSb3dFZGl0LmZpbmQoJypbaWRdJykuZWFjaChmdW5jdGlvbiByZW1vdmVBbGxJZHMoKSB7XG4gICAgICAkKHRoaXMpLnJlbW92ZUF0dHIoJ2lkJyk7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5kIGNvbnRyb2xzXG4gICAgdGhpcy5wcm9kdWN0RWRpdFNhdmVCdG4gPSB0aGlzLnByb2R1Y3RSb3dFZGl0LmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdFNhdmVCdG4pO1xuICAgIHRoaXMucHJvZHVjdEVkaXRDYW5jZWxCdG4gPSB0aGlzLnByb2R1Y3RSb3dFZGl0LmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdENhbmNlbEJ0bik7XG4gICAgdGhpcy5wcm9kdWN0RWRpdEludm9pY2VTZWxlY3QgPSB0aGlzLnByb2R1Y3RSb3dFZGl0LmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdEludm9pY2VTZWxlY3QpO1xuICAgIHRoaXMucHJvZHVjdEVkaXRJbWFnZSA9IHRoaXMucHJvZHVjdFJvd0VkaXQuZmluZChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0SW1hZ2UpO1xuICAgIHRoaXMucHJvZHVjdEVkaXROYW1lID0gdGhpcy5wcm9kdWN0Um93RWRpdC5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXROYW1lKTtcbiAgICB0aGlzLnByaWNlVGF4SW5jbHVkZWRJbnB1dCA9IHRoaXMucHJvZHVjdFJvd0VkaXQuZmluZChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0UHJpY2VUYXhJbmNsSW5wdXQpO1xuICAgIHRoaXMucHJpY2VUYXhFeGNsdWRlZElucHV0ID0gdGhpcy5wcm9kdWN0Um93RWRpdC5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRQcmljZVRheEV4Y2xJbnB1dCk7XG4gICAgdGhpcy5xdWFudGl0eUlucHV0ID0gdGhpcy5wcm9kdWN0Um93RWRpdC5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRRdWFudGl0eUlucHV0KTtcbiAgICB0aGlzLmxvY2F0aW9uVGV4dCA9IHRoaXMucHJvZHVjdFJvd0VkaXQuZmluZChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0TG9jYXRpb25UZXh0KTtcbiAgICB0aGlzLmF2YWlsYWJsZVRleHQgPSB0aGlzLnByb2R1Y3RSb3dFZGl0LmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdEF2YWlsYWJsZVRleHQpO1xuICAgIHRoaXMucHJpY2VUb3RhbFRleHQgPSB0aGlzLnByb2R1Y3RSb3dFZGl0LmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdFRvdGFsUHJpY2VUZXh0KTtcblxuICAgIC8vIEluaXQgaW5wdXQgdmFsdWVzXG4gICAgdGhpcy5wcmljZVRheEV4Y2x1ZGVkSW5wdXQudmFsKFxuICAgICAgd2luZG93LnBzX3JvdW5kKHByb2R1Y3QucHJpY2VfdGF4X2V4Y2wsIHRoaXMuY3VycmVuY3lQcmVjaXNpb24pLFxuICAgICk7XG4gICAgdGhpcy5wcmljZVRheEluY2x1ZGVkSW5wdXQudmFsKFxuICAgICAgd2luZG93LnBzX3JvdW5kKHByb2R1Y3QucHJpY2VfdGF4X2luY2wsIHRoaXMuY3VycmVuY3lQcmVjaXNpb24pLFxuICAgICk7XG4gICAgdGhpcy5xdWFudGl0eUlucHV0LnZhbChwcm9kdWN0LnF1YW50aXR5KVxuICAgICAgLmRhdGEoJ2F2YWlsYWJsZVF1YW50aXR5JywgcHJvZHVjdC5hdmFpbGFibGVRdWFudGl0eSlcbiAgICAgIC5kYXRhKCdwcmV2aW91c1F1YW50aXR5JywgcHJvZHVjdC5xdWFudGl0eSk7XG4gICAgdGhpcy5hdmFpbGFibGVUZXh0LmRhdGEoJ2F2YWlsYWJsZU91dE9mU3RvY2snLCBwcm9kdWN0LmF2YWlsYWJsZU91dE9mU3RvY2spO1xuXG4gICAgLy8gc2V0IHRoaXMgcHJvZHVjdCdzIG9yZGVySW52b2ljZUlkIGFzIHNlbGVjdGVkXG4gICAgaWYgKHByb2R1Y3Qub3JkZXJJbnZvaWNlSWQpIHtcbiAgICAgIHRoaXMucHJvZHVjdEVkaXRJbnZvaWNlU2VsZWN0LnZhbChwcm9kdWN0Lm9yZGVySW52b2ljZUlkKTtcbiAgICB9XG5cbiAgICAvLyBJbml0IGVkaXRvciBkYXRhXG4gICAgdGhpcy50YXhSYXRlID0gcHJvZHVjdC50YXhfcmF0ZTtcbiAgICB0aGlzLmluaXRpYWxUb3RhbCA9IHRoaXMucHJpY2VUYXhDYWxjdWxhdG9yLmNhbGN1bGF0ZVRvdGFsUHJpY2UoXG4gICAgICBwcm9kdWN0LnF1YW50aXR5LFxuICAgICAgcHJvZHVjdC5pc09yZGVyVGF4SW5jbHVkZWQgPyBwcm9kdWN0LnByaWNlX3RheF9pbmNsIDogcHJvZHVjdC5wcmljZV90YXhfZXhjbCxcbiAgICAgIHRoaXMuY3VycmVuY3lQcmVjaXNpb24sXG4gICAgKTtcbiAgICB0aGlzLmlzT3JkZXJUYXhJbmNsdWRlZCA9IHByb2R1Y3QuaXNPcmRlclRheEluY2x1ZGVkO1xuICAgIHRoaXMucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xuICAgIHRoaXMudGF4SW5jbHVkZWQgPSBwcm9kdWN0LnByaWNlX3RheF9pbmNsO1xuICAgIHRoaXMudGF4RXhjbHVkZWQgPSBwcm9kdWN0LnByaWNlX3RheF9leGNsO1xuXG4gICAgLy8gQ29weSBwcm9kdWN0IGNvbnRlbnQgaW4gY2VsbHNcbiAgICB0aGlzLnByb2R1Y3RFZGl0SW1hZ2UuaHRtbChcbiAgICAgIHRoaXMucHJvZHVjdFJvdy5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRJbWFnZSkuaHRtbCgpLFxuICAgICk7XG4gICAgdGhpcy5wcm9kdWN0RWRpdE5hbWUuaHRtbChcbiAgICAgIHRoaXMucHJvZHVjdFJvdy5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXROYW1lKS5odG1sKCksXG4gICAgKTtcbiAgICB0aGlzLmxvY2F0aW9uVGV4dC5odG1sKHByb2R1Y3QubG9jYXRpb24pO1xuICAgIHRoaXMuYXZhaWxhYmxlVGV4dC5odG1sKHByb2R1Y3QuYXZhaWxhYmxlUXVhbnRpdHkpO1xuICAgIHRoaXMucHJpY2VUb3RhbFRleHQuaHRtbCh0aGlzLmluaXRpYWxUb3RhbCk7XG4gICAgdGhpcy5wcm9kdWN0Um93LmFkZENsYXNzKCdkLW5vbmUnKS5hZnRlcih0aGlzLnByb2R1Y3RSb3dFZGl0LnJlbW92ZUNsYXNzKCdkLW5vbmUnKSk7XG5cbiAgICB0aGlzLnNldHVwTGlzdGVuZXIoKTtcbiAgfVxuXG4gIGhhbmRsZUVkaXRQcm9kdWN0V2l0aENvbmZpcm1hdGlvbk1vZGFsKGV2ZW50KSB7XG4gICAgY29uc3QgcHJvZHVjdEVkaXRCdG4gPSAkKGAjb3JkZXJQcm9kdWN0XyR7dGhpcy5vcmRlckRldGFpbElkfSAke09yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRCdXR0b25zfWApO1xuICAgIGNvbnN0IHByb2R1Y3RJZCA9IHByb2R1Y3RFZGl0QnRuLmRhdGEoJ3Byb2R1Y3QtaWQnKTtcbiAgICBjb25zdCBjb21iaW5hdGlvbklkID0gcHJvZHVjdEVkaXRCdG4uZGF0YSgnY29tYmluYXRpb24taWQnKTtcbiAgICBjb25zdCBvcmRlckludm9pY2VJZCA9IHByb2R1Y3RFZGl0QnRuLmRhdGEoJ29yZGVyLWludm9pY2UtaWQnKTtcbiAgICBjb25zdCBwcm9kdWN0UHJpY2VNYXRjaCA9IHRoaXMub3JkZXJQcmljZXNSZWZyZXNoZXIuY2hlY2tPdGhlclByb2R1Y3RQcmljZXNNYXRjaChcbiAgICAgIHRoaXMucHJpY2VUYXhJbmNsdWRlZElucHV0LnZhbCgpLFxuICAgICAgcHJvZHVjdElkLFxuICAgICAgY29tYmluYXRpb25JZCxcbiAgICAgIG9yZGVySW52b2ljZUlkLFxuICAgICAgdGhpcy5vcmRlckRldGFpbElkLFxuICAgICk7XG5cbiAgICBpZiAocHJvZHVjdFByaWNlTWF0Y2ggPT09IG51bGwpIHtcbiAgICAgIHRoaXMuZWRpdFByb2R1Y3QoJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKCdvcmRlcklkJyksIHRoaXMub3JkZXJEZXRhaWxJZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhU2VsZWN0b3IgPSBwcm9kdWN0UHJpY2VNYXRjaCA9PT0gJ3Byb2R1Y3QnID8gdGhpcy5wcmljZVRheEV4Y2x1ZGVkSW5wdXQgOiB0aGlzLnByb2R1Y3RFZGl0SW52b2ljZVNlbGVjdDtcblxuICAgIGNvbnN0IG1vZGFsRWRpdFByaWNlID0gbmV3IENvbmZpcm1Nb2RhbChcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdtb2RhbC1jb25maXJtLW5ldy1wcmljZScsXG4gICAgICAgIGNvbmZpcm1UaXRsZTogZGF0YVNlbGVjdG9yLmRhdGEoJ21vZGFsLWVkaXQtcHJpY2UtdGl0bGUnKSxcbiAgICAgICAgY29uZmlybU1lc3NhZ2U6IGRhdGFTZWxlY3Rvci5kYXRhKCdtb2RhbC1lZGl0LXByaWNlLWJvZHknKSxcbiAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsOiBkYXRhU2VsZWN0b3IuZGF0YSgnbW9kYWwtZWRpdC1wcmljZS1hcHBseScpLFxuICAgICAgICBjbG9zZUJ1dHRvbkxhYmVsOiBkYXRhU2VsZWN0b3IuZGF0YSgnbW9kYWwtZWRpdC1wcmljZS1jYW5jZWwnKSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdFByb2R1Y3QoJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKCdvcmRlcklkJyksIHRoaXMub3JkZXJEZXRhaWxJZCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBtb2RhbEVkaXRQcmljZS5zaG93KCk7XG4gIH1cblxuICBlZGl0UHJvZHVjdChvcmRlcklkLCBvcmRlckRldGFpbElkKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgcHJpY2VfdGF4X2luY2w6IHRoaXMucHJpY2VUYXhJbmNsdWRlZElucHV0LnZhbCgpLFxuICAgICAgcHJpY2VfdGF4X2V4Y2w6IHRoaXMucHJpY2VUYXhFeGNsdWRlZElucHV0LnZhbCgpLFxuICAgICAgcXVhbnRpdHk6IHRoaXMucXVhbnRpdHlJbnB1dC52YWwoKSxcbiAgICAgIGludm9pY2U6IHRoaXMucHJvZHVjdEVkaXRJbnZvaWNlU2VsZWN0LnZhbCgpLFxuICAgIH07XG5cbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiB0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX3VwZGF0ZV9wcm9kdWN0Jywge1xuICAgICAgICBvcmRlcklkLFxuICAgICAgICBvcmRlckRldGFpbElkLFxuICAgICAgfSksXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGRhdGE6IHBhcmFtcyxcbiAgICB9KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBFdmVudEVtaXR0ZXIuZW1pdChPcmRlclZpZXdFdmVudE1hcC5wcm9kdWN0VXBkYXRlZCwge1xuICAgICAgICAgIG9yZGVySWQsXG4gICAgICAgICAgb3JkZXJEZXRhaWxJZCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZUpTT04gJiYgcmVzcG9uc2UucmVzcG9uc2VKU09OLm1lc3NhZ2UpIHtcbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiByZXNwb25zZS5yZXNwb25zZUpTT04ubWVzc2FnZX0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bjb21wb25lbnRzL2V2ZW50LWVtaXR0ZXInO1xuaW1wb3J0IE9yZGVyVmlld0V2ZW50TWFwIGZyb20gJ0BwYWdlcy9vcmRlci92aWV3L29yZGVyLXZpZXctZXZlbnQtbWFwJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmRlclByb2R1Y3RNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yb3V0ZXIgPSBuZXcgUm91dGVyKCk7XG4gIH1cblxuICBoYW5kbGVEZWxldGVQcm9kdWN0RXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgJGJ0biA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oJGJ0bi5kYXRhKCdkZWxldGVNZXNzYWdlJykpO1xuXG4gICAgaWYgKCFjb25maXJtZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAkYnRuLnBzdG9vbHRpcCgnZGlzcG9zZScpO1xuICAgICRidG4ucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICB0aGlzLmRlbGV0ZVByb2R1Y3QoJGJ0bi5kYXRhKCdvcmRlcklkJyksICRidG4uZGF0YSgnb3JkZXJEZXRhaWxJZCcpKTtcbiAgfVxuXG4gIGRlbGV0ZVByb2R1Y3Qob3JkZXJJZCwgb3JkZXJEZXRhaWxJZCkge1xuICAgICQuYWpheCh0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX2RlbGV0ZV9wcm9kdWN0Jywge29yZGVySWQsIG9yZGVyRGV0YWlsSWR9KSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBFdmVudEVtaXR0ZXIuZW1pdChPcmRlclZpZXdFdmVudE1hcC5wcm9kdWN0RGVsZXRlZEZyb21PcmRlciwge1xuICAgICAgICBvbGRPcmRlckRldGFpbElkOiBvcmRlckRldGFpbElkLFxuICAgICAgICBvcmRlcklkLFxuICAgICAgfSk7XG4gICAgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UubWVzc2FnZSkge1xuICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnQHBhZ2VzL29yZGVyL09yZGVyVmlld1BhZ2VNYXAnO1xuaW1wb3J0IE9yZGVyUHJvZHVjdEVkaXQgZnJvbSAnQHBhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcHJvZHVjdC1lZGl0JztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnQGNvbXBvbmVudHMvcm91dGVyJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmRlclByb2R1Y3RSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucm91dGVyID0gbmV3IFJvdXRlcigpO1xuICB9XG5cbiAgYWRkT3JVcGRhdGVQcm9kdWN0VG9MaXN0KCRwcm9kdWN0Um93LCBuZXdSb3cpIHtcbiAgICBpZiAoJHByb2R1Y3RSb3cubGVuZ3RoID4gMCkge1xuICAgICAgJHByb2R1Y3RSb3cuaHRtbCgkKG5ld1JvdykuaHRtbCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRSb3cpLmJlZm9yZShcbiAgICAgICAgJChuZXdSb3cpXG4gICAgICAgICAgLmhpZGUoKVxuICAgICAgICAgIC5mYWRlSW4oKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTnVtUHJvZHVjdHMobnVtUHJvZHVjdHMpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNDb3VudCkuaHRtbChudW1Qcm9kdWN0cyk7XG4gIH1cblxuICBlZGl0UHJvZHVjdEZyb21MaXN0KFxuICAgIG9yZGVyRGV0YWlsSWQsXG4gICAgcXVhbnRpdHksXG4gICAgcHJpY2VUYXhJbmNsLFxuICAgIHByaWNlVGF4RXhjbCxcbiAgICB0YXhSYXRlLFxuICAgIGxvY2F0aW9uLFxuICAgIGF2YWlsYWJsZVF1YW50aXR5LFxuICAgIGF2YWlsYWJsZU91dE9mU3RvY2ssXG4gICAgb3JkZXJJbnZvaWNlSWQsXG4gICAgaXNPcmRlclRheEluY2x1ZGVkLFxuICApIHtcbiAgICBjb25zdCAkb3JkZXJFZGl0ID0gbmV3IE9yZGVyUHJvZHVjdEVkaXQob3JkZXJEZXRhaWxJZCk7XG4gICAgJG9yZGVyRWRpdC5kaXNwbGF5UHJvZHVjdCh7XG4gICAgICBwcmljZV90YXhfZXhjbDogcHJpY2VUYXhFeGNsLFxuICAgICAgcHJpY2VfdGF4X2luY2w6IHByaWNlVGF4SW5jbCxcbiAgICAgIHRheF9yYXRlOiB0YXhSYXRlLFxuICAgICAgcXVhbnRpdHksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGF2YWlsYWJsZVF1YW50aXR5LFxuICAgICAgYXZhaWxhYmxlT3V0T2ZTdG9jayxcbiAgICAgIG9yZGVySW52b2ljZUlkLFxuICAgICAgaXNPcmRlclRheEluY2x1ZGVkLFxuICAgIH0pO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkQWN0aW9uQnRuKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRSb3cpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgfVxuXG4gIG1vdmVQcm9kdWN0c1BhbmVsVG9Nb2RpZmljYXRpb25Qb3NpdGlvbihzY3JvbGxUYXJnZXQgPSAnYm9keScpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFjdGlvbkJ0bikuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICQoXG4gICAgICBgJHtPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRBY3Rpb25CdG59LCAke09yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZFJvd31gLFxuICAgICkucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIHRoaXMubW92ZVByb2R1Y3RQYW5lbFRvVG9wKHNjcm9sbFRhcmdldCk7XG4gIH1cblxuICBtb3ZlUHJvZHVjdHNQYW5lbFRvUmVmdW5kUG9zaXRpb24oKSB7XG4gICAgdGhpcy5yZXNldEFsbEVkaXRSb3dzKCk7XG4gICAgJChcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuICovXG4gICAgICBgJHtPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRBY3Rpb25CdG59LCAke09yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZFJvd30sICR7T3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWN0aW9uQnRufWAsXG4gICAgKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgdGhpcy5tb3ZlUHJvZHVjdFBhbmVsVG9Ub3AoKTtcbiAgfVxuXG4gIG1vdmVQcm9kdWN0UGFuZWxUb1RvcChzY3JvbGxUYXJnZXQgPSAnYm9keScpIHtcbiAgICBjb25zdCAkbW9kaWZpY2F0aW9uUG9zaXRpb24gPSAkKFxuICAgICAgT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0TW9kaWZpY2F0aW9uUG9zaXRpb24sXG4gICAgKTtcblxuICAgIGlmICgkbW9kaWZpY2F0aW9uUG9zaXRpb24uZmluZChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzUGFuZWwpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzUGFuZWwpXG4gICAgICAuZGV0YWNoKClcbiAgICAgIC5hcHBlbmRUbygkbW9kaWZpY2F0aW9uUG9zaXRpb24pO1xuICAgICRtb2RpZmljYXRpb25Qb3NpdGlvbi5jbG9zZXN0KCcucm93JykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuXG4gICAgLy8gU2hvdyBjb2x1bW4gbG9jYXRpb24gJiByZWZ1bmRlZFxuICAgIHRoaXMudG9nZ2xlQ29sdW1uKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNDZWxsTG9jYXRpb24pO1xuICAgIHRoaXMudG9nZ2xlQ29sdW1uKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNDZWxsUmVmdW5kZWQpO1xuXG4gICAgLy8gU2hvdyBhbGwgcm93cywgaGlkZSBwYWdpbmF0aW9uIGNvbnRyb2xzXG4gICAgY29uc3QgJHJvd3MgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZSkuZmluZChcbiAgICAgICd0cltpZF49XCJvcmRlclByb2R1Y3RfXCJdJyxcbiAgICApO1xuICAgICRyb3dzLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNQYWdpbmF0aW9uKS5hZGRDbGFzcygnZC1ub25lJyk7XG5cbiAgICBjb25zdCBzY3JvbGxWYWx1ZSA9ICQoc2Nyb2xsVGFyZ2V0KS5vZmZzZXQoKS50b3AgLSAkKCcuaGVhZGVyLXRvb2xiYXInKS5oZWlnaHQoKSAtIDEwMDtcbiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6IHNjcm9sbFZhbHVlfSwgJ3Nsb3cnKTtcbiAgfVxuXG4gIG1vdmVQcm9kdWN0UGFuZWxUb09yaWdpbmFsUG9zaXRpb24oKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGROZXdJbnZvaWNlSW5mbykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0TW9kaWZpY2F0aW9uUG9zaXRpb24pXG4gICAgICAuY2xvc2VzdCgnLnJvdycpXG4gICAgICAuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuXG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzUGFuZWwpXG4gICAgICAuZGV0YWNoKClcbiAgICAgIC5hcHBlbmRUbyhPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RPcmlnaW5hbFBvc2l0aW9uKTtcblxuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1BhZ2luYXRpb24pLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFjdGlvbkJ0bikucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICQoXG4gICAgICBgJHtPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRBY3Rpb25CdG59LCAke09yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZFJvd31gLFxuICAgICkuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuXG4gICAgLy8gUmVzdG9yZSBwYWdpbmF0aW9uXG4gICAgdGhpcy5wYWdpbmF0ZSgxKTtcbiAgfVxuXG4gIHJlc2V0QWRkUm93KCkge1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkSWRJbnB1dCkudmFsKCcnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdFNlYXJjaElucHV0KS52YWwoJycpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkQ29tYmluYXRpb25zQmxvY2spLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZENvbWJpbmF0aW9uc1NlbGVjdCkudmFsKCcnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZENvbWJpbmF0aW9uc1NlbGVjdCkucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRQcmljZVRheEV4Y2xJbnB1dCkudmFsKCcnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZFByaWNlVGF4SW5jbElucHV0KS52YWwoJycpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkUXVhbnRpdHlJbnB1dCkudmFsKCcnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZEF2YWlsYWJsZVRleHQpLmh0bWwoJycpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkTG9jYXRpb25UZXh0KS5odG1sKCcnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZE5ld0ludm9pY2VJbmZvKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRBY3Rpb25CdG4pLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gIH1cblxuICByZXNldEFsbEVkaXRSb3dzKCkge1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdEJ1dHRvbnMpLmVhY2goKGtleSwgZWRpdEJ1dHRvbikgPT4ge1xuICAgICAgdGhpcy5yZXNldEVkaXRSb3coJChlZGl0QnV0dG9uKS5kYXRhKCdvcmRlckRldGFpbElkJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRFZGl0Um93KG9yZGVyUHJvZHVjdElkKSB7XG4gICAgY29uc3QgJHByb2R1Y3RSb3cgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZVJvdyhvcmRlclByb2R1Y3RJZCkpO1xuICAgIGNvbnN0ICRwcm9kdWN0RWRpdFJvdyA9ICQoXG4gICAgICBPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVSb3dFZGl0ZWQob3JkZXJQcm9kdWN0SWQpLFxuICAgICk7XG4gICAgJHByb2R1Y3RFZGl0Um93LnJlbW92ZSgpO1xuICAgICRwcm9kdWN0Um93LnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgfVxuXG4gIHBhZ2luYXRlKG9yaWdpbmFsTnVtUGFnZSkge1xuICAgIGNvbnN0ICRyb3dzID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGUpLmZpbmQoXG4gICAgICAndHJbaWRePVwib3JkZXJQcm9kdWN0X1wiXScsXG4gICAgKTtcbiAgICBjb25zdCAkY3VzdG9taXphdGlvblJvd3MgPSAkKFxuICAgICAgT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlQ3VzdG9taXphdGlvblJvd3MsXG4gICAgKTtcbiAgICBjb25zdCAkdGFibGVQYWdpbmF0aW9uID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uKTtcbiAgICBjb25zdCBudW1Sb3dzUGVyUGFnZSA9IHBhcnNlSW50KCR0YWJsZVBhZ2luYXRpb24uZGF0YSgnbnVtUGVyUGFnZScpLCAxMCk7XG4gICAgY29uc3QgbWF4UGFnZSA9IE1hdGguY2VpbCgkcm93cy5sZW5ndGggLyBudW1Sb3dzUGVyUGFnZSk7XG4gICAgY29uc3QgbnVtUGFnZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKG9yaWdpbmFsTnVtUGFnZSwgbWF4UGFnZSkpO1xuICAgIHRoaXMucGFnaW5hdGVVcGRhdGVDb250cm9scyhudW1QYWdlKTtcblxuICAgIC8vIEhpZGUgYWxsIHJvd3MuLi5cbiAgICAkcm93cy5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgJGN1c3RvbWl6YXRpb25Sb3dzLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAvLyAuLi4gYW5kIGRpc3BsYXkgZ29vZCBvbmVzXG5cbiAgICBjb25zdCBzdGFydFJvdyA9IChudW1QYWdlIC0gMSkgKiBudW1Sb3dzUGVyUGFnZSArIDE7XG4gICAgY29uc3QgZW5kUm93ID0gbnVtUGFnZSAqIG51bVJvd3NQZXJQYWdlO1xuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0Um93IC0gMTsgaSA8IE1hdGgubWluKGVuZFJvdywgJHJvd3MubGVuZ3RoKTsgaSArPSAxKSB7XG4gICAgICAkKCRyb3dzW2ldKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgfVxuXG4gICAgJGN1c3RvbWl6YXRpb25Sb3dzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKFxuICAgICAgICAhJCh0aGlzKVxuICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAuaGFzQ2xhc3MoJ2Qtbm9uZScpXG4gICAgICApIHtcbiAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgYWxsIGVkaXRpb24gcm93cyAoY2FyZWZ1bCBub3QgdG8gcmVtb3ZlIHRoZSB0ZW1wbGF0ZSlcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRSb3cpXG4gICAgICAubm90KE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRSb3dUZW1wbGF0ZSlcbiAgICAgIC5yZW1vdmUoKTtcblxuICAgIC8vIFRvZ2dsZSBDb2x1bW4gTG9jYXRpb24gJiBSZWZ1bmRlZFxuICAgIHRoaXMudG9nZ2xlQ29sdW1uKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNDZWxsTG9jYXRpb25EaXNwbGF5ZWQpO1xuICAgIHRoaXMudG9nZ2xlQ29sdW1uKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNDZWxsUmVmdW5kZWREaXNwbGF5ZWQpO1xuICB9XG5cbiAgcGFnaW5hdGVVcGRhdGVDb250cm9scyhudW1QYWdlKSB7XG4gICAgLy8gV2h5IDMgPyBOZXh0ICYgUHJldiAmIFRlbXBsYXRlXG4gICAgY29uc3QgdG90YWxQYWdlID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uKS5maW5kKCdsaS5wYWdlLWl0ZW0nKS5sZW5ndGhcbiAgICAgIC0gMztcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZVBhZ2luYXRpb24pXG4gICAgICAuZmluZCgnLmFjdGl2ZScpXG4gICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUGFnaW5hdGlvbilcbiAgICAgIC5maW5kKGBsaTpoYXMoPiBbZGF0YS1wYWdlPVwiJHtudW1QYWdlfVwiXSlgKVxuICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZVBhZ2luYXRpb25QcmV2KS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcbiAgICBpZiAobnVtUGFnZSA9PT0gMSkge1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uUHJldikuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7XG4gICAgfVxuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUGFnaW5hdGlvbk5leHQpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgIGlmIChudW1QYWdlID09PSB0b3RhbFBhZ2UpIHtcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUGFnaW5hdGlvbk5leHQpLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZVBhZ2luYXRpb25Db250cm9scygpO1xuICB9XG5cbiAgdXBkYXRlTnVtUGVyUGFnZShudW1QZXJQYWdlKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uKS5kYXRhKCdudW1QZXJQYWdlJywgbnVtUGVyUGFnZSk7XG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uQ29udHJvbHMoKTtcbiAgfVxuXG4gIHRvZ2dsZVBhZ2luYXRpb25Db250cm9scygpIHtcbiAgICAvLyBXaHkgMyA/IE5leHQgJiBQcmV2ICYgVGVtcGxhdGVcbiAgICBjb25zdCB0b3RhbFBhZ2UgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZVBhZ2luYXRpb24pLmZpbmQoJ2xpLnBhZ2UtaXRlbScpLmxlbmd0aFxuICAgICAgLSAzO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c05hdlBhZ2luYXRpb24pLnRvZ2dsZUNsYXNzKFxuICAgICAgJ2Qtbm9uZScsXG4gICAgICB0b3RhbFBhZ2UgPD0gMSxcbiAgICApO1xuICB9XG5cbiAgdG9nZ2xlUHJvZHVjdEFkZE5ld0ludm9pY2VJbmZvKCkge1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0QWRkTmV3SW52b2ljZUluZm8pLnRvZ2dsZUNsYXNzKFxuICAgICAgJ2Qtbm9uZScsXG4gICAgICBwYXJzZUludCgkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEFkZEludm9pY2VTZWxlY3QpLnZhbCgpLCAxMCkgIT09IDAsXG4gICAgKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbHVtbih0YXJnZXQsIGZvcmNlRGlzcGxheSA9IG51bGwpIHtcbiAgICBsZXQgaXNDb2x1bW5EaXNwbGF5ZWQgPSBmYWxzZTtcblxuICAgIGlmIChmb3JjZURpc3BsYXkgPT09IG51bGwpIHtcbiAgICAgICQodGFyZ2V0KVxuICAgICAgICAuZmlsdGVyKCd0ZCcpXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoJCh0aGlzKS5odG1sKCkgIT09ICcnKSB7XG4gICAgICAgICAgICBpc0NvbHVtbkRpc3BsYXllZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNDb2x1bW5EaXNwbGF5ZWQgPSBmb3JjZURpc3BsYXk7XG4gICAgfVxuICAgICQodGFyZ2V0KS50b2dnbGVDbGFzcygnZC1ub25lJywgIWlzQ29sdW1uRGlzcGxheWVkKTtcbiAgfVxuXG4gIHVwZGF0ZVBhZ2luYXRpb25Db250cm9scygpIHtcbiAgICBjb25zdCAkdGFibGVQYWdpbmF0aW9uID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uKTtcbiAgICBjb25zdCBudW1QZXJQYWdlID0gJHRhYmxlUGFnaW5hdGlvbi5kYXRhKCdudW1QZXJQYWdlJyk7XG4gICAgY29uc3QgJHJvd3MgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZSkuZmluZCgndHJbaWRePVwib3JkZXJQcm9kdWN0X1wiXScpO1xuICAgIGNvbnN0IG51bVBhZ2VzID0gTWF0aC5jZWlsKCRyb3dzLmxlbmd0aCAvIG51bVBlclBhZ2UpO1xuXG4gICAgLy8gVXBkYXRlIHRhYmxlIGRhdGEgZmllbGRzXG4gICAgJHRhYmxlUGFnaW5hdGlvbi5kYXRhKCdudW1QYWdlcycsIG51bVBhZ2VzKTtcblxuICAgIC8vIENsZWFuIGFsbCBwYWdlIGxpbmtzLCByZWluc2VydCB0aGUgcmVtb3ZlZCB0ZW1wbGF0ZVxuICAgIGNvbnN0ICRsaW5rUGFnaW5hdGlvblRlbXBsYXRlID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uVGVtcGxhdGUpO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUGFnaW5hdGlvbikuZmluZCgnbGk6aGFzKD4gW2RhdGEtcGFnZV0pJykucmVtb3ZlKCk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uTmV4dCkuYmVmb3JlKCRsaW5rUGFnaW5hdGlvblRlbXBsYXRlKTtcblxuICAgIC8vIEFkZCBhcHByb3ByaWF0ZSBwYWdlc1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bVBhZ2VzOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0ICRsaW5rUGFnaW5hdGlvbiA9ICRsaW5rUGFnaW5hdGlvblRlbXBsYXRlLmNsb25lKCk7XG4gICAgICAkbGlua1BhZ2luYXRpb24uZmluZCgnc3BhbicpLmF0dHIoJ2RhdGEtcGFnZScsIGkpO1xuICAgICAgJGxpbmtQYWdpbmF0aW9uLmZpbmQoJ3NwYW4nKS5odG1sKGkpO1xuICAgICAgJGxpbmtQYWdpbmF0aW9uVGVtcGxhdGUuYmVmb3JlKCRsaW5rUGFnaW5hdGlvbi5yZW1vdmVDbGFzcygnZC1ub25lJykpO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlUGFnaW5hdGlvbkNvbnRyb2xzKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnQHBhZ2VzL29yZGVyL09yZGVyVmlld1BhZ2VNYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZGVyU2hpcHBpbmdSZWZyZXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgfVxuXG4gIHJlZnJlc2gob3JkZXJJZCkge1xuICAgICQuZ2V0SlNPTih0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX2dldF9zaGlwcGluZycsIHtvcmRlcklkfSkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyU2hpcHBpbmdUYWJDb3VudCkudGV4dChyZXNwb25zZS50b3RhbCk7XG4gICAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5vcmRlclNoaXBwaW5nVGFiQm9keSkuaHRtbChyZXNwb25zZS5odG1sKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvZHVjdERlbGV0ZWRGcm9tT3JkZXI6ICdwcm9kdWN0RGVsZXRlZEZyb21PcmRlcicsXG4gIHByb2R1Y3RBZGRlZFRvT3JkZXI6ICdwcm9kdWN0QWRkZWRUb09yZGVyJyxcbiAgcHJvZHVjdFVwZGF0ZWQ6ICdwcm9kdWN0VXBkYXRlZCcsXG4gIHByb2R1Y3RFZGl0aW9uQ2FuY2VsZWQ6ICdwcm9kdWN0RWRpdGlvbkNhbmNlbGVkJyxcbiAgcHJvZHVjdExpc3RQYWdpbmF0ZWQ6ICdwcm9kdWN0TGlzdFBhZ2luYXRlZCcsXG4gIHByb2R1Y3RMaXN0TnVtYmVyUGVyUGFnZTogJ3Byb2R1Y3RMaXN0TnVtYmVyUGVyUGFnZScsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgT3JkZXJQcm9kdWN0TWFuYWdlciBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcm9kdWN0LW1hbmFnZXInO1xuaW1wb3J0IE9yZGVyVmlld1BhZ2VNYXAgZnJvbSAnQHBhZ2VzL29yZGVyL09yZGVyVmlld1BhZ2VNYXAnO1xuaW1wb3J0IE9yZGVyVmlld0V2ZW50TWFwIGZyb20gJ0BwYWdlcy9vcmRlci92aWV3L29yZGVyLXZpZXctZXZlbnQtbWFwJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdAY29tcG9uZW50cy9ldmVudC1lbWl0dGVyJztcbmltcG9ydCBPcmRlckRpc2NvdW50c1JlZnJlc2hlciBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci1kaXNjb3VudHMtcmVmcmVzaGVyJztcbmltcG9ydCBPcmRlclByb2R1Y3RSZW5kZXJlciBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcm9kdWN0LXJlbmRlcmVyJztcbmltcG9ydCBPcmRlclByaWNlc1JlZnJlc2hlciBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci1wcmljZXMtcmVmcmVzaGVyJztcbmltcG9ydCBPcmRlclBheW1lbnRzUmVmcmVzaGVyIGZyb20gJ0BwYWdlcy9vcmRlci92aWV3L29yZGVyLXBheW1lbnRzLXJlZnJlc2hlcic7XG5pbXBvcnQgT3JkZXJTaGlwcGluZ1JlZnJlc2hlciBmcm9tICdAcGFnZXMvb3JkZXIvdmlldy9vcmRlci1zaGlwcGluZy1yZWZyZXNoZXInO1xuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IE9yZGVySW52b2ljZXNSZWZyZXNoZXIgZnJvbSAnLi9vcmRlci1pbnZvaWNlcy1yZWZyZXNoZXInO1xuaW1wb3J0IE9yZGVyUHJvZHVjdENhbmNlbCBmcm9tICcuL29yZGVyLXByb2R1Y3QtY2FuY2VsJztcbmltcG9ydCBPcmRlckRvY3VtZW50c1JlZnJlc2hlciBmcm9tICcuL29yZGVyLWRvY3VtZW50cy1yZWZyZXNoZXInO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZGVyVmlld1BhZ2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm9yZGVyRGlzY291bnRzUmVmcmVzaGVyID0gbmV3IE9yZGVyRGlzY291bnRzUmVmcmVzaGVyKCk7XG4gICAgdGhpcy5vcmRlclByb2R1Y3RNYW5hZ2VyID0gbmV3IE9yZGVyUHJvZHVjdE1hbmFnZXIoKTtcbiAgICB0aGlzLm9yZGVyUHJvZHVjdFJlbmRlcmVyID0gbmV3IE9yZGVyUHJvZHVjdFJlbmRlcmVyKCk7XG4gICAgdGhpcy5vcmRlclByaWNlc1JlZnJlc2hlciA9IG5ldyBPcmRlclByaWNlc1JlZnJlc2hlcigpO1xuICAgIHRoaXMub3JkZXJQYXltZW50c1JlZnJlc2hlciA9IG5ldyBPcmRlclBheW1lbnRzUmVmcmVzaGVyKCk7XG4gICAgdGhpcy5vcmRlclNoaXBwaW5nUmVmcmVzaGVyID0gbmV3IE9yZGVyU2hpcHBpbmdSZWZyZXNoZXIoKTtcbiAgICB0aGlzLm9yZGVyRG9jdW1lbnRzUmVmcmVzaGVyID0gbmV3IE9yZGVyRG9jdW1lbnRzUmVmcmVzaGVyKCk7XG4gICAgdGhpcy5vcmRlckludm9pY2VzUmVmcmVzaGVyID0gbmV3IE9yZGVySW52b2ljZXNSZWZyZXNoZXIoKTtcbiAgICB0aGlzLm9yZGVyUHJvZHVjdENhbmNlbCA9IG5ldyBPcmRlclByb2R1Y3RDYW5jZWwoKTtcbiAgICB0aGlzLnJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgICB0aGlzLmxpc3RlblRvRXZlbnRzKCk7XG4gIH1cblxuICBsaXN0ZW5Ub0V2ZW50cygpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAuaW52b2ljZUFkZHJlc3NFZGl0QnRuKS5mYW5jeWJveCh7XG4gICAgICB0eXBlOiAnaWZyYW1lJyxcbiAgICAgIHdpZHRoOiAnOTAlJyxcbiAgICAgIGhlaWdodDogJzkwJScsXG4gICAgfSk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmRlbGl2ZXJ5QWRkcmVzc0VkaXRCdG4pLmZhbmN5Ym94KHtcbiAgICAgIHR5cGU6ICdpZnJhbWUnLFxuICAgICAgd2lkdGg6ICc5MCUnLFxuICAgICAgaGVpZ2h0OiAnOTAlJyxcbiAgICB9KTtcblxuICAgIEV2ZW50RW1pdHRlci5vbihPcmRlclZpZXdFdmVudE1hcC5wcm9kdWN0RGVsZXRlZEZyb21PcmRlciwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLm9yZGVyUHJpY2VzUmVmcmVzaGVyLnJlZnJlc2goZXZlbnQub3JkZXJJZCk7XG4gICAgICB0aGlzLm9yZGVyUGF5bWVudHNSZWZyZXNoZXIucmVmcmVzaChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMucmVmcmVzaFByb2R1Y3RzTGlzdChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJEaXNjb3VudHNSZWZyZXNoZXIucmVmcmVzaChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJEb2N1bWVudHNSZWZyZXNoZXIucmVmcmVzaChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJTaGlwcGluZ1JlZnJlc2hlci5yZWZyZXNoKGV2ZW50Lm9yZGVySWQpO1xuICAgIH0pO1xuXG4gICAgRXZlbnRFbWl0dGVyLm9uKE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RFZGl0aW9uQ2FuY2VsZWQsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5yZXNldEVkaXRSb3coZXZlbnQub3JkZXJEZXRhaWxJZCk7XG4gICAgICBjb25zdCBlZGl0Um93c0xlZnQgPSAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdEVkaXRSb3cpLm5vdChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0Um93VGVtcGxhdGUpLmxlbmd0aDtcblxuICAgICAgaWYgKGVkaXRSb3dzTGVmdCA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5tb3ZlUHJvZHVjdFBhbmVsVG9PcmlnaW5hbFBvc2l0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBFdmVudEVtaXR0ZXIub24oT3JkZXJWaWV3RXZlbnRNYXAucHJvZHVjdFVwZGF0ZWQsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5yZXNldEVkaXRSb3coZXZlbnQub3JkZXJEZXRhaWxJZCk7XG4gICAgICB0aGlzLm9yZGVyUHJpY2VzUmVmcmVzaGVyLnJlZnJlc2goZXZlbnQub3JkZXJJZCk7XG4gICAgICB0aGlzLm9yZGVyUHJpY2VzUmVmcmVzaGVyLnJlZnJlc2hQcm9kdWN0UHJpY2VzKGV2ZW50Lm9yZGVySWQpO1xuICAgICAgdGhpcy5yZWZyZXNoUHJvZHVjdHNMaXN0KGV2ZW50Lm9yZGVySWQpO1xuICAgICAgdGhpcy5vcmRlclBheW1lbnRzUmVmcmVzaGVyLnJlZnJlc2goZXZlbnQub3JkZXJJZCk7XG4gICAgICB0aGlzLm9yZGVyRGlzY291bnRzUmVmcmVzaGVyLnJlZnJlc2goZXZlbnQub3JkZXJJZCk7XG4gICAgICB0aGlzLm9yZGVySW52b2ljZXNSZWZyZXNoZXIucmVmcmVzaChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJEb2N1bWVudHNSZWZyZXNoZXIucmVmcmVzaChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJTaGlwcGluZ1JlZnJlc2hlci5yZWZyZXNoKGV2ZW50Lm9yZGVySWQpO1xuICAgICAgdGhpcy5saXN0ZW5Gb3JQcm9kdWN0RGVsZXRlKCk7XG4gICAgICB0aGlzLmxpc3RlbkZvclByb2R1Y3RFZGl0KCk7XG4gICAgICB0aGlzLnJlc2V0VG9vbFRpcHMoKTtcblxuICAgICAgY29uc3QgZWRpdFJvd3NMZWZ0ID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0Um93KS5ub3QoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0RWRpdFJvd1RlbXBsYXRlKS5sZW5ndGg7XG5cbiAgICAgIGlmIChlZGl0Um93c0xlZnQgPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0UmVuZGVyZXIubW92ZVByb2R1Y3RQYW5lbFRvT3JpZ2luYWxQb3NpdGlvbigpO1xuICAgIH0pO1xuXG4gICAgRXZlbnRFbWl0dGVyLm9uKE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RBZGRlZFRvT3JkZXIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5yZXNldEFkZFJvdygpO1xuICAgICAgdGhpcy5vcmRlclByaWNlc1JlZnJlc2hlci5yZWZyZXNoUHJvZHVjdFByaWNlcyhldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJQcmljZXNSZWZyZXNoZXIucmVmcmVzaChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMucmVmcmVzaFByb2R1Y3RzTGlzdChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJQYXltZW50c1JlZnJlc2hlci5yZWZyZXNoKGV2ZW50Lm9yZGVySWQpO1xuICAgICAgdGhpcy5vcmRlckRpc2NvdW50c1JlZnJlc2hlci5yZWZyZXNoKGV2ZW50Lm9yZGVySWQpO1xuICAgICAgdGhpcy5vcmRlckludm9pY2VzUmVmcmVzaGVyLnJlZnJlc2goZXZlbnQub3JkZXJJZCk7XG4gICAgICB0aGlzLm9yZGVyRG9jdW1lbnRzUmVmcmVzaGVyLnJlZnJlc2goZXZlbnQub3JkZXJJZCk7XG4gICAgICB0aGlzLm9yZGVyU2hpcHBpbmdSZWZyZXNoZXIucmVmcmVzaChldmVudC5vcmRlcklkKTtcbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0UmVuZGVyZXIubW92ZVByb2R1Y3RQYW5lbFRvT3JpZ2luYWxQb3NpdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgbGlzdGVuRm9yUHJvZHVjdERlbGV0ZSgpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdERlbGV0ZUJ0bilcbiAgICAgIC5vZmYoJ2NsaWNrJylcbiAgICAgIC5vbignY2xpY2snLCAoZXZlbnQpID0+IHRoaXMub3JkZXJQcm9kdWN0TWFuYWdlci5oYW5kbGVEZWxldGVQcm9kdWN0RXZlbnQoZXZlbnQpKTtcbiAgfVxuXG4gIHJlc2V0VG9vbFRpcHMoKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0QnV0dG9ucykucHN0b29sdGlwKCk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3REZWxldGVCdG4pLnBzdG9vbHRpcCgpO1xuICB9XG5cbiAgbGlzdGVuRm9yUHJvZHVjdEVkaXQoKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RFZGl0QnV0dG9ucykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgJGJ0biA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICB0aGlzLm9yZGVyUHJvZHVjdFJlbmRlcmVyLm1vdmVQcm9kdWN0c1BhbmVsVG9Nb2RpZmljYXRpb25Qb3NpdGlvbigpO1xuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5lZGl0UHJvZHVjdEZyb21MaXN0KFxuICAgICAgICAkYnRuLmRhdGEoJ29yZGVyRGV0YWlsSWQnKSxcbiAgICAgICAgJGJ0bi5kYXRhKCdwcm9kdWN0UXVhbnRpdHknKSxcbiAgICAgICAgJGJ0bi5kYXRhKCdwcm9kdWN0UHJpY2VUYXhJbmNsJyksXG4gICAgICAgICRidG4uZGF0YSgncHJvZHVjdFByaWNlVGF4RXhjbCcpLFxuICAgICAgICAkYnRuLmRhdGEoJ3RheFJhdGUnKSxcbiAgICAgICAgJGJ0bi5kYXRhKCdsb2NhdGlvbicpLFxuICAgICAgICAkYnRuLmRhdGEoJ2F2YWlsYWJsZVF1YW50aXR5JyksXG4gICAgICAgICRidG4uZGF0YSgnYXZhaWxhYmxlT3V0T2ZTdG9jaycpLFxuICAgICAgICAkYnRuLmRhdGEoJ29yZGVySW52b2ljZUlkJyksXG4gICAgICAgICRidG4uZGF0YSgnaXNPcmRlclRheEluY2x1ZGVkJyksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgbGlzdGVuRm9yUHJvZHVjdFBhY2soKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RQYWNrTW9kYWwubW9kYWwpLm9uKCdzaG93LmJzLm1vZGFsJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBidXR0b24gPSAkKGV2ZW50LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgY29uc3QgcGFja0l0ZW1zID0gYnV0dG9uLmRhdGEoJ3BhY2tJdGVtcycpO1xuICAgICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RQYWNrTW9kYWwucm93cykucmVtb3ZlKCk7XG4gICAgICBwYWNrSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCAkaXRlbSA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0UGFja01vZGFsLnRlbXBsYXRlKS5jbG9uZSgpO1xuICAgICAgICAkaXRlbS5hdHRyKCdpZCcsIGBwcm9kdWN0cGFja18ke2l0ZW0uaWR9YCkucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAkaXRlbS5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdFBhY2tNb2RhbC5wcm9kdWN0LmltZykuYXR0cignc3JjJywgaXRlbS5pbWFnZVBhdGgpO1xuICAgICAgICAkaXRlbS5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdFBhY2tNb2RhbC5wcm9kdWN0Lm5hbWUpLmh0bWwoaXRlbS5uYW1lKTtcbiAgICAgICAgJGl0ZW0uZmluZChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RQYWNrTW9kYWwucHJvZHVjdC5saW5rKS5hdHRyKFxuICAgICAgICAgICdocmVmJyxcbiAgICAgICAgICB0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fcHJvZHVjdF9mb3JtJywge2lkOiBpdGVtLmlkfSksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpdGVtLnJlZmVyZW5jZSAhPT0gJycpIHtcbiAgICAgICAgICAkaXRlbS5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdFBhY2tNb2RhbC5wcm9kdWN0LnJlZikuYXBwZW5kKGl0ZW0ucmVmZXJlbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXRlbS5maW5kKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdFBhY2tNb2RhbC5wcm9kdWN0LnJlZikucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uc3VwcGxpZXJSZWZlcmVuY2UgIT09ICcnKSB7XG4gICAgICAgICAgJGl0ZW0uZmluZChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RQYWNrTW9kYWwucHJvZHVjdC5zdXBwbGllclJlZikuYXBwZW5kKGl0ZW0uc3VwcGxpZXJSZWZlcmVuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpdGVtLmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0UGFja01vZGFsLnByb2R1Y3Quc3VwcGxpZXJSZWYpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnF1YW50aXR5ID4gMSkge1xuICAgICAgICAgICRpdGVtLmZpbmQoYCR7T3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0UGFja01vZGFsLnByb2R1Y3QucXVhbnRpdHl9IHNwYW5gKS5odG1sKGl0ZW0ucXVhbnRpdHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpdGVtLmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0UGFja01vZGFsLnByb2R1Y3QucXVhbnRpdHkpLmh0bWwoaXRlbS5xdWFudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgJGl0ZW0uZmluZChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RQYWNrTW9kYWwucHJvZHVjdC5hdmFpbGFibGVRdWFudGl0eSkuaHRtbChpdGVtLmF2YWlsYWJsZVF1YW50aXR5KTtcbiAgICAgICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RQYWNrTW9kYWwudGVtcGxhdGUpLmJlZm9yZSgkaXRlbSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxpc3RlbkZvclByb2R1Y3RBZGQoKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RBZGRCdG4pLm9uKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci50b2dnbGVQcm9kdWN0QWRkTmV3SW52b2ljZUluZm8oKTtcbiAgICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5tb3ZlUHJvZHVjdHNQYW5lbFRvTW9kaWZpY2F0aW9uUG9zaXRpb24oT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0U2VhcmNoSW5wdXQpO1xuICAgICAgfSxcbiAgICApO1xuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0Q2FuY2VsQWRkQnRuKS5vbihcbiAgICAgICdjbGljaycsICgpID0+IHRoaXMub3JkZXJQcm9kdWN0UmVuZGVyZXIubW92ZVByb2R1Y3RQYW5lbFRvT3JpZ2luYWxQb3NpdGlvbigpLFxuICAgICk7XG4gIH1cblxuICBsaXN0ZW5Gb3JQcm9kdWN0UGFnaW5hdGlvbigpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZVBhZ2luYXRpb24pLm9uKCdjbGljaycsIE9yZGVyVmlld1BhZ2VNYXAucHJvZHVjdHNUYWJsZVBhZ2luYXRpb25MaW5rLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCAkYnRuID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIEV2ZW50RW1pdHRlci5lbWl0KE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RMaXN0UGFnaW5hdGVkLCB7XG4gICAgICAgIG51bVBhZ2U6ICRidG4uZGF0YSgncGFnZScpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uTmV4dCkub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgJGJ0biA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICAgIGlmICgkYnRuLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGl2ZVBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKTtcbiAgICAgIEV2ZW50RW1pdHRlci5lbWl0KE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RMaXN0UGFnaW5hdGVkLCB7XG4gICAgICAgIG51bVBhZ2U6IHBhcnNlSW50KCQoYWN0aXZlUGFnZSkuaHRtbCgpLCAxMCkgKyAxLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uUHJldikub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgJGJ0biA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICAgIGlmICgkYnRuLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGl2ZVBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKTtcbiAgICAgIEV2ZW50RW1pdHRlci5lbWl0KE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RMaXN0UGFnaW5hdGVkLCB7XG4gICAgICAgIG51bVBhZ2U6IHBhcnNlSW50KCQoYWN0aXZlUGFnZSkuaHRtbCgpLCAxMCkgLSAxLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uTnVtYmVyU2VsZWN0b3IpLm9uKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCAkc2VsZWN0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIGNvbnN0IG51bVBlclBhZ2UgPSBwYXJzZUludCgkc2VsZWN0LnZhbCgpLCAxMCk7XG4gICAgICBFdmVudEVtaXR0ZXIuZW1pdChPcmRlclZpZXdFdmVudE1hcC5wcm9kdWN0TGlzdE51bWJlclBlclBhZ2UsIHtcbiAgICAgICAgbnVtUGVyUGFnZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgRXZlbnRFbWl0dGVyLm9uKE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RMaXN0UGFnaW5hdGVkLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0UmVuZGVyZXIucGFnaW5hdGUoZXZlbnQubnVtUGFnZSk7XG4gICAgICB0aGlzLmxpc3RlbkZvclByb2R1Y3REZWxldGUoKTtcbiAgICAgIHRoaXMubGlzdGVuRm9yUHJvZHVjdEVkaXQoKTtcbiAgICAgIHRoaXMucmVzZXRUb29sVGlwcygpO1xuICAgIH0pO1xuXG4gICAgRXZlbnRFbWl0dGVyLm9uKE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RMaXN0TnVtYmVyUGVyUGFnZSwgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBVcGRhdGUgcGFnaW5hdGlvbiBudW0gcGVyIHBhZ2UgKHBhZ2UgbGlua3MgYXJlIHJlZ2VuZXJhdGVkKVxuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci51cGRhdGVOdW1QZXJQYWdlKGV2ZW50Lm51bVBlclBhZ2UpO1xuXG4gICAgICAvLyBQYWdpbmF0ZSB0byBwYWdlIDFcbiAgICAgIEV2ZW50RW1pdHRlci5lbWl0KE9yZGVyVmlld0V2ZW50TWFwLnByb2R1Y3RMaXN0UGFnaW5hdGVkLCB7XG4gICAgICAgIG51bVBhZ2U6IDEsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2F2ZSBuZXcgY29uZmlnXG4gICAgICAkLmFqYXgoe1xuICAgICAgICB1cmw6IHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9vcmRlcnNfY29uZmlndXJlX3Byb2R1Y3RfcGFnaW5hdGlvbicpLFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgZGF0YToge251bVBlclBhZ2U6IGV2ZW50Lm51bVBlclBhZ2V9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsaXN0ZW5Gb3JSZWZ1bmQoKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuYnV0dG9ucy5wYXJ0aWFsUmVmdW5kKS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm9yZGVyUHJvZHVjdFJlbmRlcmVyLm1vdmVQcm9kdWN0c1BhbmVsVG9SZWZ1bmRQb3NpdGlvbigpO1xuICAgICAgdGhpcy5vcmRlclByb2R1Y3RDYW5jZWwuc2hvd1BhcnRpYWxSZWZ1bmQoKTtcbiAgICB9KTtcblxuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmJ1dHRvbnMuc3RhbmRhcmRSZWZ1bmQpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0UmVuZGVyZXIubW92ZVByb2R1Y3RzUGFuZWxUb1JlZnVuZFBvc2l0aW9uKCk7XG4gICAgICB0aGlzLm9yZGVyUHJvZHVjdENhbmNlbC5zaG93U3RhbmRhcmRSZWZ1bmQoKTtcbiAgICB9KTtcblxuICAgICQoT3JkZXJWaWV3UGFnZU1hcC5jYW5jZWxQcm9kdWN0LmJ1dHRvbnMucmV0dXJuUHJvZHVjdCkub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5tb3ZlUHJvZHVjdHNQYW5lbFRvUmVmdW5kUG9zaXRpb24oKTtcbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0Q2FuY2VsLnNob3dSZXR1cm5Qcm9kdWN0KCk7XG4gICAgfSk7XG5cbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAuY2FuY2VsUHJvZHVjdC5idXR0b25zLmFib3J0KS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm9yZGVyUHJvZHVjdFJlbmRlcmVyLm1vdmVQcm9kdWN0UGFuZWxUb09yaWdpbmFsUG9zaXRpb24oKTtcbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0Q2FuY2VsLmhpZGVSZWZ1bmQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxpc3RlbkZvckNhbmNlbFByb2R1Y3QoKSB7XG4gICAgJChPcmRlclZpZXdQYWdlTWFwLmNhbmNlbFByb2R1Y3QuYnV0dG9ucy5jYW5jZWxQcm9kdWN0cykub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci5tb3ZlUHJvZHVjdHNQYW5lbFRvUmVmdW5kUG9zaXRpb24oKTtcbiAgICAgIHRoaXMub3JkZXJQcm9kdWN0Q2FuY2VsLnNob3dDYW5jZWxQcm9kdWN0Rm9ybSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWN0aXZlUGFnZSgpIHtcbiAgICByZXR1cm4gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uKS5maW5kKCcuYWN0aXZlIHNwYW4nKS5nZXQoMCk7XG4gIH1cblxuICByZWZyZXNoUHJvZHVjdHNMaXN0KG9yZGVySWQpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucmVmcmVzaFByb2R1Y3RzTGlzdExvYWRpbmdTcGlubmVyKS5zaG93KCk7XG5cbiAgICBjb25zdCAkdGFibGVQYWdpbmF0aW9uID0gJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uKTtcbiAgICBjb25zdCBudW1Sb3dzUGVyUGFnZSA9ICR0YWJsZVBhZ2luYXRpb24uZGF0YSgnbnVtUGVyUGFnZScpO1xuICAgIGNvbnN0IGluaXRpYWxOdW1Qcm9kdWN0cyA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUm93cykubGVuZ3RoO1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gcGFyc2VJbnQoJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGVQYWdpbmF0aW9uQWN0aXZlKS5odG1sKCksIDEwKTtcblxuICAgICQuYWpheCh0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fb3JkZXJzX2dldF9wcm9kdWN0cycsIHtvcmRlcklkfSkpXG4gICAgICAuZG9uZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgLy8gRGVsZXRlIHByZXZpb3VzIHByb2R1Y3QgbGluZXNcbiAgICAgICAgJChPcmRlclZpZXdQYWdlTWFwLnByb2R1Y3RzVGFibGUpLmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUm93cykucmVtb3ZlKCk7XG4gICAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlQ3VzdG9taXphdGlvblJvd3MpLnJlbW92ZSgpO1xuXG4gICAgICAgICQoYCR7T3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlfSB0Ym9keWApLnByZXBlbmQocmVzcG9uc2UpO1xuXG4gICAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5yZWZyZXNoUHJvZHVjdHNMaXN0TG9hZGluZ1NwaW5uZXIpLmhpZGUoKTtcblxuICAgICAgICBjb25zdCBuZXdOdW1Qcm9kdWN0cyA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0c1RhYmxlUm93cykubGVuZ3RoO1xuICAgICAgICBjb25zdCBuZXdQYWdlc051bSA9IE1hdGguY2VpbChuZXdOdW1Qcm9kdWN0cyAvIG51bVJvd3NQZXJQYWdlKTtcblxuICAgICAgICB0aGlzLm9yZGVyUHJvZHVjdFJlbmRlcmVyLnVwZGF0ZU51bVByb2R1Y3RzKG5ld051bVByb2R1Y3RzKTtcbiAgICAgICAgdGhpcy5vcmRlclByb2R1Y3RSZW5kZXJlci51cGRhdGVQYWdpbmF0aW9uQ29udHJvbHMoKTtcblxuICAgICAgICBsZXQgbnVtUGFnZSA9IDE7XG4gICAgICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICAgICAgLy8gRGlzcGxheSBhbGVydFxuICAgICAgICBpZiAoaW5pdGlhbE51bVByb2R1Y3RzID4gbmV3TnVtUHJvZHVjdHMpIHsgLy8gcHJvZHVjdCBkZWxldGVkXG4gICAgICAgICAgbWVzc2FnZSA9IChpbml0aWFsTnVtUHJvZHVjdHMgLSBuZXdOdW1Qcm9kdWN0cyA9PT0gMSlcbiAgICAgICAgICAgID8gd2luZG93LnRyYW5zbGF0ZV9qYXZhc2NyaXB0c1snVGhlIHByb2R1Y3Qgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLiddXG4gICAgICAgICAgICA6IHdpbmRvdy50cmFuc2xhdGVfamF2YXNjcmlwdHNbJ1sxXSBwcm9kdWN0cyB3ZXJlIHN1Y2Nlc3NmdWxseSByZW1vdmVkLiddXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdbMV0nLCAoaW5pdGlhbE51bVByb2R1Y3RzIC0gbmV3TnVtUHJvZHVjdHMpKTtcblxuICAgICAgICAgIC8vIFNldCB0YXJnZXQgcGFnZSB0byB0aGUgcGFnZSBvZiB0aGUgZGVsZXRlZCBpdGVtXG4gICAgICAgICAgbnVtUGFnZSA9IChuZXdQYWdlc051bSA9PT0gMSkgPyAxIDogY3VycmVudFBhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbE51bVByb2R1Y3RzIDwgbmV3TnVtUHJvZHVjdHMpIHsgLy8gcHJvZHVjdCBhZGRlZFxuICAgICAgICAgIG1lc3NhZ2UgPSAobmV3TnVtUHJvZHVjdHMgLSBpbml0aWFsTnVtUHJvZHVjdHMgPT09IDEpXG4gICAgICAgICAgICA/IHdpbmRvdy50cmFuc2xhdGVfamF2YXNjcmlwdHNbJ1RoZSBwcm9kdWN0IHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQuJ11cbiAgICAgICAgICAgIDogd2luZG93LnRyYW5zbGF0ZV9qYXZhc2NyaXB0c1snWzFdIHByb2R1Y3RzIHdlcmUgc3VjY2Vzc2Z1bGx5IGFkZGVkLiddXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdbMV0nLCAobmV3TnVtUHJvZHVjdHMgLSBpbml0aWFsTnVtUHJvZHVjdHMpKTtcblxuICAgICAgICAgIC8vIE1vdmUgdG8gZmlyc3QgcGFnZSB0byBzZWUgdGhlIGFkZGVkIHByb2R1Y3RcbiAgICAgICAgICBudW1QYWdlID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICQuZ3Jvd2wubm90aWNlKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb3ZlIHRvIHBhZ2Ugb2YgdGhlIG1vZGlmaWVkIGl0ZW1cbiAgICAgICAgRXZlbnRFbWl0dGVyLmVtaXQoT3JkZXJWaWV3RXZlbnRNYXAucHJvZHVjdExpc3RQYWdpbmF0ZWQsIHtcbiAgICAgICAgICBudW1QYWdlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBCaW5kIGhvdmVyIG9uIHByb2R1Y3Qgcm93cyBidXR0b25zXG4gICAgICAgIHRoaXMucmVzZXRUb29sVGlwcygpO1xuICAgICAgfSlcbiAgICAgIC5mYWlsKCgpID0+IHtcbiAgICAgICAgJC5ncm93bC5lcnJvcih7XG4gICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdGYWlsZWQgdG8gcmVsb2FkIHRoZSBwcm9kdWN0cyBsaXN0LiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb21cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2lzLWl0ZXJhYmxlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL251bWJlci9pcy1uYW5cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvY3JlYXRlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2ZcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlc1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2xcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3NldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIik7XG5cbnZhciBfc2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9jcmVhdGVcIik7XG5cbnZhciBfY3JlYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZSk7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyAodHlwZW9mIHN1cGVyQ2xhc3MgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKHN1cGVyQ2xhc3MpKSk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCA/ICgwLCBfc2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3R5cGVvZjIgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBfdHlwZW9mMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3R5cGVvZjIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAoKHR5cGVvZiBjYWxsID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6ICgwLCBfdHlwZW9mMy5kZWZhdWx0KShjYWxsKSkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXNJdGVyYWJsZTIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9pcy1pdGVyYWJsZVwiKTtcblxudmFyIF9pc0l0ZXJhYmxlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzSXRlcmFibGUyKTtcblxudmFyIF9nZXRJdGVyYXRvcjIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9nZXQtaXRlcmF0b3JcIik7XG5cbnZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SXRlcmF0b3IyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSAoMCwgX2dldEl0ZXJhdG9yMy5kZWZhdWx0KShhcnIpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXNJdGVyYWJsZTMuZGVmYXVsdCkoT2JqZWN0KGFycikpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZnJvbSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2FycmF5L2Zyb21cIik7XG5cbnZhciBfZnJvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcm9tKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyMltpXSA9IGFycltpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDAsIF9mcm9tMi5kZWZhdWx0KShhcnIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2l0ZXJhdG9yID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCIpO1xuXG52YXIgX2l0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2l0ZXJhdG9yKTtcblxudmFyIF9zeW1ib2wgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2xcIik7XG5cbnZhciBfc3ltYm9sMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N5bWJvbCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgX2l0ZXJhdG9yMi5kZWZhdWx0ID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZihfaXRlcmF0b3IyLmRlZmF1bHQpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuZnJvbTtcbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5pcy1pdGVyYWJsZScpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuTnVtYmVyLmlzTmFOO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuICRPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5rZXlzO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC52YWx1ZXM7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX3drcy1leHQnKS5mKCdpdGVyYXRvcicpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTEnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldCA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvciA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXRlckZuID0gZ2V0KGl0KTtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5pc0l0ZXJhYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBJdGVyYXRvcnMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihPKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciBET01JdGVyYWJsZXMgPSAoJ0NTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsJyArXG4gICdET01Ub2tlbkxpc3QsRGF0YVRyYW5zZmVySXRlbUxpc3QsRmlsZUxpc3QsSFRNTEFsbENvbGxlY3Rpb24sSFRNTENvbGxlY3Rpb24sSFRNTEZvcm1FbGVtZW50LEhUTUxTZWxlY3RFbGVtZW50LCcgK1xuICAnTWVkaWFMaXN0LE1pbWVUeXBlQXJyYXksTmFtZWROb2RlTWFwLE5vZGVMaXN0LFBhaW50UmVxdWVzdExpc3QsUGx1Z2luLFBsdWdpbkFycmF5LFNWR0xlbmd0aExpc3QsU1ZHTnVtYmVyTGlzdCwnICtcbiAgJ1NWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LCcgK1xuICAnVGV4dFRyYWNrTGlzdCxUb3VjaExpc3QnKS5zcGxpdCgnLCcpO1xuXG5mb3IgKHZhciBpID0gMDsgaSA8IERPTUl0ZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IERPTUl0ZXJhYmxlc1tpXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChwcm90byAmJiAhcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiIsIid1c2Ugc3RyaWN0Jzt2YXIgX2V4dGVuZHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWZvcih2YXIgZCBpbiBiPWFyZ3VtZW50c1tjXSxiKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLGQpJiYoYVtkXT1iW2RdKTtyZXR1cm4gYX0sX3R5cGVvZj0nZnVuY3Rpb24nPT10eXBlb2YgU3ltYm9sJiYnc3ltYm9sJz09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiYnZnVuY3Rpb24nPT10eXBlb2YgU3ltYm9sJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8nc3ltYm9sJzp0eXBlb2YgYX07ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyl9dmFyIFJvdXRpbmc9ZnVuY3Rpb24gYSgpe3ZhciBiPXRoaXM7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksdGhpcy5zZXRSb3V0ZXM9ZnVuY3Rpb24oYSl7Yi5yb3V0ZXNSb3V0aW5nPWF8fFtdfSx0aGlzLmdldFJvdXRlcz1mdW5jdGlvbigpe3JldHVybiBiLnJvdXRlc1JvdXRpbmd9LHRoaXMuc2V0QmFzZVVybD1mdW5jdGlvbihhKXtiLmNvbnRleHRSb3V0aW5nLmJhc2VfdXJsPWF9LHRoaXMuZ2V0QmFzZVVybD1mdW5jdGlvbigpe3JldHVybiBiLmNvbnRleHRSb3V0aW5nLmJhc2VfdXJsfSx0aGlzLnNldFByZWZpeD1mdW5jdGlvbihhKXtiLmNvbnRleHRSb3V0aW5nLnByZWZpeD1hfSx0aGlzLnNldFNjaGVtZT1mdW5jdGlvbihhKXtiLmNvbnRleHRSb3V0aW5nLnNjaGVtZT1hfSx0aGlzLmdldFNjaGVtZT1mdW5jdGlvbigpe3JldHVybiBiLmNvbnRleHRSb3V0aW5nLnNjaGVtZX0sdGhpcy5zZXRIb3N0PWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcuaG9zdD1hfSx0aGlzLmdldEhvc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jb250ZXh0Um91dGluZy5ob3N0fSx0aGlzLmJ1aWxkUXVlcnlQYXJhbXM9ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPW5ldyBSZWdFeHAoL1xcW10kLyk7YyBpbnN0YW5jZW9mIEFycmF5P2MuZm9yRWFjaChmdW5jdGlvbihjLGYpe2UudGVzdChhKT9kKGEsYyk6Yi5idWlsZFF1ZXJ5UGFyYW1zKGErJ1snKygnb2JqZWN0Jz09PSgndW5kZWZpbmVkJz09dHlwZW9mIGM/J3VuZGVmaW5lZCc6X3R5cGVvZihjKSk/ZjonJykrJ10nLGMsZCl9KTonb2JqZWN0Jz09PSgndW5kZWZpbmVkJz09dHlwZW9mIGM/J3VuZGVmaW5lZCc6X3R5cGVvZihjKSk/T2JqZWN0LmtleXMoYykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gYi5idWlsZFF1ZXJ5UGFyYW1zKGErJ1snK2UrJ10nLGNbZV0sZCl9KTpkKGEsYyl9LHRoaXMuZ2V0Um91dGU9ZnVuY3Rpb24oYSl7dmFyIGM9Yi5jb250ZXh0Um91dGluZy5wcmVmaXgrYTtpZighIWIucm91dGVzUm91dGluZ1tjXSlyZXR1cm4gYi5yb3V0ZXNSb3V0aW5nW2NdO2Vsc2UgaWYoIWIucm91dGVzUm91dGluZ1thXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSByb3V0ZSBcIicrYSsnXCIgZG9lcyBub3QgZXhpc3QuJyk7cmV0dXJuIGIucm91dGVzUm91dGluZ1thXX0sdGhpcy5nZW5lcmF0ZT1mdW5jdGlvbihhLGMsZCl7dmFyIGU9Yi5nZXRSb3V0ZShhKSxmPWN8fHt9LGc9X2V4dGVuZHMoe30sZiksaD0nX3NjaGVtZScsaT0nJyxqPSEwLGs9Jyc7aWYoKGUudG9rZW5zfHxbXSkuZm9yRWFjaChmdW5jdGlvbihiKXtpZigndGV4dCc9PT1iWzBdKXJldHVybiBpPWJbMV0raSx2b2lkKGo9ITEpO2lmKCd2YXJpYWJsZSc9PT1iWzBdKXt2YXIgYz0oZS5kZWZhdWx0c3x8e30pW2JbM11dO2lmKCExPT1qfHwhY3x8KGZ8fHt9KVtiWzNdXSYmZltiWzNdXSE9PWUuZGVmYXVsdHNbYlszXV0pe3ZhciBkO2lmKChmfHx7fSlbYlszXV0pZD1mW2JbM11dLGRlbGV0ZSBnW2JbM11dO2Vsc2UgaWYoYylkPWUuZGVmYXVsdHNbYlszXV07ZWxzZXtpZihqKXJldHVybjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSByb3V0ZSBcIicrYSsnXCIgcmVxdWlyZXMgdGhlIHBhcmFtZXRlciBcIicrYlszXSsnXCIuJyl9dmFyIGg9ITA9PT1kfHwhMT09PWR8fCcnPT09ZDtpZighaHx8IWope3ZhciBrPWVuY29kZVVSSUNvbXBvbmVudChkKS5yZXBsYWNlKC8lMkYvZywnLycpOydudWxsJz09PWsmJm51bGw9PT1kJiYoaz0nJyksaT1iWzFdK2sraX1qPSExfWVsc2UgYyYmZGVsZXRlIGdbYlszXV07cmV0dXJufXRocm93IG5ldyBFcnJvcignVGhlIHRva2VuIHR5cGUgXCInK2JbMF0rJ1wiIGlzIG5vdCBzdXBwb3J0ZWQuJyl9KSwnJz09aSYmKGk9Jy8nKSwoZS5ob3N0dG9rZW5zfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4ndGV4dCc9PT1hWzBdP3ZvaWQoaz1hWzFdK2spOnZvaWQoJ3ZhcmlhYmxlJz09PWFbMF0mJigoZnx8e30pW2FbM11dPyhiPWZbYVszXV0sZGVsZXRlIGdbYVszXV0pOmUuZGVmYXVsdHNbYVszXV0mJihiPWUuZGVmYXVsdHNbYVszXV0pLGs9YVsxXStiK2spKX0pLGk9Yi5jb250ZXh0Um91dGluZy5iYXNlX3VybCtpLGUucmVxdWlyZW1lbnRzW2hdJiZiLmdldFNjaGVtZSgpIT09ZS5yZXF1aXJlbWVudHNbaF0/aT1lLnJlcXVpcmVtZW50c1toXSsnOi8vJysoa3x8Yi5nZXRIb3N0KCkpK2k6ayYmYi5nZXRIb3N0KCkhPT1rP2k9Yi5nZXRTY2hlbWUoKSsnOi8vJytrK2k6ITA9PT1kJiYoaT1iLmdldFNjaGVtZSgpKyc6Ly8nK2IuZ2V0SG9zdCgpK2kpLDA8T2JqZWN0LmtleXMoZykubGVuZ3RoKXt2YXIgbD1bXSxtPWZ1bmN0aW9uKGEsYil7dmFyIGM9YjtjPSdmdW5jdGlvbic9PXR5cGVvZiBjP2MoKTpjLGM9bnVsbD09PWM/Jyc6YyxsLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGEpKyc9JytlbmNvZGVVUklDb21wb25lbnQoYykpfTtPYmplY3Qua2V5cyhnKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiLmJ1aWxkUXVlcnlQYXJhbXMoYSxnW2FdLG0pfSksaT1pKyc/JytsLmpvaW4oJyYnKS5yZXBsYWNlKC8lMjAvZywnKycpfXJldHVybiBpfSx0aGlzLnNldERhdGE9ZnVuY3Rpb24oYSl7Yi5zZXRCYXNlVXJsKGEuYmFzZV91cmwpLGIuc2V0Um91dGVzKGEucm91dGVzKSwncHJlZml4J2luIGEmJmIuc2V0UHJlZml4KGEucHJlZml4KSxiLnNldEhvc3QoYS5ob3N0KSxiLnNldFNjaGVtZShhLnNjaGVtZSl9LHRoaXMuY29udGV4dFJvdXRpbmc9e2Jhc2VfdXJsOicnLHByZWZpeDonJyxob3N0OicnLHNjaGVtZTonJ319O21vZHVsZS5leHBvcnRzPW5ldyBSb3V0aW5nOyIsIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlUmVnRXhwO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgT3JkZXJWaWV3UGFnZU1hcCBmcm9tICdAcGFnZXMvb3JkZXIvT3JkZXJWaWV3UGFnZU1hcCc7XG5pbXBvcnQgT3JkZXJTaGlwcGluZ01hbmFnZXIgZnJvbSAnQHBhZ2VzL29yZGVyL29yZGVyLXNoaXBwaW5nLW1hbmFnZXInO1xuaW1wb3J0IEludm9pY2VOb3RlTWFuYWdlciBmcm9tICdAcGFnZXMvb3JkZXIvaW52b2ljZS1ub3RlLW1hbmFnZXInO1xuaW1wb3J0IE9yZGVyVmlld1BhZ2UgZnJvbSAnQHBhZ2VzL29yZGVyL3ZpZXcvb3JkZXItdmlldy1wYWdlJztcbmltcG9ydCBPcmRlclByb2R1Y3RBdXRvY29tcGxldGUgZnJvbSAnQHBhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcHJvZHVjdC1hZGQtYXV0b2NvbXBsZXRlJztcbmltcG9ydCBPcmRlclByb2R1Y3RBZGQgZnJvbSAnQHBhZ2VzL29yZGVyL3ZpZXcvb3JkZXItcHJvZHVjdC1hZGQnO1xuaW1wb3J0IFRleHRXaXRoTGVuZ3RoQ291bnRlciBmcm9tICdAY29tcG9uZW50cy9mb3JtL3RleHQtd2l0aC1sZW5ndGgtY291bnRlcic7XG5pbXBvcnQgT3JkZXJWaWV3UGFnZU1lc3NhZ2VzSGFuZGxlciBmcm9tICcuL21lc3NhZ2Uvb3JkZXItdmlldy1wYWdlLW1lc3NhZ2VzLWhhbmRsZXInO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbiQoKCkgPT4ge1xuICBjb25zdCBESVNDT1VOVF9UWVBFX0FNT1VOVCA9ICdhbW91bnQnO1xuICBjb25zdCBESVNDT1VOVF9UWVBFX1BFUkNFTlQgPSAncGVyY2VudCc7XG4gIGNvbnN0IERJU0NPVU5UX1RZUEVfRlJFRV9TSElQUElORyA9ICdmcmVlX3NoaXBwaW5nJztcblxuICBuZXcgT3JkZXJTaGlwcGluZ01hbmFnZXIoKTtcbiAgbmV3IFRleHRXaXRoTGVuZ3RoQ291bnRlcigpO1xuICBjb25zdCBvcmRlclZpZXdQYWdlID0gbmV3IE9yZGVyVmlld1BhZ2UoKTtcbiAgY29uc3Qgb3JkZXJBZGRBdXRvY29tcGxldGUgPSBuZXcgT3JkZXJQcm9kdWN0QXV0b2NvbXBsZXRlKCQoT3JkZXJWaWV3UGFnZU1hcC5wcm9kdWN0U2VhcmNoSW5wdXQpKTtcbiAgY29uc3Qgb3JkZXJBZGQgPSBuZXcgT3JkZXJQcm9kdWN0QWRkKCk7XG5cbiAgb3JkZXJWaWV3UGFnZS5saXN0ZW5Gb3JQcm9kdWN0UGFjaygpO1xuICBvcmRlclZpZXdQYWdlLmxpc3RlbkZvclByb2R1Y3REZWxldGUoKTtcbiAgb3JkZXJWaWV3UGFnZS5saXN0ZW5Gb3JQcm9kdWN0RWRpdCgpO1xuICBvcmRlclZpZXdQYWdlLmxpc3RlbkZvclByb2R1Y3RBZGQoKTtcbiAgb3JkZXJWaWV3UGFnZS5saXN0ZW5Gb3JQcm9kdWN0UGFnaW5hdGlvbigpO1xuICBvcmRlclZpZXdQYWdlLmxpc3RlbkZvclJlZnVuZCgpO1xuICBvcmRlclZpZXdQYWdlLmxpc3RlbkZvckNhbmNlbFByb2R1Y3QoKTtcblxuICBvcmRlckFkZEF1dG9jb21wbGV0ZS5saXN0ZW5Gb3JTZWFyY2goKTtcbiAgb3JkZXJBZGRBdXRvY29tcGxldGUub25JdGVtQ2xpY2tlZENhbGxiYWNrID0gKHByb2R1Y3QpID0+IG9yZGVyQWRkLnNldFByb2R1Y3QocHJvZHVjdCk7XG5cbiAgaGFuZGxlUGF5bWVudERldGFpbHNUb2dnbGUoKTtcbiAgaGFuZGxlUHJpdmF0ZU5vdGVDaGFuZ2UoKTtcbiAgaGFuZGxlT3JkZXJOb3RlQ2hhbmdlKCk7XG4gIGhhbmRsZVVwZGF0ZU9yZGVyU3RhdHVzQnV0dG9uKCk7XG5cbiAgbmV3IEludm9pY2VOb3RlTWFuYWdlcigpO1xuICBjb25zdCBvcmRlclZpZXdQYWdlTWVzc2FnZUhhbmRsZXIgPSBuZXcgT3JkZXJWaWV3UGFnZU1lc3NhZ2VzSGFuZGxlcigpO1xuICBvcmRlclZpZXdQYWdlTWVzc2FnZUhhbmRsZXIubGlzdGVuRm9yUHJlZGVmaW5lZE1lc3NhZ2VTZWxlY3Rpb24oKTtcbiAgb3JkZXJWaWV3UGFnZU1lc3NhZ2VIYW5kbGVyLmxpc3RlbkZvckZ1bGxNZXNzYWdlc09wZW4oKTtcbiAgJChPcmRlclZpZXdQYWdlTWFwLnByaXZhdGVOb3RlVG9nZ2xlQnRuKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRvZ2dsZVByaXZhdGVOb3RlQmxvY2soKTtcbiAgfSk7XG5cbiAgJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyTm90ZVRvZ2dsZUJ0bikub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0b2dnbGVPcmRlck5vdGVCbG9jaygpO1xuICB9KTtcblxuICAkKE9yZGVyVmlld1BhZ2VNYXAucHJpbnRPcmRlclZpZXdQYWdlQnV0dG9uKS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3QgdGVtcFRpdGxlID0gZG9jdW1lbnQudGl0bGU7XG4gICAgZG9jdW1lbnQudGl0bGUgPSAkKE9yZGVyVmlld1BhZ2VNYXAubWFpbkRpdikuZGF0YSgnb3JkZXJUaXRsZScpO1xuICAgIHdpbmRvdy5wcmludCgpO1xuICAgIGRvY3VtZW50LnRpdGxlID0gdGVtcFRpdGxlO1xuICB9KTtcblxuICBpbml0QWRkQ2FydFJ1bGVGb3JtSGFuZGxlcigpO1xuICBpbml0Q2hhbmdlQWRkcmVzc0Zvcm1IYW5kbGVyKCk7XG4gIGluaXRIb29rVGFicygpO1xuXG4gIGZ1bmN0aW9uIGluaXRIb29rVGFicygpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAub3JkZXJIb29rVGFic0NvbnRhaW5lcilcbiAgICAgIC5maW5kKCcubmF2LXRhYnMgbGk6Zmlyc3QtY2hpbGQgYScpXG4gICAgICAudGFiKCdzaG93Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQYXltZW50RGV0YWlsc1RvZ2dsZSgpIHtcbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAub3JkZXJQYXltZW50RGV0YWlsc0J0bikub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCAkcGF5bWVudERldGFpbFJvdyA9ICQoZXZlbnQuY3VycmVudFRhcmdldClcbiAgICAgICAgLmNsb3Nlc3QoJ3RyJylcbiAgICAgICAgLm5leHQoJzpmaXJzdCcpO1xuXG4gICAgICAkcGF5bWVudERldGFpbFJvdy50b2dnbGVDbGFzcygnZC1ub25lJyk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVQcml2YXRlTm90ZUJsb2NrKCkge1xuICAgIGNvbnN0ICRibG9jayA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcml2YXRlTm90ZUJsb2NrKTtcbiAgICBjb25zdCAkYnRuID0gJChPcmRlclZpZXdQYWdlTWFwLnByaXZhdGVOb3RlVG9nZ2xlQnRuKTtcbiAgICBjb25zdCBpc1ByaXZhdGVOb3RlT3BlbmVkID0gJGJ0bi5oYXNDbGFzcygnaXMtb3BlbmVkJyk7XG5cbiAgICBpZiAoaXNQcml2YXRlTm90ZU9wZW5lZCkge1xuICAgICAgJGJ0bi5yZW1vdmVDbGFzcygnaXMtb3BlbmVkJyk7XG4gICAgICAkYmxvY2suYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYnRuLmFkZENsYXNzKCdpcy1vcGVuZWQnKTtcbiAgICAgICRibG9jay5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgfVxuXG4gICAgY29uc3QgJGljb24gPSAkYnRuLmZpbmQoJy5tYXRlcmlhbC1pY29ucycpO1xuICAgICRpY29uLnRleHQoaXNQcml2YXRlTm90ZU9wZW5lZCA/ICdhZGQnIDogJ3JlbW92ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUHJpdmF0ZU5vdGVDaGFuZ2UoKSB7XG4gICAgY29uc3QgJHN1Ym1pdEJ0biA9ICQoT3JkZXJWaWV3UGFnZU1hcC5wcml2YXRlTm90ZVN1Ym1pdEJ0bik7XG5cbiAgICAkKE9yZGVyVmlld1BhZ2VNYXAucHJpdmF0ZU5vdGVJbnB1dCkub24oJ2lucHV0JywgKCkgPT4ge1xuICAgICAgJHN1Ym1pdEJ0bi5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZU9yZGVyTm90ZUJsb2NrKCkge1xuICAgIGNvbnN0ICRibG9jayA9ICQoT3JkZXJWaWV3UGFnZU1hcC5vcmRlck5vdGVCbG9jayk7XG4gICAgY29uc3QgJGJ0biA9ICQoT3JkZXJWaWV3UGFnZU1hcC5vcmRlck5vdGVUb2dnbGVCdG4pO1xuICAgIGNvbnN0IGlzTm90ZU9wZW5lZCA9ICRidG4uaGFzQ2xhc3MoJ2lzLW9wZW5lZCcpO1xuXG4gICAgJGJ0bi50b2dnbGVDbGFzcygnaXMtb3BlbmVkJywgIWlzTm90ZU9wZW5lZCk7XG4gICAgJGJsb2NrLnRvZ2dsZUNsYXNzKCdkLW5vbmUnLCBpc05vdGVPcGVuZWQpO1xuXG4gICAgY29uc3QgJGljb24gPSAkYnRuLmZpbmQoJy5tYXRlcmlhbC1pY29ucycpO1xuICAgICRpY29uLnRleHQoaXNOb3RlT3BlbmVkID8gJ2FkZCcgOiAncmVtb3ZlJyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVPcmRlck5vdGVDaGFuZ2UoKSB7XG4gICAgY29uc3QgJHN1Ym1pdEJ0biA9ICQoT3JkZXJWaWV3UGFnZU1hcC5vcmRlck5vdGVTdWJtaXRCdG4pO1xuXG4gICAgJChPcmRlclZpZXdQYWdlTWFwLm9yZGVyTm90ZUlucHV0KS5vbignaW5wdXQnLCAoKSA9PiB7XG4gICAgICAkc3VibWl0QnRuLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEFkZENhcnRSdWxlRm9ybUhhbmRsZXIoKSB7XG4gICAgY29uc3QgJG1vZGFsID0gJChPcmRlclZpZXdQYWdlTWFwLmFkZENhcnRSdWxlTW9kYWwpO1xuICAgIGNvbnN0ICRmb3JtID0gJG1vZGFsLmZpbmQoJ2Zvcm0nKTtcbiAgICBjb25zdCAkaW52b2ljZVNlbGVjdCA9ICRtb2RhbC5maW5kKE9yZGVyVmlld1BhZ2VNYXAuYWRkQ2FydFJ1bGVJbnZvaWNlSWRTZWxlY3QpO1xuICAgIGNvbnN0ICR2YWx1ZUhlbHAgPSAkbW9kYWwuZmluZChPcmRlclZpZXdQYWdlTWFwLmNhcnRSdWxlSGVscFRleHQpO1xuICAgIGNvbnN0ICR2YWx1ZUlucHV0ID0gJGZvcm0uZmluZChPcmRlclZpZXdQYWdlTWFwLmFkZENhcnRSdWxlVmFsdWVJbnB1dCk7XG4gICAgY29uc3QgJHZhbHVlRm9ybUdyb3VwID0gJHZhbHVlSW5wdXQuY2xvc2VzdCgnLmZvcm0tZ3JvdXAnKTtcblxuICAgICRtb2RhbC5vbignc2hvd24uYnMubW9kYWwnLCAoKSA9PiB7XG4gICAgICAkKE9yZGVyVmlld1BhZ2VNYXAuYWRkQ2FydFJ1bGVTdWJtaXQpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAkZm9ybS5maW5kKE9yZGVyVmlld1BhZ2VNYXAuYWRkQ2FydFJ1bGVOYW1lSW5wdXQpLm9uKCdrZXl1cCcsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgY2FydFJ1bGVOYW1lID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS52YWwoKTtcbiAgICAgICQoT3JkZXJWaWV3UGFnZU1hcC5hZGRDYXJ0UnVsZVN1Ym1pdCkuYXR0cignZGlzYWJsZWQnLCBjYXJ0UnVsZU5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgfSk7XG5cbiAgICAkZm9ybS5maW5kKE9yZGVyVmlld1BhZ2VNYXAuYWRkQ2FydFJ1bGVBcHBseU9uQWxsSW52b2ljZXNDaGVja2JveCkub24oJ2NoYW5nZScsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgaXNDaGVja2VkID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS5pcygnOmNoZWNrZWQnKTtcbiAgICAgICRpbnZvaWNlU2VsZWN0LmF0dHIoJ2Rpc2FibGVkJywgaXNDaGVja2VkKTtcbiAgICB9KTtcblxuICAgICRmb3JtLmZpbmQoT3JkZXJWaWV3UGFnZU1hcC5hZGRDYXJ0UnVsZVR5cGVTZWxlY3QpLm9uKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2FydFJ1bGVUeXBlID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS52YWwoKTtcbiAgICAgIGNvbnN0ICR2YWx1ZVVuaXQgPSAkZm9ybS5maW5kKE9yZGVyVmlld1BhZ2VNYXAuYWRkQ2FydFJ1bGVWYWx1ZVVuaXQpO1xuXG4gICAgICBpZiAoc2VsZWN0ZWRDYXJ0UnVsZVR5cGUgPT09IERJU0NPVU5UX1RZUEVfQU1PVU5UKSB7XG4gICAgICAgICR2YWx1ZUhlbHAucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAkdmFsdWVVbml0Lmh0bWwoJHZhbHVlVW5pdC5kYXRhKCdjdXJyZW5jeVN5bWJvbCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICR2YWx1ZUhlbHAuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0ZWRDYXJ0UnVsZVR5cGUgPT09IERJU0NPVU5UX1RZUEVfUEVSQ0VOVCkge1xuICAgICAgICAkdmFsdWVVbml0Lmh0bWwoJyUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkQ2FydFJ1bGVUeXBlID09PSBESVNDT1VOVF9UWVBFX0ZSRUVfU0hJUFBJTkcpIHtcbiAgICAgICAgJHZhbHVlRm9ybUdyb3VwLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJHZhbHVlSW5wdXQuYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICR2YWx1ZUZvcm1Hcm91cC5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICR2YWx1ZUlucHV0LmF0dHIoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVXBkYXRlT3JkZXJTdGF0dXNCdXR0b24oKSB7XG4gICAgY29uc3QgJGJ0biA9ICQoT3JkZXJWaWV3UGFnZU1hcC51cGRhdGVPcmRlclN0YXR1c0FjdGlvbkJ0bik7XG4gICAgY29uc3QgJHdyYXBwZXIgPSAkKE9yZGVyVmlld1BhZ2VNYXAudXBkYXRlT3JkZXJTdGF0dXNBY3Rpb25JbnB1dFdyYXBwZXIpO1xuXG4gICAgJChPcmRlclZpZXdQYWdlTWFwLnVwZGF0ZU9yZGVyU3RhdHVzQWN0aW9uSW5wdXQpLm9uKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0ICRlbGVtZW50ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIGNvbnN0ICRvcHRpb24gPSAkKCdvcHRpb246c2VsZWN0ZWQnLCAkZWxlbWVudCk7XG4gICAgICBjb25zdCBzZWxlY3RlZE9yZGVyU3RhdHVzSWQgPSAkZWxlbWVudC52YWwoKTtcblxuICAgICAgJHdyYXBwZXIuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJG9wdGlvbi5kYXRhKCdiYWNrZ3JvdW5kLWNvbG9yJykpO1xuICAgICAgJHdyYXBwZXIudG9nZ2xlQ2xhc3MoJ2lzLWJyaWdodCcsICRvcHRpb24uZGF0YSgnaXMtYnJpZ2h0JykgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICRidG4ucHJvcCgnZGlzYWJsZWQnLCBwYXJzZUludChzZWxlY3RlZE9yZGVyU3RhdHVzSWQsIDEwKSA9PT0gJGJ0bi5kYXRhKCdvcmRlclN0YXR1c0lkJykpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdENoYW5nZUFkZHJlc3NGb3JtSGFuZGxlcigpIHtcbiAgICBjb25zdCAkbW9kYWwgPSAkKE9yZGVyVmlld1BhZ2VNYXAudXBkYXRlQ3VzdG9tZXJBZGRyZXNzTW9kYWwpO1xuXG4gICAgJChPcmRlclZpZXdQYWdlTWFwLm9wZW5PcmRlckFkZHJlc3NVcGRhdGVNb2RhbEJ0bikub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAkbW9kYWwuZmluZChPcmRlclZpZXdQYWdlTWFwLnVwZGF0ZU9yZGVyQWRkcmVzc1R5cGVJbnB1dCkudmFsKCQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YSgnYWRkcmVzc1R5cGUnKSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==